From d186332975d930a50fdc4a045916dc3ad7c4868a Mon Sep 17 00:00:00 2001 From: Kasper Moskwiak Date: Sun, 18 Oct 2015 23:07:55 +0200 Subject: [PATCH] update --- index.html | 189 +- node_modules/video.js/dist/alt/video.novtt.js | 2477 ++- .../video.js/dist/alt/video.novtt.min.js | 18 +- .../video.js/dist/alt/video.novtt.min.js.map | 2 +- node_modules/video.js/dist/font/VideoJS.svg | 2 +- .../video.js/dist/ie8/videojs-ie8.min.js | 2 +- node_modules/video.js/dist/lang/ar.js | 2 +- node_modules/video.js/dist/lang/ba.js | 2 +- node_modules/video.js/dist/lang/bg.js | 2 +- node_modules/video.js/dist/lang/ca.js | 2 +- node_modules/video.js/dist/lang/cs.js | 2 +- node_modules/video.js/dist/lang/da.js | 2 +- node_modules/video.js/dist/lang/de.js | 2 +- node_modules/video.js/dist/lang/es.js | 2 +- node_modules/video.js/dist/lang/fi.js | 2 +- node_modules/video.js/dist/lang/fr.js | 2 +- node_modules/video.js/dist/lang/hr.js | 2 +- node_modules/video.js/dist/lang/hu.js | 2 +- node_modules/video.js/dist/lang/it.js | 2 +- node_modules/video.js/dist/lang/ja.js | 2 +- node_modules/video.js/dist/lang/ko.js | 2 +- node_modules/video.js/dist/lang/nl.js | 2 +- node_modules/video.js/dist/lang/pt-BR.js | 2 +- node_modules/video.js/dist/lang/ru.js | 2 +- node_modules/video.js/dist/lang/sr.js | 2 +- node_modules/video.js/dist/lang/sv.js | 2 +- node_modules/video.js/dist/lang/tr.js | 2 +- node_modules/video.js/dist/lang/uk.js | 2 +- node_modules/video.js/dist/lang/vi.js | 2 +- node_modules/video.js/dist/lang/zh-CN.js | 2 +- node_modules/video.js/dist/lang/zh-TW.js | 2 +- .../video.js/dist/video-js-5.0.0-rc.72.zip | Bin 4416074 -> 0 bytes node_modules/video.js/dist/video-js-5.0.0.zip | Bin 0 -> 4067055 bytes node_modules/video.js/dist/video-js.css | 604 +- node_modules/video.js/dist/video-js.min.css | 2 +- node_modules/video.js/dist/video.js | 2475 ++- node_modules/video.js/dist/video.js.map | 96 +- node_modules/video.js/dist/video.min.js | 18 +- node_modules/video.js/dist/video.min.js.map | 2 +- node_modules/video.js/dist/video.novtt.js | 16909 ---------------- .../lib/videojs-resolution-switcher.css | 1 - .../lib/videojs-resolution-switcher.js | 260 +- package.json | 1 + style.css | 51 +- 44 files changed, 4089 insertions(+), 19070 deletions(-) delete mode 100644 node_modules/video.js/dist/video-js-5.0.0-rc.72.zip create mode 100644 node_modules/video.js/dist/video-js-5.0.0.zip delete mode 100644 node_modules/video.js/dist/video.novtt.js diff --git a/index.html b/index.html index b04224e..e5106ee 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@ + diff --git a/node_modules/video.js/dist/alt/video.novtt.js b/node_modules/video.js/dist/alt/video.novtt.js index 60aa0d3..becbc8b 100644 --- a/node_modules/video.js/dist/alt/video.novtt.js +++ b/node_modules/video.js/dist/alt/video.novtt.js @@ -1,6 +1,6 @@ /** * @license - * Video.js 5.0.0-rc.72 + * Video.js 5.0.0 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * @@ -43,6 +43,215 @@ if (typeof window !== "undefined") { },{}],3:[function(_dereq_,module,exports){ },{}],4:[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":20}],5:[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":4,"../lang/isObject":33}],6:[function(_dereq_,module,exports){ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; @@ -102,7 +311,71 @@ function restParam(func, start) { module.exports = restParam; -},{}],5:[function(_dereq_,module,exports){ +},{}],7:[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":33,"./debounce":5}],8:[function(_dereq_,module,exports){ /** * Copies the values of `source` to `array`. * @@ -124,7 +397,7 @@ function arrayCopy(source, array) { module.exports = arrayCopy; -},{}],6:[function(_dereq_,module,exports){ +},{}],9:[function(_dereq_,module,exports){ /** * A specialized version of `_.forEach` for arrays without support for callback * shorthands and `this` binding. @@ -148,7 +421,7 @@ function arrayEach(array, iteratee) { module.exports = arrayEach; -},{}],7:[function(_dereq_,module,exports){ +},{}],10:[function(_dereq_,module,exports){ /** * Copies properties of `source` to `object`. * @@ -173,7 +446,7 @@ function baseCopy(source, props, object) { module.exports = baseCopy; -},{}],8:[function(_dereq_,module,exports){ +},{}],11:[function(_dereq_,module,exports){ var createBaseFor = _dereq_('./createBaseFor'); /** @@ -192,7 +465,7 @@ var baseFor = createBaseFor(); module.exports = baseFor; -},{"./createBaseFor":15}],9:[function(_dereq_,module,exports){ +},{"./createBaseFor":18}],12:[function(_dereq_,module,exports){ var baseFor = _dereq_('./baseFor'), keysIn = _dereq_('../object/keysIn'); @@ -211,7 +484,7 @@ function baseForIn(object, iteratee) { module.exports = baseForIn; -},{"../object/keysIn":36,"./baseFor":8}],10:[function(_dereq_,module,exports){ +},{"../object/keysIn":39,"./baseFor":11}],13:[function(_dereq_,module,exports){ var arrayEach = _dereq_('./arrayEach'), baseMergeDeep = _dereq_('./baseMergeDeep'), isArray = _dereq_('../lang/isArray'), @@ -269,7 +542,7 @@ function baseMerge(object, source, customizer, stackA, stackB) { module.exports = baseMerge; -},{"../lang/isArray":27,"../lang/isObject":30,"../lang/isTypedArray":33,"../object/keys":35,"./arrayEach":6,"./baseMergeDeep":11,"./isArrayLike":18,"./isObjectLike":23}],11:[function(_dereq_,module,exports){ +},{"../lang/isArray":30,"../lang/isObject":33,"../lang/isTypedArray":36,"../object/keys":38,"./arrayEach":9,"./baseMergeDeep":14,"./isArrayLike":21,"./isObjectLike":26}],14:[function(_dereq_,module,exports){ var arrayCopy = _dereq_('./arrayCopy'), isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), @@ -338,7 +611,7 @@ function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stack module.exports = baseMergeDeep; -},{"../lang/isArguments":26,"../lang/isArray":27,"../lang/isPlainObject":31,"../lang/isTypedArray":33,"../lang/toPlainObject":34,"./arrayCopy":5,"./isArrayLike":18}],12:[function(_dereq_,module,exports){ +},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isPlainObject":34,"../lang/isTypedArray":36,"../lang/toPlainObject":37,"./arrayCopy":8,"./isArrayLike":21}],15:[function(_dereq_,module,exports){ var toObject = _dereq_('./toObject'); /** @@ -356,7 +629,7 @@ function baseProperty(key) { module.exports = baseProperty; -},{"./toObject":25}],13:[function(_dereq_,module,exports){ +},{"./toObject":28}],16:[function(_dereq_,module,exports){ var identity = _dereq_('../utility/identity'); /** @@ -397,7 +670,7 @@ function bindCallback(func, thisArg, argCount) { module.exports = bindCallback; -},{"../utility/identity":39}],14:[function(_dereq_,module,exports){ +},{"../utility/identity":42}],17:[function(_dereq_,module,exports){ var bindCallback = _dereq_('./bindCallback'), isIterateeCall = _dereq_('./isIterateeCall'), restParam = _dereq_('../function/restParam'); @@ -440,7 +713,7 @@ function createAssigner(assigner) { module.exports = createAssigner; -},{"../function/restParam":4,"./bindCallback":13,"./isIterateeCall":21}],15:[function(_dereq_,module,exports){ +},{"../function/restParam":6,"./bindCallback":16,"./isIterateeCall":24}],18:[function(_dereq_,module,exports){ var toObject = _dereq_('./toObject'); /** @@ -469,7 +742,7 @@ function createBaseFor(fromRight) { module.exports = createBaseFor; -},{"./toObject":25}],16:[function(_dereq_,module,exports){ +},{"./toObject":28}],19:[function(_dereq_,module,exports){ var baseProperty = _dereq_('./baseProperty'); /** @@ -486,7 +759,7 @@ var getLength = baseProperty('length'); module.exports = getLength; -},{"./baseProperty":12}],17:[function(_dereq_,module,exports){ +},{"./baseProperty":15}],20:[function(_dereq_,module,exports){ var isNative = _dereq_('../lang/isNative'); /** @@ -504,7 +777,7 @@ function getNative(object, key) { module.exports = getNative; -},{"../lang/isNative":29}],18:[function(_dereq_,module,exports){ +},{"../lang/isNative":32}],21:[function(_dereq_,module,exports){ var getLength = _dereq_('./getLength'), isLength = _dereq_('./isLength'); @@ -521,7 +794,7 @@ function isArrayLike(value) { module.exports = isArrayLike; -},{"./getLength":16,"./isLength":22}],19:[function(_dereq_,module,exports){ +},{"./getLength":19,"./isLength":25}],22:[function(_dereq_,module,exports){ /** * Checks if `value` is a host object in IE < 9. * @@ -544,7 +817,7 @@ var isHostObject = (function() { module.exports = isHostObject; -},{}],20:[function(_dereq_,module,exports){ +},{}],23:[function(_dereq_,module,exports){ /** Used to detect unsigned integer values. */ var reIsUint = /^\d+$/; @@ -570,7 +843,7 @@ function isIndex(value, length) { module.exports = isIndex; -},{}],21:[function(_dereq_,module,exports){ +},{}],24:[function(_dereq_,module,exports){ var isArrayLike = _dereq_('./isArrayLike'), isIndex = _dereq_('./isIndex'), isObject = _dereq_('../lang/isObject'); @@ -600,7 +873,7 @@ function isIterateeCall(value, index, object) { module.exports = isIterateeCall; -},{"../lang/isObject":30,"./isArrayLike":18,"./isIndex":20}],22:[function(_dereq_,module,exports){ +},{"../lang/isObject":33,"./isArrayLike":21,"./isIndex":23}],25:[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. @@ -622,7 +895,7 @@ function isLength(value) { module.exports = isLength; -},{}],23:[function(_dereq_,module,exports){ +},{}],26:[function(_dereq_,module,exports){ /** * Checks if `value` is object-like. * @@ -636,7 +909,7 @@ function isObjectLike(value) { module.exports = isObjectLike; -},{}],24:[function(_dereq_,module,exports){ +},{}],27:[function(_dereq_,module,exports){ var isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), isIndex = _dereq_('./isIndex'), @@ -680,7 +953,7 @@ function shimKeys(object) { module.exports = shimKeys; -},{"../lang/isArguments":26,"../lang/isArray":27,"../lang/isString":32,"../object/keysIn":36,"./isIndex":20,"./isLength":22}],25:[function(_dereq_,module,exports){ +},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isString":35,"../object/keysIn":39,"./isIndex":23,"./isLength":25}],28:[function(_dereq_,module,exports){ var isObject = _dereq_('../lang/isObject'), isString = _dereq_('../lang/isString'), support = _dereq_('../support'); @@ -708,7 +981,7 @@ function toObject(value) { module.exports = toObject; -},{"../lang/isObject":30,"../lang/isString":32,"../support":38}],26:[function(_dereq_,module,exports){ +},{"../lang/isObject":33,"../lang/isString":35,"../support":41}],29:[function(_dereq_,module,exports){ var isArrayLike = _dereq_('../internal/isArrayLike'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -744,7 +1017,7 @@ function isArguments(value) { module.exports = isArguments; -},{"../internal/isArrayLike":18,"../internal/isObjectLike":23}],27:[function(_dereq_,module,exports){ +},{"../internal/isArrayLike":21,"../internal/isObjectLike":26}],30:[function(_dereq_,module,exports){ var getNative = _dereq_('../internal/getNative'), isLength = _dereq_('../internal/isLength'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -786,7 +1059,7 @@ var isArray = nativeIsArray || function(value) { module.exports = isArray; -},{"../internal/getNative":17,"../internal/isLength":22,"../internal/isObjectLike":23}],28:[function(_dereq_,module,exports){ +},{"../internal/getNative":20,"../internal/isLength":25,"../internal/isObjectLike":26}],31:[function(_dereq_,module,exports){ var isObject = _dereq_('./isObject'); /** `Object#toString` result references. */ @@ -826,7 +1099,7 @@ function isFunction(value) { module.exports = isFunction; -},{"./isObject":30}],29:[function(_dereq_,module,exports){ +},{"./isObject":33}],32:[function(_dereq_,module,exports){ var isFunction = _dereq_('./isFunction'), isHostObject = _dereq_('../internal/isHostObject'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -877,7 +1150,7 @@ function isNative(value) { module.exports = isNative; -},{"../internal/isHostObject":19,"../internal/isObjectLike":23,"./isFunction":28}],30:[function(_dereq_,module,exports){ +},{"../internal/isHostObject":22,"../internal/isObjectLike":26,"./isFunction":31}],33:[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('')`) @@ -907,7 +1180,7 @@ function isObject(value) { module.exports = isObject; -},{}],31:[function(_dereq_,module,exports){ +},{}],34:[function(_dereq_,module,exports){ var baseForIn = _dereq_('../internal/baseForIn'), isArguments = _dereq_('./isArguments'), isHostObject = _dereq_('../internal/isHostObject'), @@ -989,7 +1262,7 @@ function isPlainObject(value) { module.exports = isPlainObject; -},{"../internal/baseForIn":9,"../internal/isHostObject":19,"../internal/isObjectLike":23,"../support":38,"./isArguments":26}],32:[function(_dereq_,module,exports){ +},{"../internal/baseForIn":12,"../internal/isHostObject":22,"../internal/isObjectLike":26,"../support":41,"./isArguments":29}],35:[function(_dereq_,module,exports){ var isObjectLike = _dereq_('../internal/isObjectLike'); /** `Object#toString` result references. */ @@ -1026,7 +1299,7 @@ function isString(value) { module.exports = isString; -},{"../internal/isObjectLike":23}],33:[function(_dereq_,module,exports){ +},{"../internal/isObjectLike":26}],36:[function(_dereq_,module,exports){ var isLength = _dereq_('../internal/isLength'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -1102,7 +1375,7 @@ function isTypedArray(value) { module.exports = isTypedArray; -},{"../internal/isLength":22,"../internal/isObjectLike":23}],34:[function(_dereq_,module,exports){ +},{"../internal/isLength":25,"../internal/isObjectLike":26}],37:[function(_dereq_,module,exports){ var baseCopy = _dereq_('../internal/baseCopy'), keysIn = _dereq_('../object/keysIn'); @@ -1135,7 +1408,7 @@ function toPlainObject(value) { module.exports = toPlainObject; -},{"../internal/baseCopy":7,"../object/keysIn":36}],35:[function(_dereq_,module,exports){ +},{"../internal/baseCopy":10,"../object/keysIn":39}],38:[function(_dereq_,module,exports){ var getNative = _dereq_('../internal/getNative'), isArrayLike = _dereq_('../internal/isArrayLike'), isObject = _dereq_('../lang/isObject'), @@ -1183,7 +1456,7 @@ var keys = !nativeKeys ? shimKeys : function(object) { module.exports = keys; -},{"../internal/getNative":17,"../internal/isArrayLike":18,"../internal/shimKeys":24,"../lang/isObject":30,"../support":38}],36:[function(_dereq_,module,exports){ +},{"../internal/getNative":20,"../internal/isArrayLike":21,"../internal/shimKeys":27,"../lang/isObject":33,"../support":41}],39:[function(_dereq_,module,exports){ var arrayEach = _dereq_('../internal/arrayEach'), isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), @@ -1321,7 +1594,7 @@ function keysIn(object) { module.exports = keysIn; -},{"../internal/arrayEach":6,"../internal/isIndex":20,"../internal/isLength":22,"../lang/isArguments":26,"../lang/isArray":27,"../lang/isFunction":28,"../lang/isObject":30,"../lang/isString":32,"../support":38}],37:[function(_dereq_,module,exports){ +},{"../internal/arrayEach":9,"../internal/isIndex":23,"../internal/isLength":25,"../lang/isArguments":29,"../lang/isArray":30,"../lang/isFunction":31,"../lang/isObject":33,"../lang/isString":35,"../support":41}],40:[function(_dereq_,module,exports){ var baseMerge = _dereq_('../internal/baseMerge'), createAssigner = _dereq_('../internal/createAssigner'); @@ -1377,7 +1650,7 @@ var merge = createAssigner(baseMerge); module.exports = merge; -},{"../internal/baseMerge":10,"../internal/createAssigner":14}],38:[function(_dereq_,module,exports){ +},{"../internal/baseMerge":13,"../internal/createAssigner":17}],41:[function(_dereq_,module,exports){ /** Used for native method references. */ var arrayProto = Array.prototype, errorProto = Error.prototype, @@ -1475,7 +1748,7 @@ var support = {}; module.exports = support; -},{}],39:[function(_dereq_,module,exports){ +},{}],42:[function(_dereq_,module,exports){ /** * This method returns the first argument provided to it. * @@ -1497,7 +1770,7 @@ function identity(value) { module.exports = identity; -},{}],40:[function(_dereq_,module,exports){ +},{}],43:[function(_dereq_,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es6-shim @@ -1559,7 +1832,7 @@ defineProperties(assignShim, { module.exports = assignShim; -},{"define-properties":41,"object-keys":43}],41:[function(_dereq_,module,exports){ +},{"define-properties":44,"object-keys":46}],44:[function(_dereq_,module,exports){ 'use strict'; var keys = _dereq_('object-keys'); @@ -1617,7 +1890,7 @@ defineProperties.supportsDescriptors = !!supportsDescriptors; module.exports = defineProperties; -},{"foreach":42,"object-keys":43}],42:[function(_dereq_,module,exports){ +},{"foreach":45,"object-keys":46}],45:[function(_dereq_,module,exports){ var hasOwn = Object.prototype.hasOwnProperty; var toString = Object.prototype.toString; @@ -1641,7 +1914,7 @@ module.exports = function forEach (obj, fn, ctx) { }; -},{}],43:[function(_dereq_,module,exports){ +},{}],46:[function(_dereq_,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es5-shim @@ -1765,7 +2038,7 @@ keysShim.shim = function shimObjectKeys() { module.exports = keysShim; -},{"./isArguments":44}],44:[function(_dereq_,module,exports){ +},{"./isArguments":47}],47:[function(_dereq_,module,exports){ 'use strict'; var toStr = Object.prototype.toString; @@ -1784,7 +2057,7 @@ module.exports = function isArguments(value) { return isArgs; }; -},{}],45:[function(_dereq_,module,exports){ +},{}],48:[function(_dereq_,module,exports){ module.exports = SafeParseTuple function SafeParseTuple(obj, reviver) { @@ -1800,7 +2073,347 @@ function SafeParseTuple(obj, reviver) { return [error, json] } -},{}],46:[function(_dereq_,module,exports){ +},{}],49:[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 +} +},{}],50:[function(_dereq_,module,exports){ +"use strict"; +var window = _dereq_("global/window") +var once = _dereq_("once") +var parseHeaders = _dereq_("parse-headers") + + + +module.exports = createXHR +createXHR.XMLHttpRequest = window.XMLHttpRequest || noop +createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest + + +function isEmpty(obj){ + for(var i in obj){ + if(obj.hasOwnProperty(i)) return false + } + return true +} + +function createXHR(options, 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) + + } + + if (typeof options === "string") { + options = { uri: options } + } + + options = options || {} + if(typeof callback === "undefined"){ + throw new Error("callback argument missing") + } + callback = once(callback) + + 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 + 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":2,"once":51,"parse-headers":55}],51:[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) + } +} + +},{}],52:[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":53}],53:[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)) +}; + +},{}],54:[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*$/, ''); +}; + +},{}],55:[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":52,"trim":54}],56:[function(_dereq_,module,exports){ /** * @file big-play-button.js */ @@ -1871,7 +2484,7 @@ _componentJs2['default'].registerComponent('BigPlayButton', BigPlayButton); exports['default'] = BigPlayButton; module.exports = exports['default']; -},{"./button.js":47,"./component.js":48}],47:[function(_dereq_,module,exports){ +},{"./button.js":57,"./component.js":58}],57:[function(_dereq_,module,exports){ /** * @file button.js */ @@ -1948,17 +2561,21 @@ var Button = (function (_Component) { 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]; - // Add standard Aria and Tabindex info props = _objectAssign2['default']({ className: this.buildCSSClass(), - 'role': 'button', - 'type': 'button', // Necessary since the default button type is "submit" - 'aria-live': 'polite', // let the screen reader user know that the text of the button may change tabIndex: 0 }, props); - var el = _Component.prototype.createEl.call(this, tag, props); + // Add standard Aria info + attributes = _objectAssign2['default']({ + role: 'button', + type: 'button', // Necessary since the default button type is "submit" + 'aria-live': 'polite' // let the screen reader user know that the text of the button may change + }, attributes); + + var el = _Component.prototype.createEl.call(this, tag, props, attributes); this.controlTextEl_ = Dom.createEl('span', { className: 'vjs-control-text' @@ -2027,7 +2644,7 @@ var Button = (function (_Component) { // Check for space bar (32) or enter (13) keys if (event.which === 32 || event.which === 13) { event.preventDefault(); - this.handleClick(); + this.handleClick(event); } }; @@ -2048,7 +2665,7 @@ _component2['default'].registerComponent('Button', Button); exports['default'] = Button; module.exports = exports['default']; -},{"./component":48,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"global/document":1,"object.assign":40}],48:[function(_dereq_,module,exports){ +},{"./component":58,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"global/document":1,"object.assign":43}],58:[function(_dereq_,module,exports){ /** * @file component.js * @@ -2235,19 +2852,17 @@ var Component = (function () { * Deep merge of options objects * Whenever a property is an object on both options objects * the two properties will be merged using mergeOptions. - * This is used for merging options for child components. We - * want it to be easy to override individual options on a child - * component without having to rewrite all the other default options. + * * ```js * Parent.prototype.options_ = { - * children: { + * optionSet: { * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' }, * 'childTwo': {}, * 'childThree': {} * } * } * newOptions = { - * children: { + * optionSet: { * 'childOne': { 'foo': 'baz', 'abc': '123' } * 'childTwo': null, * 'childFour': {} @@ -2259,7 +2874,7 @@ var Component = (function () { * RESULT * ```js * { - * children: { + * optionSet: { * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' }, * 'childTwo': null, // Disabled. Won't be initialized. * 'childThree': {}, @@ -2302,13 +2917,14 @@ var Component = (function () { * Create the component's DOM element * * @param {String=} tagName Element's node type. e.g. 'div' - * @param {Object=} attributes An object of element attributes that should be set on the element + * @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, attributes) { - return Dom.createEl(tagName, attributes); + Component.prototype.createEl = function createEl(tagName, properties, attributes) { + return Dom.createEl(tagName, properties, attributes); }; Component.prototype.localize = function localize(string) { @@ -2421,16 +3037,14 @@ var Component = (function () { * * var myButton = myComponent.addChild('MyButton'); * // ->
myButton
- * // -> myButton === myComonent.children()[0]; + * // -> 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', - * children: { - * buttonChildExample: { - * buttonChildOption: true - * } + * buttonChildExample: { + * buttonChildOption: true * } * }); * ``` @@ -2550,24 +3164,29 @@ var Component = (function () { * ```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 = { + * MyComponent.prototype.options_ = { + * children: [ + * 'myChildComponent' + * ], * myChildComponent: { * myChildOption: true * } - * } - * ``` + * }; + * * // Or when creating the component - * ```js * var myComp = new MyComponent(player, { - * children: { - * myChildComponent: { - * myChildOption: true - * } + * children: [ + * 'myChildComponent' + * ], + * myChildComponent: { + * myChildOption: true * } * }); * ``` - * The children option can also be an Array of child names or + * 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: [ @@ -2575,6 +3194,10 @@ var Component = (function () { * { * name: 'button', * someOtherOption: true + * }, + * { + * name: 'button', + * someOtherOption: false * } * ] * }); @@ -2908,13 +3531,13 @@ var Component = (function () { 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); - - // Reset Ready Queue - this.readyQueue_ = []; } // Allow for using event listeners also @@ -3406,7 +4029,7 @@ var Component = (function () { Component.extend = function extend(props) { props = props || {}; - _utilsLogJs2['default'].warn('Component.extend({}) has been deprecated, use videojs.extends(Component, {}) instead'); + _utilsLogJs2['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 @@ -3451,7 +4074,7 @@ Component.registerComponent('Component', Component); exports['default'] = Component; module.exports = exports['default']; -},{"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/to-title-case.js":116,"global/window":2,"object.assign":40}],49:[function(_dereq_,module,exports){ +},{"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/to-title-case.js":127,"global/window":2,"object.assign":43}],59:[function(_dereq_,module,exports){ /** * @file control-bar.js */ @@ -3569,14 +4192,14 @@ var ControlBar = (function (_Component) { ControlBar.prototype.options_ = { loadEvent: 'play', - children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'muteToggle', 'volumeControl', 'chaptersButton', 'subtitlesButton', 'captionsButton', 'fullscreenToggle'] + children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'subtitlesButton', 'captionsButton', 'fullscreenToggle'] }; _componentJs2['default'].registerComponent('ControlBar', ControlBar); exports['default'] = ControlBar; module.exports = exports['default']; -},{"../component.js":48,"./fullscreen-toggle.js":50,"./live-display.js":51,"./mute-toggle.js":52,"./play-toggle.js":53,"./playback-rate-menu/playback-rate-menu-button.js":54,"./progress-control/progress-control.js":58,"./spacer-controls/custom-control-spacer.js":60,"./text-track-controls/captions-button.js":63,"./text-track-controls/chapters-button.js":64,"./text-track-controls/subtitles-button.js":67,"./time-controls/current-time-display.js":70,"./time-controls/duration-display.js":71,"./time-controls/remaining-time-display.js":72,"./time-controls/time-divider.js":73,"./volume-control/volume-control.js":75,"./volume-menu-button.js":77}],50:[function(_dereq_,module,exports){ +},{"../component.js":58,"./fullscreen-toggle.js":60,"./live-display.js":61,"./mute-toggle.js":62,"./play-toggle.js":63,"./playback-rate-menu/playback-rate-menu-button.js":64,"./progress-control/progress-control.js":69,"./spacer-controls/custom-control-spacer.js":71,"./text-track-controls/captions-button.js":74,"./text-track-controls/chapters-button.js":75,"./text-track-controls/subtitles-button.js":78,"./time-controls/current-time-display.js":81,"./time-controls/duration-display.js":82,"./time-controls/remaining-time-display.js":83,"./time-controls/time-divider.js":84,"./volume-control/volume-control.js":86,"./volume-menu-button.js":88}],60:[function(_dereq_,module,exports){ /** * @file fullscreen-toggle.js */ @@ -3650,7 +4273,7 @@ _componentJs2['default'].registerComponent('FullscreenToggle', FullscreenToggle) exports['default'] = FullscreenToggle; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48}],51:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58}],61:[function(_dereq_,module,exports){ /** * @file live-display.js */ @@ -3685,10 +4308,13 @@ var Dom = _interopRequireWildcard(_utilsDomJs); var LiveDisplay = (function (_Component) { _inherits(LiveDisplay, _Component); - function LiveDisplay() { + function LiveDisplay(player, options) { _classCallCheck(this, LiveDisplay); - _Component.apply(this, arguments); + _Component.call(this, player, options); + + this.updateShowing(); + this.on(this.player(), 'durationchange', this.updateShowing); } /** @@ -3705,15 +4331,23 @@ var LiveDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-live-display', - innerHTML: '' + this.localize('Stream Type') + '' + this.localize('LIVE'), + innerHTML: '' + this.localize('Stream Type') + '' + 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']); @@ -3721,7 +4355,7 @@ _component2['default'].registerComponent('LiveDisplay', LiveDisplay); exports['default'] = LiveDisplay; module.exports = exports['default']; -},{"../component":48,"../utils/dom.js":107}],52:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/dom.js":118}],62:[function(_dereq_,module,exports){ /** * @file mute-toggle.js */ @@ -3769,14 +4403,14 @@ var MuteToggle = (function (_Button) { 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) { + if (player.tech_ && player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } this.on(player, 'loadstart', function () { this.update(); // We need to update the button to account for a default muted state. - if (player.tech['featuresVolumeControl'] === false) { + if (player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } else { this.removeClass('vjs-hidden'); @@ -3848,7 +4482,7 @@ _component2['default'].registerComponent('MuteToggle', MuteToggle); exports['default'] = MuteToggle; module.exports = exports['default']; -},{"../button":47,"../component":48,"../utils/dom.js":107}],53:[function(_dereq_,module,exports){ +},{"../button":57,"../component":58,"../utils/dom.js":118}],63:[function(_dereq_,module,exports){ /** * @file play-toggle.js */ @@ -3949,7 +4583,7 @@ _componentJs2['default'].registerComponent('PlayToggle', PlayToggle); exports['default'] = PlayToggle; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48}],54:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58}],64:[function(_dereq_,module,exports){ /** * @file playback-rate-menu-button.js */ @@ -4112,7 +4746,7 @@ var PlaybackRateMenuButton = (function (_MenuButton) { */ PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() { - return this.player().tech && this.player().tech['featuresPlaybackRate'] && this.playbackRates() && this.playbackRates().length > 0; + return this.player().tech_ && this.player().tech_['featuresPlaybackRate'] && this.playbackRates() && this.playbackRates().length > 0; }; /** @@ -4150,7 +4784,7 @@ _componentJs2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRat exports['default'] = PlaybackRateMenuButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../menu/menu.js":86,"../../utils/dom.js":107,"./playback-rate-menu-item.js":55}],55:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-button.js":95,"../../menu/menu.js":97,"../../utils/dom.js":118,"./playback-rate-menu-item.js":65}],65:[function(_dereq_,module,exports){ /** * @file playback-rate-menu-item.js */ @@ -4231,7 +4865,7 @@ _componentJs2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateM exports['default'] = PlaybackRateMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85}],56:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96}],66:[function(_dereq_,module,exports){ /** * @file load-progress-bar.js */ @@ -4337,7 +4971,109 @@ _componentJs2['default'].registerComponent('LoadProgressBar', LoadProgressBar); exports['default'] = LoadProgressBar; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107}],57:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118}],67:[function(_dereq_,module,exports){ +/** + * @file mouse-time-display.js + */ +'use strict'; + +exports.__esModule = true; + +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 _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; } + +var _componentJs = _dereq_('../../component.js'); + +var _componentJs2 = _interopRequireDefault(_componentJs); + +var _utilsDomJs = _dereq_('../../utils/dom.js'); + +var Dom = _interopRequireWildcard(_utilsDomJs); + +var _utilsFnJs = _dereq_('../../utils/fn.js'); + +var Fn = _interopRequireWildcard(_utilsFnJs); + +var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); + +var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); + +var _lodashCompatFunctionThrottle = _dereq_('lodash-compat/function/throttle'); + +var _lodashCompatFunctionThrottle2 = _interopRequireDefault(_lodashCompatFunctionThrottle); + +/** + * 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) { + var _this = this; + + _classCallCheck(this, MouseTimeDisplay); + + _Component.call(this, player, options); + + this.update(0, 0); + + player.on('ready', function () { + _this.on(player.controlBar.progressControl.el(), 'mousemove', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleMouseMove), 25)); + }); + } + + /** + * 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 = _utilsFormatTimeJs2['default'](newTime, this.player_.duration()); + + this.el().style.left = position + 'px'; + this.el().setAttribute('data-current-time', time); + }; + + MouseTimeDisplay.prototype.calculateDistance = function calculateDistance(event) { + return Dom.getPointerPosition(this.el().parentNode, event).x; + }; + + return MouseTimeDisplay; +})(_componentJs2['default']); + +_componentJs2['default'].registerComponent('MouseTimeDisplay', MouseTimeDisplay); +exports['default'] = MouseTimeDisplay; +module.exports = exports['default']; + +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/format-time.js":121,"lodash-compat/function/throttle":7}],68:[function(_dereq_,module,exports){ /** * @file play-progress-bar.js */ @@ -4381,6 +5117,7 @@ var PlayProgressBar = (function (_Component) { _classCallCheck(this, PlayProgressBar); _Component.call(this, player, options); + this.updateDataAttr(); this.on(player, 'timeupdate', this.updateDataAttr); player.ready(Fn.bind(this, this.updateDataAttr)); } @@ -4394,7 +5131,7 @@ var PlayProgressBar = (function (_Component) { PlayProgressBar.prototype.createEl = function createEl() { return _Component.prototype.createEl.call(this, 'div', { - className: 'vjs-play-progress', + className: 'vjs-play-progress vjs-slider-bar', innerHTML: '' + this.localize('Progress') + ': 0%' }); }; @@ -4411,7 +5148,7 @@ _componentJs2['default'].registerComponent('PlayProgressBar', PlayProgressBar); exports['default'] = PlayProgressBar; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/fn.js":109,"../../utils/format-time.js":110}],58:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/fn.js":120,"../../utils/format-time.js":121}],69:[function(_dereq_,module,exports){ /** * @file progress-control.js */ @@ -4433,6 +5170,10 @@ var _seekBarJs = _dereq_('./seek-bar.js'); var _seekBarJs2 = _interopRequireDefault(_seekBarJs); +var _mouseTimeDisplayJs = _dereq_('./mouse-time-display.js'); + +var _mouseTimeDisplayJs2 = _interopRequireDefault(_mouseTimeDisplayJs); + /** * The Progress Control component contains the seek bar, load progress, * and play progress @@ -4469,16 +5210,14 @@ var ProgressControl = (function (_Component) { })(_componentJs2['default']); ProgressControl.prototype.options_ = { - children: { - 'seekBar': {} - } + children: ['seekBar'] }; _componentJs2['default'].registerComponent('ProgressControl', ProgressControl); exports['default'] = ProgressControl; module.exports = exports['default']; -},{"../../component.js":48,"./seek-bar.js":59}],59:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./mouse-time-display.js":67,"./seek-bar.js":70}],70:[function(_dereq_,module,exports){ /** * @file seek-bar.js */ @@ -4518,6 +5257,10 @@ var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); +var _objectAssign = _dereq_('object.assign'); + +var _objectAssign2 = _interopRequireDefault(_objectAssign); + /** * Seek Bar and holder for the progress bars * @@ -4547,7 +5290,8 @@ var SeekBar = (function (_Slider) { SeekBar.prototype.createEl = function createEl() { return _Slider.prototype.createEl.call(this, 'div', { - className: 'vjs-progress-holder', + className: 'vjs-progress-holder' + }, { 'aria-label': 'video progress bar' }); }; @@ -4649,10 +5393,7 @@ var SeekBar = (function (_Slider) { })(_sliderSliderJs2['default']); SeekBar.prototype.options_ = { - children: { - 'loadProgressBar': {}, - 'playProgressBar': {} - }, + children: ['loadProgressBar', 'mouseTimeDisplay', 'playProgressBar'], 'barName': 'playProgressBar' }; @@ -4662,7 +5403,7 @@ _componentJs2['default'].registerComponent('SeekBar', SeekBar); exports['default'] = SeekBar; module.exports = exports['default']; -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"../../utils/format-time.js":110,"./load-progress-bar.js":56,"./play-progress-bar.js":57}],60:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"../../utils/format-time.js":121,"./load-progress-bar.js":66,"./play-progress-bar.js":68,"object.assign":43}],71:[function(_dereq_,module,exports){ /** * @file custom-control-spacer.js */ @@ -4719,9 +5460,14 @@ var CustomControlSpacer = (function (_Spacer) { */ CustomControlSpacer.prototype.createEl = function createEl() { - return _Spacer.prototype.createEl.call(this, { + 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 = ' '; + return el; }; return CustomControlSpacer; @@ -4731,7 +5477,7 @@ _componentJs2['default'].registerComponent('CustomControlSpacer', CustomControlS exports['default'] = CustomControlSpacer; module.exports = exports['default']; -},{"../../component.js":48,"./spacer.js":61}],61:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./spacer.js":72}],72:[function(_dereq_,module,exports){ /** * @file spacer.js */ @@ -4780,12 +5526,11 @@ var Spacer = (function (_Component) { /** * Create the component's DOM element * - * @param {Object} props An object of properties * @return {Element} * @method createEl */ - Spacer.prototype.createEl = function createEl(props) { + Spacer.prototype.createEl = function createEl() { return _Component.prototype.createEl.call(this, 'div', { className: this.buildCSSClass() }); @@ -4799,7 +5544,7 @@ _componentJs2['default'].registerComponent('Spacer', Spacer); exports['default'] = Spacer; module.exports = exports['default']; -},{"../../component.js":48}],62:[function(_dereq_,module,exports){ +},{"../../component.js":58}],73:[function(_dereq_,module,exports){ /** * @file caption-settings-menu-item.js */ @@ -4865,7 +5610,7 @@ _componentJs2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSet exports['default'] = CaptionSettingsMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-menu-item.js":69}],63:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-menu-item.js":80}],74:[function(_dereq_,module,exports){ /** * @file captions-button.js */ @@ -4933,7 +5678,7 @@ var CaptionsButton = (function (_TextTrackButton) { _TextTrackButton.prototype.update.call(this); // if native, then threshold is 1 because no settings button - if (this.player().tech && this.player().tech['featuresNativeTextTracks']) { + if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) { threshold = 1; } @@ -4954,7 +5699,7 @@ var CaptionsButton = (function (_TextTrackButton) { CaptionsButton.prototype.createItems = function createItems() { var items = []; - if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) { + if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) { items.push(new _captionSettingsMenuItemJs2['default'](this.player_, { 'kind': this.kind_ })); } @@ -4971,7 +5716,7 @@ _componentJs2['default'].registerComponent('CaptionsButton', CaptionsButton); exports['default'] = CaptionsButton; module.exports = exports['default']; -},{"../../component.js":48,"./caption-settings-menu-item.js":62,"./text-track-button.js":68}],64:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./caption-settings-menu-item.js":73,"./text-track-button.js":79}],75:[function(_dereq_,module,exports){ /** * @file chapters-button.js */ @@ -5160,7 +5905,7 @@ _componentJs2['default'].registerComponent('ChaptersButton', ChaptersButton); exports['default'] = ChaptersButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu.js":86,"../../utils/dom.js":107,"../../utils/fn.js":109,"../../utils/to-title-case.js":116,"./chapters-track-menu-item.js":65,"./text-track-button.js":68,"./text-track-menu-item.js":69,"global/window":2}],65:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu.js":97,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/to-title-case.js":127,"./chapters-track-menu-item.js":76,"./text-track-button.js":79,"./text-track-menu-item.js":80,"global/window":2}],76:[function(_dereq_,module,exports){ /** * @file chapters-track-menu-item.js */ @@ -5250,7 +5995,7 @@ _componentJs2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrac exports['default'] = ChaptersTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109}],66:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96,"../../utils/fn.js":120}],77:[function(_dereq_,module,exports){ /** * @file off-text-track-menu-item.js */ @@ -5330,7 +6075,7 @@ _componentJs2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackM exports['default'] = OffTextTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-menu-item.js":69}],67:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-menu-item.js":80}],78:[function(_dereq_,module,exports){ /** * @file subtitles-button.js */ @@ -5393,7 +6138,7 @@ _componentJs2['default'].registerComponent('SubtitlesButton', SubtitlesButton); exports['default'] = SubtitlesButton; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-button.js":68}],68:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-button.js":79}],79:[function(_dereq_,module,exports){ /** * @file text-track-button.js */ @@ -5501,7 +6246,7 @@ _componentJs2['default'].registerComponent('TextTrackButton', TextTrackButton); exports['default'] = TextTrackButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../utils/fn.js":109,"./off-text-track-menu-item.js":66,"./text-track-menu-item.js":69}],69:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-button.js":95,"../../utils/fn.js":120,"./off-text-track-menu-item.js":77,"./text-track-menu-item.js":80}],80:[function(_dereq_,module,exports){ /** * @file text-track-menu-item.js */ @@ -5650,7 +6395,7 @@ _componentJs2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuIte exports['default'] = TextTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109,"global/document":1,"global/window":2}],70:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96,"../../utils/fn.js":120,"global/document":1,"global/window":2}],81:[function(_dereq_,module,exports){ /** * @file current-time-display.js */ @@ -5712,8 +6457,11 @@ var CurrentTimeDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-current-time-display', - innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the current time for screen reader users + innerHTML: 'Current Time ' + '0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5741,7 +6489,7 @@ _componentJs2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisp exports['default'] = CurrentTimeDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],71:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],82:[function(_dereq_,module,exports){ /** * @file duration-display.js */ @@ -5809,8 +6557,11 @@ var DurationDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-duration-display', - innerHTML: '' + this.localize('Duration Time') + ' 0:00', // label the duration time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the duration time for screen reader users + innerHTML: '' + this.localize('Duration Time') + ' 0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5839,7 +6590,7 @@ _componentJs2['default'].registerComponent('DurationDisplay', DurationDisplay); exports['default'] = DurationDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],72:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],83:[function(_dereq_,module,exports){ /** * @file remaining-time-display.js */ @@ -5901,8 +6652,11 @@ var RemainingTimeDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-remaining-time-display', - innerHTML: '' + this.localize('Remaining Time') + ' -0:00', // label the remaining time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the remaining time for screen reader users + innerHTML: '' + this.localize('Remaining Time') + ' -0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5934,7 +6688,7 @@ _componentJs2['default'].registerComponent('RemainingTimeDisplay', RemainingTime exports['default'] = RemainingTimeDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],73:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],84:[function(_dereq_,module,exports){ /** * @file time-divider.js */ @@ -5992,7 +6746,7 @@ _componentJs2['default'].registerComponent('TimeDivider', TimeDivider); exports['default'] = TimeDivider; module.exports = exports['default']; -},{"../../component.js":48}],74:[function(_dereq_,module,exports){ +},{"../../component.js":58}],85:[function(_dereq_,module,exports){ /** * @file volume-bar.js */ @@ -6055,7 +6809,8 @@ var VolumeBar = (function (_Slider) { VolumeBar.prototype.createEl = function createEl() { return _Slider.prototype.createEl.call(this, 'div', { - className: 'vjs-volume-bar', + className: 'vjs-volume-bar vjs-slider-bar' + }, { 'aria-label': 'volume level' }); }; @@ -6126,9 +6881,7 @@ var VolumeBar = (function (_Slider) { })(_sliderSliderJs2['default']); VolumeBar.prototype.options_ = { - children: { - 'volumeLevel': {} - }, + children: ['volumeLevel'], 'barName': 'volumeLevel' }; @@ -6138,7 +6891,7 @@ _componentJs2['default'].registerComponent('VolumeBar', VolumeBar); exports['default'] = VolumeBar; module.exports = exports['default']; -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"./volume-level.js":76}],75:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"./volume-level.js":87}],86:[function(_dereq_,module,exports){ /** * @file volume-control.js */ @@ -6180,11 +6933,11 @@ var VolumeControl = (function (_Component) { _Component.call(this, player, options); // hide volume controls when they're not supported by the current tech - if (player.tech && player.tech['featuresVolumeControl'] === false) { + if (player.tech_ && player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } this.on(player, 'loadstart', function () { - if (player.tech['featuresVolumeControl'] === false) { + if (player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } else { this.removeClass('vjs-hidden'); @@ -6209,16 +6962,14 @@ var VolumeControl = (function (_Component) { })(_componentJs2['default']); VolumeControl.prototype.options_ = { - children: { - 'volumeBar': {} - } + children: ['volumeBar'] }; _componentJs2['default'].registerComponent('VolumeControl', VolumeControl); exports['default'] = VolumeControl; module.exports = exports['default']; -},{"../../component.js":48,"./volume-bar.js":74}],76:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./volume-bar.js":85}],87:[function(_dereq_,module,exports){ /** * @file volume-level.js */ @@ -6275,7 +7026,7 @@ _componentJs2['default'].registerComponent('VolumeLevel', VolumeLevel); exports['default'] = VolumeLevel; module.exports = exports['default']; -},{"../../component.js":48}],77:[function(_dereq_,module,exports){ +},{"../../component.js":58}],88:[function(_dereq_,module,exports){ /** * @file volume-menu-button.js */ @@ -6330,10 +7081,15 @@ var VolumeMenuButton = (function (_MenuButton) { _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 an inline volumeMenuButton is used, we should default to using + // a horizontal slider for obvious reasons. if (options.inline) { options.vertical = false; } else { @@ -6341,8 +7097,8 @@ var VolumeMenuButton = (function (_MenuButton) { } } - // The vertical option needs to be set on the volumeBar as well, since that will - // need to be passed along to the VolumeBar constructor + // 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; @@ -6353,17 +7109,24 @@ var VolumeMenuButton = (function (_MenuButton) { this.on(player, 'loadstart', this.volumeUpdate); // 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 () { - if (player.tech['featuresVolumeControl'] === false) { + 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.addClass('vjs-menu-button'); } /** @@ -6396,15 +7159,11 @@ var VolumeMenuButton = (function (_MenuButton) { contentElType: 'div' }); - var vc = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar); + var vb = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar); - vc.on('focus', function () { - menu.lockShowing(); - }); - vc.on('blur', function () { - menu.unlockShowing(); - }); - menu.addChild(vc); + menu.addChild(vb); + + this.volumeBar = vb; return menu; }; @@ -6429,7 +7188,7 @@ _componentJs2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton) exports['default'] = VolumeMenuButton; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"../menu/menu-button.js":84,"../menu/menu.js":86,"./mute-toggle.js":52,"./volume-control/volume-bar.js":74}],78:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"../menu/menu-button.js":95,"../menu/menu.js":97,"./mute-toggle.js":62,"./volume-control/volume-bar.js":85}],89:[function(_dereq_,module,exports){ /** * @file error-display.js */ @@ -6511,7 +7270,7 @@ _component2['default'].registerComponent('ErrorDisplay', ErrorDisplay); exports['default'] = ErrorDisplay; module.exports = exports['default']; -},{"./component":48,"./utils/dom.js":107}],79:[function(_dereq_,module,exports){ +},{"./component":58,"./utils/dom.js":118}],90:[function(_dereq_,module,exports){ /** * @file event-target.js */ @@ -6570,7 +7329,7 @@ EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger; exports['default'] = EventTarget; module.exports = exports['default']; -},{"./utils/events.js":108}],80:[function(_dereq_,module,exports){ +},{"./utils/events.js":119}],91:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -6582,7 +7341,7 @@ var _utilsLog = _dereq_('./utils/log'); var _utilsLog2 = _interopRequireDefault(_utilsLog); /* - * @file extends.js + * @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 @@ -6615,7 +7374,7 @@ var _inherits = function _inherits(subClass, superClass) { * var Button = videojs.getComponent('Button'); * ``` * ```js - * var MyButton = videojs.extends(Button, { + * var MyButton = videojs.extend(Button, { * constructor: function(player, options) { * Button.call(this, player, options); * }, @@ -6625,7 +7384,7 @@ var _inherits = function _inherits(subClass, superClass) { * }); * ``` */ -var extendsFn = function extendsFn(superClass) { +var extendFn = function extendFn(superClass) { var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var subClass = function subClass() { @@ -6658,10 +7417,10 @@ var extendsFn = function extendsFn(superClass) { return subClass; }; -exports['default'] = extendsFn; +exports['default'] = extendFn; module.exports = exports['default']; -},{"./utils/log":112}],81:[function(_dereq_,module,exports){ +},{"./utils/log":123}],92:[function(_dereq_,module,exports){ /** * @file fullscreen-api.js */ @@ -6718,7 +7477,7 @@ if (browserApi) { exports['default'] = FullscreenApi; module.exports = exports['default']; -},{"global/document":1}],82:[function(_dereq_,module,exports){ +},{"global/document":1}],93:[function(_dereq_,module,exports){ /** * @file loading-spinner.js */ @@ -6773,7 +7532,7 @@ _component2['default'].registerComponent('LoadingSpinner', LoadingSpinner); exports['default'] = LoadingSpinner; module.exports = exports['default']; -},{"./component":48}],83:[function(_dereq_,module,exports){ +},{"./component":58}],94:[function(_dereq_,module,exports){ /** * @file media-error.js */ @@ -6864,7 +7623,7 @@ for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { exports['default'] = MediaError; module.exports = exports['default']; -},{"object.assign":40}],84:[function(_dereq_,module,exports){ +},{"object.assign":43}],95:[function(_dereq_,module,exports){ /** * @file menu-button.js */ @@ -7138,7 +7897,7 @@ _componentJs2['default'].registerComponent('MenuButton', MenuButton); exports['default'] = MenuButton; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/to-title-case.js":116,"./menu.js":86}],85:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/to-title-case.js":127,"./menu.js":97}],96:[function(_dereq_,module,exports){ /** * @file menu-item.js */ @@ -7192,11 +7951,11 @@ var MenuItem = (function (_Button) { * @method createEl */ - MenuItem.prototype.createEl = function createEl(type, props) { + MenuItem.prototype.createEl = function createEl(type, props, attrs) { return _Button.prototype.createEl.call(this, 'li', _objectAssign2['default']({ className: 'vjs-menu-item', innerHTML: this.localize(this.options_['label']) - }, props)); + }, props), attrs); }; /** @@ -7233,7 +7992,7 @@ _componentJs2['default'].registerComponent('MenuItem', MenuItem); exports['default'] = MenuItem; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"object.assign":40}],86:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"object.assign":43}],97:[function(_dereq_,module,exports){ /** * @file menu.js */ @@ -7331,7 +8090,7 @@ _componentJs2['default'].registerComponent('Menu', Menu); exports['default'] = Menu; module.exports = exports['default']; -},{"../component.js":48,"../utils/dom.js":107,"../utils/events.js":108,"../utils/fn.js":109}],87:[function(_dereq_,module,exports){ +},{"../component.js":58,"../utils/dom.js":118,"../utils/events.js":119,"../utils/fn.js":120}],98:[function(_dereq_,module,exports){ /** * @file player.js */ @@ -7630,12 +8389,12 @@ var Player = (function (_Component) { // When the player is first initialized, trigger activity so components // like the control bar show themselves if needed - this.userActive_ = true; + this.userActive(true); this.reportUserActivity(); - this.listenForUserActivity(); + this.listenForUserActivity_(); - this.on('fullscreenchange', this.handleFullscreenChange); - this.on('stageclick', this.handleStageClick); + this.on('fullscreenchange', this.handleFullscreenChange_); + this.on('stageclick', this.handleStageClick_); } /* @@ -7673,8 +8432,8 @@ var Player = (function (_Component) { this.el_.player = null; } - if (this.tech) { - this.tech.dispose(); + if (this.tech_) { + this.tech_.dispose(); } _Component.prototype.dispose.call(this); @@ -7915,14 +8674,15 @@ var Player = (function (_Component) { * * @param {String} techName Name of the playback technology * @param {String} source Video source - * @method loadTech + * @method loadTech_ + * @private */ - Player.prototype.loadTech = function loadTech(techName, source) { + Player.prototype.loadTech_ = function loadTech_(techName, source) { // Pause and remove current playback technology - if (this.tech) { - this.unloadTech(); + if (this.tech_) { + this.unloadTech_(); } // get rid of the HTML5 video tag as soon as we are using another tech @@ -7932,15 +8692,11 @@ var Player = (function (_Component) { this.tag = null; } - this.techName = techName; + this.techName_ = techName; // Turn off API access because we're loading a new tech that might load asynchronously this.isReady_ = false; - var techReady = Fn.bind(this, function () { - this.triggerReady(); - }); - // Grab tech-specific options from player options and add source and parent element to use. var techOptions = _objectAssign2['default']({ 'nativeControlsForTouch': this.options_.nativeControlsForTouch, @@ -7972,50 +8728,52 @@ var Player = (function (_Component) { // Initialize tech instance var techComponent = _componentJs2['default'].getComponent(techName); - this.tech = new techComponent(techOptions); + this.tech_ = new techComponent(techOptions); - _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech); + // player.triggerReady is always async, so don't need this to be async + this.tech_.ready(Fn.bind(this, this.handleTechReady_), true); - this.on(this.tech, 'ready', this.handleTechReady); + _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech_); - // Listen to every HTML5 events and trigger them back on the player for the plugins - 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.onTextTrackChange); - this.on(this.tech, 'loadedmetadata', this.updateStyleEl_); + // 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.usingNativeControls(this.techGet('controls')); + this.usingNativeControls(this.techGet_('controls')); if (this.controls() && !this.usingNativeControls()) { - this.addTechControlsListeners(); + 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()); + 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 @@ -8023,89 +8781,110 @@ var Player = (function (_Component) { this.tag.player = null; this.tag = null; } - - // player.triggerReady is always async, so don't need this to be async - this.tech.ready(techReady, true); }; /** * Unload playback technology * - * @method unloadTech + * @method unloadTech_ + * @private */ - Player.prototype.unloadTech = function unloadTech() { + Player.prototype.unloadTech_ = function unloadTech_() { // Save the current text tracks so that we can reuse the same text tracks with the next tech this.textTracks_ = this.textTracks(); this.textTracksJson_ = _tracksTextTrackListConverterJs2['default'].textTracksToJson(this); this.isReady_ = false; - this.tech.dispose(); + this.tech_.dispose(); - this.tech = false; + this.tech_ = false; }; /** - * Add playback technology listeners - * - * @method addTechControlsListeners + * 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() { + Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() { // Make sure to remove all the previous listeners in case we are called multiple times. - this.removeTechControlsListeners(); + 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); + 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); + 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); + 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 + * @method removeTechControlsListeners_ + * @private */ - Player.prototype.removeTechControlsListeners = function removeTechControlsListeners() { + 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); + 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 - * @method handleTechReady */ - Player.prototype.handleTechReady = function handleTechReady() { + Player.prototype.handleTechReady_ = function handleTechReady_() { this.triggerReady(); // Keep the same volume as before if (this.cache_.volume) { - this.techCall('setVolume', 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) @@ -8119,10 +8898,11 @@ var Player = (function (_Component) { /** * Fired when the user agent begins looking for media data * - * @event loadstart + * @private + * @method handleTechLoadStart_ */ - Player.prototype.handleTechLoadStart = function handleTechLoadStart() { + Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() { // TODO: Update to use `emptied` event instead. See #1277. this.removeClass('vjs-ended'); @@ -8148,6 +8928,7 @@ var Player = (function (_Component) { * * @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 */ @@ -8172,10 +8953,11 @@ var Player = (function (_Component) { /** * Fired whenever the media begins or resumes playback * - * @event play + * @private + * @method handleTechPlay_ */ - Player.prototype.handleTechPlay = function handleTechPlay() { + Player.prototype.handleTechPlay_ = function handleTechPlay_() { this.removeClass('vjs-ended'); this.removeClass('vjs-paused'); this.addClass('vjs-playing'); @@ -8190,10 +8972,11 @@ var Player = (function (_Component) { /** * Fired whenever the media begins waiting * - * @event waiting + * @private + * @method handleTechWaiting_ */ - Player.prototype.handleTechWaiting = function handleTechWaiting() { + Player.prototype.handleTechWaiting_ = function handleTechWaiting_() { this.addClass('vjs-waiting'); this.trigger('waiting'); }; @@ -8202,10 +8985,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event canplay + * @private + * @method handleTechCanPlay_ */ - Player.prototype.handleTechCanPlay = function handleTechCanPlay() { + Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() { this.removeClass('vjs-waiting'); this.trigger('canplay'); }; @@ -8214,10 +8998,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event canplaythrough + * @private + * @method handleTechCanPlayThrough_ */ - Player.prototype.handleTechCanPlayThrough = function handleTechCanPlayThrough() { + Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() { this.removeClass('vjs-waiting'); this.trigger('canplaythrough'); }; @@ -8226,10 +9011,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event playing + * @private + * @method handleTechPlaying_ */ - Player.prototype.handleTechPlaying = function handleTechPlaying() { + Player.prototype.handleTechPlaying_ = function handleTechPlaying_() { this.removeClass('vjs-waiting'); this.trigger('playing'); }; @@ -8237,10 +9023,11 @@ var Player = (function (_Component) { /** * Fired whenever the player is jumping to a new time * - * @event seeking + * @private + * @method handleTechSeeking_ */ - Player.prototype.handleTechSeeking = function handleTechSeeking() { + Player.prototype.handleTechSeeking_ = function handleTechSeeking_() { this.addClass('vjs-seeking'); this.trigger('seeking'); }; @@ -8248,10 +9035,11 @@ var Player = (function (_Component) { /** * Fired when the player has finished jumping to a new time * - * @event seeked + * @private + * @method handleTechSeeked_ */ - Player.prototype.handleTechSeeked = function handleTechSeeked() { + Player.prototype.handleTechSeeked_ = function handleTechSeeked_() { this.removeClass('vjs-seeking'); this.trigger('seeked'); }; @@ -8262,10 +9050,11 @@ var Player = (function (_Component) { * implementation yet, so use sparingly. If you don't have a reason to * prevent playback, use `myPlayer.one('play');` instead. * - * @event firstplay + * @private + * @method handleTechFirstPlay_ */ - Player.prototype.handleTechFirstPlay = function 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) { @@ -8279,10 +9068,11 @@ var Player = (function (_Component) { /** * Fired whenever the media has been paused * - * @event pause + * @private + * @method handleTechPause_ */ - Player.prototype.handleTechPause = function handleTechPause() { + Player.prototype.handleTechPause_ = function handleTechPause_() { this.removeClass('vjs-playing'); this.addClass('vjs-paused'); this.trigger('pause'); @@ -8291,25 +9081,22 @@ var Player = (function (_Component) { /** * Fired while the user agent is downloading media data * - * @event progress + * @private + * @method handleTechProgress_ */ - Player.prototype.handleTechProgress = function handleTechProgress() { + Player.prototype.handleTechProgress_ = function handleTechProgress_() { this.trigger('progress'); - - // Add custom event for when source is finished downloading. - if (this.bufferedPercent() === 1) { - this.trigger('loadedalldata'); - } }; /** * Fired when the end of the media resource is reached (currentTime == duration) * - * @event ended + * @private + * @method handleTechEnded_ */ - Player.prototype.handleTechEnded = function handleTechEnded() { + Player.prototype.handleTechEnded_ = function handleTechEnded_() { this.addClass('vjs-ended'); if (this.options_.loop) { this.currentTime(0); @@ -8324,22 +9111,23 @@ var Player = (function (_Component) { /** * Fired when the duration of the media resource is first known or changed * - * @event durationchange + * @private + * @method handleTechDurationChange_ */ - Player.prototype.handleTechDurationChange = function handleTechDurationChange() { - this.updateDuration(); - this.trigger('durationchange'); + 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 - * @method handleTechClick + * @private + * @method handleTechClick_ */ - Player.prototype.handleTechClick = function handleTechClick(event) { + 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; @@ -8359,30 +9147,33 @@ var Player = (function (_Component) { * Handle a tap on the media element. It will toggle the user * activity state, which hides and shows the controls. * - * @method handleTechTap + * @private + * @method handleTechTap_ */ - Player.prototype.handleTechTap = function handleTechTap() { + Player.prototype.handleTechTap_ = function handleTechTap_() { this.userActive(!this.userActive()); }; /** * Handle touch to start * - * @method handleTechTouchStart + * @private + * @method handleTechTouchStart_ */ - Player.prototype.handleTechTouchStart = function handleTechTouchStart() { + Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() { this.userWasActive = this.userActive(); }; /** * Handle touch to move * - * @method handleTechTouchMove + * @private + * @method handleTechTouchMove_ */ - Player.prototype.handleTechTouchMove = function handleTechTouchMove() { + Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() { if (this.userWasActive) { this.reportUserActivity(); } @@ -8391,47 +9182,23 @@ var Player = (function (_Component) { /** * Handle touch to end * - * @method handleTechTouchEnd + * @private + * @method handleTechTouchEnd_ */ - Player.prototype.handleTechTouchEnd = function handleTechTouchEnd(event) { + Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) { // Stop the mouse events from also happening event.preventDefault(); }; - /** - * Update the duration of the player using the tech - * - * @private - * @method updateDuration - */ - - Player.prototype.updateDuration = function updateDuration() { - // Allows for caching value instead of asking player each time. - // We need to get the techGet response and check for a value so we don't - // accidentally cause the stack to blow up. - var duration = this.techGet('duration'); - if (duration) { - if (duration < 0) { - duration = Infinity; - } - this.duration(duration); - // Determine if the stream is live and propagate styles down to UI. - if (duration === Infinity) { - this.addClass('vjs-live'); - } else { - this.removeClass('vjs-live'); - } - } - }; - /** * Fired when the player switches in or out of fullscreen mode * - * @event fullscreenchange + * @private + * @method handleFullscreenChange_ */ - Player.prototype.handleFullscreenChange = function handleFullscreenChange() { + Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() { if (this.isFullscreen()) { this.addClass('vjs-fullscreen'); } else { @@ -8444,20 +9211,21 @@ var Player = (function (_Component) { * use stageclick events triggered from inside the SWF instead * * @private - * @method handleStageClick + * @method handleStageClick_ */ - Player.prototype.handleStageClick = function handleStageClick() { + Player.prototype.handleStageClick_ = function handleStageClick_() { this.reportUserActivity(); }; /** * Handle Tech Fullscreen Change * - * @method handleTechFullscreenChange + * @private + * @method handleTechFullscreenChange_ */ - Player.prototype.handleTechFullscreenChange = function handleTechFullscreenChange(event, data) { + Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) { if (data) { this.isFullscreen(data.isFullscreen); } @@ -8467,111 +9235,122 @@ var Player = (function (_Component) { /** * Fires when an error occurred during the loading of an audio/video * - * @event error + * @private + * @method handleTechError_ */ - Player.prototype.handleTechError = function handleTechError() { - var error = this.tech.error(); + Player.prototype.handleTechError_ = function handleTechError_() { + var error = this.tech_.error(); this.error(error && error.code); }; /** * Fires when the browser is intentionally not getting media data * - * @event suspend + * @private + * @method handleTechSuspend_ */ - Player.prototype.handleTechSuspend = function handleTechSuspend() { + Player.prototype.handleTechSuspend_ = function handleTechSuspend_() { this.trigger('suspend'); }; /** * Fires when the loading of an audio/video is aborted * - * @event abort + * @private + * @method handleTechAbort_ */ - Player.prototype.handleTechAbort = function handleTechAbort() { + Player.prototype.handleTechAbort_ = function handleTechAbort_() { this.trigger('abort'); }; /** * Fires when the current playlist is empty * - * @event emptied + * @private + * @method handleTechEmptied_ */ - Player.prototype.handleTechEmptied = function handleTechEmptied() { + Player.prototype.handleTechEmptied_ = function handleTechEmptied_() { this.trigger('emptied'); }; /** * Fires when the browser is trying to get media data, but data is not available * - * @event stalled + * @private + * @method handleTechStalled_ */ - Player.prototype.handleTechStalled = function handleTechStalled() { + Player.prototype.handleTechStalled_ = function handleTechStalled_() { this.trigger('stalled'); }; /** * Fires when the browser has loaded meta data for the audio/video * - * @event loadedmetadata + * @private + * @method handleTechLoadedMetaData_ */ - Player.prototype.handleTechLoadedMetaData = function handleTechLoadedMetaData() { + Player.prototype.handleTechLoadedMetaData_ = function handleTechLoadedMetaData_() { this.trigger('loadedmetadata'); }; /** * Fires when the browser has loaded the current frame of the audio/video * - * @event loaddata + * @private + * @method handleTechLoadedData_ */ - Player.prototype.handleTechLoadedData = function handleTechLoadedData() { + Player.prototype.handleTechLoadedData_ = function handleTechLoadedData_() { this.trigger('loadeddata'); }; /** * Fires when the current playback position has changed * - * @event timeupdate + * @private + * @method handleTechTimeUpdate_ */ - Player.prototype.handleTechTimeUpdate = function handleTechTimeUpdate() { + Player.prototype.handleTechTimeUpdate_ = function handleTechTimeUpdate_() { this.trigger('timeupdate'); }; /** * Fires when the playing speed of the audio/video is changed * - * @event ratechange + * @private + * @method handleTechRateChange_ */ - Player.prototype.handleTechRateChange = function handleTechRateChange() { + Player.prototype.handleTechRateChange_ = function handleTechRateChange_() { this.trigger('ratechange'); }; /** * Fires when the volume has been changed * - * @event volumechange + * @private + * @method handleTechVolumeChange_ */ - Player.prototype.handleTechVolumeChange = function handleTechVolumeChange() { + Player.prototype.handleTechVolumeChange_ = function handleTechVolumeChange_() { this.trigger('volumechange'); }; /** * Fires when the text track has been changed * - * @event texttrackchange + * @private + * @method handleTechTextTrackChange_ */ - Player.prototype.onTextTrackChange = function onTextTrackChange() { + Player.prototype.handleTechTextTrackChange_ = function handleTechTextTrackChange_() { this.trigger('texttrackchange'); }; @@ -8591,20 +9370,21 @@ var Player = (function (_Component) { * * @param {String=} method Method * @param {Object=} arg Argument - * @method techCall + * @private + * @method techCall_ */ - Player.prototype.techCall = function techCall(method, arg) { + 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 () { + if (this.tech_ && !this.tech_.isReady_) { + this.tech_.ready(function () { this[method](arg); }, true); // Otherwise call method now } else { try { - this.tech[method](arg); + this.tech_[method](arg); } catch (e) { _utilsLogJs2['default'](e); throw e; @@ -8617,26 +9397,27 @@ var Player = (function (_Component) { * * @param {String} method Tech method * @return {Method} - * @method techGet + * @private + * @method techGet_ */ - Player.prototype.techGet = function techGet(method) { - if (this.tech && this.tech.isReady_) { + 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](); + return this.tech_[method](); } catch (e) { // When building additional tech libs, an expected method may not be defined yet - if (this.tech[method] === undefined) { - _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName + ' playback technology.', e); + if (this.tech_[method] === undefined) { + _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e); } else { // When a method isn't available on the object it throws a TypeError if (e.name === 'TypeError') { - _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName + ' playback technology element.', e); - this.tech.isReady_ = false; + _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e); + this.tech_.isReady_ = false; } else { _utilsLogJs2['default'](e); } @@ -8659,7 +9440,7 @@ var Player = (function (_Component) { */ Player.prototype.play = function play() { - this.techCall('play'); + this.techCall_('play'); return this; }; @@ -8674,7 +9455,7 @@ var Player = (function (_Component) { */ Player.prototype.pause = function pause() { - this.techCall('pause'); + this.techCall_('pause'); return this; }; @@ -8691,7 +9472,7 @@ var Player = (function (_Component) { 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; + return this.techGet_('paused') === false ? false : true; }; /** @@ -8738,7 +9519,7 @@ var Player = (function (_Component) { Player.prototype.currentTime = function currentTime(seconds) { if (seconds !== undefined) { - this.techCall('setCurrentTime', seconds); + this.techCall_('setCurrentTime', seconds); return this; } @@ -8749,7 +9530,7 @@ var Player = (function (_Component) { // 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. - return this.cache_.currentTime = this.techGet('currentTime') || 0; + return this.cache_.currentTime = this.techGet_('currentTime') || 0; }; /** @@ -8767,19 +9548,31 @@ var Player = (function (_Component) { */ Player.prototype.duration = function duration(seconds) { - if (seconds !== undefined) { - - // cache the last set value for optimized scrubbing (esp. Flash) - this.cache_.duration = parseFloat(seconds); - - return this; + if (seconds === undefined) { + return this.cache_.duration || 0; } - if (this.cache_.duration === undefined) { - this.updateDuration(); + seconds = parseFloat(seconds) || 0; + + // Standardize on Inifity for signaling video is live + if (seconds < 0) { + seconds = Infinity; } - return this.cache_.duration || 0; + 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; }; /** @@ -8821,7 +9614,7 @@ var Player = (function (_Component) { */ Player.prototype.buffered = function buffered() { - var buffered = this.techGet('buffered'); + var buffered = this.techGet_('buffered'); if (!buffered || !buffered.length) { buffered = _utilsTimeRangesJs.createTimeRange(0, 0); @@ -8888,13 +9681,13 @@ var Player = (function (_Component) { if (percentAsDecimal !== undefined) { vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1 this.cache_.volume = vol; - this.techCall('setVolume', vol); + this.techCall_('setVolume', vol); return this; } // Default to 1 when returning current volume. - vol = parseFloat(this.techGet('volume')); + vol = parseFloat(this.techGet_('volume')); return isNaN(vol) ? 1 : vol; }; @@ -8915,10 +9708,10 @@ var Player = (function (_Component) { Player.prototype.muted = function muted(_muted) { if (_muted !== undefined) { - this.techCall('setMuted', _muted); + this.techCall_('setMuted', _muted); return this; } - return this.techGet('muted') || false; // Default to false + return this.techGet_('muted') || false; // Default to false }; // Check if current tech can support native fullscreen @@ -8931,7 +9724,7 @@ var Player = (function (_Component) { */ Player.prototype.supportsFullScreen = function supportsFullScreen() { - return this.techGet('supportsFullScreen') || false; + return this.techGet_('supportsFullScreen') || false; }; /** @@ -9002,10 +9795,10 @@ var Player = (function (_Component) { })); this.el_[fsApi.requestFullscreen](); - } else if (this.tech.supportsFullScreen()) { + } 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'); + this.techCall_('enterFullScreen'); } else { // fullscreen isn't supported so we'll just stretch the video element to // fill the viewport @@ -9033,8 +9826,8 @@ var Player = (function (_Component) { // Check for browser element fullscreen support if (fsApi.requestFullscreen) { _globalDocument2['default'][fsApi.exitFullscreen](); - } else if (this.tech.supportsFullScreen()) { - this.techCall('exitFullScreen'); + } else if (this.tech_.supportsFullScreen()) { + this.techCall_('exitFullScreen'); } else { this.exitFullWindow(); this.trigger('fullscreenchange'); @@ -9177,10 +9970,10 @@ var Player = (function (_Component) { Player.prototype.src = function src(source) { if (source === undefined) { - return this.techGet('src'); + return this.techGet_('src'); } - var currentTech = _componentJs2['default'].getComponent(this.techName); + var currentTech = _componentJs2['default'].getComponent(this.techName_); // case: Array of source objects to choose from and pick the best to play if (Array.isArray(source)) { @@ -9211,9 +10004,9 @@ var Player = (function (_Component) { // 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); + this.techCall_('setSource', source); } else { - this.techCall('src', source.src); + this.techCall_('src', source.src); } if (this.options_.preload === 'auto') { @@ -9244,12 +10037,12 @@ var Player = (function (_Component) { var sourceTech = this.selectSource(sources); if (sourceTech) { - if (sourceTech.tech === this.techName) { + 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); + 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 @@ -9271,7 +10064,7 @@ var Player = (function (_Component) { */ Player.prototype.load = function load() { - this.techCall('load'); + this.techCall_('load'); return this; }; @@ -9284,7 +10077,7 @@ var Player = (function (_Component) { */ Player.prototype.currentSrc = function currentSrc() { - return this.techGet('currentSrc') || this.cache_.src || ''; + return this.techGet_('currentSrc') || this.cache_.src || ''; }; /** @@ -9311,11 +10104,11 @@ var Player = (function (_Component) { Player.prototype.preload = function preload(value) { if (value !== undefined) { - this.techCall('setPreload', value); + this.techCall_('setPreload', value); this.options_.preload = value; return this; } - return this.techGet('preload'); + return this.techGet_('preload'); }; /** @@ -9329,11 +10122,11 @@ var Player = (function (_Component) { Player.prototype.autoplay = function autoplay(value) { if (value !== undefined) { - this.techCall('setAutoplay', value); + this.techCall_('setAutoplay', value); this.options_.autoplay = value; return this; } - return this.techGet('autoplay', value); + return this.techGet_('autoplay', value); }; /** @@ -9347,15 +10140,16 @@ var Player = (function (_Component) { Player.prototype.loop = function loop(value) { if (value !== undefined) { - this.techCall('setLoop', value); + this.techCall_('setLoop', value); this.options_['loop'] = value; return this; } - return this.techGet('loop'); + return this.techGet_('loop'); }; /** - * get or set the poster image source url + * Get or set the poster image source url + * * ##### EXAMPLE: * ```js * // get @@ -9385,7 +10179,7 @@ var Player = (function (_Component) { this.poster_ = src; // update the tech's poster - this.techCall('setPoster', src); + this.techCall_('setPoster', src); // alert components that the poster has been set this.trigger('posterchange'); @@ -9393,6 +10187,27 @@ var Player = (function (_Component) { 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. * @@ -9409,7 +10224,7 @@ var Player = (function (_Component) { this.controls_ = bool; if (this.usingNativeControls()) { - this.techCall('setControls', bool); + this.techCall_('setControls', bool); } if (bool) { @@ -9418,7 +10233,7 @@ var Player = (function (_Component) { this.trigger('controlsenabled'); if (!this.usingNativeControls()) { - this.addTechControlsListeners(); + this.addTechControlsListeners_(); } } else { this.removeClass('vjs-controls-enabled'); @@ -9426,7 +10241,7 @@ var Player = (function (_Component) { this.trigger('controlsdisabled'); if (!this.usingNativeControls()) { - this.removeTechControlsListeners(); + this.removeTechControlsListeners_(); } } } @@ -9534,7 +10349,7 @@ var Player = (function (_Component) { */ Player.prototype.ended = function ended() { - return this.techGet('ended'); + return this.techGet_('ended'); }; /** @@ -9545,7 +10360,7 @@ var Player = (function (_Component) { */ Player.prototype.seeking = function seeking() { - return this.techGet('seeking'); + return this.techGet_('seeking'); }; /** @@ -9557,7 +10372,7 @@ var Player = (function (_Component) { */ Player.prototype.seekable = function seekable() { - return this.techGet('seekable'); + return this.techGet_('seekable'); }; /** @@ -9604,8 +10419,8 @@ var Player = (function (_Component) { // // 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) { + if (this.tech_) { + this.tech_.one('mousemove', function (e) { e.stopPropagation(); e.preventDefault(); }); @@ -9624,10 +10439,11 @@ var Player = (function (_Component) { /** * Listen for user activity based on timeout value * - * @method listenForUserActivity + * @private + * @method listenForUserActivity_ */ - Player.prototype.listenForUserActivity = function listenForUserActivity() { + Player.prototype.listenForUserActivity_ = function listenForUserActivity_() { var mouseInProgress = undefined, lastMoveX = undefined, lastMoveY = undefined; @@ -9721,12 +10537,12 @@ var Player = (function (_Component) { Player.prototype.playbackRate = function playbackRate(rate) { if (rate !== undefined) { - this.techCall('setPlaybackRate', rate); + this.techCall_('setPlaybackRate', rate); return this; } - if (this.tech && this.tech['featuresPlaybackRate']) { - return this.techGet('playbackRate'); + if (this.tech_ && this.tech_['featuresPlaybackRate']) { + return this.techGet_('playbackRate'); } else { return 1.0; } @@ -9773,7 +10589,7 @@ var Player = (function (_Component) { */ Player.prototype.networkState = function networkState() { - return this.techGet('networkState'); + return this.techGet_('networkState'); }; /** @@ -9801,7 +10617,7 @@ var Player = (function (_Component) { */ Player.prototype.readyState = function readyState() { - return this.techGet('readyState'); + return this.techGet_('readyState'); }; /* @@ -9821,9 +10637,9 @@ var Player = (function (_Component) { */ Player.prototype.textTracks = function textTracks() { - // cannot use techGet directly because it checks to see whether the tech is ready. + // 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. - return this.tech && this.tech['textTracks'](); + return this.tech_ && this.tech_['textTracks'](); }; /** @@ -9834,7 +10650,7 @@ var Player = (function (_Component) { */ Player.prototype.remoteTextTracks = function remoteTextTracks() { - return this.tech && this.tech['remoteTextTracks'](); + return this.tech_ && this.tech_['remoteTextTracks'](); }; /** @@ -9849,7 +10665,7 @@ var Player = (function (_Component) { */ Player.prototype.addTextTrack = function addTextTrack(kind, label, language) { - return this.tech && this.tech['addTextTrack'](kind, label, language); + return this.tech_ && this.tech_['addTextTrack'](kind, label, language); }; /** @@ -9860,7 +10676,7 @@ var Player = (function (_Component) { */ Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) { - return this.tech && this.tech['addRemoteTextTrack'](options); + return this.tech_ && this.tech_['addRemoteTextTrack'](options); }; /** @@ -9871,7 +10687,7 @@ var Player = (function (_Component) { */ Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { - this.tech && this.tech['removeRemoteTextTrack'](track); + this.tech_ && this.tech_['removeRemoteTextTrack'](track); }; /** @@ -9882,7 +10698,7 @@ var Player = (function (_Component) { */ Player.prototype.videoWidth = function videoWidth() { - return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0; + return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0; }; /** @@ -9893,24 +10709,17 @@ var Player = (function (_Component) { */ Player.prototype.videoHeight = function videoHeight() { - return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0; + 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'); }, - // seekable: function(){ return this.techCall('seekable'); }, - // videoTracks: function(){ return this.techCall('videoTracks'); }, - // audioTracks: function(){ return this.techCall('audioTracks'); }, - // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); }, - // mediaGroup: function(){ return this.techCall('mediaGroup'); }, - // controller: function(){ return this.techCall('controller'); }, - // defaultMuted: function(){ return this.techCall('defaultMuted'); } - - // TODO - // currentSrcList: the array of sources including other formats and bitrates - // playList: array of source lists in order of playback + // initialTime: function(){ return this.techCall_('initialTime'); }, + // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); }, + // played: function(){ return this.techCall_('played'); }, + // videoTracks: function(){ return this.techCall_('videoTracks'); }, + // audioTracks: function(){ return this.techCall_('audioTracks'); }, + // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); }, + // defaultMuted: function(){ return this.techCall_('defaultMuted'); } /** * The player's language code @@ -10059,16 +10868,7 @@ Player.prototype.options_ = { // 'playbackRates': [0.5, 1, 1.5, 2], // Included control sets - children: { - mediaLoader: {}, - posterImage: {}, - textTrackDisplay: {}, - loadingSpinner: {}, - bigPlayButton: {}, - controlBar: {}, - errorDisplay: {}, - textTrackSettings: {} - }, + children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings'], language: _globalDocument2['default'].getElementsByTagName('html')[0].getAttribute('lang') || navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en', @@ -10084,35 +10884,28 @@ Player.prototype.options_ = { * * @event loadedmetadata */ -Player.prototype.handleLoadedMetaData; +Player.prototype.handleLoadedMetaData_; /** * Fired when the player has downloaded data at the current playback position * * @event loadeddata */ -Player.prototype.handleLoadedData; - -/** - * Fired when the player has finished downloading the source data - * - * @event loadedalldata - */ -Player.prototype.handleLoadedAllData; +Player.prototype.handleLoadedData_; /** * Fired when the user is active, e.g. moves the mouse over the player * * @event useractive */ -Player.prototype.handleUserActive; +Player.prototype.handleUserActive_; /** * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction * * @event userinactive */ -Player.prototype.handleUserInactive; +Player.prototype.handleUserInactive_; /** * Fired when the current playback position has changed * @@ -10121,21 +10914,21 @@ Player.prototype.handleUserInactive; * * @event timeupdate */ -Player.prototype.handleTimeUpdate; +Player.prototype.handleTimeUpdate_; /** * Fired when the volume changes * * @event volumechange */ -Player.prototype.handleVolumeChange; +Player.prototype.handleVolumeChange_; /** * Fired when an error occurs * * @event error */ -Player.prototype.handleError; +Player.prototype.handleError_; Player.prototype.flexNotSupported_ = function () { var elem = _globalDocument2['default'].createElement('i'); @@ -10150,7 +10943,7 @@ exports['default'] = Player; module.exports = exports['default']; // If empty string, make it a parsable json object. -},{"./big-play-button.js":46,"./component.js":48,"./control-bar/control-bar.js":49,"./error-display.js":78,"./fullscreen-api.js":81,"./loading-spinner.js":82,"./media-error.js":83,"./poster-image.js":89,"./tech/html5.js":94,"./tech/loader.js":95,"./tracks/text-track-display.js":98,"./tracks/text-track-list-converter.js":100,"./tracks/text-track-settings.js":102,"./utils/browser.js":104,"./utils/buffer.js":105,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/to-title-case.js":116,"global/document":1,"global/window":2,"object.assign":40,"safe-json-parse/tuple":45}],88:[function(_dereq_,module,exports){ +},{"./big-play-button.js":56,"./component.js":58,"./control-bar/control-bar.js":59,"./error-display.js":89,"./fullscreen-api.js":92,"./loading-spinner.js":93,"./media-error.js":94,"./poster-image.js":100,"./tech/html5.js":105,"./tech/loader.js":106,"./tracks/text-track-display.js":109,"./tracks/text-track-list-converter.js":111,"./tracks/text-track-settings.js":113,"./utils/browser.js":115,"./utils/buffer.js":116,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/to-title-case.js":127,"global/document":1,"global/window":2,"object.assign":43,"safe-json-parse/tuple":48}],99:[function(_dereq_,module,exports){ /** * @file plugins.js */ @@ -10178,7 +10971,7 @@ var plugin = function plugin(name, init) { exports['default'] = plugin; module.exports = exports['default']; -},{"./player.js":87}],89:[function(_dereq_,module,exports){ +},{"./player.js":98}],100:[function(_dereq_,module,exports){ /** * @file poster-image.js */ @@ -10338,7 +11131,7 @@ _componentJs2['default'].registerComponent('PosterImage', PosterImage); exports['default'] = PosterImage; module.exports = exports['default']; -},{"./button.js":47,"./component.js":48,"./utils/browser.js":104,"./utils/dom.js":107,"./utils/fn.js":109}],90:[function(_dereq_,module,exports){ +},{"./button.js":57,"./component.js":58,"./utils/browser.js":115,"./utils/dom.js":118,"./utils/fn.js":120}],101:[function(_dereq_,module,exports){ /** * @file setup.js * @@ -10448,7 +11241,7 @@ exports.autoSetup = autoSetup; exports.autoSetupTimeout = autoSetupTimeout; exports.hasLoaded = hasLoaded; -},{"./utils/events.js":108,"global/document":1,"global/window":2}],91:[function(_dereq_,module,exports){ +},{"./utils/events.js":119,"global/document":1,"global/window":2}],102:[function(_dereq_,module,exports){ /** * @file slider.js */ @@ -10524,18 +11317,23 @@ var Slider = (function (_Component) { 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 = _objectAssign2['default']({ + tabIndex: 0 + }, props); + + attributes = _objectAssign2['default']({ 'role': 'slider', 'aria-valuenow': 0, 'aria-valuemin': 0, 'aria-valuemax': 100, tabIndex: 0 - }, props); + }, attributes); - return _Component.prototype.createEl.call(this, type, props); + return _Component.prototype.createEl.call(this, type, props, attributes); }; /** @@ -10548,7 +11346,9 @@ var Slider = (function (_Component) { Slider.prototype.handleMouseDown = function handleMouseDown(event) { event.preventDefault(); Dom.blockTextSelection(); + this.addClass('vjs-sliding'); + this.trigger('slideractive'); this.on(_globalDocument2['default'], 'mousemove', this.handleMouseMove); this.on(_globalDocument2['default'], 'mouseup', this.handleMouseUp); @@ -10574,7 +11374,9 @@ var Slider = (function (_Component) { Slider.prototype.handleMouseUp = function handleMouseUp() { Dom.unblockTextSelection(); + this.removeClass('vjs-sliding'); + this.trigger('sliderinactive'); this.off(_globalDocument2['default'], 'mousemove', this.handleMouseMove); this.off(_globalDocument2['default'], 'mouseup', this.handleMouseUp); @@ -10628,36 +11430,11 @@ var Slider = (function (_Component) { */ Slider.prototype.calculateDistance = function calculateDistance(event) { - var el = this.el_; - var box = Dom.findElPosition(el); - var boxW = el.offsetWidth; - var boxH = el.offsetHeight; - + var position = Dom.getPointerPosition(this.el_, event); if (this.vertical()) { - var boxY = box.top; - - var pageY = undefined; - if (event.changedTouches) { - pageY = event.changedTouches[0].pageY; - } else { - pageY = event.pageY; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH)); - } else { - var boxX = box.left; - - var pageX = undefined; - if (event.changedTouches) { - pageX = event.changedTouches[0].pageX; - } else { - pageX = event.pageX; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (pageX - boxX) / boxW)); + return position.y; } + return position.x; }; /** @@ -10743,7 +11520,7 @@ _componentJs2['default'].registerComponent('Slider', Slider); exports['default'] = Slider; module.exports = exports['default']; -},{"../component.js":48,"../utils/dom.js":107,"global/document":1,"object.assign":40}],92:[function(_dereq_,module,exports){ +},{"../component.js":58,"../utils/dom.js":118,"global/document":1,"object.assign":43}],103:[function(_dereq_,module,exports){ /** * @file flash-rtmp.js */ @@ -10843,7 +11620,7 @@ function FlashRtmpDecorator(Flash) { exports['default'] = FlashRtmpDecorator; module.exports = exports['default']; -},{}],93:[function(_dereq_,module,exports){ +},{}],104:[function(_dereq_,module,exports){ /** * @file flash.js * VideoJS-SWF - Custom Flash Player with HTML5-ish API @@ -10955,6 +11732,14 @@ var Flash = (function (_Tech) { 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) { + options.swf = '//vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf'; + } + // Generate ID for swf object var objId = options.techId; @@ -11440,7 +12225,7 @@ _component2['default'].registerComponent('Flash', Flash); exports['default'] = Flash; module.exports = exports['default']; -},{"../component":48,"../utils/dom.js":107,"../utils/time-ranges.js":115,"../utils/url.js":117,"./flash-rtmp":92,"./tech":96,"global/window":2,"object.assign":40}],94:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/dom.js":118,"../utils/time-ranges.js":126,"../utils/url.js":128,"./flash-rtmp":103,"./tech":107,"global/window":2,"object.assign":43}],105:[function(_dereq_,module,exports){ /** * @file html5.js * HTML5 Media Controller - Wrapper for HTML5 Media API @@ -11527,6 +12312,8 @@ var Html5 = (function (_Tech) { // 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()) { @@ -11665,6 +12452,97 @@ var Html5 = (function (_Tech) { // 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 _this = 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; + }; + _this.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'); + } + }; + _this.on('loadedmetadata', triggerLoadstart); + + _this.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: undefined + }; + })(); + + if (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; @@ -12586,7 +13464,7 @@ _component2['default'].registerComponent('Html5', Html5); exports['default'] = Html5; module.exports = exports['default']; -},{"../component":48,"../utils/browser.js":104,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/log.js":112,"../utils/merge-options.js":113,"../utils/url.js":117,"./tech.js":96,"global/document":1,"global/window":2,"object.assign":40}],95:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/browser.js":115,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/log.js":123,"../utils/merge-options.js":124,"../utils/url.js":128,"./tech.js":107,"global/document":1,"global/window":2,"object.assign":43}],106:[function(_dereq_,module,exports){ /** * @file loader.js */ @@ -12641,7 +13519,7 @@ var MediaLoader = (function (_Component) { // Check if the browser supports this technology if (tech && tech.isSupported()) { - player.loadTech(techName); + player.loadTech_(techName); break; } } @@ -12661,7 +13539,7 @@ _component2['default'].registerComponent('MediaLoader', MediaLoader); exports['default'] = MediaLoader; module.exports = exports['default']; -},{"../component":48,"../utils/to-title-case.js":116,"global/window":2}],96:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/to-title-case.js":127,"global/window":2}],107:[function(_dereq_,module,exports){ /** * @file tech.js * Media Technology Controller - Base class for media playback @@ -12761,8 +13639,6 @@ var Tech = (function (_Component) { this.manualTimeUpdatesOn(); } - this.initControlsListeners(); - if (options.nativeCaptions === false || options.nativeTextTracks === false) { this.featuresNativeTextTracks = false; } @@ -12784,40 +13660,6 @@ var Tech = (function (_Component) { * @private */ - /** - * 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 - * - * @method initControlsListeners - */ - - Tech.prototype.initControlsListeners = function initControlsListeners() { - // 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. - // Long term we might consider how we would do this for other events like 'canplay' - // that may also have fired. - this.ready(function () { - if (this.networkState && this.networkState() > 0) { - this.trigger('loadstart'); - } - // Allow the tech ready event to handle synchronisity - }, true); - }; - /* Fallbacks for unsupported event types ================================================================================ */ // Manually trigger progress events based on changes to the buffered amount @@ -13376,7 +14218,7 @@ _component2['default'].registerComponent('MediaTechController', Tech); exports['default'] = Tech; module.exports = exports['default']; -},{"../component":48,"../media-error.js":83,"../tracks/text-track":103,"../tracks/text-track-list":101,"../utils/buffer.js":105,"../utils/fn.js":109,"../utils/log.js":112,"../utils/time-ranges.js":115,"global/document":1,"global/window":2}],97:[function(_dereq_,module,exports){ +},{"../component":58,"../media-error.js":94,"../tracks/text-track":114,"../tracks/text-track-list":112,"../utils/buffer.js":116,"../utils/fn.js":120,"../utils/log.js":123,"../utils/time-ranges.js":126,"global/document":1,"global/window":2}],108:[function(_dereq_,module,exports){ /** * @file text-track-cue-list.js */ @@ -13473,7 +14315,7 @@ TextTrackCueList.prototype.getCueById = function (id) { exports['default'] = TextTrackCueList; module.exports = exports['default']; -},{"../utils/browser.js":104,"global/document":1}],98:[function(_dereq_,module,exports){ +},{"../utils/browser.js":115,"global/document":1}],109:[function(_dereq_,module,exports){ /** * @file text-track-display.js */ @@ -13558,7 +14400,7 @@ var TextTrackDisplay = (function (_Component) { // 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']) { + if (player.tech_ && player.tech_['featuresNativeTextTracks']) { this.hide(); return; } @@ -13589,7 +14431,7 @@ var TextTrackDisplay = (function (_Component) { */ TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() { - if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) { + if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) { this.hide(); } else { this.show(); @@ -13744,7 +14586,7 @@ _component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay); exports['default'] = TextTrackDisplay; module.exports = exports['default']; -},{"../component":48,"../menu/menu-button.js":84,"../menu/menu-item.js":85,"../menu/menu.js":86,"../utils/fn.js":109,"global/document":1,"global/window":2}],99:[function(_dereq_,module,exports){ +},{"../component":58,"../menu/menu-button.js":95,"../menu/menu-item.js":96,"../menu/menu.js":97,"../utils/fn.js":120,"global/document":1,"global/window":2}],110:[function(_dereq_,module,exports){ /** * @file text-track-enums.js * @@ -13777,7 +14619,7 @@ var TextTrackKind = { exports.TextTrackMode = TextTrackMode; exports.TextTrackKind = TextTrackKind; -},{}],100:[function(_dereq_,module,exports){ +},{}],111:[function(_dereq_,module,exports){ /** * Utilities for capturing text track state and re-creating tracks * based on a capture. @@ -13864,7 +14706,7 @@ var jsonToTextTracks = function jsonToTextTracks(json, tech) { exports['default'] = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ }; module.exports = exports['default']; -},{}],101:[function(_dereq_,module,exports){ +},{}],112:[function(_dereq_,module,exports){ /** * @file text-track-list.js */ @@ -14009,7 +14851,7 @@ TextTrackList.prototype.getTrackById = function (id) { exports['default'] = TextTrackList; module.exports = exports['default']; -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"global/document":1}],102:[function(_dereq_,module,exports){ +},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"global/document":1}],113:[function(_dereq_,module,exports){ /** * @file text-track-settings.js */ @@ -14120,7 +14962,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Get texttrack settings + * Get texttrack settings * Settings are * .vjs-edge-style * .vjs-font-family @@ -14129,9 +14971,9 @@ var TextTrackSettings = (function (_Component) { * .vjs-bg-color * .vjs-bg-opacity * .window-color - * .vjs-window-opacity + * .vjs-window-opacity * - * @return {Object} + * @return {Object} * @method getValues */ @@ -14168,7 +15010,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Set texttrack settings + * Set texttrack settings * Settings are * .vjs-edge-style * .vjs-font-family @@ -14177,7 +15019,7 @@ var TextTrackSettings = (function (_Component) { * .vjs-bg-color * .vjs-bg-opacity * .window-color - * .vjs-window-opacity + * .vjs-window-opacity * * @param {Object} values Object with texttrack setting values * @method setValues @@ -14205,7 +15047,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Restore texttrack settings + * Restore texttrack settings * * @method restoreSettings */ @@ -14226,7 +15068,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Save texttrack settings to local storage + * Save texttrack settings to local storage * * @method saveSettings */ @@ -14247,7 +15089,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Update display of texttrack settings + * Update display of texttrack settings * * @method updateDisplay */ @@ -14301,7 +15143,7 @@ function captionOptionsMenuTemplate() { exports['default'] = TextTrackSettings; module.exports = exports['default']; -},{"../component":48,"../utils/events.js":108,"../utils/fn.js":109,"../utils/log.js":112,"global/window":2,"safe-json-parse/tuple":45}],103:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/events.js":119,"../utils/fn.js":120,"../utils/log.js":123,"global/window":2,"safe-json-parse/tuple":48}],114:[function(_dereq_,module,exports){ /** * @file text-track.js */ @@ -14349,9 +15191,11 @@ var _globalWindow = _dereq_('global/window'); var _globalWindow2 = _interopRequireDefault(_globalWindow); -var _xhrJs = _dereq_('../xhr.js'); +var _utilsUrlJs = _dereq_('../utils/url.js'); -var _xhrJs2 = _interopRequireDefault(_xhrJs); +var _xhr = _dereq_('xhr'); + +var _xhr2 = _interopRequireDefault(_xhr); /* * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack @@ -14596,7 +15440,16 @@ var parseCues = function parseCues(srcContent, track) { }; var loadTrack = function loadTrack(src, track) { - _xhrJs2['default'](src, Fn.bind(this, function (err, response, responseBody) { + var opts = { + uri: src + }; + + var crossOrigin = _utilsUrlJs.isCrossOrigin(src); + if (crossOrigin) { + opts.cors = crossOrigin; + } + + _xhr2['default'](opts, Fn.bind(this, function (err, response, responseBody) { if (err) { return _utilsLogJs2['default'].error(err, response); } @@ -14643,7 +15496,7 @@ var indexOf = function indexOf(searchElement, fromIndex) { exports['default'] = TextTrack; module.exports = exports['default']; -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"../utils/guid.js":111,"../utils/log.js":112,"../xhr.js":119,"./text-track-cue-list":97,"./text-track-enums":99,"global/document":1,"global/window":2}],104:[function(_dereq_,module,exports){ +},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"../utils/guid.js":122,"../utils/log.js":123,"../utils/url.js":128,"./text-track-cue-list":108,"./text-track-enums":110,"global/document":1,"global/window":2,"xhr":50}],115:[function(_dereq_,module,exports){ /** * @file browser.js */ @@ -14732,7 +15585,7 @@ exports.TOUCH_ENABLED = TOUCH_ENABLED; var BACKGROUND_SIZE_SUPPORTED = ('backgroundSize' in _globalDocument2['default'].createElement('video').style); exports.BACKGROUND_SIZE_SUPPORTED = BACKGROUND_SIZE_SUPPORTED; -},{"global/document":1,"global/window":2}],105:[function(_dereq_,module,exports){ +},{"global/document":1,"global/window":2}],116:[function(_dereq_,module,exports){ /** * @file buffer.js */ @@ -14781,7 +15634,7 @@ function bufferedPercent(buffered, duration) { return bufferedDuration / duration; } -},{"./time-ranges.js":115}],106:[function(_dereq_,module,exports){ +},{"./time-ranges.js":126}],117:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -14852,7 +15705,7 @@ exports['default'] = function (target) { module.exports = exports['default']; -},{"./log.js":112}],107:[function(_dereq_,module,exports){ +},{"./log.js":123}],118:[function(_dereq_,module,exports){ /** * @file dom.js */ @@ -14873,11 +15726,16 @@ exports.getElAttributes = getElAttributes; exports.blockTextSelection = blockTextSelection; exports.unblockTextSelection = unblockTextSelection; exports.findElPosition = findElPosition; +exports.getPointerPosition = getPointerPosition; + +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 ', '.']); 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; } + var _globalDocument = _dereq_('global/document'); var _globalDocument2 = _interopRequireDefault(_globalDocument); @@ -14890,6 +15748,14 @@ var _guidJs = _dereq_('./guid.js'); var Guid = _interopRequireWildcard(_guidJs); +var _logJs = _dereq_('./log.js'); + +var _logJs2 = _interopRequireDefault(_logJs); + +var _tsml = _dereq_('tsml'); + +var _tsml2 = _interopRequireDefault(_tsml); + /** * Shorthand for document.getElementById() * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs. @@ -14919,27 +15785,29 @@ function getEl(id) { 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 = _globalDocument2['default'].createElement(tagName); Object.getOwnPropertyNames(properties).forEach(function (propName) { var val = properties[propName]; - // Not remembering why we were checking for dash - // but using setAttribute means you have to use getAttribute - - // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin. - // The additional check for "role" is because the default method for adding attributes does not - // add the attribute "role". My guess is because it's not a valid attribute in some namespaces, although - // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs. - // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem. + // 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') { + _logJs2['default'].warn(_tsml2['default'](_templateObject, propName, val)); el.setAttribute(propName, val); } else { el[propName] = val; } }); + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + var val = attributes[attrName]; + el.setAttribute(attrName, attributes[attrName]); + }); + return el; } @@ -15237,7 +16105,40 @@ function findElPosition(el) { }; } -},{"./guid.js":111,"global/document":1,"global/window":2}],108:[function(_dereq_,module,exports){ +/** + * 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. + * + * @param {Element} el Element on which to get the pointer position on + * @param {Event} event Event object + * @return {Object=} position This object will have x and y coordinates corresponding to the mouse position + * @metho getPointerPosition + */ + +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; +} + +},{"./guid.js":122,"./log.js":123,"global/document":1,"global/window":2,"tsml":49}],119:[function(_dereq_,module,exports){ /** * @file events.js * @@ -15512,7 +16413,8 @@ function fixEvent(event) { 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 - if (key !== 'layerX' && key !== 'layerY' && key !== '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)) { @@ -15537,6 +16439,7 @@ function fixEvent(event) { old.preventDefault(); } event.returnValue = false; + old.returnValue = false; event.defaultPrevented = true; }; @@ -15548,6 +16451,7 @@ function fixEvent(event) { old.stopPropagation(); } event.cancelBubble = true; + old.cancelBubble = true; event.isPropagationStopped = returnTrue; }; @@ -15642,7 +16546,7 @@ function _handleMultipleEvents(fn, elem, types, callback) { }); } -},{"./dom.js":107,"./guid.js":111,"global/document":1,"global/window":2}],109:[function(_dereq_,module,exports){ +},{"./dom.js":118,"./guid.js":122,"global/document":1,"global/window":2}],120:[function(_dereq_,module,exports){ /** * @file fn.js */ @@ -15686,7 +16590,7 @@ var bind = function bind(context, fn, uid) { }; exports.bind = bind; -},{"./guid.js":111}],110:[function(_dereq_,module,exports){ +},{"./guid.js":122}],121:[function(_dereq_,module,exports){ /** * @file format-time.js * @@ -15736,7 +16640,7 @@ function formatTime(seconds) { exports['default'] = formatTime; module.exports = exports['default']; -},{}],111:[function(_dereq_,module,exports){ +},{}],122:[function(_dereq_,module,exports){ /** * @file guid.js * @@ -15753,7 +16657,7 @@ var _guid = 1; /** * Get the next unique ID * - * @return {String} + * @return {String} * @function newGUID */ @@ -15761,7 +16665,7 @@ function newGUID() { return _guid++; } -},{}],112:[function(_dereq_,module,exports){ +},{}],123:[function(_dereq_,module,exports){ /** * @file log.js */ @@ -15851,7 +16755,7 @@ function _logType(type, args) { exports['default'] = log; module.exports = exports['default']; -},{"global/window":2}],113:[function(_dereq_,module,exports){ +},{"global/window":2}],124:[function(_dereq_,module,exports){ /** * @file merge-options.js */ @@ -15922,7 +16826,7 @@ function mergeOptions() { module.exports = exports['default']; -},{"lodash-compat/object/merge":37}],114:[function(_dereq_,module,exports){ +},{"lodash-compat/object/merge":40}],125:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -15950,7 +16854,18 @@ var setTextContent = function setTextContent(el, content) { }; exports.setTextContent = setTextContent; -},{"global/document":1}],115:[function(_dereq_,module,exports){ +},{"global/document":1}],126:[function(_dereq_,module,exports){ +'use strict'; + +exports.__esModule = true; +exports.createTimeRanges = createTimeRanges; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _logJs = _dereq_('./log.js'); + +var _logJs2 = _interopRequireDefault(_logJs); + /** * @file time-ranges.js * @@ -15959,19 +16874,25 @@ exports.setTextContent = setTextContent; * return the start and end times for a range * TimeRanges are returned by the buffered() method * - * @param {Number} start Start time in seconds - * @param {Number} end End time in seconds - * @return {Object} Fake TimeRange object + * @param {(Number|Array)} Start of a single range or an array of ranges + * @param {Number} End of a single range * @private - * @method createTimeRange + * @method createTimeRanges */ -'use strict'; -exports.__esModule = true; -exports.createTimeRange = createTimeRange; +function createTimeRanges(start, end) { + if (Array.isArray(start)) { + return createTimeRangesObj(start); + } else if (start === undefined || end === undefined) { + return createTimeRangesObj(); + } + return createTimeRangesObj([[start, end]]); +} -function createTimeRange(_start, _end) { - if (_start === undefined && _end === undefined) { +exports.createTimeRange = createTimeRanges; + +function createTimeRangesObj(ranges) { + if (ranges === undefined || ranges.length === 0) { return { length: 0, start: function start() { @@ -15983,17 +16904,28 @@ function createTimeRange(_start, _end) { }; } return { - length: 1, - start: function start() { - return _start; - }, - end: function end() { - return _end; - } + length: ranges.length, + start: getRange.bind(null, 'start', 0, ranges), + end: getRange.bind(null, 'end', 1, ranges) }; } -},{}],116:[function(_dereq_,module,exports){ +function getRange(fnName, valueIndex, ranges, rangeIndex) { + if (rangeIndex === undefined) { + _logJs2['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 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 + ').'); + } +} + +},{"./log.js":123}],127:[function(_dereq_,module,exports){ /** * @file to-title-case.js * @@ -16014,7 +16946,7 @@ function toTitleCase(string) { exports["default"] = toTitleCase; module.exports = exports["default"]; -},{}],117:[function(_dereq_,module,exports){ +},{}],128:[function(_dereq_,module,exports){ /** * @file url.js */ @@ -16028,6 +16960,10 @@ var _globalDocument = _dereq_('global/document'); var _globalDocument2 = _interopRequireDefault(_globalDocument); +var _globalWindow = _dereq_('global/window'); + +var _globalWindow2 = _interopRequireDefault(_globalWindow); + /** * Resolve and parse the elements of a URL * @@ -16122,9 +17058,31 @@ var getFileExtension = function getFileExtension(path) { return ''; }; -exports.getFileExtension = getFileExtension; -},{"global/document":1}],118:[function(_dereq_,module,exports){ +exports.getFileExtension = getFileExtension; +/** + * 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 = function isCrossOrigin(url) { + var urlInfo = parseUrl(url); + var winLoc = _globalWindow2['default'].location; + + // 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; +}; +exports.isCrossOrigin = isCrossOrigin; + +},{"global/document":1,"global/window":2}],129:[function(_dereq_,module,exports){ /** * @file video.js */ @@ -16176,6 +17134,10 @@ var _utilsFnJs = _dereq_('./utils/fn.js'); var Fn = _interopRequireWildcard(_utilsFnJs); +var _tracksTextTrackJs = _dereq_('./tracks/text-track.js'); + +var _tracksTextTrackJs2 = _interopRequireDefault(_tracksTextTrackJs); + var _objectAssign = _dereq_('object.assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); @@ -16190,10 +17152,6 @@ var _utilsLogJs = _dereq_('./utils/log.js'); var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); -var _xhrJs = _dereq_('./xhr.js'); - -var _xhrJs2 = _interopRequireDefault(_xhrJs); - var _utilsDomJs = _dereq_('./utils/dom.js'); var Dom = _interopRequireWildcard(_utilsDomJs); @@ -16206,9 +17164,9 @@ var _utilsUrlJs = _dereq_('./utils/url.js'); var Url = _interopRequireWildcard(_utilsUrlJs); -var _extendsJs = _dereq_('./extends.js'); +var _extendJs = _dereq_('./extend.js'); -var _extendsJs2 = _interopRequireDefault(_extendsJs); +var _extendJs2 = _interopRequireDefault(_extendJs); var _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge'); @@ -16218,6 +17176,10 @@ var _utilsCreateDeprecationProxyJs = _dereq_('./utils/create-deprecation-proxy.j var _utilsCreateDeprecationProxyJs2 = _interopRequireDefault(_utilsCreateDeprecationProxyJs); +var _xhr = _dereq_('xhr'); + +var _xhr2 = _interopRequireDefault(_xhr); + // Include the built-in techs var _techHtml5Js = _dereq_('./tech/html5.js'); @@ -16298,10 +17260,13 @@ var videojs = function videojs(id, options, ready) { }; // Add default styles -var style = stylesheet.createStyleElement('vjs-styles-defaults'); -var head = _globalDocument2['default'].querySelector('head'); -head.insertBefore(style, head.firstChild); -stylesheet.setTextContent(style, '\n .video-js {\n width: 300px;\n height: 150px;\n'); +var style = _globalDocument2['default'].querySelector('.vjs-styles-defaults'); +if (!style) { + style = stylesheet.createStyleElement('vjs-styles-defaults'); + var head = _globalDocument2['default'].querySelector('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) @@ -16312,7 +17277,7 @@ setup.autoSetupTimeout(1, videojs); * * @type {String} */ -videojs.VERSION = '5.0.0-rc.72'; +videojs.VERSION = '5.0.0'; /** * The global options object. These are the settings that take effect @@ -16374,8 +17339,8 @@ videojs.getComponent = _component2['default'].getComponent; * ```js * // Get a component to subclass * var VjsButton = videojs.getComponent('Button'); - * // Subclass the component (see 'extends' doc for more info) - * var MySpecialButton = videojs.extends(VjsButton, {}); + * // 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 @@ -16412,7 +17377,7 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; /** * Subclass an existing class - * Mimics ES6 subclassing with the `extends` keyword + * Mimics ES6 subclassing with the `extend` keyword * ```js * // Create a basic javascript 'class' * function MyClass(name){ @@ -16425,7 +17390,7 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; * }; * // Subclass the exisitng class and change the name * // when initializing - * var MySubClass = videojs.extends(MyClass, { + * var MySubClass = videojs.extend(MyClass, { * constructor: function(name) { * // Call the super class constructor for the subclass * MyClass.call(this, name) @@ -16441,9 +17406,9 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; * Optionally including a `constructor` function * @return {Function} The newly created subclass * @mixes videojs - * @method extends + * @method extend */ -videojs['extends'] = _extendsJs2['default']; +videojs.extend = _extendJs2['default']; /** * Merge two options objects recursively @@ -16573,12 +17538,12 @@ videojs.log = _utilsLogJs2['default']; /** * Creates an emulated TimeRange object. * - * @param {Number} start Start time in seconds + * @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 = _utilsTimeRangesJs.createTimeRange; +videojs.createTimeRange = videojs.createTimeRanges = _utilsTimeRangesJs.createTimeRanges; /** * Format seconds as a time string, H:MM:SS or M:SS @@ -16592,37 +17557,6 @@ videojs.createTimeRange = _utilsTimeRangesJs.createTimeRange; */ videojs.formatTime = _utilsFormatTimeJs2['default']; -/** - * Simple http request for retrieving external files (e.g. text tracks) - * - * ##### Example - * - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * - * - * API is modeled after the Raynos/xhr. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @returns {Object} The request - */ -videojs.xhr = _xhrJs2['default']; - /** * Resolve and parse the elements of a URL * @@ -16632,6 +17566,15 @@ videojs.xhr = _xhrJs2['default']; */ 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. * @@ -16683,6 +17626,36 @@ videojs.off = Events.off; */ 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 = _tracksTextTrackJs2['default']; + // REMOVING: We probably should add this to the migration plugin // // Expose but deprecate the window[componentName] method for accessing components // Object.getOwnPropertyNames(Component.components).forEach(function(name){ @@ -16720,198 +17693,8 @@ if (typeof define === 'function' && define['amd']) { exports['default'] = videojs; module.exports = exports['default']; -},{"../../src/js/utils/merge-options.js":113,"./component":48,"./event-target":79,"./extends.js":80,"./player":87,"./plugins.js":88,"./setup":90,"./tech/flash.js":93,"./tech/html5.js":94,"./utils/browser.js":104,"./utils/create-deprecation-proxy.js":106,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/format-time.js":110,"./utils/log.js":112,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/url.js":117,"./xhr.js":119,"global/document":1,"lodash-compat/object/merge":37,"object.assign":40}],119:[function(_dereq_,module,exports){ -/** - * @file xhr.js - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsUrlJs = _dereq_('./utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/* - * Simple http request for retrieving external files (e.g. text tracks) - * ##### Example - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * ///////////// - * API is modeled after the Raynos/xhr, which we hope to use after - * getting browserify implemented. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @return {Object} The request - * @method xhr - */ -var xhr = function xhr(options, callback) { - var abortTimeout = undefined; - - // If options is a string it's the url - if (typeof options === 'string') { - options = { - uri: options - }; - } - - // Merge with default options - options = _utilsMergeOptionsJs2['default']({ - method: 'GET', - timeout: 45 * 1000 - }, options); - - callback = callback || function () {}; - - var XHR = _globalWindow2['default'].XMLHttpRequest; - - if (typeof XHR === 'undefined') { - // Shim XMLHttpRequest for older IEs - XHR = function () { - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.6.0'); - } catch (e) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.3.0'); - } catch (f) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP'); - } catch (g) {} - throw new Error('This browser does not support XMLHttpRequest.'); - }; - } - - var request = new XHR(); - // Store a reference to the url on the request instance - request.uri = options.uri; - - var urlInfo = Url.parseUrl(options.uri); - var winLoc = _globalWindow2['default'].location; - - var successHandler = function successHandler() { - _globalWindow2['default'].clearTimeout(abortTimeout); - callback(null, request, request.response || request.responseText); - }; - - var errorHandler = function errorHandler(err) { - _globalWindow2['default'].clearTimeout(abortTimeout); - - if (!err || typeof err === 'string') { - err = new Error(err || 'XHR Failed with a response of: ' + (request && (request.response || request.responseText))); - } - - callback(err, request); - }; - - // Check if url is for another domain/origin - // IE8 doesn't know location.origin, so we won't rely on it here - var crossOrigin = urlInfo.protocol + urlInfo.host !== winLoc.protocol + winLoc.host; - - // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available - // 'withCredentials' is only available in XMLHTTPRequest2 - // Also XDomainRequest has a lot of gotchas, so only use if cross domain - if (crossOrigin && _globalWindow2['default'].XDomainRequest && !('withCredentials' in request)) { - request = new _globalWindow2['default'].XDomainRequest(); - request.onload = successHandler; - request.onerror = errorHandler; - // These blank handlers need to be set to fix ie9 - // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/ - request.onprogress = function () {}; - request.ontimeout = function () {}; - - // XMLHTTPRequest - } else { - (function () { - var fileUrl = urlInfo.protocol === 'file:' || winLoc.protocol === 'file:'; - - request.onreadystatechange = function () { - if (request.readyState === 4) { - if (request.timedout) { - return errorHandler('timeout'); - } - - if (request.status === 200 || fileUrl && request.status === 0) { - successHandler(); - } else { - errorHandler(); - } - } - }; - - if (options.timeout) { - abortTimeout = _globalWindow2['default'].setTimeout(function () { - if (request.readyState !== 4) { - request.timedout = true; - request.abort(); - } - }, options.timeout); - } - })(); - } - - // open the connection - try { - // Third arg is async, or ignored by XDomainRequest - request.open(options.method || 'GET', options.uri, true); - } catch (err) { - return errorHandler(err); - } - - // withCredentials only supported by XMLHttpRequest2 - if (options.withCredentials) { - request.withCredentials = true; - } - - if (options.responseType) { - request.responseType = options.responseType; - } - - // send the request - try { - request.send(); - } catch (err) { - return errorHandler(err); - } - - return request; -}; - -exports['default'] = xhr; -module.exports = exports['default']; - -},{"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/url.js":117,"global/window":2}]},{},[118])(118) +},{"../../src/js/utils/merge-options.js":124,"./component":58,"./event-target":90,"./extend.js":91,"./player":98,"./plugins.js":99,"./setup":101,"./tech/flash.js":104,"./tech/html5.js":105,"./tracks/text-track.js":114,"./utils/browser.js":115,"./utils/create-deprecation-proxy.js":117,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/format-time.js":121,"./utils/log.js":123,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/url.js":128,"global/document":1,"lodash-compat/object/merge":40,"object.assign":43,"xhr":50}]},{},[129])(129) }); -//# sourceMappingURL=video.js.map +//# sourceMappingURL=video.js.map \ No newline at end of file diff --git a/node_modules/video.js/dist/alt/video.novtt.min.js b/node_modules/video.js/dist/alt/video.novtt.min.js index fb956a2..414cc35 100644 --- a/node_modules/video.js/dist/alt/video.novtt.min.js +++ b/node_modules/video.js/dist/alt/video.novtt.min.js @@ -1,16 +1,16 @@ /** * @license - * Video.js 5.0.0-rc.72 + * Video.js 5.0.0 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * */ -!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;g2?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-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],21:[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":30,"./isArrayLike":18,"./isIndex":20}],22:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],23:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],24:[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=[];++m0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d2?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:42,"object-keys":43}],42:[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)}},{}],43:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=!{toString:null}.propertyIsEnumerable("toString"),h=function(){}.propertyIsEnumerable("prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=function(a){var b=a.constructor;return b&&b.prototype===a},k={$window:!0,$console:!0,$parent:!0,$self:!0,$frames:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0},l=function(){if("undefined"==typeof window)return!1;for(var a in window)if(!k["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{j(window[a])}catch(b){return!0}return!1}(),m=function(a){if("undefined"==typeof window&&!l)return j(a);try{return j(a)}catch(b){return!1}},n=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),j=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!j)throw new TypeError("Object.keys called on a non-object");var n=h&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o0)for(var p=0;p=0&&"[object Function]"===c.call(a.callee)),d}},{}],45:[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},{}],46:[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("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 g=a("./button.js"),h=d(g),i=a("./component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(h["default"]);k.prototype.controlText_="Play Video",j["default"].registerComponent("BigPlayButton",k),c["default"]=k,b.exports=c["default"]},{"./button.js":47,"./component.js":48}],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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=a("./utils/events.js"),m=d(l),n=a("./utils/fn.js"),o=d(n),p=a("global/document"),q=e(p),r=a("object.assign"),s=e(r),t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.emitTapEvents(),this.on("tap",this.handleClick),this.on("click",this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur)}return g(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];c=s["default"]({className:this.buildCSSClass(),role:"button",type:"button","aria-live":"polite",tabIndex:0},c);var d=a.prototype.createEl.call(this,b,c);return this.controlTextEl_=k.createEl("span",{className:"vjs-control-text"}),d.appendChild(this.controlTextEl_),this.controlText(this.controlText_),d},b.prototype.controlText=function(a){return a?(this.controlText_=a,this.controlTextEl_.innerHTML=this.localize(this.controlText_),this):this.controlText_||"Need Text"},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){m.on(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(a){(32===a.which||13===a.which)&&(a.preventDefault(),this.handleClick())},b.prototype.handleBlur=function(){m.off(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b}(i["default"]);i["default"].registerComponent("Button",t),c["default"]=t,b.exports=c["default"]},{"./component":48,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"global/document":1,"object.assign":40}],48:[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("object.assign"),v=e(u),w=a("./utils/merge-options.js"),x=e(w),y=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=x["default"]({},this.options_),c=this.options_=x["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_=x["default"](this.options_,a),this.options_):this.options_},a.prototype.el=function(){return this.el_},a.prototype.createEl=function(a,b){return j.createEl(a,b)},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=void 0,e=void 0;if("string"==typeof b){e=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 f=c.componentClass||t["default"](e);c.name=e;var g=a.getComponent(f);d=new g(this.player_||this,c)}else d=b;return this.children_.push(d),"function"==typeof d.id&&(this.childIndex_[d.id()]=d),e=e||d.name&&d.name(),e&&(this.childNameIndex_[e]=d),"function"==typeof d.el&&d.el()&&this.contentEl().appendChild(d.el()),d},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 a=this,b=this.options_.children;b&&!function(){var c=a.options_,d=function(b,d){void 0!==c[b]&&(d=c[b]),d!==!1&&(d===!0&&(d={}),d.playerOptions=a.options_.playerOptions,a[b]=a.addChild(b,d))};if(Array.isArray(b))for(var e=0;e0&&(a.forEach(function(a){a.call(this)},this),this.readyQueue_=[]),this.trigger("ready")},1)},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.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.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b=v["default"]({},c.touches[0]),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.extends(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}();y.registerComponent("Component",y),c["default"]=y,b.exports=c["default"]},{"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/to-title-case.js":116,"global/window":2,"object.assign":40}],49:[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("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 g=a("../component.js"),h=d(g),i=a("./play-toggle.js"),j=(d(i),a("./time-controls/current-time-display.js")),k=(d(j),a("./time-controls/duration-display.js")),l=(d(k),a("./time-controls/time-divider.js")),m=(d(l),a("./time-controls/remaining-time-display.js")),n=(d(m),a("./live-display.js")),o=(d(n),a("./progress-control/progress-control.js")),p=(d(o),a("./fullscreen-toggle.js")),q=(d(p),a("./volume-control/volume-control.js")),r=(d(q),a("./volume-menu-button.js")),s=(d(r),a("./mute-toggle.js")),t=(d(s),a("./text-track-controls/chapters-button.js")),u=(d(t),a("./text-track-controls/subtitles-button.js")),v=(d(u),a("./text-track-controls/captions-button.js")),w=(d(v),a("./playback-rate-menu/playback-rate-menu-button.js")),x=(d(w),a("./spacer-controls/custom-control-spacer.js")),y=(d(x),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar"})},b}(h["default"]));y.prototype.options_={loadEvent:"play",children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","muteToggle","volumeControl","chaptersButton","subtitlesButton","captionsButton","fullscreenToggle"]},h["default"].registerComponent("ControlBar",y),c["default"]=y,b.exports=c["default"]},{"../component.js":48,"./fullscreen-toggle.js":50,"./live-display.js":51,"./mute-toggle.js":52,"./play-toggle.js":53,"./playback-rate-menu/playback-rate-menu-button.js":54,"./progress-control/progress-control.js":58,"./spacer-controls/custom-control-spacer.js":60,"./text-track-controls/captions-button.js":63, -"./text-track-controls/chapters-button.js":64,"./text-track-controls/subtitles-button.js":67,"./time-controls/current-time-display.js":70,"./time-controls/duration-display.js":71,"./time-controls/remaining-time-display.js":72,"./time-controls/time-divider.js":73,"./volume-control/volume-control.js":75,"./volume-menu-button.js":77}],50:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.isFullscreen()?(this.player_.exitFullscreen(),this.controlText("Fullscreen")):(this.player_.requestFullscreen(),this.controlText("Non-Fullscreen"))},b}(h["default"]);k.prototype.controlText_="Fullscreen",j["default"].registerComponent("FullscreenToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":47,"../component.js":48}],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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-live-display",innerHTML:''+this.localize("Stream Type")+""+this.localize("LIVE"),"aria-live":"off"}),b.appendChild(this.contentEl_),b},b}(i["default"]);i["default"].registerComponent("LiveDisplay",l),c["default"]=l,b.exports=c["default"]},{"../component":48,"../utils/dom.js":107}],52:[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("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=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.update),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){this.update(),c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return g(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",d=this.localize(c);this.controlText()!==d&&this.controlText(d);for(var e=0;4>e;e++)m.removeElClass(this.el_,"vjs-vol-"+e);m.addElClass(this.el_,"vjs-vol-"+b)},b}(i["default"]);n.prototype.controlText_="Mute",k["default"].registerComponent("MuteToggle",n),c["default"]=n,b.exports=c["default"]},{"../button":47,"../component":48,"../utils/dom.js":107}],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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.on(c,"play",this.handlePlay),this.on(c,"pause",this.handlePause)}return f(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}(h["default"]);k.prototype.controlText_="Play",j["default"].registerComponent("PlayToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":47,"../component.js":48}],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("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-button.js"),i=e(h),j=a("../../menu/menu.js"),k=e(j),l=a("./playback-rate-menu-item.js"),m=e(l),n=a("../../component.js"),o=e(n),p=a("../../utils/dom.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateVisibility(),this.updateLabel(),this.on(c,"loadstart",this.updateVisibility),this.on(c,"ratechange",this.updateLabel)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=q.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 k["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new m["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;da){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}(i["default"]);r.prototype.controlText_="Playback Rate",o["default"].registerComponent("PlaybackRateMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu-button.js":84,"../../menu/menu.js":86,"../../utils/dom.js":107,"./playback-rate-menu-item.js":55}],55:[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("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 g=a("../../menu/menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b);var f=d.rate,g=parseFloat(f,10);d.label=f,d.selected=1===g,a.call(this,c,d),this.label=f,this.rate=g,this.on(c,"ratechange",this.update)}return f(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}(h["default"]);k.prototype.contentElType="button",j["default"].registerComponent("PlaybackRateMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu-item.js":85}],56:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"progress",this.update)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:''+this.localize("Loaded")+": 0%"})},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;fa.length;f--)this.el_.removeChild(d[f-1])},b}(i["default"]);i["default"].registerComponent("LoadProgressBar",l),c["default"]=l,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107}],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("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=e(h),j=a("../../utils/fn.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateDataAttr),c.ready(k.bind(this,this.updateDataAttr))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress",innerHTML:''+this.localize("Progress")+": 0%"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",m["default"](a,this.player_.duration()))},b}(i["default"]);i["default"].registerComponent("PlayProgressBar",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/fn.js":109,"../../utils/format-time.js":110}],58:[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("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 g=a("../../component.js"),h=d(g),i=a("./seek-bar.js"),j=(d(i),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:{seekBar:{}}},h["default"].registerComponent("ProgressControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":48,"./seek-bar.js":59}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./load-progress-bar.js"),m=(e(l),a("./play-progress-bar.js")),n=(e(m),a("../../utils/fn.js")),o=d(n),p=a("../../utils/format-time.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateARIAAttributes),c.ready(o.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})},b.prototype.updateARIAAttributes=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),this.el_.setAttribute("aria-valuetext",q["default"](a,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}(i["default"]);r.prototype.options_={children:{loadProgressBar:{},playProgressBar:{}},barName:"playProgressBar"},r.prototype.playerEvent="timeupdate",k["default"].registerComponent("SeekBar",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"../../utils/format-time.js":110,"./load-progress-bar.js":56,"./play-progress-bar.js":57}],60:[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("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 g=a("./spacer.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){return a.prototype.createEl.call(this,{className:this.buildCSSClass()})},b}(h["default"]);j["default"].registerComponent("CustomControlSpacer",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./spacer.js":61}],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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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}(h["default"]);h["default"].registerComponent("Spacer",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],62:[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("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 g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" settings","default":!1,mode:"disabled"},a.call(this,c,d),this.addClass("vjs-texttrack-settings")}return f(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show()},b}(h["default"]);j["default"].registerComponent("CaptionSettingsMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-menu-item.js":69}],63:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=a("./caption-settings-menu-item.js"),l=d(k),m=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Captions Menu")}return f(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 l["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(h["default"]);m.prototype.kind_="captions",m.prototype.controlText_="Captions",j["default"].registerComponent("CaptionsButton",m),c["default"]=m,b.exports=c["default"]},{"../../component.js":48,"./caption-settings-menu-item.js":62,"./text-track-button.js":68}],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("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=e(h),j=a("../../component.js"),k=e(j),l=a("./text-track-menu-item.js"),m=e(l),n=a("./chapters-track-menu-item.js"),o=e(n),p=a("../../menu/menu.js"),q=e(p),r=a("../../utils/dom.js"),s=d(r),t=a("../../utils/fn.js"),u=d(t),v=a("../../utils/to-title-case.js"),w=e(v),x=a("global/window"),y=e(x),z=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),this.el_.setAttribute("aria-label","Chapters Menu")}return g(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;cd;d++){var f=a[d];if(f.kind===this.kind_){if(f.cues){b=f;break}f.mode="hidden",y["default"].setTimeout(u.bind(this,function(){this.createMenu()}),100)}}var g=this.menu;if(void 0===g&&(g=new q["default"](this.player_),g.contentEl().appendChild(s.createEl("li",{className:"vjs-menu-title",innerHTML:w["default"](this.kind_),tabIndex:-1}))),b){for(var h=b.cues,i=void 0,d=0,e=h.length;e>d;d++){i=h[d];var j=new o["default"](this.player_,{track:b,cue:i});c.push(j),g.addChild(j)}this.addChild(g)}return this.items.length>0&&this.show(),g},b}(i["default"]);z.prototype.kind_="chapters",z.prototype.controlText_="Chapters",k["default"].registerComponent("ChaptersButton",z),c["default"]=z,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu.js":86,"../../utils/dom.js":107,"../../utils/fn.js":109,"../../utils/to-title-case.js":116,"./chapters-track-menu-item.js":65,"./text-track-button.js":68,"./text-track-menu-item.js":69,"global/window":2}],65:[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("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=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=function(a){function b(c,d){f(this,b);var e=d.track,g=d.cue,h=c.currentTime();d.label=g.text,d.selected=g.startTime<=h&&hc;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(h["default"]);j["default"].registerComponent("OffTextTrackMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-menu-item.js":69}],67:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Subtitles Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(h["default"]);k.prototype.kind_="subtitles",k.prototype.controlText_="Subtitles",j["default"].registerComponent("SubtitlesButton",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-button.js":68}],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("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-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./text-track-menu-item.js"),o=e(n),p=a("./off-text-track-menu-item.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=this.player_.textTracks();if(this.items.length<=1&&this.hide(),e){var g=m.bind(this,this.update);e.addEventListener("removetrack",g),e.addEventListener("addtrack",g),this.player_.on("dispose",function(){e.removeEventListener("removetrack",g),e.removeEventListener("addtrack",g)})}}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new q["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;cCurrent Time 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=m["default"](a,this.player_.duration());this.contentEl_.innerHTML=''+b+" "+c},b}(i["default"]);i["default"].registerComponent("CurrentTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent),this.on(c,"loadedmetadata",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-duration-display",innerHTML:''+this.localize("Duration Time")+" 0:00","aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a){var b=this.localize("Duration Time"),c=m["default"](a);this.contentEl_.innerHTML=''+b+" "+c}},b}(i["default"]);i["default"].registerComponent("DurationDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-remaining-time-display",innerHTML:''+this.localize("Remaining Time")+" -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=m["default"](this.player_.remainingTime());this.contentEl_.innerHTML=''+a+" -"+b}},b}(i["default"]);i["default"].registerComponent("RemainingTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],73:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"
/
"})},b}(h["default"]);h["default"].registerComponent("TimeDivider",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./volume-level.js"),o=(e(n),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.updateARIAAttributes),c.ready(m.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})},b.prototype.handleMouseMove=function(a){this.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(a))},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){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}(i["default"]));o.prototype.options_={children:{volumeLevel:{}},barName:"volumeLevel"},o.prototype.playerEvent="volumechange",k["default"].registerComponent("VolumeBar",o),c["default"]=o,b.exports=c["default"]},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"./volume-level.js":76}],75:[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("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 g=a("../../component.js"),h=d(g),i=a("./volume-bar.js"),j=(d(i),function(a){function b(c,d){e(this,b),a.call(this,c,d),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:{volumeBar:{}}},h["default"].registerComponent("VolumeControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":48,"./volume-bar.js":74}],76:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:''})},b}(h["default"]);h["default"].registerComponent("VolumeLevel",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],77:[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("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 g=a("../button.js"),h=(d(g),a("../component.js")),i=d(h),j=a("../menu/menu.js"),k=d(j),l=a("../menu/menu-button.js"),m=d(l),n=a("./mute-toggle.js"),o=d(n),p=a("./volume-control/volume-bar.js"),q=d(p),r=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),void 0===d.vertical&&(d.vertical=d.inline?!1:!0),d.volumeBar=d.volumeBar||{},d.volumeBar.vertical=!!d.vertical,a.call(this,c,d),this.on(c,"volumechange",this.volumeUpdate),this.on(c,"loadstart",this.volumeUpdate),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),this.addClass("vjs-menu-button")}return f(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.createMenu=function(){var a=new k["default"](this.player_,{contentElType:"div"}),b=new q["default"](this.player_,this.options_.volumeBar);return b.on("focus",function(){a.lockShowing()}),b.on("blur",function(){a.unlockShowing()}),a.addChild(b),a},b.prototype.handleClick=function(){o["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b}(m["default"]);r.prototype.volumeUpdate=o["default"].prototype.update,r.prototype.controlText_="Mute",i["default"].registerComponent("VolumeMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"../menu/menu-button.js":84,"../menu/menu.js":86,"./mute-toggle.js":52,"./volume-control/volume-bar.js":74}],78:[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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),this.on(c,"error",this.update)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-error-display"});return this.contentEl_=k.createEl("div"),b.appendChild(this.contentEl_),b},b.prototype.update=function(){this.player().error()&&(this.contentEl_.innerHTML=this.localize(this.player().error().message))},b}(i["default"]);i["default"].registerComponent("ErrorDisplay",l),c["default"]=l,b.exports=c["default"]},{"./component":48,"./utils/dom.js":107}],79:[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.prototype,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){f.one(this,a,b)},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,b.exports=c["default"]},{"./utils/events.js":108}],80:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./utils/log"),f=d(e),g=function(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&&(a.super_=b)},h=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"==typeof b?("function"==typeof b.init&&(f["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),g(c,a);for(var e in d)d.hasOwnProperty(e)&&(c.prototype[e]=d[e]);return c};c["default"]=h,b.exports=c["default"]},{"./utils/log":112}],81:[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;k1&&this.show()},b.prototype.createMenu=function(){var a=new m["default"](this.player_);if(this.options_.title&&a.contentEl().appendChild(o.createEl("li",{className:"vjs-menu-title",innerHTML:s["default"](this.options_.title),tabIndex:-1})),this.items=this.createItems(),this.items)for(var b=0;b0&&this.items[0].el().focus()},b.prototype.unpressButton=function(){this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-pressed",!1)},b}(i["default"]);k["default"].registerComponent("MenuButton",t),c["default"]=t,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/to-title-case.js":116,"./menu.js":86}],85:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=a("object.assign"),l=d(k),m=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.selected(d.selected)}return f(b,a),b.prototype.createEl=function(b,c){return a.prototype.createEl.call(this,"li",l["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},c))},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},b}(h["default"]);j["default"].registerComponent("MenuItem",m),c["default"]=m,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"object.assign":40}],86:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("../utils/fn.js"),m=d(l),n=a("../utils/events.js"),o=d(n),p=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",m.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=k.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_),o.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(i["default"]);i["default"].registerComponent("Menu",p),c["default"]=p,b.exports=c["default"]},{"../component.js":48,"../utils/dom.js":107,"../utils/events.js":108,"../utils/fn.js":109}],87:[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("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=e(h),j=a("global/document"),k=e(j),l=a("global/window"),m=e(l),n=a("./utils/events.js"),o=d(n),p=a("./utils/dom.js"),q=d(p),r=a("./utils/fn.js"),s=d(r),t=a("./utils/guid.js"),u=d(t),v=a("./utils/browser.js"),w=(d(v),a("./utils/log.js")),x=e(w),y=a("./utils/to-title-case.js"),z=e(y),A=a("./utils/time-ranges.js"),B=a("./utils/buffer.js"),C=a("./utils/stylesheet.js"),D=d(C),E=a("./fullscreen-api.js"),F=e(E),G=a("./media-error.js"),H=e(G),I=a("safe-json-parse/tuple"),J=e(I),K=a("object.assign"),L=e(K),M=a("./utils/merge-options.js"),N=e(M),O=a("./tracks/text-track-list-converter.js"),P=e(O),Q=a("./tech/loader.js"),R=(e(Q),a("./poster-image.js")),S=(e(R),a("./tracks/text-track-display.js")),T=(e(S),a("./loading-spinner.js")),U=(e(T),a("./big-play-button.js")),V=(e(U),a("./control-bar/control-bar.js")),W=(e(V),a("./error-display.js")),X=(e(W),a("./tracks/text-track-settings.js")),Y=(e(X),a("./tech/html5.js")),Z=(e(Y),function(a){function b(c,d,e){var g=this;if(f(this,b),c.id=c.id||"vjs_video_"+u.newGUID(),d=L["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,a.call(this,null,d,e),!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?");this.tag=c,this.tagAttributes=c&&q.getElAttributes(c),this.language(this.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),g.languages_=a}():this.languages_=b.prototype.options_.languages,this.cache_={},this.poster_=d.poster||"",this.controls_=!!d.controls,c.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var h=N["default"](this.options_);d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):x["default"].error("Unable to find plugin:",b)},g)}(),this.options_.playerOptions=h,this.initChildren(),this.isAudio("audio"===c.nodeName.toLowerCase()),this.addClass(this.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),b.players[this.id_]=this,this.userActive_=!0,this.reportUserActivity(),this.listenForUserActivity(),this.on("fullscreenchange",this.handleFullscreenChange),this.on("stageclick",this.handleStageClick)}return g(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&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=q.getElAttributes(c);Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),this.styleEl_=D.createStyleElement("vjs-styles-dimensions");var e=k["default"].querySelector(".vjs-styles-defaults"),f=k["default"].querySelector("head");return 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),c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),q.insertElFirst(c,b),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 x["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(){var a=void 0,b=void 0,c=void 0;c=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var d=c.split(":"),e=d[1]/d[0];a=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/e:this.videoWidth()||300,b=void 0!==this.height_?this.height_:a*e;var f=this.id()+"-dimensions";this.addClass(f),D.setTextContent(this.styleEl_,"\n ."+f+" {\n width: "+a+"px;\n height: "+b+"px;\n }\n\n ."+f+".vjs-fluid {\n padding-top: "+100*e+"%;\n }\n ")},b.prototype.loadTech=function(a,b){this.tech&&this.unloadTech(),"Html5"!==a&&this.tag&&(i["default"].getComponent("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName=a,this.isReady_=!1;var c=s.bind(this,function(){this.triggerReady()}),d=L["default"]({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:b,playerId:this.id(),techId:this.id()+"_"+a+"_api",textTracks:this.textTracks_,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&&(d.tag=this.tag),b&&(this.currentType_=b.type,b.src===this.cache_.src&&this.cache_.currentTime>0&&(d.startTime=this.cache_.currentTime),this.cache_.src=b.src);var e=i["default"].getComponent(a);this.tech=new e(d),P["default"].jsonToTextTracks(this.textTracksJson_||[],this.tech),this.on(this.tech,"ready",this.handleTechReady),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.onTextTrackChange),this.on(this.tech,"loadedmetadata",this.updateStyleEl_),this.usingNativeControls(this.techGet("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners(),this.tech.el().parentNode===this.el()||"Html5"===a&&this.tag||q.insertElFirst(this.tech.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null),this.tech.ready(c,!0)},b.prototype.unloadTech=function(){this.textTracks_=this.textTracks(),this.textTracksJson_=P["default"].textTracksToJson(this),this.isReady_=!1,this.tech.dispose(),this.tech=!1},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(){this.triggerReady(),this.cache_.volume&&this.techCall("setVolume",this.cache_.volume),this.tag&&this.options_.autoplay&&this.paused()&&(delete this.tag.poster,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(){this.addClass("vjs-waiting"),this.trigger("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"),1===this.bufferedPercent()&&this.trigger("loadedalldata")},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.updateDuration(),this.trigger("durationchange")},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.updateDuration=function(){var a=this.techGet("duration");a&&(0>a&&(a=1/0),this.duration(a),a===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"))},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&&a.code)},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.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.onTextTrackChange=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[a](b)}catch(c){throw x["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]?x["default"]("Video.js: "+a+" method not defined for "+this.techName+" playback technology.",b):"TypeError"===b.name?(x["default"]("Video.js: "+a+" unavailable on "+this.techName+" playback technology element.",b),this.tech.isReady_=!1):x["default"](b),b}},b.prototype.play=function(){return this.techCall("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},b.prototype.duration=function(a){return void 0!==a?(this.cache_.duration=parseFloat(a),this):(void 0===this.cache_.duration&&this.updateDuration(),this.cache_.duration||0)},b.prototype.remainingTime=function(){return this.duration()-this.currentTime()},b.prototype.buffered=function c(){var c=this.techGet("buffered");return c&&c.length||(c=A.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return B.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=F["default"];return this.isFullscreen(!0),a.requestFullscreen?(o.on(k["default"],a.fullscreenchange,s.bind(this,function b(){this.isFullscreen(k["default"][a.fullscreenElement]),this.isFullscreen()===!1&&o.off(k["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=F["default"];return this.isFullscreen(!1),a.requestFullscreen?k["default"][a.exitFullscreen]():this.tech.supportsFullScreen()?this.techCall("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=k["default"].documentElement.style.overflow,o.on(k["default"],"keydown",s.bind(this,this.fullWindowOnEscKey)),k["default"].documentElement.style.overflow="hidden",q.addElClass(k["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,o.off(k["default"],"keydown",this.fullWindowOnEscKey),k["default"].documentElement.style.overflow=this.docOrigOverflow,q.removeElClass(k["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.selectSource=function(a){for(var b=0,c=this.options_.techOrder;b0&&(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.textTracks=function(){return this.tech&&this.tech.textTracks()},b.prototype.remoteTextTracks=function(){return this.tech&&this.tech.remoteTextTracks()},b.prototype.addTextTrack=function(a,b,c){return this.tech&&this.tech.addTextTrack(a,b,c)},b.prototype.addRemoteTextTrack=function(a){return this.tech&&this.tech.addRemoteTextTrack(a)},b.prototype.removeRemoteTextTrack=function(a){this.tech&&this.tech.removeRemoteTextTrack(a)},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_=(""+a).toLowerCase(),this)},b.prototype.languages=function(){return N["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=N["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;ci;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(q.getElAttributes(k)):"track"===l&&b.tracks.push(q.getElAttributes(k))}return b},b}(i["default"]));Z.players={};var $=m["default"].navigator;Z.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{},errorDisplay:{},textTrackSettings:{}},language:k["default"].getElementsByTagName("html")[0].getAttribute("lang")||$.languages&&$.languages[0]||$.userLanguage||$.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."},Z.prototype.handleLoadedMetaData,Z.prototype.handleLoadedData,Z.prototype.handleLoadedAllData,Z.prototype.handleUserActive,Z.prototype.handleUserInactive,Z.prototype.handleTimeUpdate,Z.prototype.handleVolumeChange,Z.prototype.handleError,Z.prototype.flexNotSupported_=function(){var a=k["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},i["default"].registerComponent("Player",Z),c["default"]=Z,b.exports=c["default"]},{"./big-play-button.js":46,"./component.js":48,"./control-bar/control-bar.js":49,"./error-display.js":78,"./fullscreen-api.js":81,"./loading-spinner.js":82,"./media-error.js":83,"./poster-image.js":89,"./tech/html5.js":94,"./tech/loader.js":95,"./tracks/text-track-display.js":98,"./tracks/text-track-list-converter.js":100,"./tracks/text-track-settings.js":102,"./utils/browser.js":104,"./utils/buffer.js":105,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/to-title-case.js":116,"global/document":1,"global/window":2,"object.assign":40,"safe-json-parse/tuple":45}],88:[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,b.exports=c["default"]},{"./player.js":87}],89:[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("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=e(h),j=a("./component.js"),k=e(j),l=a("./utils/fn.js"),m=d(l),n=a("./utils/dom.js"),o=d(n),p=a("./utils/browser.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),c.on("posterchange",m.bind(this,this.update))}return g(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=o.createEl("div",{className:"vjs-poster",tabIndex:-1});return q.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=o.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}(i["default"]);k["default"].registerComponent("PosterImage",r),c["default"]=r,b.exports=c["default"]},{"./button.js":47,"./component.js":48,"./utils/browser.js":104,"./utils/dom.js":107,"./utils/fn.js":109}],90:[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}c.__esModule=!0;var f=a("./utils/events.js"),g=e(f),h=a("global/document"),i=d(h),j=a("global/window"),k=d(j),l=!1,m=void 0,n=function(){var a=i["default"].getElementsByTagName("video"),b=i["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 d=0,e=b.length;e>d;d++)c.push(b[d]);if(c&&c.length>0)for(var d=0,e=c.length;e>d;d++){var f=c[d];if(!f||!f.getAttribute){o(1);break}if(void 0===f.player){var g=f.getAttribute("data-setup");if(null!==g){m(f)}}}else l||o(1)},o=function(a,b){m=b,setTimeout(n,a)};"complete"===i["default"].readyState?l=!0:g.one(k["default"],"load",function(){l=!0});var p=function(){return l};c.autoSetup=n,c.autoSetupTimeout=o,c.hasLoaded=p},{"./utils/events.js":108,"global/document":1,"global/window":2}],91:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("global/document"),m=e(l),n=a("object.assign"),o=e(n),p=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.bar=this.getChild(this.options_.barName),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(c,"controlsvisible",this.update),this.on(c,this.playerEvent,this.update)}return g(b,a),b.prototype.createEl=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.className=c.className+" vjs-slider",c=o["default"]({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c),a.prototype.createEl.call(this,b,c)},b.prototype.handleMouseDown=function(a){a.preventDefault(),k.blockTextSelection(),this.addClass("vjs-sliding"),this.on(m["default"],"mousemove",this.handleMouseMove),this.on(m["default"],"mouseup",this.handleMouseUp),this.on(m["default"],"touchmove",this.handleMouseMove),this.on(m["default"],"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){k.unblockTextSelection(),this.removeClass("vjs-sliding"),this.off(m["default"],"mousemove",this.handleMouseMove),this.off(m["default"],"mouseup",this.handleMouseUp),this.off(m["default"],"touchmove",this.handleMouseMove),this.off(m["default"],"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=this.el_,c=k.findElPosition(b),d=b.offsetWidth,e=b.offsetHeight;if(this.vertical()){var f=c.top,g=void 0;return g=a.changedTouches?a.changedTouches[0].pageY:a.pageY,Math.max(0,Math.min(1,(f-g+e)/e))}var h=c.left,i=void 0;return i=a.changedTouches?a.changedTouches[0].pageX:a.pageX,Math.max(0,Math.min(1,(i-h)/d))},b.prototype.handleFocus=function(){this.on(m["default"],"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(m["default"],"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}(i["default"]);i["default"].registerComponent("Slider",p),c["default"]=p,b.exports=c["default"]},{"../component.js":48,"../utils/dom.js":107,"global/document":1,"object.assign":40}],92:[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.indexOf("&"),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.canHandleSource=function(b){return a.isStreamingType(b.type)||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,b.exports=c["default"]},{}],93:[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("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 h(a){var b=a.charAt(0).toUpperCase()+a.slice(1);A["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function i(a){A[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var j=a("./tech"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/time-ranges.js"),q=a("./flash-rtmp"),r=e(q),s=a("../component"),t=e(s),u=a("global/window"),v=e(u),w=a("object.assign"),x=e(w),y=v["default"].navigator,z=function(a){function b(c,d){f(this,b),a.call(this,c,d),c.source&&this.ready(function(){this.setSource(c.source)},!0),c.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),v["default"].videojs=v["default"].videojs||{},v["default"].videojs.Flash=v["default"].videojs.Flash||{},v["default"].videojs.Flash.onReady=b.onReady,v["default"].videojs.Flash.onEvent=b.onEvent,v["default"].videojs.Flash.onError=b.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return g(b,a),b.prototype.createEl=function(){var a=this.options_,c=a.techId,d=x["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),e=x["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),f=x["default"]({id:c,name:c,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,d,e,f),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){if(a=o.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()){var b=this;this.setTimeout(function(){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=10},k["default"].withSourceHandlers(z),z.nativeSourceHandler={},z.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=o.getFileExtension(a);return b?"video/"+b:""}var c;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),c in z.formats?"maybe":""},z.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},z.nativeSourceHandler.dispose=function(){},z.registerSourceHandler(z.nativeSourceHandler),z.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},z.onReady=function(a){var b=m.getEl(a),c=b&&b.tech;c&&c.el()&&z.checkReady(c)},z.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){z.checkReady(a)},50))},z.onEvent=function(a,b){var c=m.getEl(a).tech;c.trigger(b)},z.onError=function(a,b){var c=m.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},z.version=function(){var a="0,0,0";try{a=new v["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{y.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(y.plugins["Shockwave Flash 2.0"]||y.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},z.embed=function(a,b,c,d){var e=z.getEmbedCode(a,b,c,d),f=m.createEl("div",{innerHTML:e}).childNodes[0];return f},z.getEmbedCode=function(a,b,c,d){var e=''}),d=x["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+""},r["default"](z),t["default"].registerComponent("Flash",z),c["default"]=z,b.exports=c["default"]},{"../component":48,"../utils/dom.js":107,"../utils/time-ranges.js":115,"../utils/url.js":117,"./flash-rtmp":92,"./tech":96,"global/window":2,"object.assign":40}],94:[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("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("./tech.js"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("../utils/browser.js"),u=d(t),v=a("global/document"),w=e(v),x=a("global/window"),y=e(x),z=a("object.assign"),A=e(z),B=a("../utils/merge-options.js"),C=e(B),D=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=c.source;if(e&&(this.el_.currentSrc!==e.src||c.tag&&3===c.tag.initNetworkState_)&&this.setSource(e),this.el_.hasChildNodes()){for(var g=this.el_.childNodes,h=g.length,i=[];h--;){var j=g[h],k=j.nodeName.toLowerCase();"track"===k&&(this.featuresNativeTextTracks?this.remoteTextTracks().addTrack_(j.track):i.push(j))}for(var l=0;l=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),m.setElAttributes(a,i)}return a},b.prototype.proxyNativeTextTracks_=function(){var a=this.el().textTracks;a&&a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_))},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.play=function(){this.el_.play()},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){s["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=y["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.currentSrc=function(){return 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=w["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.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c,d;for(this.remoteTextTracks().removeTrack_(b),c=this.el().querySelectorAll("track"),d=c.length;d--;)(b===c[d]||b===c[d].track)&&this.el().removeChild(c[d])},b}(i["default"]);D.TEST_VID=w["default"].createElement("video");var E=w["default"].createElement("track");E.kind="captions",E.srclang="en",E.label="English",D.TEST_VID.appendChild(E),D.isSupported=function(){try{D.TEST_VID.volume=.5}catch(a){return!1}return!!D.TEST_VID.canPlayType},i["default"].withSourceHandlers(D),D.nativeSourceHandler={},D.nativeSourceHandler.canHandleSource=function(a){function b(a){try{return D.TEST_VID.canPlayType(a)}catch(b){return""}}var c;return a.type?b(a.type):a.src?(c=o.getFileExtension(a.src),b("video/"+c)):""},D.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},D.nativeSourceHandler.dispose=function(){},D.registerSourceHandler(D.nativeSourceHandler),D.canControlVolume=function(){var a=D.TEST_VID.volume;return D.TEST_VID.volume=a/2+.1,a!==D.TEST_VID.volume},D.canControlPlaybackRate=function(){var a=D.TEST_VID.playbackRate;return D.TEST_VID.playbackRate=a/2+.1,a!==D.TEST_VID.playbackRate},D.supportsNativeTextTracks=function(){var a;return a=!!D.TEST_VID.textTracks,a&&D.TEST_VID.textTracks.length>0&&(a="number"!=typeof D.TEST_VID.textTracks[0].mode),a&&u.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in D.TEST_VID.textTracks||(a=!1),a},D.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],D.prototype.featuresVolumeControl=D.canControlVolume(),D.prototype.featuresPlaybackRate=D.canControlPlaybackRate(),D.prototype.movingMediaElementInDOM=!u.IS_IOS,D.prototype.featuresFullscreenResize=!0,D.prototype.featuresProgressEvents=!0,D.prototype.featuresNativeTextTracks=D.supportsNativeTextTracks();var F=void 0,G=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,H=/^video\/mp4/i;D.patchCanPlayType=function(){u.ANDROID_VERSION>=4&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&G.test(a)?"maybe":F.call(this,a)}),u.IS_OLD_ANDROID&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&H.test(a)?"maybe":F.call(this,a)})},D.unpatchCanPlayType=function(){var a=D.TEST_VID.constructor.prototype.canPlayType;return D.TEST_VID.constructor.prototype.canPlayType=F,F=null,a},D.patchCanPlayType(),D.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){}}()}},k["default"].registerComponent("Html5",D),c["default"]=D,b.exports=c["default"]},{"../component":48,"../utils/browser.js":104,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/log.js":112,"../utils/merge-options.js":113,"../utils/url.js":117,"./tech.js":96,"global/document":1,"global/window":2,"object.assign":40}],95:[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("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 g=a("../component"),h=d(g),i=a("global/window"),j=(d(i),a("../utils/to-title-case.js")),k=d(j),l=function(a){function b(c,d,f){if(e(this,b),a.call(this,c,d,f),d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var g=0,i=d.playerOptions.techOrder;g0&&this.trigger("loadstart")},!0)},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(o.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 r.createTimeRange(0,0)},b.prototype.bufferedPercent=function(){return s.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(){var b=this.textTracks();if(b)for(var c=b.length;c--;)this.removeRemoteTextTrack(b[c]);this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),a.prototype.dispose.call(this)},b.prototype.error=function(a){return void 0!==a&&(this.error_=a instanceof u["default"]?a:new u["default"](a),this.trigger("error")),this.error_},b.prototype.played=function(){return this.hasStarted_?r.createTimeRange(0,0):r.createTimeRange()},b.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.initTextTrackListeners=function(){var a=o.bind(this,function(){this.trigger("texttrackchange")}),b=this.textTracks();b&&(b.addEventListener("removetrack",a),b.addEventListener("addtrack",a),this.on("dispose",o.bind(this,function(){b.removeEventListener("removetrack",a),b.removeEventListener("addtrack",a)})))},b.prototype.emulateTextTracks=function(){if(!w["default"].WebVTT&&null!=this.el().parentNode){var a=y["default"].createElement("script");a.src=this.options_["vtt.js"]||"../node_modules/vtt.js/dist/vtt.js",this.el().parentNode.appendChild(a),w["default"].WebVTT=!0}var b=this.textTracks();if(b){var c=o.bind(this,function(){var a=this,c=function(){return a.trigger("texttrackchange")};c();for(var d=0;db)for(c=b;d>c;c++)e.call(this,c)},j.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},c["default"]=j,b.exports=c["default"]},{"../utils/browser.js":104,"global/document":1}],98:[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("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 h(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function i(a,b,c){try{a.style[b]=c}catch(d){}}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../menu/menu.js"),m=(e(l),a("../menu/menu-item.js")),n=(e(m),a("../menu/menu-button.js")),o=(e(n),a("../utils/fn.js")),p=d(o),q=a("global/document"),r=(e(q),a("global/window")),s=e(r),t="#222",u="#ccc",v={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'},w=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),c.on("loadstart",p.bind(this,this.toggleDisplay)),c.on("texttrackchange",p.bind(this,this.updateDisplay)),c.ready(p.bind(this,function(){if(c.tech&&c.tech.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",p.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;bc;c++)if(b=this[c],b===a){this.tracks_.splice(c,1);break}this.trigger({type:"removetrack",track:b})},n.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},c["default"]=n,b.exports=c["default"]},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"global/document":1}],102:[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("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 h(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function i(a,b){if(b){var c=void 0;for(c=0;c select").selectedIndex=0,this.el().querySelector(".vjs-bg-color > select").selectedIndex=0,this.el().querySelector(".window-color > select").selectedIndex=0,this.el().querySelector(".vjs-text-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-bg-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-window-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-edge-style select").selectedIndex=0,this.el().querySelector(".vjs-font-family select").selectedIndex=0,this.el().querySelector(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),n.on(this.el().querySelector(".vjs-fg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".window-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-text-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-window-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-percent select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-edge-style select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-family select"),"change",p.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:j()})},b.prototype.getValues=function(){var a=this.el(),b=h(a.querySelector(".vjs-edge-style select")),c=h(a.querySelector(".vjs-font-family select")),d=h(a.querySelector(".vjs-fg-color > select")),e=h(a.querySelector(".vjs-text-opacity > select")),f=h(a.querySelector(".vjs-bg-color > select")),g=h(a.querySelector(".vjs-bg-opacity > select")),i=h(a.querySelector(".window-color > select")),j=h(a.querySelector(".vjs-window-opacity > select")),k=v["default"].parseFloat(h(a.querySelector(".vjs-font-percent > select"))),l={backgroundOpacity:g,textOpacity:e,windowOpacity:j,edgeStyle:b,fontFamily:c,color:d,backgroundColor:f,windowColor:i,fontPercent:k};for(var m in l)(""===l[m]||"none"===l[m]||"fontPercent"===m&&1===l[m])&&delete l[m];return l},b.prototype.setValues=function(a){var b=this.el();i(b.querySelector(".vjs-edge-style select"),a.edgeStyle),i(b.querySelector(".vjs-font-family select"),a.fontFamily),i(b.querySelector(".vjs-fg-color > select"),a.color),i(b.querySelector(".vjs-text-opacity > select"),a.textOpacity),i(b.querySelector(".vjs-bg-color > select"),a.backgroundColor),i(b.querySelector(".vjs-bg-opacity > select"),a.backgroundOpacity),i(b.querySelector(".window-color > select"),a.windowColor),i(b.querySelector(".vjs-window-opacity > select"),a.windowOpacity);var c=a.fontPercent;c&&(c=c.toFixed(2)),i(b.querySelector(".vjs-font-percent > select"),c)},b.prototype.restoreSettings=function(){var a=t["default"](v["default"].localStorage.getItem("vjs-text-track-settings")),b=a[0],c=a[1];b&&r["default"].error(b),c&&this.setValues(c)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?v["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):v["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(l["default"]);l["default"].registerComponent("TextTrackSettings",w),c["default"]=w,b.exports=c["default"]},{"../component":48,"../utils/events.js":108,"../utils/fn.js":109,"../utils/log.js":112,"global/window":2,"safe-json-parse/tuple":45}],103:[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}}c.__esModule=!0;var f=a("./text-track-cue-list"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/guid.js"),k=d(j),l=a("../utils/browser.js"),m=d(l),n=a("./text-track-enums"),o=d(n),p=a("../utils/log.js"),q=e(p),r=a("../event-target"),s=e(r),t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("../xhr.js"),y=e(x),z=function D(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!a.tech)throw new Error("A tech was not provided.");var b=this;if(m.IS_IE8){b=u["default"].createElement("custom");for(var c in D.prototype)b[c]=D.prototype[c]}b.tech_=a.tech;var d=o.TextTrackMode[a.mode]||"disabled",e=o.TextTrackKind[a.kind]||"subtitles",f=a.label||"",h=a.language||a.srclang||"",j=a.id||"vjs_text_track_"+k.newGUID();("metadata"===e||"chapters"===e)&&(d="hidden"),b.cues_=[],b.activeCues_=[];var l=new g["default"](b.cues_),n=new g["default"](b.activeCues_),p=!1,q=i.bind(b,function(){this.activeCues,p&&(this.trigger("cuechange"),p=!1)});return"disabled"!==d&&b.tech_.on("timeupdate",q),Object.defineProperty(b,"kind",{get:function(){return e},set:Function.prototype}),Object.defineProperty(b,"label",{get:function(){return f},set:Function.prototype}),Object.defineProperty(b,"language",{get:function(){return h},set:Function.prototype}),Object.defineProperty(b,"id",{get:function(){return j},set:Function.prototype}),Object.defineProperty(b,"mode",{get:function(){return d},set:function(a){o.TextTrackMode[a]&&(d=a,"showing"===d&&this.tech_.on("timeupdate",q),this.trigger("modechange"))}}),Object.defineProperty(b,"cues",{get:function(){return this.loaded_?l:null},set:Function.prototype}),Object.defineProperty(b,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return n;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(p=!1,b.length!==this.activeCues_.length)p=!0;else for(var c=0;cc;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)};var A=function E(a,b){if("function"!=typeof w["default"].WebVTT)return w["default"].setTimeout(function(){E(a,b)},25);var c=new w["default"].WebVTT.Parser(w["default"],w["default"].vttjs,w["default"].WebVTT.StringDecoder());c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){q["default"].error(a)},c.parse(a),c.flush()},B=function(a,b){y["default"](a,i.bind(this,function(a,c,d){return a?q["default"].error(a,c):(b.loaded_=!0,void A(d,b))}))},C=function(a,b){if(null==this)throw new TypeError('"this" is null or not defined');var c=Object(this),d=c.length>>>0;if(0===d)return-1;var e=+b||0;if(Math.abs(e)===1/0&&(e=0),e>=d)return-1;for(var f=Math.max(e>=0?e:d-Math.abs(e),0);d>f;){if(f in c&&c[f]===a)return f;f++}return-1};c["default"]=z,b.exports=c["default"]},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"../utils/guid.js":111,"../utils/log.js":112,"../xhr.js":119,"./text-track-cue-list":97,"./text-track-enums":99,"global/document":1,"global/window":2}],104:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator.userAgent,j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=/iPhone/i.test(i);c.IS_IPHONE=l;var m=/iPad/i.test(i);c.IS_IPAD=m;var n=/iPod/i.test(i);c.IS_IPOD=n;var o=l||m||n;c.IS_IOS=o;var p=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:void 0}();c.IOS_VERSION=p;var q=/Android/i.test(i);c.IS_ANDROID=q;var r=function(){var a,b,c=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);return c?(a=c[1]&&parseFloat(c[1]),b=c[2]&&parseFloat(c[2]),a&&b?parseFloat(c[1]+"."+c[2]):a?a:null):null}();c.ANDROID_VERSION=r;var s=q&&/webkit/i.test(i)&&2.3>r;c.IS_OLD_ANDROID=s;var t=q&&5>r&&537>k;c.IS_NATIVE_ANDROID=t;var u=/Firefox/i.test(i);c.IS_FIREFOX=u;var v=/Chrome/i.test(i);c.IS_CHROME=v;var w=/MSIE\s8\.0/.test(i);c.IS_IE8=w;var x=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch);c.TOUCH_ENABLED=x;var y="backgroundSize"in f["default"].createElement("video").style;c.BACKGROUND_SIZE_SUPPORTED=y},{"global/document":1,"global/window":2}],105:[function(a,b,c){"use strict";function d(a,b){var c,d,f=0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;gb&&(d=b),f+=d-c;return f/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":115}],106:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./log.js"),f=d(e),g={get:function(a,b){return a[b]},set:function(a,b,c){return a[b]=c,!0}};c["default"]=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("function"==typeof Proxy){var c=function(){var c={};return Object.keys(b).forEach(function(a){g.hasOwnProperty(a)&&(c[a]=function(){return f["default"].warn(b[a]),g[a].apply(this,arguments)})}),{v:new Proxy(a,c)}}();if("object"==typeof c)return c.v}return a},b.exports=c["default"]},{"./log.js":112}],107:[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){return 0===a.indexOf("#")&&(a=a.slice(1)),u["default"].getElementById(a)}function g(){var a=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=u["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var d=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?c.setAttribute(a,d):c[a]=d}),c}function h(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function i(a){var b=a[A];return b||(b=a[A]=y.newGUID()),z[b]||(z[b]={}),z[b]}function j(a){var b=a[A];return b?!!Object.getOwnPropertyNames(z[b]).length:!1}function k(a){var b=a[A];if(b){delete z[b];try{delete a[A]}catch(c){a.removeAttribute?a.removeAttribute(A):a[A]=null}}}function l(a,b){return-1!==(" "+a.className+" ").indexOf(" "+b+" ")}function m(a,b){l(a,b)||(a.className=""===a.className?b:a.className+" "+b)}function n(a,b){if(l(a,b)){for(var c=a.className.split(" "),d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1);a.className=c.join(" ")}}function o(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(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=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":4,"../lang/isObject":33}],6:[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);++d2?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-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],24:[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":33,"./isArrayLike":21,"./isIndex":23}],25:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],26:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],27:[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=[];++m0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d2?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:45,"object-keys":46}],45:[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)}},{}],46:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=!{toString:null}.propertyIsEnumerable("toString"),h=function(){}.propertyIsEnumerable("prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=function(a){var b=a.constructor;return b&&b.prototype===a},k={$window:!0,$console:!0,$parent:!0,$self:!0,$frames:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0},l=function(){if("undefined"==typeof window)return!1;for(var a in window)if(!k["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{j(window[a])}catch(b){return!0}return!1}(),m=function(a){if("undefined"==typeof window&&!l)return j(a);try{return j(a)}catch(b){return!1}},n=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),j=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!j)throw new TypeError("Object.keys called on a non-object");var n=h&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o0)for(var p=0;p=0&&"[object Function]"===c.call(a.callee)),d}},{}],48:[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},{}],49:[function(a,b){function c(a){return a.replace(/\n\r?\s*/g,"")}b.exports=function(a){for(var b="",d=0;d0&&(o=setTimeout(function(){n=!0,l.abort("timeout");var a=new Error("XMLHttpRequest timeout");a.code="ETIMEDOUT",i(a)},a.timeout)),l.setRequestHeader)for(m in s)s.hasOwnProperty(m)&&l.setRequestHeader(m,s[m]);else if(a.headers&&!c(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(l.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(l),l.send(r),l}function e(){}var f=a("global/window"),g=a("once"),h=a("parse-headers");b.exports=d,d.XMLHttpRequest=f.XMLHttpRequest||e,d.XDomainRequest="withCredentials"in new d.XMLHttpRequest?d.XMLHttpRequest:f.XDomainRequest},{"global/window":2,once:51,"parse-headers":55}],51:[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})})},{}],52:[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":53}],53:[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},{}],54:[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*$/,"")}},{}],55:[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":52,trim:54}],56:[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("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 g=a("./button.js"),h=d(g),i=a("./component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(h["default"]);k.prototype.controlText_="Play Video",j["default"].registerComponent("BigPlayButton",k),c["default"]=k,b.exports=c["default"]},{"./button.js":57,"./component.js":58}],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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=a("./utils/events.js"),m=d(l),n=a("./utils/fn.js"),o=d(n),p=a("global/document"),q=e(p),r=a("object.assign"),s=e(r),t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.emitTapEvents(),this.on("tap",this.handleClick),this.on("click",this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur)}return g(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];c=s["default"]({className:this.buildCSSClass(),tabIndex:0},c),d=s["default"]({role:"button",type:"button","aria-live":"polite"},d);var e=a.prototype.createEl.call(this,b,c,d);return this.controlTextEl_=k.createEl("span",{className:"vjs-control-text"}),e.appendChild(this.controlTextEl_),this.controlText(this.controlText_),e},b.prototype.controlText=function(a){return a?(this.controlText_=a,this.controlTextEl_.innerHTML=this.localize(this.controlText_),this):this.controlText_||"Need Text"},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){m.on(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(a){(32===a.which||13===a.which)&&(a.preventDefault(),this.handleClick(a))},b.prototype.handleBlur=function(){m.off(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b}(i["default"]);i["default"].registerComponent("Button",t),c["default"]=t,b.exports=c["default"]},{"./component":58,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"global/document":1,"object.assign":43}],58:[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("object.assign"),v=e(u),w=a("./utils/merge-options.js"),x=e(w),y=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=x["default"]({},this.options_),c=this.options_=x["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_=x["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=void 0,e=void 0;if("string"==typeof b){e=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 f=c.componentClass||t["default"](e);c.name=e;var g=a.getComponent(f);d=new g(this.player_||this,c)}else d=b;return this.children_.push(d),"function"==typeof d.id&&(this.childIndex_[d.id()]=d),e=e||d.name&&d.name(),e&&(this.childNameIndex_[e]=d),"function"==typeof d.el&&d.el()&&this.contentEl().appendChild(d.el()),d},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 a=this,b=this.options_.children;b&&!function(){var c=a.options_,d=function(b,d){void 0!==c[b]&&(d=c[b]),d!==!1&&(d===!0&&(d={}),d.playerOptions=a.options_.playerOptions,a[b]=a.addChild(b,d))};if(Array.isArray(b))for(var e=0;e0&&a.forEach(function(a){a.call(this)},this),this.trigger("ready")},1)},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.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.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b=v["default"]({},c.touches[0]),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}();y.registerComponent("Component",y),c["default"]=y,b.exports=c["default"]},{"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/to-title-case.js":127,"global/window":2,"object.assign":43}],59:[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("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 g=a("../component.js"),h=d(g),i=a("./play-toggle.js"),j=(d(i),a("./time-controls/current-time-display.js")),k=(d(j),a("./time-controls/duration-display.js")),l=(d(k),a("./time-controls/time-divider.js")),m=(d(l),a("./time-controls/remaining-time-display.js")),n=(d(m),a("./live-display.js")),o=(d(n),a("./progress-control/progress-control.js")),p=(d(o),a("./fullscreen-toggle.js")),q=(d(p),a("./volume-control/volume-control.js")),r=(d(q),a("./volume-menu-button.js")),s=(d(r),a("./mute-toggle.js")),t=(d(s),a("./text-track-controls/chapters-button.js")),u=(d(t),a("./text-track-controls/subtitles-button.js")),v=(d(u),a("./text-track-controls/captions-button.js")),w=(d(v),a("./playback-rate-menu/playback-rate-menu-button.js")),x=(d(w),a("./spacer-controls/custom-control-spacer.js")),y=(d(x),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar"})},b}(h["default"]));y.prototype.options_={loadEvent:"play",children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","subtitlesButton","captionsButton","fullscreenToggle"]},h["default"].registerComponent("ControlBar",y),c["default"]=y,b.exports=c["default"]},{"../component.js":58,"./fullscreen-toggle.js":60,"./live-display.js":61,"./mute-toggle.js":62,"./play-toggle.js":63,"./playback-rate-menu/playback-rate-menu-button.js":64,"./progress-control/progress-control.js":69,"./spacer-controls/custom-control-spacer.js":71,"./text-track-controls/captions-button.js":74,"./text-track-controls/chapters-button.js":75,"./text-track-controls/subtitles-button.js":78,"./time-controls/current-time-display.js":81,"./time-controls/duration-display.js":82,"./time-controls/remaining-time-display.js":83,"./time-controls/time-divider.js":84,"./volume-control/volume-control.js":86,"./volume-menu-button.js":88}],60:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.isFullscreen()?(this.player_.exitFullscreen(),this.controlText("Fullscreen")):(this.player_.requestFullscreen(),this.controlText("Non-Fullscreen"))},b}(h["default"]);k.prototype.controlText_="Fullscreen",j["default"].registerComponent("FullscreenToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":57,"../component.js":58}],61:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateShowing(),this.on(this.player(),"durationchange",this.updateShowing)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-live-display",innerHTML:''+this.localize("Stream Type")+""+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}(i["default"]);i["default"].registerComponent("LiveDisplay",l),c["default"]=l,b.exports=c["default"]},{"../component":58,"../utils/dom.js":118}],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("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=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.update),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){this.update(),c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return g(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",d=this.localize(c);this.controlText()!==d&&this.controlText(d);for(var e=0;4>e;e++)m.removeElClass(this.el_,"vjs-vol-"+e);m.addElClass(this.el_,"vjs-vol-"+b)},b}(i["default"]);n.prototype.controlText_="Mute",k["default"].registerComponent("MuteToggle",n),c["default"]=n,b.exports=c["default"]},{"../button":57,"../component":58,"../utils/dom.js":118}],63:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.on(c,"play",this.handlePlay),this.on(c,"pause",this.handlePause)}return f(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}(h["default"]);k.prototype.controlText_="Play",j["default"].registerComponent("PlayToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":57,"../component.js":58}],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("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-button.js"),i=e(h),j=a("../../menu/menu.js"),k=e(j),l=a("./playback-rate-menu-item.js"),m=e(l),n=a("../../component.js"),o=e(n),p=a("../../utils/dom.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateVisibility(),this.updateLabel(),this.on(c,"loadstart",this.updateVisibility),this.on(c,"ratechange",this.updateLabel)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=q.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 k["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new m["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;da){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}(i["default"]);r.prototype.controlText_="Playback Rate",o["default"].registerComponent("PlaybackRateMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu-button.js":95,"../../menu/menu.js":97,"../../utils/dom.js":118,"./playback-rate-menu-item.js":65}],65:[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("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 g=a("../../menu/menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b);var f=d.rate,g=parseFloat(f,10);d.label=f,d.selected=1===g,a.call(this,c,d),this.label=f,this.rate=g,this.on(c,"ratechange",this.update)}return f(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}(h["default"]);k.prototype.contentElType="button",j["default"].registerComponent("PlaybackRateMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu-item.js":96}],66:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"progress",this.update)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:''+this.localize("Loaded")+": 0%"})},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;fa.length;f--)this.el_.removeChild(d[f-1])},b}(i["default"]);i["default"].registerComponent("LoadProgressBar",l),c["default"]=l,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118}],67:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/fn.js"),m=d(l),n=a("../../utils/format-time.js"),o=e(n),p=a("lodash-compat/function/throttle"),q=e(p),r=function(a){function b(c,d){var e=this;f(this,b),a.call(this,c,d),this.update(0,0),c.on("ready",function(){e.on(c.controlBar.progressControl.el(),"mousemove",q["default"](m.bind(e,e.handleMouseMove),25))})}return g(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-k.findElPosition(this.el().parentNode).left;this.update(c,d)},b.prototype.update=function(a,b){var c=o["default"](a,this.player_.duration());this.el().style.left=b+"px",this.el().setAttribute("data-current-time",c)},b.prototype.calculateDistance=function(a){return k.getPointerPosition(this.el().parentNode,a).x},b}(i["default"]);i["default"].registerComponent("MouseTimeDisplay",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/format-time.js":121,"lodash-compat/function/throttle":7}],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("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=e(h),j=a("../../utils/fn.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateDataAttr(),this.on(c,"timeupdate",this.updateDataAttr),c.ready(k.bind(this,this.updateDataAttr))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:''+this.localize("Progress")+": 0%"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",m["default"](a,this.player_.duration()))},b}(i["default"]);i["default"].registerComponent("PlayProgressBar",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/fn.js":120,"../../utils/format-time.js":121}],69:[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("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 g=a("../../component.js"),h=d(g),i=a("./seek-bar.js"),j=(d(i),a("./mouse-time-display.js")),k=(d(j),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(h["default"]));k.prototype.options_={children:["seekBar"]},h["default"].registerComponent("ProgressControl",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./mouse-time-display.js":67,"./seek-bar.js":70}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./load-progress-bar.js"),m=(e(l),a("./play-progress-bar.js")),n=(e(m),a("../../utils/fn.js")),o=d(n),p=a("../../utils/format-time.js"),q=e(p),r=a("object.assign"),s=(e(r),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateARIAAttributes),c.ready(o.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":"video progress bar"})},b.prototype.updateARIAAttributes=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),this.el_.setAttribute("aria-valuetext",q["default"](a,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}(i["default"]));s.prototype.options_={children:["loadProgressBar","mouseTimeDisplay","playProgressBar"],barName:"playProgressBar"},s.prototype.playerEvent="timeupdate",k["default"].registerComponent("SeekBar",s),c["default"]=s,b.exports=c["default"]},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"../../utils/format-time.js":121,"./load-progress-bar.js":66,"./play-progress-bar.js":68,"object.assign":43}],71:[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("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 g=a("./spacer.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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=" ",b},b}(h["default"]);j["default"].registerComponent("CustomControlSpacer",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./spacer.js":72}],72:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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}(h["default"]);h["default"].registerComponent("Spacer",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],73:[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("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 g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" settings","default":!1,mode:"disabled"},a.call(this,c,d),this.addClass("vjs-texttrack-settings")}return f(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show()},b}(h["default"]);j["default"].registerComponent("CaptionSettingsMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-menu-item.js":80}],74:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=a("./caption-settings-menu-item.js"),l=d(k),m=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Captions Menu")}return f(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 l["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(h["default"]);m.prototype.kind_="captions",m.prototype.controlText_="Captions",j["default"].registerComponent("CaptionsButton",m),c["default"]=m,b.exports=c["default"]},{"../../component.js":58,"./caption-settings-menu-item.js":73,"./text-track-button.js":79}],75:[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("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=e(h),j=a("../../component.js"),k=e(j),l=a("./text-track-menu-item.js"),m=e(l),n=a("./chapters-track-menu-item.js"),o=e(n),p=a("../../menu/menu.js"),q=e(p),r=a("../../utils/dom.js"),s=d(r),t=a("../../utils/fn.js"),u=d(t),v=a("../../utils/to-title-case.js"),w=e(v),x=a("global/window"),y=e(x),z=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),this.el_.setAttribute("aria-label","Chapters Menu")}return g(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;cd;d++){var f=a[d];if(f.kind===this.kind_){if(f.cues){b=f;break}f.mode="hidden",y["default"].setTimeout(u.bind(this,function(){this.createMenu()}),100)}}var g=this.menu;if(void 0===g&&(g=new q["default"](this.player_),g.contentEl().appendChild(s.createEl("li",{className:"vjs-menu-title",innerHTML:w["default"](this.kind_),tabIndex:-1}))),b){for(var h=b.cues,i=void 0,d=0,e=h.length;e>d;d++){i=h[d];var j=new o["default"](this.player_,{track:b,cue:i});c.push(j),g.addChild(j)}this.addChild(g)}return this.items.length>0&&this.show(),g},b}(i["default"]);z.prototype.kind_="chapters",z.prototype.controlText_="Chapters",k["default"].registerComponent("ChaptersButton",z),c["default"]=z,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu.js":97,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/to-title-case.js":127,"./chapters-track-menu-item.js":76,"./text-track-button.js":79,"./text-track-menu-item.js":80,"global/window":2}],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("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=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=function(a){function b(c,d){f(this,b);var e=d.track,g=d.cue,h=c.currentTime();d.label=g.text,d.selected=g.startTime<=h&&hc;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(h["default"]);j["default"].registerComponent("OffTextTrackMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-menu-item.js":80}],78:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Subtitles Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(h["default"]);k.prototype.kind_="subtitles",k.prototype.controlText_="Subtitles",j["default"].registerComponent("SubtitlesButton",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-button.js":79}],79:[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("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-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./text-track-menu-item.js"),o=e(n),p=a("./off-text-track-menu-item.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=this.player_.textTracks();if(this.items.length<=1&&this.hide(),e){var g=m.bind(this,this.update);e.addEventListener("removetrack",g),e.addEventListener("addtrack",g),this.player_.on("dispose",function(){e.removeEventListener("removetrack",g),e.removeEventListener("addtrack",g)})}}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new q["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;cCurrent Time 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=m["default"](a,this.player_.duration());this.contentEl_.innerHTML=''+b+" "+c},b}(i["default"]);i["default"].registerComponent("CurrentTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],82:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent),this.on(c,"loadedmetadata",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-duration-display",innerHTML:''+this.localize("Duration Time")+" 0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a){var b=this.localize("Duration Time"),c=m["default"](a);this.contentEl_.innerHTML=''+b+" "+c}},b}(i["default"]);i["default"].registerComponent("DurationDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],83:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-remaining-time-display",innerHTML:''+this.localize("Remaining Time")+" -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=m["default"](this.player_.remainingTime());this.contentEl_.innerHTML=''+a+" -"+b}},b}(i["default"]);i["default"].registerComponent("RemainingTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],84:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"
/
"})},b}(h["default"]);h["default"].registerComponent("TimeDivider",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],85:[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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./volume-level.js"),o=(e(n),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.updateARIAAttributes),c.ready(m.bind(this,this.updateARIAAttributes))}return g(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.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(a))},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){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}(i["default"]));o.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},o.prototype.playerEvent="volumechange",k["default"].registerComponent("VolumeBar",o),c["default"]=o,b.exports=c["default"]},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"./volume-level.js":87}],86:[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("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 g=a("../../component.js"),h=d(g),i=a("./volume-bar.js"),j=(d(i),function(a){function b(c,d){e(this,b),a.call(this,c,d),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:["volumeBar"]},h["default"].registerComponent("VolumeControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":58,"./volume-bar.js":85}],87:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:''})},b}(h["default"]);h["default"].registerComponent("VolumeLevel",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],88:[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("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 g=a("../button.js"),h=(d(g),a("../component.js")),i=d(h),j=a("../menu/menu.js"),k=d(j),l=a("../menu/menu-button.js"),m=d(l),n=a("./mute-toggle.js"),o=d(n),p=a("./volume-control/volume-bar.js"),q=d(p),r=function(a){function b(c){function d(){c.tech_&&c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),void 0===f.inline&&(f.inline=!0),void 0===f.vertical&&(f.vertical=f.inline?!1:!0),f.volumeBar=f.volumeBar||{},f.volumeBar.vertical=!!f.vertical,a.call(this,c,f),this.on(c,"volumechange",this.volumeUpdate),this.on(c,"loadstart",this.volumeUpdate),d.call(this),this.on(c,"loadstart",d),this.on(this.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),this.on(this.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")})}return f(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.createMenu=function(){var a=new k["default"](this.player_,{contentElType:"div"}),b=new q["default"](this.player_,this.options_.volumeBar);return a.addChild(b),this.volumeBar=b,a},b.prototype.handleClick=function(){o["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b}(m["default"]);r.prototype.volumeUpdate=o["default"].prototype.update,r.prototype.controlText_="Mute",i["default"].registerComponent("VolumeMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"../menu/menu-button.js":95,"../menu/menu.js":97,"./mute-toggle.js":62,"./volume-control/volume-bar.js":85}],89:[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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),this.on(c,"error",this.update)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-error-display"});return this.contentEl_=k.createEl("div"),b.appendChild(this.contentEl_),b},b.prototype.update=function(){this.player().error()&&(this.contentEl_.innerHTML=this.localize(this.player().error().message))},b}(i["default"]);i["default"].registerComponent("ErrorDisplay",l),c["default"]=l,b.exports=c["default"]},{"./component":58,"./utils/dom.js":118}],90:[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.prototype,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){f.one(this,a,b)},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,b.exports=c["default"]},{"./utils/events.js":119}],91:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./utils/log"),f=d(e),g=function(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&&(a.super_=b)},h=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"==typeof b?("function"==typeof b.init&&(f["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),g(c,a);for(var e in d)d.hasOwnProperty(e)&&(c.prototype[e]=d[e]);return c};c["default"]=h,b.exports=c["default"]},{"./utils/log":123}],92:[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;k1&&this.show()},b.prototype.createMenu=function(){var a=new m["default"](this.player_);if(this.options_.title&&a.contentEl().appendChild(o.createEl("li",{className:"vjs-menu-title",innerHTML:s["default"](this.options_.title),tabIndex:-1})),this.items=this.createItems(),this.items)for(var b=0;b0&&this.items[0].el().focus()},b.prototype.unpressButton=function(){this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-pressed",!1)},b}(i["default"]);k["default"].registerComponent("MenuButton",t),c["default"]=t,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/to-title-case.js":127,"./menu.js":97}],96:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=a("object.assign"),l=d(k),m=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.selected(d.selected)}return f(b,a),b.prototype.createEl=function(b,c,d){return a.prototype.createEl.call(this,"li",l["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},c),d)},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},b}(h["default"]);j["default"].registerComponent("MenuItem",m),c["default"]=m,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"object.assign":43}],97:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("../utils/fn.js"),m=d(l),n=a("../utils/events.js"),o=d(n),p=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",m.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=k.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_),o.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(i["default"]);i["default"].registerComponent("Menu",p),c["default"]=p,b.exports=c["default"]},{"../component.js":58,"../utils/dom.js":118,"../utils/events.js":119,"../utils/fn.js":120}],98:[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("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=e(h),j=a("global/document"),k=e(j),l=a("global/window"),m=e(l),n=a("./utils/events.js"),o=d(n),p=a("./utils/dom.js"),q=d(p),r=a("./utils/fn.js"),s=d(r),t=a("./utils/guid.js"),u=d(t),v=a("./utils/browser.js"),w=(d(v), +a("./utils/log.js")),x=e(w),y=a("./utils/to-title-case.js"),z=e(y),A=a("./utils/time-ranges.js"),B=a("./utils/buffer.js"),C=a("./utils/stylesheet.js"),D=d(C),E=a("./fullscreen-api.js"),F=e(E),G=a("./media-error.js"),H=e(G),I=a("safe-json-parse/tuple"),J=e(I),K=a("object.assign"),L=e(K),M=a("./utils/merge-options.js"),N=e(M),O=a("./tracks/text-track-list-converter.js"),P=e(O),Q=a("./tech/loader.js"),R=(e(Q),a("./poster-image.js")),S=(e(R),a("./tracks/text-track-display.js")),T=(e(S),a("./loading-spinner.js")),U=(e(T),a("./big-play-button.js")),V=(e(U),a("./control-bar/control-bar.js")),W=(e(V),a("./error-display.js")),X=(e(W),a("./tracks/text-track-settings.js")),Y=(e(X),a("./tech/html5.js")),Z=(e(Y),function(a){function b(c,d,e){var g=this;if(f(this,b),c.id=c.id||"vjs_video_"+u.newGUID(),d=L["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,a.call(this,null,d,e),!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?");this.tag=c,this.tagAttributes=c&&q.getElAttributes(c),this.language(this.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),g.languages_=a}():this.languages_=b.prototype.options_.languages,this.cache_={},this.poster_=d.poster||"",this.controls_=!!d.controls,c.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var h=N["default"](this.options_);d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):x["default"].error("Unable to find plugin:",b)},g)}(),this.options_.playerOptions=h,this.initChildren(),this.isAudio("audio"===c.nodeName.toLowerCase()),this.addClass(this.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),b.players[this.id_]=this,this.userActive(!0),this.reportUserActivity(),this.listenForUserActivity_(),this.on("fullscreenchange",this.handleFullscreenChange_),this.on("stageclick",this.handleStageClick_)}return g(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&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=q.getElAttributes(c);Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),this.styleEl_=D.createStyleElement("vjs-styles-dimensions");var e=k["default"].querySelector(".vjs-styles-defaults"),f=k["default"].querySelector("head");return 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),c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),q.insertElFirst(c,b),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 x["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(){var a=void 0,b=void 0,c=void 0;c=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var d=c.split(":"),e=d[1]/d[0];a=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/e:this.videoWidth()||300,b=void 0!==this.height_?this.height_:a*e;var f=this.id()+"-dimensions";this.addClass(f),D.setTextContent(this.styleEl_,"\n ."+f+" {\n width: "+a+"px;\n height: "+b+"px;\n }\n\n ."+f+".vjs-fluid {\n padding-top: "+100*e+"%;\n }\n ")},b.prototype.loadTech_=function(a,b){this.tech_&&this.unloadTech_(),"Html5"!==a&&this.tag&&(i["default"].getComponent("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=a,this.isReady_=!1;var c=L["default"]({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:b,playerId:this.id(),techId:this.id()+"_"+a+"_api",textTracks:this.textTracks_,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=i["default"].getComponent(a);this.tech_=new d(c),this.tech_.ready(s.bind(this,this.handleTechReady_),!0),P["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.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===a&&this.tag||q.insertElFirst(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},b.prototype.unloadTech_=function(){this.textTracks_=this.textTracks(),this.textTracksJson_=P["default"].textTracksToJson(this),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1},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(){this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),this.tag&&this.options_.autoplay&&this.paused()&&(delete this.tag.poster,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(){this.addClass("vjs-waiting"),this.trigger("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&&a.code)},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.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_[a](b)}catch(c){throw x["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]?x["default"]("Video.js: "+a+" method not defined for "+this.techName_+" playback technology.",b):"TypeError"===b.name?(x["default"]("Video.js: "+a+" unavailable on "+this.techName_+" playback technology element.",b),this.tech_.isReady_=!1):x["default"](b),b}},b.prototype.play=function(){return this.techCall_("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},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=A.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return B.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=F["default"];return this.isFullscreen(!0),a.requestFullscreen?(o.on(k["default"],a.fullscreenchange,s.bind(this,function b(){this.isFullscreen(k["default"][a.fullscreenElement]),this.isFullscreen()===!1&&o.off(k["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=F["default"];return this.isFullscreen(!1),a.requestFullscreen?k["default"][a.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=k["default"].documentElement.style.overflow,o.on(k["default"],"keydown",s.bind(this,this.fullWindowOnEscKey)),k["default"].documentElement.style.overflow="hidden",q.addElClass(k["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,o.off(k["default"],"keydown",this.fullWindowOnEscKey),k["default"].documentElement.style.overflow=this.docOrigOverflow,q.removeElClass(k["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.selectSource=function(a){for(var b=0,c=this.options_.techOrder;b0&&(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.textTracks=function(){return this.tech_&&this.tech_.textTracks()},b.prototype.remoteTextTracks=function(){return this.tech_&&this.tech_.remoteTextTracks()},b.prototype.addTextTrack=function(a,b,c){return this.tech_&&this.tech_.addTextTrack(a,b,c)},b.prototype.addRemoteTextTrack=function(a){return this.tech_&&this.tech_.addRemoteTextTrack(a)},b.prototype.removeRemoteTextTrack=function(a){this.tech_&&this.tech_.removeRemoteTextTrack(a)},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_=(""+a).toLowerCase(),this)},b.prototype.languages=function(){return N["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=N["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;ci;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(q.getElAttributes(k)):"track"===l&&b.tracks.push(q.getElAttributes(k))}return b},b}(i["default"]));Z.players={};var $=m["default"].navigator;Z.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings"],language:k["default"].getElementsByTagName("html")[0].getAttribute("lang")||$.languages&&$.languages[0]||$.userLanguage||$.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."},Z.prototype.handleLoadedMetaData_,Z.prototype.handleLoadedData_,Z.prototype.handleUserActive_,Z.prototype.handleUserInactive_,Z.prototype.handleTimeUpdate_,Z.prototype.handleVolumeChange_,Z.prototype.handleError_,Z.prototype.flexNotSupported_=function(){var a=k["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},i["default"].registerComponent("Player",Z),c["default"]=Z,b.exports=c["default"]},{"./big-play-button.js":56,"./component.js":58,"./control-bar/control-bar.js":59,"./error-display.js":89,"./fullscreen-api.js":92,"./loading-spinner.js":93,"./media-error.js":94,"./poster-image.js":100,"./tech/html5.js":105,"./tech/loader.js":106,"./tracks/text-track-display.js":109,"./tracks/text-track-list-converter.js":111,"./tracks/text-track-settings.js":113,"./utils/browser.js":115,"./utils/buffer.js":116,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/to-title-case.js":127,"global/document":1,"global/window":2,"object.assign":43,"safe-json-parse/tuple":48}],99:[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,b.exports=c["default"]},{"./player.js":98}],100:[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("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=e(h),j=a("./component.js"),k=e(j),l=a("./utils/fn.js"),m=d(l),n=a("./utils/dom.js"),o=d(n),p=a("./utils/browser.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),c.on("posterchange",m.bind(this,this.update))}return g(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=o.createEl("div",{className:"vjs-poster",tabIndex:-1});return q.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=o.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}(i["default"]);k["default"].registerComponent("PosterImage",r),c["default"]=r,b.exports=c["default"]},{"./button.js":57,"./component.js":58,"./utils/browser.js":115,"./utils/dom.js":118,"./utils/fn.js":120}],101:[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}c.__esModule=!0;var f=a("./utils/events.js"),g=e(f),h=a("global/document"),i=d(h),j=a("global/window"),k=d(j),l=!1,m=void 0,n=function(){var a=i["default"].getElementsByTagName("video"),b=i["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 d=0,e=b.length;e>d;d++)c.push(b[d]);if(c&&c.length>0)for(var d=0,e=c.length;e>d;d++){var f=c[d];if(!f||!f.getAttribute){o(1);break}if(void 0===f.player){var g=f.getAttribute("data-setup");if(null!==g){m(f)}}}else l||o(1)},o=function(a,b){m=b,setTimeout(n,a)};"complete"===i["default"].readyState?l=!0:g.one(k["default"],"load",function(){l=!0});var p=function(){return l};c.autoSetup=n,c.autoSetupTimeout=o,c.hasLoaded=p},{"./utils/events.js":119,"global/document":1,"global/window":2}],102:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("global/document"),m=e(l),n=a("object.assign"),o=e(n),p=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.bar=this.getChild(this.options_.barName),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(c,"controlsvisible",this.update),this.on(c,this.playerEvent,this.update)}return g(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=o["default"]({tabIndex:0},c),d=o["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){a.preventDefault(),k.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(m["default"],"mousemove",this.handleMouseMove),this.on(m["default"],"mouseup",this.handleMouseUp),this.on(m["default"],"touchmove",this.handleMouseMove),this.on(m["default"],"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){k.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(m["default"],"mousemove",this.handleMouseMove),this.off(m["default"],"mouseup",this.handleMouseUp),this.off(m["default"],"touchmove",this.handleMouseMove),this.off(m["default"],"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=k.getPointerPosition(this.el_,a);return this.vertical()?b.y:b.x},b.prototype.handleFocus=function(){this.on(m["default"],"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(m["default"],"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}(i["default"]);i["default"].registerComponent("Slider",p),c["default"]=p,b.exports=c["default"]},{"../component.js":58,"../utils/dom.js":118,"global/document":1,"object.assign":43}],103:[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.indexOf("&"),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.canHandleSource=function(b){return a.isStreamingType(b.type)||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,b.exports=c["default"]},{}],104:[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("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 h(a){var b=a.charAt(0).toUpperCase()+a.slice(1);A["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function i(a){A[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var j=a("./tech"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/time-ranges.js"),q=a("./flash-rtmp"),r=e(q),s=a("../component"),t=e(s),u=a("global/window"),v=e(u),w=a("object.assign"),x=e(w),y=v["default"].navigator,z=function(a){function b(c,d){f(this,b),a.call(this,c,d),c.source&&this.ready(function(){this.setSource(c.source)},!0),c.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),v["default"].videojs=v["default"].videojs||{},v["default"].videojs.Flash=v["default"].videojs.Flash||{},v["default"].videojs.Flash.onReady=b.onReady,v["default"].videojs.Flash.onEvent=b.onEvent,v["default"].videojs.Flash.onError=b.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return g(b,a),b.prototype.createEl=function(){var a=this.options_;a.swf||(a.swf="//vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf");var c=a.techId,d=x["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),e=x["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),f=x["default"]({id:c,name:c,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,d,e,f),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){if(a=o.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()){var b=this;this.setTimeout(function(){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=10},k["default"].withSourceHandlers(z),z.nativeSourceHandler={},z.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=o.getFileExtension(a);return b?"video/"+b:""}var c;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),c in z.formats?"maybe":""},z.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},z.nativeSourceHandler.dispose=function(){},z.registerSourceHandler(z.nativeSourceHandler),z.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},z.onReady=function(a){var b=m.getEl(a),c=b&&b.tech;c&&c.el()&&z.checkReady(c)},z.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){z.checkReady(a)},50))},z.onEvent=function(a,b){var c=m.getEl(a).tech;c.trigger(b)},z.onError=function(a,b){var c=m.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},z.version=function(){var a="0,0,0";try{a=new v["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{y.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(y.plugins["Shockwave Flash 2.0"]||y.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},z.embed=function(a,b,c,d){var e=z.getEmbedCode(a,b,c,d),f=m.createEl("div",{innerHTML:e}).childNodes[0];return f},z.getEmbedCode=function(a,b,c,d){var e=''}),d=x["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+""},r["default"](z),t["default"].registerComponent("Flash",z),c["default"]=z,b.exports=c["default"]},{"../component":58,"../utils/dom.js":118,"../utils/time-ranges.js":126,"../utils/url.js":128,"./flash-rtmp":103,"./tech":107,"global/window":2,"object.assign":43}],105:[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("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("./tech.js"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("../utils/browser.js"),u=d(t),v=a("global/document"),w=e(v),x=a("global/window"),y=e(x),z=a("object.assign"),A=e(z),B=a("../utils/merge-options.js"),C=e(B),D=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=c.source;if(e&&(this.el_.currentSrc!==e.src||c.tag&&3===c.tag.initNetworkState_)?this.setSource(e):this.handleLateInit_(this.el_),this.el_.hasChildNodes()){for(var g=this.el_.childNodes,h=g.length,i=[];h--;){var j=g[h],k=j.nodeName.toLowerCase();"track"===k&&(this.featuresNativeTextTracks?this.remoteTextTracks().addTrack_(j.track):i.push(j))}for(var l=0;l=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),m.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"==typeof 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;a&&a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_))},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.play=function(){this.el_.play()},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){s["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=y["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.currentSrc=function(){return 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=w["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.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c,d;for(this.remoteTextTracks().removeTrack_(b),c=this.el().querySelectorAll("track"),d=c.length;d--;)(b===c[d]||b===c[d].track)&&this.el().removeChild(c[d])},b}(i["default"]);D.TEST_VID=w["default"].createElement("video");var E=w["default"].createElement("track");E.kind="captions",E.srclang="en",E.label="English",D.TEST_VID.appendChild(E),D.isSupported=function(){try{D.TEST_VID.volume=.5}catch(a){return!1}return!!D.TEST_VID.canPlayType},i["default"].withSourceHandlers(D),D.nativeSourceHandler={},D.nativeSourceHandler.canHandleSource=function(a){function b(a){try{return D.TEST_VID.canPlayType(a)}catch(b){return""}}var c;return a.type?b(a.type):a.src?(c=o.getFileExtension(a.src),b("video/"+c)):""},D.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},D.nativeSourceHandler.dispose=function(){},D.registerSourceHandler(D.nativeSourceHandler),D.canControlVolume=function(){var a=D.TEST_VID.volume;return D.TEST_VID.volume=a/2+.1,a!==D.TEST_VID.volume},D.canControlPlaybackRate=function(){var a=D.TEST_VID.playbackRate;return D.TEST_VID.playbackRate=a/2+.1,a!==D.TEST_VID.playbackRate},D.supportsNativeTextTracks=function(){var a;return a=!!D.TEST_VID.textTracks,a&&D.TEST_VID.textTracks.length>0&&(a="number"!=typeof D.TEST_VID.textTracks[0].mode),a&&u.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in D.TEST_VID.textTracks||(a=!1),a},D.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],D.prototype.featuresVolumeControl=D.canControlVolume(),D.prototype.featuresPlaybackRate=D.canControlPlaybackRate(),D.prototype.movingMediaElementInDOM=!u.IS_IOS,D.prototype.featuresFullscreenResize=!0,D.prototype.featuresProgressEvents=!0,D.prototype.featuresNativeTextTracks=D.supportsNativeTextTracks();var F=void 0,G=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,H=/^video\/mp4/i;D.patchCanPlayType=function(){u.ANDROID_VERSION>=4&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&G.test(a)?"maybe":F.call(this,a)}),u.IS_OLD_ANDROID&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&H.test(a)?"maybe":F.call(this,a)})},D.unpatchCanPlayType=function(){var a=D.TEST_VID.constructor.prototype.canPlayType;return D.TEST_VID.constructor.prototype.canPlayType=F,F=null,a},D.patchCanPlayType(),D.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){}}()}},k["default"].registerComponent("Html5",D),c["default"]=D,b.exports=c["default"]},{"../component":58,"../utils/browser.js":115,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/log.js":123,"../utils/merge-options.js":124,"../utils/url.js":128,"./tech.js":107,"global/document":1,"global/window":2,"object.assign":43}],106:[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("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 g=a("../component"),h=d(g),i=a("global/window"),j=(d(i),a("../utils/to-title-case.js")),k=d(j),l=function(a){function b(c,d,f){if(e(this,b),a.call(this,c,d,f),d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var g=0,i=d.playerOptions.techOrder;gb)for(c=b;d>c;c++)e.call(this,c)},j.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},c["default"]=j,b.exports=c["default"]},{"../utils/browser.js":115,"global/document":1}],109:[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("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 h(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function i(a,b,c){try{a.style[b]=c}catch(d){}}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../menu/menu.js"),m=(e(l),a("../menu/menu-item.js")),n=(e(m),a("../menu/menu-button.js")),o=(e(n),a("../utils/fn.js")),p=d(o),q=a("global/document"),r=(e(q),a("global/window")),s=e(r),t="#222",u="#ccc",v={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'},w=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),c.on("loadstart",p.bind(this,this.toggleDisplay)),c.on("texttrackchange",p.bind(this,this.updateDisplay)),c.ready(p.bind(this,function(){if(c.tech_&&c.tech_.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",p.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;bc;c++)if(b=this[c],b===a){this.tracks_.splice(c,1);break}this.trigger({type:"removetrack",track:b})},n.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},c["default"]=n,b.exports=c["default"]},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"global/document":1}],113:[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("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 h(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function i(a,b){if(b){var c=void 0;for(c=0;c select").selectedIndex=0,this.el().querySelector(".vjs-bg-color > select").selectedIndex=0,this.el().querySelector(".window-color > select").selectedIndex=0,this.el().querySelector(".vjs-text-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-bg-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-window-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-edge-style select").selectedIndex=0,this.el().querySelector(".vjs-font-family select").selectedIndex=0,this.el().querySelector(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),n.on(this.el().querySelector(".vjs-fg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".window-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-text-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-window-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-percent select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-edge-style select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-family select"),"change",p.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:j()})},b.prototype.getValues=function(){var a=this.el(),b=h(a.querySelector(".vjs-edge-style select")),c=h(a.querySelector(".vjs-font-family select")),d=h(a.querySelector(".vjs-fg-color > select")),e=h(a.querySelector(".vjs-text-opacity > select")),f=h(a.querySelector(".vjs-bg-color > select")),g=h(a.querySelector(".vjs-bg-opacity > select")),i=h(a.querySelector(".window-color > select")),j=h(a.querySelector(".vjs-window-opacity > select")),k=v["default"].parseFloat(h(a.querySelector(".vjs-font-percent > select"))),l={backgroundOpacity:g,textOpacity:e,windowOpacity:j,edgeStyle:b,fontFamily:c,color:d,backgroundColor:f,windowColor:i,fontPercent:k};for(var m in l)(""===l[m]||"none"===l[m]||"fontPercent"===m&&1===l[m])&&delete l[m];return l},b.prototype.setValues=function(a){var b=this.el();i(b.querySelector(".vjs-edge-style select"),a.edgeStyle),i(b.querySelector(".vjs-font-family select"),a.fontFamily),i(b.querySelector(".vjs-fg-color > select"),a.color),i(b.querySelector(".vjs-text-opacity > select"),a.textOpacity),i(b.querySelector(".vjs-bg-color > select"),a.backgroundColor),i(b.querySelector(".vjs-bg-opacity > select"),a.backgroundOpacity),i(b.querySelector(".window-color > select"),a.windowColor),i(b.querySelector(".vjs-window-opacity > select"),a.windowOpacity);var c=a.fontPercent;c&&(c=c.toFixed(2)),i(b.querySelector(".vjs-font-percent > select"),c)},b.prototype.restoreSettings=function(){var a=t["default"](v["default"].localStorage.getItem("vjs-text-track-settings")),b=a[0],c=a[1];b&&r["default"].error(b),c&&this.setValues(c)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?v["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):v["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(l["default"]);l["default"].registerComponent("TextTrackSettings",w),c["default"]=w,b.exports=c["default"]},{"../component":58,"../utils/events.js":119,"../utils/fn.js":120,"../utils/log.js":123,"global/window":2,"safe-json-parse/tuple":48}],114:[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}}c.__esModule=!0;var f=a("./text-track-cue-list"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/guid.js"),k=d(j),l=a("../utils/browser.js"),m=d(l),n=a("./text-track-enums"),o=d(n),p=a("../utils/log.js"),q=e(p),r=a("../event-target"),s=e(r),t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("../utils/url.js"),y=a("xhr"),z=e(y),A=function E(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!a.tech)throw new Error("A tech was not provided.");var b=this;if(m.IS_IE8){b=u["default"].createElement("custom");for(var c in E.prototype)b[c]=E.prototype[c]}b.tech_=a.tech;var d=o.TextTrackMode[a.mode]||"disabled",e=o.TextTrackKind[a.kind]||"subtitles",f=a.label||"",h=a.language||a.srclang||"",j=a.id||"vjs_text_track_"+k.newGUID();("metadata"===e||"chapters"===e)&&(d="hidden"),b.cues_=[],b.activeCues_=[];var l=new g["default"](b.cues_),n=new g["default"](b.activeCues_),p=!1,q=i.bind(b,function(){this.activeCues,p&&(this.trigger("cuechange"),p=!1)});return"disabled"!==d&&b.tech_.on("timeupdate",q),Object.defineProperty(b,"kind",{get:function(){return e},set:Function.prototype}),Object.defineProperty(b,"label",{get:function(){return f},set:Function.prototype}),Object.defineProperty(b,"language",{get:function(){return h},set:Function.prototype}),Object.defineProperty(b,"id",{get:function(){return j},set:Function.prototype}),Object.defineProperty(b,"mode",{get:function(){return d},set:function(a){o.TextTrackMode[a]&&(d=a,"showing"===d&&this.tech_.on("timeupdate",q),this.trigger("modechange"))}}),Object.defineProperty(b,"cues",{get:function(){return this.loaded_?l:null},set:Function.prototype}),Object.defineProperty(b,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return n;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(p=!1,b.length!==this.activeCues_.length)p=!0;else for(var c=0;cc;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)};var B=function F(a,b){if("function"!=typeof w["default"].WebVTT)return w["default"].setTimeout(function(){F(a,b)},25);var c=new w["default"].WebVTT.Parser(w["default"],w["default"].vttjs,w["default"].WebVTT.StringDecoder());c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){q["default"].error(a)},c.parse(a),c.flush()},C=function(a,b){var c={uri:a},d=x.isCrossOrigin(a);d&&(c.cors=d),z["default"](c,i.bind(this,function(a,c,d){return a?q["default"].error(a,c):(b.loaded_=!0,void B(d,b))}))},D=function(a,b){if(null==this)throw new TypeError('"this" is null or not defined');var c=Object(this),d=c.length>>>0;if(0===d)return-1;var e=+b||0;if(Math.abs(e)===1/0&&(e=0),e>=d)return-1;for(var f=Math.max(e>=0?e:d-Math.abs(e),0);d>f;){if(f in c&&c[f]===a)return f;f++}return-1};c["default"]=A,b.exports=c["default"]},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"../utils/guid.js":122,"../utils/log.js":123,"../utils/url.js":128,"./text-track-cue-list":108,"./text-track-enums":110,"global/document":1,"global/window":2,xhr:50}],115:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator.userAgent,j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=/iPhone/i.test(i);c.IS_IPHONE=l;var m=/iPad/i.test(i);c.IS_IPAD=m;var n=/iPod/i.test(i);c.IS_IPOD=n;var o=l||m||n;c.IS_IOS=o;var p=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:void 0}();c.IOS_VERSION=p;var q=/Android/i.test(i);c.IS_ANDROID=q;var r=function(){var a,b,c=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);return c?(a=c[1]&&parseFloat(c[1]),b=c[2]&&parseFloat(c[2]),a&&b?parseFloat(c[1]+"."+c[2]):a?a:null):null}();c.ANDROID_VERSION=r;var s=q&&/webkit/i.test(i)&&2.3>r;c.IS_OLD_ANDROID=s;var t=q&&5>r&&537>k;c.IS_NATIVE_ANDROID=t;var u=/Firefox/i.test(i);c.IS_FIREFOX=u;var v=/Chrome/i.test(i);c.IS_CHROME=v;var w=/MSIE\s8\.0/.test(i);c.IS_IE8=w;var x=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch);c.TOUCH_ENABLED=x;var y="backgroundSize"in f["default"].createElement("video").style;c.BACKGROUND_SIZE_SUPPORTED=y},{"global/document":1,"global/window":2}],116:[function(a,b,c){"use strict";function d(a,b){var c,d,f=0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;gb&&(d=b),f+=d-c;return f/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":126}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./log.js"),f=d(e),g={get:function(a,b){return a[b]},set:function(a,b,c){return a[b]=c,!0}};c["default"]=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("function"==typeof Proxy){var c=function(){var c={};return Object.keys(b).forEach(function(a){g.hasOwnProperty(a)&&(c[a]=function(){return f["default"].warn(b[a]),g[a].apply(this,arguments)})}),{v:new Proxy(a,c)}}();if("object"==typeof c)return c.v}return a},b.exports=c["default"]},{"./log.js":123}],118:[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 0===a.indexOf("#")&&(a=a.slice(1)),x["default"].getElementById(a)}function h(){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=x["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var c=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?(D["default"].warn(F["default"](v,a,c)),d.setAttribute(a,c)):d[a]=c}),Object.getOwnPropertyNames(c).forEach(function(a){c[a];d.setAttribute(a,c[a])}),d}function i(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function j(a){var b=a[H];return b||(b=a[H]=B.newGUID()),G[b]||(G[b]={}),G[b]}function k(a){var b=a[H];return b?!!Object.getOwnPropertyNames(G[b]).length:!1}function l(a){var b=a[H];if(b){delete G[b];try{delete a[H]}catch(c){a.removeAttribute?a.removeAttribute(H):a[H]=null}}}function m(a,b){return-1!==(" "+a.className+" ").indexOf(" "+b+" ")}function n(a,b){m(a,b)||(a.className=""===a.className?b:a.className+" "+b)}function o(a,b){if(m(a,b)){for(var c=a.className.split(" "),d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1); -})}function p(a){var b,c,d,e,f;if(b={},c=",autoplay,controls,loop,muted,default,",a&&a.attributes&&a.attributes.length>0){d=a.attributes;for(var g=d.length-1;g>=0;g--)e=d[g].name,f=d[g].value,("boolean"==typeof a[e]||-1!==c.indexOf(","+e+","))&&(f=null!==f?!0:!1),b[e]=f}return b}function q(){u["default"].body.focus(),u["default"].onselectstart=function(){return!1}}function r(){u["default"].onselectstart=function(){return!0}}function s(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=u["default"].documentElement,d=u["default"].body,e=c.clientLeft||d.clientLeft||0,f=w["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=w["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}c.__esModule=!0,c.getEl=f,c.createEl=g,c.insertElFirst=h,c.getElData=i,c.hasElData=j,c.removeElData=k,c.hasElClass=l,c.addElClass=m,c.removeElClass=n,c.setElAttributes=o,c.getElAttributes=p,c.blockTextSelection=q,c.unblockTextSelection=r,c.findElPosition=s;var t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("./guid.js"),y=d(x),z={},A="vdata"+(new Date).getTime()},{"./guid.js":111,"global/document":1,"global/window":2}],108:[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,c){if(Array.isArray(b))return l(f,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=j(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,h=f.length;h>g&&!b.isImmediatePropagationStopped();g++)f[g].call(a,b,c)}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function g(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return l(g,a,b,c);var e=function(b){d.handlers[b]=[],k(a,b)};if(b){var f=d.handlers[b];if(f){if(!c)return void e(b);if(c.guid)for(var h=0;h0||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,b.exports=c["default"]},{}],111:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],112:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){var c=Array.prototype.slice.call(b),d=function(){},e=g["default"].console||{log:d,warn:d,error:d};a?c.unshift(a.toUpperCase()+":"):a="log",h.history.push(c),c.unshift("VIDEOJS:"),e[a].apply?e[a].apply(e,c):e[a](c.join(" "))}c.__esModule=!0;var f=a("global/window"),g=d(f),h=function(){e(null,arguments)};h.history=[],h.error=function(){e("error",arguments)},h.warn=function(){e("warn",arguments)},c["default"]=h,b.exports=c["default"]},{"global/window":2}],113:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"==typeof a&&"[object Object]"===a.toString()&&a.constructor===Object}function f(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(i),h["default"].apply(null,a),a[0]}c.__esModule=!0,c["default"]=f;var g=a("lodash-compat/object/merge"),h=d(g),i=function(a,b){return e(b)?e(a)?void 0:f(b):b};b.exports=c["default"]},{"lodash-compat/object/merge":37}],114:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=function(a){var b=f["default"].createElement("style");return b.className=a,b};c.createStyleElement=g;var h=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b};c.setTextContent=h},{"global/document":1}],115:[function(a,b,c){"use strict";function d(a,b){return void 0===a&&void 0===b?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:1,start:function(){return a},end:function(){return b}}}c.__esModule=!0,c.createTimeRange=d},{}],116:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=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='',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;hx',a=b.firstChild.href}return a};c.getAbsoluteURL=h;var i=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.getFileExtension=i},{"global/document":1}],118:[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}}d.__esModule=!0;{var g=b("global/document"),h=f(g),i=b("./setup"),j=e(i),k=b("./utils/stylesheet.js"),l=e(k),m=b("./component"),n=f(m),o=b("./event-target"),p=f(o),q=b("./utils/events.js"),r=e(q),s=b("./player"),t=f(s),u=b("./plugins.js"),v=f(u),w=b("../../src/js/utils/merge-options.js"),x=f(w),y=b("./utils/fn.js"),z=e(y),A=b("object.assign"),B=(f(A),b("./utils/time-ranges.js")),C=b("./utils/format-time.js"),D=f(C),E=b("./utils/log.js"),F=f(E),G=b("./xhr.js"),H=f(G),I=b("./utils/dom.js"),J=e(I),K=b("./utils/browser.js"),L=e(K),M=b("./utils/url.js"),N=e(M),O=b("./extends.js"),P=f(O),Q=b("lodash-compat/object/merge"),R=f(Q),S=b("./utils/create-deprecation-proxy.js"),T=f(S),U=b("./tech/html5.js"),V=(f(U),b("./tech/flash.js"));f(V)}"undefined"==typeof HTMLVideoElement&&(h["default"].createElement("video"),h["default"].createElement("audio"),h["default"].createElement("track"));var W=function Z(a,b,c){var d;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),Z.getPlayers()[a])return b&&F["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&Z.getPlayers()[a].ready(c),Z.getPlayers()[a];d=J.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||new t["default"](d,b,c)},X=l.createStyleElement("vjs-styles-defaults"),Y=h["default"].querySelector("head");Y.insertBefore(X,Y.firstChild),l.setTextContent(X,"\n .video-js {\n width: 300px;\n height: 150px;\n"),j.autoSetupTimeout(1,W),W.VERSION="5.0.0-rc.72",W.options=t["default"].prototype.options_,W.getPlayers=function(){return t["default"].players},W.players=T["default"](t["default"].players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),W.getComponent=n["default"].getComponent,W.registerComponent=n["default"].registerComponent,W.browser=L,W.TOUCH_ENABLED=L.TOUCH_ENABLED,W["extends"]=P["default"],W.mergeOptions=x["default"],W.bind=z.bind,W.plugin=v["default"],W.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),R["default"](W.options.languages,(c={},c[a]=b,c))[a]},W.log=F["default"],W.createTimeRange=B.createTimeRange,W.formatTime=D["default"],W.xhr=H["default"],W.parseUrl=N.parseUrl,W.EventTarget=p["default"],W.on=r.on,W.one=r.one,W.off=r.off,W.trigger=r.trigger,"function"==typeof a&&a.amd?a("videojs",[],function(){return W}):"object"==typeof d&&"object"==typeof c&&(c.exports=W),d["default"]=W,c.exports=d["default"]},{"../../src/js/utils/merge-options.js":113,"./component":48,"./event-target":79,"./extends.js":80,"./player":87,"./plugins.js":88,"./setup":90,"./tech/flash.js":93,"./tech/html5.js":94,"./utils/browser.js":104,"./utils/create-deprecation-proxy.js":106,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/format-time.js":110,"./utils/log.js":112,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/url.js":117,"./xhr.js":119,"global/document":1,"lodash-compat/object/merge":37,"object.assign":40}],119:[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}c.__esModule=!0;var f=a("./utils/url.js"),g=e(f),h=a("./utils/log.js"),i=(d(h),a("./utils/merge-options.js")),j=d(i),k=a("global/window"),l=d(k),m=function(a,b){var c=void 0;"string"==typeof a&&(a={uri:a}),a=j["default"]({method:"GET",timeout:45e3},a),b=b||function(){};var d=l["default"].XMLHttpRequest;"undefined"==typeof d&&(d=function(){try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP")}catch(c){}throw new Error("This browser does not support XMLHttpRequest.")});var e=new d;e.uri=a.uri;var f=g.parseUrl(a.uri),h=l["default"].location,i=function(){l["default"].clearTimeout(c),b(null,e,e.response||e.responseText)},k=function(a){l["default"].clearTimeout(c),a&&"string"!=typeof a||(a=new Error(a||"XHR Failed with a response of: "+(e&&(e.response||e.responseText)))),b(a,e)},m=f.protocol+f.host!==h.protocol+h.host;!m||!l["default"].XDomainRequest||"withCredentials"in e?!function(){var b="file:"===f.protocol||"file:"===h.protocol;e.onreadystatechange=function(){if(4===e.readyState){if(e.timedout)return k("timeout");200===e.status||b&&0===e.status?i():k()}},a.timeout&&(c=l["default"].setTimeout(function(){4!==e.readyState&&(e.timedout=!0,e.abort())},a.timeout))}():(e=new l["default"].XDomainRequest,e.onload=i,e.onerror=k,e.onprogress=function(){},e.ontimeout=function(){});try{e.open(a.method||"GET",a.uri,!0)}catch(n){return k(n)}a.withCredentials&&(e.withCredentials=!0),a.responseType&&(e.responseType=a.responseType);try{e.send()}catch(n){return k(n)}return e};c["default"]=m,b.exports=c["default"]},{"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/url.js":117,"global/window":2}]},{},[118])(118)}); -//# sourceMappingURL=video.novtt.min.js.map +a.className=c.join(" ")}}function p(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 q(a){var b,c,d,e,f;if(b={},c=",autoplay,controls,loop,muted,default,",a&&a.attributes&&a.attributes.length>0){d=a.attributes;for(var g=d.length-1;g>=0;g--)e=d[g].name,f=d[g].value,("boolean"==typeof a[e]||-1!==c.indexOf(","+e+","))&&(f=null!==f?!0:!1),b[e]=f}return b}function r(){x["default"].body.focus(),x["default"].onselectstart=function(){return!1}}function s(){x["default"].onselectstart=function(){return!0}}function t(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=x["default"].documentElement,d=x["default"].body,e=c.clientLeft||d.clientLeft||0,f=z["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=z["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}function u(a,b){var c={},d=t(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}c.__esModule=!0,c.getEl=g,c.createEl=h,c.insertElFirst=i,c.getElData=j,c.hasElData=k,c.removeElData=l,c.hasElClass=m,c.addElClass=n,c.removeElClass=o,c.setElAttributes=p,c.getElAttributes=q,c.blockTextSelection=r,c.unblockTextSelection=s,c.findElPosition=t,c.getPointerPosition=u;var v=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 ","."]),w=a("global/document"),x=e(w),y=a("global/window"),z=e(y),A=a("./guid.js"),B=d(A),C=a("./log.js"),D=e(C),E=a("tsml"),F=e(E),G={},H="vdata"+(new Date).getTime()},{"./guid.js":122,"./log.js":123,"global/document":1,"global/window":2,tsml:49}],119:[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,c){if(Array.isArray(b))return l(f,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=j(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,h=f.length;h>g&&!b.isImmediatePropagationStopped();g++)f[g].call(a,b,c)}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function g(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return l(g,a,b,c);var e=function(b){d.handlers[b]=[],k(a,b)};if(b){var f=d.handlers[b];if(f){if(!c)return void e(b);if(c.guid)for(var h=0;h0||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,b.exports=c["default"]},{}],122:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],123:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){var c=Array.prototype.slice.call(b),d=function(){},e=g["default"].console||{log:d,warn:d,error:d};a?c.unshift(a.toUpperCase()+":"):a="log",h.history.push(c),c.unshift("VIDEOJS:"),e[a].apply?e[a].apply(e,c):e[a](c.join(" "))}c.__esModule=!0;var f=a("global/window"),g=d(f),h=function(){e(null,arguments)};h.history=[],h.error=function(){e("error",arguments)},h.warn=function(){e("warn",arguments)},c["default"]=h,b.exports=c["default"]},{"global/window":2}],124:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"==typeof a&&"[object Object]"===a.toString()&&a.constructor===Object}function f(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(i),h["default"].apply(null,a),a[0]}c.__esModule=!0,c["default"]=f;var g=a("lodash-compat/object/merge"),h=d(g),i=function(a,b){return e(b)?e(a)?void 0:f(b):b};b.exports=c["default"]},{"lodash-compat/object/merge":40}],125:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=function(a){var b=f["default"].createElement("style");return b.className=a,b};c.createStyleElement=g;var h=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b};c.setTextContent=h},{"global/document":1}],126:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){return Array.isArray(a)?f(a):void 0===a||void 0===b?f():f([[a,b]])}function f(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:g.bind(null,"start",0,a),end:g.bind(null,"end",1,a)}}function g(a,b,c,d){return void 0===d&&(j["default"].warn("DEPRECATED: Function '"+a+"' on 'TimeRanges' called without an index argument."),d=0),h(a,d,c.length-1),c[d][b]}function h(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+").")}c.__esModule=!0,c.createTimeRanges=e;var i=a("./log.js"),j=d(i);c.createTimeRange=e},{"./log.js":123}],127:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],128:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=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='',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;hx',a=b.firstChild.href}return a};c.getAbsoluteURL=j;var k=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.getFileExtension=k;var l=function(a){var b=i(a),c=h["default"].location,d=":"===b.protocol?c.protocol:b.protocol,e=d+b.host!==c.protocol+c.host;return e};c.isCrossOrigin=l},{"global/document":1,"global/window":2}],129:[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}}d.__esModule=!0;{var g=b("global/document"),h=f(g),i=b("./setup"),j=e(i),k=b("./utils/stylesheet.js"),l=e(k),m=b("./component"),n=f(m),o=b("./event-target"),p=f(o),q=b("./utils/events.js"),r=e(q),s=b("./player"),t=f(s),u=b("./plugins.js"),v=f(u),w=b("../../src/js/utils/merge-options.js"),x=f(w),y=b("./utils/fn.js"),z=e(y),A=b("./tracks/text-track.js"),B=f(A),C=b("object.assign"),D=(f(C),b("./utils/time-ranges.js")),E=b("./utils/format-time.js"),F=f(E),G=b("./utils/log.js"),H=f(G),I=b("./utils/dom.js"),J=e(I),K=b("./utils/browser.js"),L=e(K),M=b("./utils/url.js"),N=e(M),O=b("./extend.js"),P=f(O),Q=b("lodash-compat/object/merge"),R=f(Q),S=b("./utils/create-deprecation-proxy.js"),T=f(S),U=b("xhr"),V=f(U),W=b("./tech/html5.js"),X=(f(W),b("./tech/flash.js"));f(X)}"undefined"==typeof HTMLVideoElement&&(h["default"].createElement("video"),h["default"].createElement("audio"),h["default"].createElement("track"));var Y=function _(a,b,c){var d;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),_.getPlayers()[a])return b&&H["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&_.getPlayers()[a].ready(c),_.getPlayers()[a];d=J.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||new t["default"](d,b,c)},Z=h["default"].querySelector(".vjs-styles-defaults");if(!Z){Z=l.createStyleElement("vjs-styles-defaults");var $=h["default"].querySelector("head");$.insertBefore(Z,$.firstChild),l.setTextContent(Z,"\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ")}j.autoSetupTimeout(1,Y),Y.VERSION="5.0.0",Y.options=t["default"].prototype.options_,Y.getPlayers=function(){return t["default"].players},Y.players=T["default"](t["default"].players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),Y.getComponent=n["default"].getComponent,Y.registerComponent=n["default"].registerComponent,Y.browser=L,Y.TOUCH_ENABLED=L.TOUCH_ENABLED,Y.extend=P["default"],Y.mergeOptions=x["default"],Y.bind=z.bind,Y.plugin=v["default"],Y.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),R["default"](Y.options.languages,(c={},c[a]=b,c))[a]},Y.log=H["default"],Y.createTimeRange=Y.createTimeRanges=D.createTimeRanges,Y.formatTime=F["default"],Y.parseUrl=N.parseUrl,Y.isCrossOrigin=N.isCrossOrigin,Y.EventTarget=p["default"],Y.on=r.on,Y.one=r.one,Y.off=r.off,Y.trigger=r.trigger,Y.xhr=V["default"],Y.TextTrack=B["default"],"function"==typeof a&&a.amd?a("videojs",[],function(){return Y}):"object"==typeof d&&"object"==typeof c&&(c.exports=Y),d["default"]=Y,c.exports=d["default"]},{"../../src/js/utils/merge-options.js":124,"./component":58,"./event-target":90,"./extend.js":91,"./player":98,"./plugins.js":99,"./setup":101,"./tech/flash.js":104,"./tech/html5.js":105,"./tracks/text-track.js":114,"./utils/browser.js":115,"./utils/create-deprecation-proxy.js":117,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/format-time.js":121,"./utils/log.js":123,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/url.js":128,"global/document":1,"lodash-compat/object/merge":40,"object.assign":43,xhr:50}]},{},[129])(129)}); +//# sourceMappingURL=video.novtt.min.js.map \ No newline at end of file diff --git a/node_modules/video.js/dist/alt/video.novtt.min.js.map b/node_modules/video.js/dist/alt/video.novtt.min.js.map index 25a836f..6d96ddf 100644 --- a/node_modules/video.js/dist/alt/video.novtt.min.js.map +++ b/node_modules/video.js/dist/alt/video.novtt.min.js.map @@ -1 +1 @@ -{"version":3,"file":"video.novtt.min.js","sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object.assign/index.js","node_modules/object.assign/node_modules/define-properties/index.js","node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js","node_modules/object.assign/node_modules/object-keys/index.js","node_modules/object.assign/node_modules/object-keys/isArguments.js","node_modules/safe-json-parse/tuple.js","src/js/big-play-button.js","src/js/button.js","src/js/component.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extends.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/player.js","src/js/plugins.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-enums.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/create-deprecation-proxy.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js","src/js/xhr.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_dereq_","topLevel","minDoc","document","doccy","min-document",2,3,4,"restParam","func","start","TypeError","FUNC_ERROR_TEXT","nativeMax","undefined","args","arguments","index","rest","Array","otherArgs","apply","Math","max",5,"arrayCopy","source","array",6,"arrayEach","iteratee",7,"baseCopy","props","object","key",8,"createBaseFor","baseFor","./createBaseFor",9,"baseForIn","keysIn","../object/keysIn","./baseFor",10,"baseMerge","customizer","stackA","stackB","isObject","isSrcArr","isArrayLike","isArray","isTypedArray","keys","srcValue","isObjectLike","baseMergeDeep","value","result","isCommon","../lang/isArray","../lang/isObject","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",11,"mergeFunc","isPlainObject","isArguments","toPlainObject","push","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",12,"toObject","baseProperty","./toObject",13,"bindCallback","thisArg","argCount","identity","collection","accumulator","other","../utility/identity",14,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",15,"fromRight","keysFunc","iterable",16,"getLength","./baseProperty",17,"getNative","isNative","../lang/isNative",18,"isLength","./getLength","./isLength",19,"isHostObject","Object","toString",20,"reIsUint","test","MAX_SAFE_INTEGER","isIndex",21,"type","./isIndex",22,23,24,"shimKeys","propsLength","allowIndexes","isString","hasOwnProperty","objectProto","prototype","../lang/isString",25,"support","unindexedChars","charAt","../support",26,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",27,"arrayTag","objToString","nativeIsArray","../internal/getNative","../internal/isLength",28,"isFunction","funcTag","./isObject",29,"reIsNative","fnToString","reIsHostCtor","Function","RegExp","replace","../internal/isHostObject","./isFunction",30,31,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",32,"stringTag",33,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",34,"../internal/baseCopy",35,"nativeKeys","../internal/shimKeys",36,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","enumPrototypes","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",37,"merge","../internal/baseMerge","../internal/createAssigner",38,"arrayProto","splice","x","0","y","spliceObjects",39,40,"canBeObject","obj","hasSymbols","Symbol","defineProperties","propIsEnumerable","assignShim","target","syms","objTarget","getOwnPropertySymbols","shim","assignHasPendingExceptions","assign","preventExtensions","thrower","define-properties","object-keys",41,"foreach","toStr","fn","arePropertyDescriptorsSupported","defineProperty","enumerable","_","supportsDescriptors","name","predicate","configurable","writable","map","predicates","concat",42,"hasOwn","ctx","k",43,"has","slice","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$window","$console","$parent","$self","$frames","$webkitIndexedDB","$webkitStorageInfo","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","keysWorksWithArguments","originalKeys",44,"str","callee",45,"SafeParseTuple","reviver","json","error","Constructor","instance","player_","play","__esModule","newObj","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_component2","_interopRequireDefault","_component","Dom","_interopRequireWildcard","_utilsDomJs","Button","_Component","player","options","_classCallCheck","createEl","_objectAssign2","role","aria-live","el","controlTextEl_","className","handleClick","default","_globalWindow2","_globalWindow","Fn","_utilsFnJs","Component","ready","options_","_utilsMergeOptionsJs2","id_","id","Guid","newGUID","el_","childIndex_","initChildren","dispose","trigger","bubbles","children_","childNameIndex_","off","_utilsLogJs2","warn","tagName","attributes","localize","string","languages","language","primaryCode","split","addChild","child","component","componentName","childFound","parentOptions","_this","opts","children","_name","handleAdd","_this2","first","guid","cleanRemover","Events","on","second","bind","third","nodeName","one","_this3","_arguments","newFunc","sync","isReady_","setTimeout","triggerReady","readyQueue","readyQueue_","dimension","widthOrHeight","num","skipListeners","style","pxIndex","touchStart","touchTimeThreshold","couldBeTap","event","touches","firstTouch","Date","getTime","xdiff","pageX","touchDistance","sqrt","ydiff","tapMovementThreshold","noTap","touchTime","preventDefault","clearInterval","touchHolding","touchEnd","report","timeout","timeoutId","disposeFn","clearTimeout","intervalId","setInterval","interval","getComponent","components_","extend","subObj","_name2","ControlBar","exitFullscreen","requestFullscreen","LiveDisplay","contentEl_","appendChild","_button2","_button","MuteToggle","_Button","update","tech","addClass","vol","volume","level","toMute","muted","localizedMute","controlText","removeElClass","addElClass","PlayToggle","removeClass","_playbackRateMenuItemJs2","_playbackRateMenuItemJs","PlaybackRateMenuButton","_MenuButton","labelEl_","createMenu","rates","playbackRates","currentRate","playbackRate","newRate","playbackRateSupported","PlaybackRateMenuItem","label","rate","parseFloat","selected","LoadProgressBar","buffered","duration","percent","time","end","width","percentify","bufferedEnd","part","left","PlayProgressBar","updateDataAttr","scrubbing","getCache","currentTime","_componentJs2","_loadProgressBarJs","SeekBar","_Slider","newTime","calculateDistance","stepBack","_sliderSliderJs2","loadProgressBar","_Spacer","buildCSSClass","CaptionSettingsMenuItem","_TextTrackMenuItem","kind","CaptionsButton","_TextTrackButton","threshold","createItems","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","_menuMenuJs2","_menuMenuJs","ChaptersButton","items","tracks","textTracks","track","kind_","cues","chaptersTrack","menu","contentEl","tabIndex","cue","mi","_menuMenuItemJs2","_menuMenuItemJs","ChaptersTrackMenuItem","_MenuItem","OffTextTrackMenuItem","handleTracksChange","SubtitlesButton","_menuMenuButtonJs2","_menuMenuButtonJs","TextTrackButton","hide","updateHandler","removeEventListener","_offTextTrackMenuItemJs2","TextTrackMenuItem","onchange","Event","err","_globalDocument2","createEvent","CurrentTimeDisplay","updateContent","localizedText","_utilsFormatTimeJs2","DurationDisplay","formattedTime","innerHTML","RemainingTimeDisplay","_sliderSliderJs","_componentJs","VolumeBar","toFixed","setAttribute","VolumeControl","VolumeMenuButton","vertical","volumeUpdate","orientationClass","contentElType","vc","_volumeControlVolumeBarJs2","volumeBar","_muteToggleJs2","ErrorDisplay","message","_utilsEventsJs","EventTarget","allowedEvents_","ael","addEventListener","extendsFn","subClassMethods","methods","init","_utilsLog2","FullscreenApi","apiMap","specApi","browserApi","_objectAssign","MediaError","status","errorTypes","_menuJs2","_menuJs","MenuButton","title","unlockShowing","handleKeyPress","which","buttonPressed_","unpressButton","pressButton","MenuItem","_selected","append","_globalDocument","_utilsLogJs","_utilsToTitleCaseJs2","_utilsToTitleCaseJs","_utilsMergeOptionsJs","_tracksTextTrackListConverterJs","_errorDisplayJs","reportTouchActivity","languagesToLower","poster_","poster","controls","scrubbing_","playerOptionsCopy","plugins","getOwnPropertyNames","forEach","isAudio","toLowerCase","Player","players","styleEl_","parentNode","removeChild","attrs","getElAttributes","attr","stylesheet","createStyleElement","defaultsStyleEl","querySelector","fluid","aspectRatio","initNetworkState_","networkState","privDimension","_dimension","parsedVal","isNaN","bool","fluid_","ratio","updateStyleEl_","aspectRatio_","videoWidth","videoHeight","ratioParts","ratioMultiplier","width_","height_","loadTech","techName","unloadTech","disposeMediaElement","techReady","techOptions","nativeControlsForTouch","playerId","techId","textTracks_","preload","loop","vtt.js","src","cache_","startTime","techComponent","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechReady","handleTechLoadStart","handleTechWaiting","handleTechCanPlay","handleTechCanPlayThrough","handleTechPlaying","handleTechEnded","handleTechSeeking","handleTechSeeked","handleTechPlay","handleTechFirstPlay","handleTechPause","handleTechProgress","handleTechDurationChange","handleTechFullscreenChange","handleTechError","handleTechSuspend","handleTechAbort","handleTechEmptied","handleTechLoadedMetaData","handleTechTimeUpdate","handleTechRateChange","handleTechVolumeChange","usingNativeControls","techGet","addTechControlsListeners","removeTechControlsListeners","techCall","paused","hasStarted","_hasStarted","hasStarted_","handleTechClick","button","updateDuration","method","arg","isScrubbing","seconds","percentAsDecimal","min","fsApi","fullscreenchange","documentFullscreenChange","isFullscreen","fullscreenElement","supportsFullScreen","_fullscreenApiJs2","fullWindowOnEscKey","exitFullWindow","documentElement","overflow","docOrigOverflow","selectSource","techOrder","isSupported","b","canPlaySource","sourceList_","currentTech","load","sourceTech","controls_","error_","userActive","userActive_","stopPropagation","lastMoveX","lastMoveY","handleActivity","reportUserActivity","handleMouseMove","screenX","screenY","mouseInProgress","handleMouseUp","inactivityTimeout","userActivity_","tagOptions","dataSetup","_safeParseTuple","_safeJsonParseTuple2","data","hasChildNodes","childNodes","childName","baseOptions","mediaLoader","textTrackDisplay","controlBar","notSupportedMessage","handleError","flexNotSupported_","createElement","_buttonJs2","_buttonJs","PosterImage","url","setSrc","fallbackImg_","backgroundImage","autoSetup","vids","getElementsByTagName","audios","mediaEls","mediaEl","getAttribute","autoSetupTimeout","_windowLoaded","wait","vjs","readyState","Slider","bar","getChild","barName","handleMouseDown","blockTextSelection","unblockTextSelection","progress","getPercent","percentage","box","findElPosition","boxW","offsetWidth","boxH","offsetHeight","pageY","changedTouches","boxY","vertical_","../component.js","../utils/dom.js","global/document","object.assign",92,"FlashRtmpDecorator","Flash","rtmp/mp4","rtmp/flv","streamFromParts","connection","stream","parts","streamBegin","connEnd","substring","isStreamingType","srcType","streamingFormats","isStreamingSrc","rtmpSourceHandler","handleSource","srcParts","_createSetter","attrUpper","toUpperCase","_api","val","_createGetter","vjs_getProperty","_tech2","_tech","_utilsUrlJs","setSource","_Tech","objId","flashVars","readyFunction","errorEventProxyFunction","autoplay","params","wmode","bgcolor","Url","getAbsoluteURL","vjs_src","setCurrentTime","seekable","enterFullScreen","_readWrite","_readOnly","nativeSourceHandler","canHandleSource","guessMimeType","ext","getFileExtension","formats","video/flv","onReady","currSwf","getEl","checkReady","eventName","swfID","version","ActiveXObject","GetVariable","match","navigator","description","getEmbedCode","swf","objTag","flashVarsString","paramsString","movie","flashvars","allowNetworking","_techJs2","_techJs","Html5","currentSrc","nodes","node","nodesLength","featuresNativeTextTracks","remoteTextTracks","addTrack_","removeNodes","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","tt","handleTextTrackChange_","handleTextTrackAdd_","emulatedTt","clone","cloneNode","insertBefore","tagAttributes","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","overwriteAttrs","handleTextTrackChange","srcElement","webkitEnterFullScreen","video","HAVE_METADATA","addRemoteTextTrack","removeTrack_","querySelectorAll","canPlayType","TEST_VID","supportsNativeTextTracks","supportsTextTracks","IS_FIREFOX","canControlPlaybackRate","patchCanPlayType","ANDROID_VERSION","mpegurlRE","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","removeAttribute","MediaLoader","playerOptions","_tracksTextTrack2","_tracksTextTrack","Tech","manualProgressOn","featuresTimeupdateEvents","initControlsListeners","nativeCaptions","nativeTextTracks","trackProgress","stopTrackingProgress","numBufferedPercent","bufferedPercent","bufferedPercent_","manualProgress","manualProgressOff","_mediaErrorJs2","textTrackListChanges","emulateTextTracks","script","updateDisplay","mode","setPoster","createTrackHelper","featuresVolumeControl","featuresFullscreenResize","handlers","sourceHandlers","selectSourceHandler","can","srcObj","originalSeekable","sh","disposeSourceHandler","sourceHandler_","TextTrackCueList","list","IS_IE8","prop","setCues_","get","oldLength","length_","defineProp","getCueById","rule","darkGray","lightGray","fontMap","monospace","sansSerif","serif","TextTrackDisplay","toggleDisplay","clearDisplay","updateForTrack","_i","cueDiv","displayState","overrides","color","firstChild","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","height","top","bottom","fontFamily","fontVariant","showing","trackToJson_","inBandMetadataTrackDispatchType","textTracksToJson","trackEls","trackEl","addedTrack","addCue","_eventTarget2","_eventTarget","TextTrackList","tracks_","change","removetrack","_event","rtrack","getTrackById","selectedOption","selectedOptions","selectedIndex","setSelectedOption","option","TextTrackSettings","persistTextTrackSettings","saveSettings","getValues","textEdge","getSelectedOptionValue","fgColor","bgColor","bgOpacity","setValues","values","restoreSettings","ttDisplay","registerComponent","_textTrackCueList2","_textTrackCueList","_utilsGuidJs","TextTrack","tech_","TextTrackEnum","TextTrackMode","cues_","activeCues_","activeCues","changed","timeupdateHandler","set","newMode","loaded_","ct","active","loadTrack","cuechange","removeCue","removed","parseCues","srcContent","parser","_xhrJs2","response","responseBody","O","len","fromIndex","abs","searchElement","IS_IPHONE","IS_IPAD","USER_AGENT","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","major","IS_NATIVE_ANDROID","bufferedDuration","_timeRangesJs","createTimeRange","_logJs2","_logJs","defaultBehaviors","messages","Proxy","_ret","handler","propName","indexOf","getElData","elIdAttr","hasElData","removeElData","elData","element","classToRemove","hasElClass","attrName","attrValue","attrVal","knownBooleans","getBoundingClientRect","docEl","body","scrollLeft","pageXOffset","clientLeft","clientTop","scrollTop","pageYOffset","elem","_handleMultipleEvents","dispatcher","fixEvent","handlersCopy","m","isImmediatePropagationStopped","hash","removeType","_cleanUpEvents","elemData","parent","isPropagationStopped","defaultPrevented","targetData","disabled","old","relatedTarget","fromElement","toElement","returnValue","cancelBubble","returnTrue","returnFalse","stopImmediatePropagation","doc","clientY","detachEvent","global/window",109,"context","uid","h","floor","gm","guide","argsArray","noop","console","log","history","unshift","_logType","mergeOptions","_start","_end","href","addToBody","host","protocol","div","details","path","splitPathRe","pathParts","exec","_pluginsJs2","_pluginsJs","_xhrJs","_lodashCompatObjectMerge","_utilsCreateDeprecationProxyJs","_techFlashJs","_techHtml5Js","getPlayers","_lodashCompatObjectMerge2","_merge","xhr","callback","uri","XHR","XMLHttpRequest","request","urlInfo","parseUrl","winLoc","location","successHandler","abortTimeout","responseText","errorHandler","crossOrigin","fileUrl","onreadystatechange","timedout","abort","onload","onprogress","ontimeout","open","withCredentials","responseType"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n baseMergeDeep = require('./baseMergeDeep'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isObject = require('../lang/isObject'),\n isObjectLike = require('./isObjectLike'),\n isTypedArray = require('../lang/isTypedArray'),\n keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n props = isSrcArr ? undefined : keys(source);\n\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((result !== undefined || (isSrcArr && !(key in object))) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isPlainObject = require('../lang/isPlainObject'),\n isTypedArray = require('../lang/isTypedArray'),\n toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : toObject(object)[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n isIterateeCall = require('./isIterateeCall'),\n restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n try {\n Object({ 'toString': 0 } + '');\n } catch(e) {\n return function() { return false; };\n }\n return function(value) {\n // IE < 9 presents many host objects as `Object` objects that can coerce\n // to strings despite having improperly defined `toString` methods.\n return typeof value.toString != 'function' && typeof (value + '') == 'string';\n };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n isIndex = require('./isIndex'),\n isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isIndex = require('./isIndex'),\n isLength = require('./isLength'),\n isString = require('../lang/isString'),\n keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n if (support.unindexedChars && isString(value)) {\n var index = -1,\n length = value.length,\n result = Object(value);\n\n while (++index < length) {\n result[index] = value.charAt(index);\n }\n return result;\n }\n return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) &&\n hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 which returns 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n isArguments = require('./isArguments'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n if (support.ownLast) {\n baseForIn(value, function(subValue, key, object) {\n result = hasOwnProperty.call(object, key);\n return false;\n });\n return result !== false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n isArrayLike = require('../internal/isArrayLike'),\n isObject = require('../lang/isObject'),\n shimKeys = require('../internal/shimKeys'),\n support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isFunction = require('../lang/isFunction'),\n isIndex = require('../internal/isIndex'),\n isLength = require('../internal/isLength'),\n isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n objectProto = Object.prototype,\n stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n for (var tag in nonEnumProps) {\n if (hasOwnProperty.call(nonEnumProps, tag)) {\n var props = nonEnumProps[tag];\n props[key] = hasOwnProperty.call(props, key);\n }\n }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n isProto = proto === object,\n result = Array(length),\n skipIndexes = length > 0,\n skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n skipProto = support.enumPrototypes && isFunction(object);\n\n while (++index < length) {\n result[index] = (index + '');\n }\n // lodash skips the `constructor` property when it infers it's iterating\n // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n // attribute of an existing property and the `constructor` property of a\n // prototype defaults to non-enumerable.\n for (var key in object) {\n if (!(skipProto && key == 'prototype') &&\n !(skipErrorProps && (key == 'message' || key == 'name')) &&\n !(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n if (support.nonEnumShadows && object !== objectProto) {\n var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n if (tag == objectTag) {\n proto = objectProto;\n }\n length = shadowProps.length;\n while (length--) {\n key = shadowProps[length];\n var nonEnum = nonEnums[key];\n if (!(isProto && nonEnum) &&\n (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n result.push(key);\n }\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n errorProto = Error.prototype,\n objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `name` or `message` properties of `Error.prototype` are\n * enumerable by default (IE < 9, Safari < 5.1).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n propertyIsEnumerable.call(errorProto, 'name');\n\n /**\n * Detect if `prototype` properties are enumerable by default.\n *\n * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n * (if the prototype or a property on the prototype has been set)\n * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n * property to `true`.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n /**\n * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n *\n * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.nonEnumShadows = !/valueOf/.test(props);\n\n /**\n * Detect if own properties are iterated after inherited properties (IE < 9).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.ownLast = props[0] != 'x';\n\n /**\n * Detect if `Array#shift` and `Array#splice` augment array-like objects\n * correctly.\n *\n * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n * `shift()` and `splice()` functions that fail to remove the last element,\n * `value[0]`, of array-like objects even though the \"length\" property is\n * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n * while `splice()` is buggy regardless of mode in IE < 9.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n /**\n * Detect lack of support for accessing string characters by index.\n *\n * IE < 8 can't access characters by index. IE 8 can only access characters\n * by index on string literals, not string objects.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\nvar defineProperties = require('define-properties');\nvar toObject = Object;\nvar push = Array.prototype.push;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar assignShim = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tif (propIsEnumerable.call(source, syms[i])) {\n\t\t\t\t\tpush.call(props, syms[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tobjTarget[props[i]] = source[props[i]];\n\t\t}\n\t}\n\treturn objTarget;\n};\n\ndefineProperties(assignShim, {\n\tshim: function shimObjectAssign() {\n\t\tvar assignHasPendingExceptions = function () {\n\t\t\tif (!Object.assign || !Object.preventExtensions) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t\t\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\t\t\tvar thrower = Object.preventExtensions({ 1: 2 });\n\t\t\ttry {\n\t\t\t\tObject.assign(thrower, 'xy');\n\t\t\t} catch (e) {\n\t\t\t\treturn thrower[1] === 'y';\n\t\t\t}\n\t\t};\n\t\tdefineProperties(\n\t\t\tObject,\n\t\t\t{ assign: assignShim },\n\t\t\t{ assign: assignHasPendingExceptions }\n\t\t);\n\t\treturn Object.assign || assignShim;\n\t}\n});\n\nmodule.exports = assignShim;\n","'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { value: obj, enumerable: false });\n /* eslint-disable no-unused-vars */\n for (var _ in obj) { return false; }\n /* eslint-enable no-unused-vars */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tvalue: value\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$window: true,\n\t$console: true,\n\t$parent: true,\n\t$self: true,\n\t$frames: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\ttry {\n\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' && !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t} else {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n constructor(player, options) {\n super(player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return 'vjs-big-play-button';\n }\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.play();\n }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}) {\n // Add standard Aria and Tabindex info\n props = assign({\n className: this.buildCSSClass(),\n 'role': 'button',\n 'type': 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n tabIndex: 0\n }, props);\n\n let el = super.createEl(tag, props);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick();\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
\n *
Button
\n *
\n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n * ```js\n * Parent.prototype.options_ = {\n * children: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * children: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * children: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, attributes) {\n return Dom.createEl(tagName, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
\n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
myButton
\n * // -> myButton === myComonent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * children: {\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_.children = {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * ```\n * // Or when creating the component\n * ```js\n * var myComp = new MyComponent(player, {\n * children: {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * });\n * ```\n * The children option can also be an Array of child names or\n * child options objects (that also include a 'name' key).\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extends(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'muteToggle',\n 'volumeControl',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n * \n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`,\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n }\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech\n && this.player().tech['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n /**\n * Update progress bar\n *\n * @method update\n */\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: {\n 'seekBar': {}\n }\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder',\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: {\n 'loadProgressBar': {},\n 'playProgressBar': {}\n },\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl({\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {Object} props An object of properties \n * @return {Element}\n * @method createEl\n */\n createEl(props) {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech && this.player().tech['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-chapters-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabIndex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-subtitles-button ${super.buildCSSClass()}`;\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n innerHTML: `${this.localize('Duration Time')} 0:00`, // label the duration time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display \n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n innerHTML: `${this.localize('Remaining Time')} -0:00`, // label the remaining time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
/
'\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar',\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: {\n 'volumeLevel': {}\n },\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: {\n 'volumeBar': {}\n }\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using a horizontal\n // slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well, since that will\n // need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n this.addClass('vjs-menu-button');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vc = new VolumeBar(this.player_, this.options_.volumeBar);\n\n vc.on('focus', function() {\n menu.lockShowing();\n });\n vc.on('blur', function() {\n menu.unlockShowing();\n });\n menu.addChild(vc);\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n /**\n * Update the error message in localized language\n *\n * @method update\n */\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extends.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extends(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendsFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendsFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (let i=0; i 1) {\n this.show();\n }\n }\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n createItems(){}\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n }\n\n /**\n * Focus - Add keyboard functionality to element\n * This function is not needed anymore. Instead, the\n * keyboard functionality is handled by\n * treating the button as triggering a submenu.\n * When the button is pressed, the submenu\n * appears. Pressing the button again makes\n * the submenu disappear.\n *\n * @method handleFocus\n */\n handleFocus() {}\n\n /**\n * Can't turn off list display that we turned\n * on with focus, because list would go away.\n *\n * @method handleBlur\n */\n handleBlur() {}\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n handleClick() {\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n /**\n * Handle key press on menu\n *\n * @param {Object} Key press event\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc \n * @return {Element}\n * @method createEl\n */\n createEl(type, props) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props));\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive_ = true;\n this.reportUserActivity();\n this.listenForUserActivity();\n\n this.on('fullscreenchange', this.handleFullscreenChange);\n this.on('stageclick', this.handleStageClick);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech) { this.tech.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech\n */\n loadTech(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech) {\n this.unloadTech();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n var techReady = Fn.bind(this, function() {\n this.triggerReady();\n });\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech = new techComponent(techOptions);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech);\n\n this.on(this.tech, 'ready', this.handleTechReady);\n\n // Listen to every HTML5 events and trigger them back on the player for the plugins\n this.on(this.tech, 'loadstart', this.handleTechLoadStart);\n this.on(this.tech, 'waiting', this.handleTechWaiting);\n this.on(this.tech, 'canplay', this.handleTechCanPlay);\n this.on(this.tech, 'canplaythrough', this.handleTechCanPlayThrough);\n this.on(this.tech, 'playing', this.handleTechPlaying);\n this.on(this.tech, 'ended', this.handleTechEnded);\n this.on(this.tech, 'seeking', this.handleTechSeeking);\n this.on(this.tech, 'seeked', this.handleTechSeeked);\n this.on(this.tech, 'play', this.handleTechPlay);\n this.on(this.tech, 'firstplay', this.handleTechFirstPlay);\n this.on(this.tech, 'pause', this.handleTechPause);\n this.on(this.tech, 'progress', this.handleTechProgress);\n this.on(this.tech, 'durationchange', this.handleTechDurationChange);\n this.on(this.tech, 'fullscreenchange', this.handleTechFullscreenChange);\n this.on(this.tech, 'error', this.handleTechError);\n this.on(this.tech, 'suspend', this.handleTechSuspend);\n this.on(this.tech, 'abort', this.handleTechAbort);\n this.on(this.tech, 'emptied', this.handleTechEmptied);\n this.on(this.tech, 'stalled', this.handleTechStalled);\n this.on(this.tech, 'loadedmetadata', this.handleTechLoadedMetaData);\n this.on(this.tech, 'loadeddata', this.handleTechLoadedData);\n this.on(this.tech, 'timeupdate', this.handleTechTimeUpdate);\n this.on(this.tech, 'ratechange', this.handleTechRateChange);\n this.on(this.tech, 'volumechange', this.handleTechVolumeChange);\n this.on(this.tech, 'texttrackchange', this.onTextTrackChange);\n this.on(this.tech, 'loadedmetadata', this.updateStyleEl_);\n\n this.usingNativeControls(this.techGet('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech.ready(techReady, true);\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech\n */\n unloadTech() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech.dispose();\n\n this.tech = false;\n }\n\n /**\n * Add playback technology listeners\n *\n * @method addTechControlsListeners\n */\n addTechControlsListeners() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech, 'mousedown', this.handleTechClick);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech, 'touchstart', this.handleTechTouchStart);\n this.on(this.tech, 'touchmove', this.handleTechTouchMove);\n this.on(this.tech, 'touchend', this.handleTechTouchEnd);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech, 'tap', this.handleTechTap);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners\n */\n removeTechControlsListeners() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech, 'tap', this.handleTechTap);\n this.off(this.tech, 'touchstart', this.handleTechTouchStart);\n this.off(this.tech, 'touchmove', this.handleTechTouchMove);\n this.off(this.tech, 'touchend', this.handleTechTouchEnd);\n this.off(this.tech, 'mousedown', this.handleTechClick);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @private\n * @method handleTechReady\n */\n handleTechReady() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall('setVolume', this.cache_.volume);\n }\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @event loadstart\n */\n handleTechLoadStart() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @event play\n */\n handleTechPlay() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @event waiting\n */\n handleTechWaiting() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplay\n */\n handleTechCanPlay() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplaythrough\n */\n handleTechCanPlayThrough() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event playing\n */\n handleTechPlaying() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @event seeking\n */\n handleTechSeeking() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @event seeked\n */\n handleTechSeeked() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\n handleTechFirstPlay() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @event pause\n */\n handleTechPause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @event progress\n */\n handleTechProgress() {\n this.trigger('progress');\n\n // Add custom event for when source is finished downloading.\n if (this.bufferedPercent() === 1) {\n this.trigger('loadedalldata');\n }\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @event ended\n */\n handleTechEnded() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @event durationchange\n */\n handleTechDurationChange() {\n this.updateDuration();\n this.trigger('durationchange');\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @method handleTechClick\n */\n handleTechClick(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @method handleTechTap\n */\n handleTechTap() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @method handleTechTouchStart\n */\n handleTechTouchStart() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @method handleTechTouchMove\n */\n handleTechTouchMove() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @method handleTechTouchEnd\n */\n handleTechTouchEnd(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Update the duration of the player using the tech\n *\n * @private\n * @method updateDuration\n */\n updateDuration() {\n // Allows for caching value instead of asking player each time.\n // We need to get the techGet response and check for a value so we don't\n // accidentally cause the stack to blow up.\n var duration = this.techGet('duration');\n if (duration) {\n if (duration < 0) {\n duration = Infinity;\n }\n this.duration(duration);\n // Determine if the stream is live and propagate styles down to UI.\n if (duration === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n }\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @event fullscreenchange\n */\n handleFullscreenChange() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick\n */\n handleStageClick() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @method handleTechFullscreenChange\n */\n handleTechFullscreenChange(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @event error\n */\n handleTechError() {\n let error = this.tech.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @event suspend\n */\n handleTechSuspend() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @event abort\n */\n handleTechAbort() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @event emptied\n */\n handleTechEmptied() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @event stalled\n */\n handleTechStalled() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @event loadedmetadata\n */\n handleTechLoadedMetaData() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @event loaddata\n */\n handleTechLoadedData() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @event timeupdate\n */\n handleTechTimeUpdate() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @event ratechange\n */\n handleTechRateChange() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @event volumechange\n */\n handleTechVolumeChange() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @event texttrackchange\n */\n onTextTrackChange() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @method techCall\n */\n techCall(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech && !this.tech.isReady_) {\n this.tech.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @method techGet\n */\n techGet(method) {\n if (this.tech && this.tech.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName} playback technology element.`, e);\n this.tech.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds !== undefined) {\n\n // cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = parseFloat(seconds);\n\n return this;\n }\n\n if (this.cache_.duration === undefined) {\n this.updateDuration();\n }\n\n return this.cache_.duration || 0;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall('setMuted', muted);\n return this;\n }\n return this.techGet('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech.supportsFullScreen()) {\n this.techCall('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech && this.tech['featuresPlaybackRate']) {\n return this.techGet('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech && this.tech['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech && this.tech['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech && this.tech['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech && this.tech['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech && this.tech['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall('initialTime'); },\n // startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n // played: function(){ return this.techCall('played'); },\n // seekable: function(){ return this.techCall('seekable'); },\n // videoTracks: function(){ return this.techCall('videoTracks'); },\n // audioTracks: function(){ return this.techCall('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n // mediaGroup: function(){ return this.techCall('mediaGroup'); },\n // controller: function(){ return this.techCall('controller'); },\n // defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n // TODO\n // currentSrcList: the array of sources including other formats and bitrates\n // playList: array of source lists in order of playback\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) { this.el_.src = src; }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){ this.el_.load(); }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i 0) {\n this.trigger('loadstart');\n }\n // Allow the tech ready event to handle synchronisity\n }, true);\n }\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n // Manually trigger progress events based on changes to the buffered amount\n // Many flash players and older HTML5 browsers don't send progress or progress-like events\n /**\n * Turn on progress events\n *\n * @method manualProgressOn\n */\n manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.one('ready', this.trackProgress);\n }\n\n /**\n * Turn off progress events\n *\n * @method manualProgressOff\n */\n manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n }\n\n /**\n * Track progress\n *\n * @method trackProgress\n */\n trackProgress() {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(Fn.bind(this, function(){\n // Don't trigger unless buffered amount is greater than last time\n\n let numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n }\n\n /**\n * Update duration\n *\n * @method onDurationChange\n */\n onDurationChange() {\n this.duration_ = this.duration();\n }\n\n /**\n * Create and get TimeRange object for buffering\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n return createTimeRange(0, 0);\n }\n\n /**\n * Get buffered percent\n *\n * @return {Number}\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration_);\n }\n\n /**\n * Stops tracking progress by clearing progress interval\n *\n * @method stopTrackingProgress\n */\n stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n }\n\n /*! Time Tracking -------------------------------------------------------------- */\n /**\n * Set event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOn\n */\n manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Remove event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOff\n */\n manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Tracks current time\n *\n * @method trackCurrentTime\n */\n trackCurrentTime() {\n if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n this.currentTimeInterval = this.setInterval(function(){\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }\n\n /**\n * Turn off play progress tracking (when paused or dragging)\n *\n * @method stopTrackingCurrentTime\n */\n stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval);\n\n // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }\n\n /**\n * Turn off any manual progress or timeupdate tracking\n *\n * @method dispose\n */\n dispose() {\n // clear out text tracks because we can't reuse them between techs\n let textTracks = this.textTracks();\n\n if (textTracks) {\n let i = textTracks.length;\n while(i--) {\n this.removeRemoteTextTrack(textTracks[i]);\n }\n }\n\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) { this.manualProgressOff(); }\n\n if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n super.dispose();\n }\n\n /**\n * When invoked without an argument, returns a MediaError object\n * representing the current error state of the player or null if\n * there is no error. When invoked with an argument, set the current\n * error state of the player.\n * @param {MediaError=} err Optional an error object\n * @return {MediaError} the current error object or null\n * @method error\n */\n error(err) {\n if (err !== undefined) {\n if (err instanceof MediaError) {\n this.error_ = err;\n } else {\n this.error_ = new MediaError(err);\n }\n this.trigger('error');\n }\n return this.error_;\n }\n\n /**\n * Return the time ranges that have been played through for the\n * current source. This implementation is incomplete. It does not\n * track the played time ranges, only whether the source has played\n * at all or not.\n * @return {TimeRangeObject} a single time range if this video has\n * played or an empty set of ranges if not.\n * @method played\n */\n played() {\n if (this.hasStarted_) {\n return createTimeRange(0, 0);\n }\n return createTimeRange();\n }\n\n /**\n * Set current time\n *\n * @method setCurrentTime\n */\n setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n }\n\n /**\n * Initialize texttrack listeners\n *\n * @method initTextTrackListeners\n */\n initTextTrackListeners() {\n let textTrackListChanges = Fn.bind(this, function() {\n this.trigger('texttrackchange');\n });\n\n let tracks = this.textTracks();\n\n if (!tracks) return;\n\n tracks.addEventListener('removetrack', textTrackListChanges);\n tracks.addEventListener('addtrack', textTrackListChanges);\n\n this.on('dispose', Fn.bind(this, function() {\n tracks.removeEventListener('removetrack', textTrackListChanges);\n tracks.removeEventListener('addtrack', textTrackListChanges);\n }));\n }\n\n /**\n * Emulate texttracks\n *\n * @method emulateTextTracks\n */\n emulateTextTracks() {\n if (!window['WebVTT'] && this.el().parentNode != null) {\n let script = document.createElement('script');\n script.src = this.options_['vtt.js'] || '../node_modules/vtt.js/dist/vtt.js';\n this.el().parentNode.appendChild(script);\n window['WebVTT'] = true;\n }\n\n let tracks = this.textTracks();\n if (!tracks) {\n return;\n }\n\n let textTracksChanges = Fn.bind(this, function() {\n let updateDisplay = () => this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for(; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n};\n\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech && player.tech['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks \n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks \n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks \n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list \n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n // \n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * @file text-track-enums.js\n *\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n return {\n kind: track.kind,\n label: track.label,\n language: track.language,\n id: track.id,\n inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType,\n mode: track.mode,\n cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n }),\n src: track.src\n };\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n let trackEls = tech.el().querySelectorAll('track');\n\n let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n let json = trackToJson_(trackEl.track);\n json.src = trackEl.src;\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n json.forEach(function(track) {\n let addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach((cue) => addedTrack.addCue(cue));\n }\n });\n\n return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventTarget.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n /**\n * Get texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @return {Object} \n * @method getValues\n */\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n /**\n * Set texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n /**\n * Restore texttrack settings \n *\n * @method restoreSettings\n */\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n /**\n * Save texttrack settings to local storage \n *\n * @method saveSettings\n */\n saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n /**\n * Update display of texttrack settings \n *\n * @method updateDisplay\n */\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    `;\n\n return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport XHR from '../xhr.js';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n XHR(src, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let i = 0; i < buffered.length; i++){\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n","import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n get(obj, key) {\n return obj[key];\n },\n set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n if (typeof Proxy === 'function') {\n let handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(key => {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function() {\n log.warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return new Proxy(target, handler);\n }\n return target;\n};\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // Not remembering why we were checking for dash\n // but using setAttribute means you have to use getAttribute\n\n // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin.\n // The additional check for \"role\" is because the default method for adding attributes does not\n // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs.\n // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n return !!obj\n && typeof obj === 'object'\n && obj.toString() === '[object Object]'\n && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n let args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n merge.apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n let style = document.createElement('style');\n style.className = className;\n\n return style;\n};\n\nexport let setTextContent = function(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n","/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @private\n * @method createTimeRange\n */\nexport function createTimeRange(start, end){\n if (start === undefined && end === undefined) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: 1,\n start: function() { return start; },\n end: function() { return end; }\n };\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = ``;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n","/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\n\nimport assign from 'object.assign';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport xhr from './xhr.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendsFn from './extends.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = stylesheet.createStyleElement('vjs-styles-defaults');\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);\nstylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n`);\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extends' doc for more info)\n * var MySpecialButton = videojs.extends(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extends` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extends(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extends\n */\nvideojs.extends = extendsFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = createTimeRange;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n *\n * ##### Example\n *\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n *\n *\n * API is modeled after the Raynos/xhr.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @returns {Object} The request\n */\nvideojs.xhr = xhr;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n","/**\n * @file xhr.js\n */\nimport * as Url from './utils/url.js';\nimport log from './utils/log.js';\nimport mergeOptions from './utils/merge-options.js';\nimport window from 'global/window';\n\n/*\n * Simple http request for retrieving external files (e.g. text tracks)\n * ##### Example\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n * /////////////\n * API is modeled after the Raynos/xhr, which we hope to use after\n * getting browserify implemented.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @return {Object} The request\n * @method xhr\n */\nvar xhr = function(options, callback){\n let abortTimeout;\n\n // If options is a string it's the url\n if (typeof options === 'string') {\n options = {\n uri: options\n };\n }\n\n // Merge with default options\n options = mergeOptions({\n method: 'GET',\n timeout: 45 * 1000\n }, options);\n\n callback = callback || function(){};\n\n let XHR = window.XMLHttpRequest;\n\n if (typeof XHR === 'undefined') {\n // Shim XMLHttpRequest for older IEs\n XHR = function () {\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n throw new Error('This browser does not support XMLHttpRequest.');\n };\n }\n\n let request = new XHR();\n // Store a reference to the url on the request instance\n request.uri = options.uri;\n\n let urlInfo = Url.parseUrl(options.uri);\n let winLoc = window.location;\n\n let successHandler = function(){\n window.clearTimeout(abortTimeout);\n callback(null, request, request.response || request.responseText);\n };\n\n let errorHandler = function(err){\n window.clearTimeout(abortTimeout);\n\n if (!err || typeof err === 'string') {\n err = new Error(err || 'XHR Failed with a response of: '+(request && (request.response || request.responseText)));\n }\n\n callback(err, request);\n };\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n const crossOrigin = (urlInfo.protocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available\n // 'withCredentials' is only available in XMLHTTPRequest2\n // Also XDomainRequest has a lot of gotchas, so only use if cross domain\n if (crossOrigin && window.XDomainRequest && !('withCredentials' in request)) {\n request = new window.XDomainRequest();\n request.onload = successHandler;\n request.onerror = errorHandler;\n // These blank handlers need to be set to fix ie9\n // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/\n request.onprogress = function(){};\n request.ontimeout = function(){};\n\n // XMLHTTPRequest\n } else {\n const fileUrl = (urlInfo.protocol === 'file:' || winLoc.protocol === 'file:');\n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n if (request.timedout) {\n return errorHandler('timeout');\n }\n\n if (request.status === 200 || fileUrl && request.status === 0) {\n successHandler();\n } else {\n errorHandler();\n }\n }\n };\n\n if (options.timeout) {\n abortTimeout = window.setTimeout(function() {\n if (request.readyState !== 4) {\n request.timedout = true;\n request.abort();\n }\n }, options.timeout);\n }\n }\n\n // open the connection\n try {\n // Third arg is async, or ignored by XDomainRequest\n request.open(options.method || 'GET', options.uri, true);\n } catch(err) {\n return errorHandler(err);\n }\n\n // withCredentials only supported by XMLHttpRequest2\n if(options.withCredentials) {\n request.withCredentials = true;\n }\n\n if (options.responseType) {\n request.responseType = options.responseType;\n }\n\n // send the request\n try {\n request.send();\n } catch(err) {\n return errorHandler(err);\n }\n\n return request;\n};\n\nexport default xhr;\n"]} \ No newline at end of file +{"version":3,"file":"video.novtt.min.js","sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js","node_modules/lodash-compat/date/now.js","node_modules/lodash-compat/function/debounce.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/function/throttle.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object.assign/index.js","node_modules/object.assign/node_modules/define-properties/index.js","node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js","node_modules/object.assign/node_modules/object-keys/index.js","node_modules/object.assign/node_modules/object-keys/isArguments.js","node_modules/safe-json-parse/tuple.js","node_modules/tsml/tsml.js","node_modules/xhr/index.js","node_modules/xhr/node_modules/once/once.js","node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js","node_modules/xhr/node_modules/parse-headers/node_modules/for-each/node_modules/is-function/index.js","node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js","node_modules/xhr/node_modules/parse-headers/parse-headers.js","src/js/big-play-button.js","src/js/button.js","src/js/component.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/mouse-time-display.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extend.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/player.js","src/js/plugins.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-enums.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/create-deprecation-proxy.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_dereq_","topLevel","minDoc","document","doccy","min-document",2,3,4,"getNative","nativeNow","Date","now","getTime","../internal/getNative",5,"debounce","func","wait","options","cancel","timeoutId","clearTimeout","maxTimeoutId","lastCalled","trailingCall","undefined","complete","isCalled","id","result","apply","thisArg","args","delayed","remaining","stamp","setTimeout","maxDelayed","trailing","debounced","arguments","leading","maxWait","leadingCall","TypeError","FUNC_ERROR_TEXT","isObject","nativeMax","Math","max","../date/now","../lang/isObject",6,"restParam","start","index","rest","Array","otherArgs",7,"throttle","./debounce",8,"arrayCopy","source","array",9,"arrayEach","iteratee",10,"baseCopy","props","object","key",11,"createBaseFor","baseFor","./createBaseFor",12,"baseForIn","keysIn","../object/keysIn","./baseFor",13,"baseMerge","customizer","stackA","stackB","isSrcArr","isArrayLike","isArray","isTypedArray","keys","srcValue","isObjectLike","baseMergeDeep","value","isCommon","../lang/isArray","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",14,"mergeFunc","isPlainObject","isArguments","toPlainObject","push","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",15,"toObject","baseProperty","./toObject",16,"bindCallback","argCount","identity","collection","accumulator","other","../utility/identity",17,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",18,"fromRight","keysFunc","iterable",19,"getLength","./baseProperty",20,"isNative","../lang/isNative",21,"isLength","./getLength","./isLength",22,"isHostObject","Object","toString",23,"reIsUint","test","MAX_SAFE_INTEGER","isIndex",24,"type","./isIndex",25,26,27,"shimKeys","propsLength","allowIndexes","isString","hasOwnProperty","objectProto","prototype","../lang/isString",28,"support","unindexedChars","charAt","../support",29,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",30,"arrayTag","objToString","nativeIsArray","../internal/isLength",31,"isFunction","funcTag","./isObject",32,"reIsNative","fnToString","reIsHostCtor","Function","RegExp","replace","../internal/isHostObject","./isFunction",33,34,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",35,"stringTag",36,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",37,"../internal/baseCopy",38,"nativeKeys","../internal/shimKeys",39,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","enumPrototypes","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",40,"merge","../internal/baseMerge","../internal/createAssigner",41,"arrayProto","splice","x","0","y","spliceObjects",42,43,"canBeObject","obj","hasSymbols","Symbol","defineProperties","propIsEnumerable","assignShim","target","syms","objTarget","getOwnPropertySymbols","shim","assignHasPendingExceptions","assign","preventExtensions","thrower","define-properties","object-keys",44,"foreach","toStr","fn","arePropertyDescriptorsSupported","defineProperty","enumerable","_","supportsDescriptors","name","predicate","configurable","writable","map","predicates","concat",45,"hasOwn","ctx","k",46,"has","slice","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$window","$console","$parent","$self","$frames","$webkitIndexedDB","$webkitStorageInfo","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","keysWorksWithArguments","originalKeys",47,"str","callee",48,"SafeParseTuple","reviver","json","error","err",49,"clean","sa",50,"isEmpty","createXHR","callback","readystatechange","xhr","readyState","loadFunc","getBody","body","response","responseType","responseText","responseXML","isJson","JSON","parse","errorFunc","evt","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","method","headers","url","uri","rawRequest","getAllResponseHeaders","parseHeaders","once","cors","XDomainRequest","XMLHttpRequest","data","sync","stringify","onreadystatechange","onload","onerror","onprogress","ontimeout","open","username","password","withCredentials","timeout","abort","setRequestHeader","beforeSend","send","noop","global/window","parse-headers",51,"called",52,"forEach","list","iterator","context","forEachArray","forEachString","forEachObject","len","string","is-function",53,"alert","confirm","prompt",54,"trim","right",55,"arg","split","row","indexOf","toLowerCase","Constructor","instance","player_","play","__esModule","newObj","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_component2","_interopRequireDefault","_component","Dom","_interopRequireWildcard","_utilsDomJs","Button","_Component","player","_classCallCheck","createEl","attributes","_objectAssign2","className","buildCSSClass","tabIndex","role","el","controlTextEl_","handleClick","default","_globalWindow2","_globalWindow","Fn","_utilsFnJs","Component","ready","options_","_utilsMergeOptionsJs2","id_","Guid","newGUID","el_","childIndex_","initChildren","dispose","trigger","bubbles","children_","childNameIndex_","off","_utilsLogJs2","warn","tagName","properties","localize","languages","language","primaryCode","addChild","child","component","componentName","childFound","parentOptions","_this","opts","children","_name","handleAdd","_this2","first","guid","cleanRemover","Events","on","second","bind","third","nodeName","one","_this3","_arguments","newFunc","isReady_","triggerReady","readyQueue","readyQueue_","dimension","widthOrHeight","num","skipListeners","style","pxIndex","touchStart","touchTimeThreshold","couldBeTap","event","touches","firstTouch","xdiff","pageX","touchDistance","sqrt","ydiff","tapMovementThreshold","noTap","touchTime","preventDefault","clearInterval","touchHolding","touchEnd","report","disposeFn","intervalId","setInterval","interval","getComponent","components_","extend","subObj","_name2","ControlBar","exitFullscreen","requestFullscreen","LiveDisplay","contentEl_","aria-live","appendChild","updateShowing","_button2","_button","MuteToggle","_Button","update","tech_","addClass","vol","volume","level","toMute","muted","localizedMute","controlText","removeElClass","addElClass","PlayToggle","removeClass","_playbackRateMenuItemJs2","_playbackRateMenuItemJs","PlaybackRateMenuButton","_MenuButton","labelEl_","createMenu","rates","playbackRates","currentRate","playbackRate","newRate","playbackRateSupported","PlaybackRateMenuItem","label","rate","parseFloat","selected","LoadProgressBar","buffered","duration","percent","time","end","width","percentify","bufferedEnd","part","left","_componentJs2","_componentJs","MouseTimeDisplay","handleMouseMove","position","findElPosition","parentNode","newTime","_utilsFormatTimeJs2","calculateDistance","PlayProgressBar","updateDataAttr","scrubbing","getCache","currentTime","_loadProgressBarJs","SeekBar","_Slider","stepBack","CustomControlSpacer","_Spacer","CaptionSettingsMenuItem","_TextTrackMenuItem","kind","CaptionsButton","_TextTrackButton","threshold","createItems","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","_menuMenuJs2","_menuMenuJs","ChaptersButton","items","tracks","textTracks","track","kind_","cues","chaptersTrack","menu","contentEl","cue","mi","_menuMenuItemJs2","_menuMenuItemJs","ChaptersTrackMenuItem","_MenuItem","OffTextTrackMenuItem","handleTracksChange","SubtitlesButton","_menuMenuButtonJs2","_menuMenuButtonJs","TextTrackButton","hide","updateHandler","removeEventListener","_offTextTrackMenuItemJs2","TextTrackMenuItem","onchange","Event","_globalDocument2","createEvent","CurrentTimeDisplay","innerHTML","updateContent","localizedText","DurationDisplay","formattedTime","RemainingTimeDisplay","_sliderSliderJs2","_sliderSliderJs","VolumeBar","toFixed","setAttribute","VolumeControl","VolumeMenuButton","updateVisibility","inline","vertical","volumeUpdate","orientationClass","contentElType","_muteToggleJs2","ErrorDisplay","message","_utilsEventsJs","EventTarget","allowedEvents_","ael","addEventListener","extendFn","subClassMethods","methods","init","_utilsLog2","FullscreenApi","apiMap","specApi","browserApi","_objectAssign","MediaError","errorTypes","_menuJs2","_menuJs","MenuButton","title","unlockShowing","handleKeyPress","which","buttonPressed_","unpressButton","pressButton","MenuItem","_selected","append","_globalDocument","_utilsLogJs","_utilsToTitleCaseJs2","_utilsToTitleCaseJs","_utilsMergeOptionsJs","_tracksTextTrackListConverterJs","_errorDisplayJs","reportTouchActivity","languagesToLower","poster_","poster","controls","scrubbing_","playerOptionsCopy","plugins","getOwnPropertyNames","isAudio","Player","players","styleEl_","removeChild","attrs","getElAttributes","attr","stylesheet","createStyleElement","defaultsStyleEl","querySelector","fluid","aspectRatio","initNetworkState_","networkState","privDimension","_dimension","parsedVal","isNaN","bool","fluid_","ratio","updateStyleEl_","aspectRatio_","videoWidth","videoHeight","ratioParts","ratioMultiplier","width_","height_","loadTech_","techName","unloadTech_","disposeMediaElement","techName_","techOptions","nativeControlsForTouch","playerId","techId","textTracks_","preload","loop","vtt.js","src","cache_","startTime","techComponent","handleTechReady_","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechLoadStart_","handleTechWaiting_","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechEnded_","handleTechSeeking_","handleTechSeeked_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechProgress_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechSuspend_","handleTechAbort_","handleTechEmptied_","handleTechStalled_","handleTechLoadedData_","handleTechRateChange_","handleTechVolumeChange_","handleTechTextTrackChange_","usingNativeControls","techGet_","insertElFirst","addTechControlsListeners_","removeTechControlsListeners_","paused","hasStarted","_hasStarted","hasStarted_","handleTechClick_","button","techCall_","isScrubbing","seconds","percentAsDecimal","min","fsApi","fullscreenchange","documentFullscreenChange","isFullscreen","fullscreenElement","supportsFullScreen","_fullscreenApiJs2","fullWindowOnEscKey","exitFullWindow","documentElement","overflow","docOrigOverflow","selectSource","techOrder","tech","isSupported","b","canPlaySource","sourceList_","currentTech","load","sourceTech","controls_","error_","userActive","userActive_","stopPropagation","lastMoveX","lastMoveY","handleActivity","reportUserActivity","screenX","screenY","mouseInProgress","handleMouseUp","inactivityTimeout","userActivity_","tagOptions","dataSetup","_safeParseTuple","_safeJsonParseTuple2","hasChildNodes","childNodes","childName","baseOptions","notSupportedMessage","handleError_","flexNotSupported_","createElement","_buttonJs2","_buttonJs","PosterImage","setSrc","fallbackImg_","backgroundImage","autoSetup","vids","getElementsByTagName","audios","mediaEls","mediaEl","getAttribute","autoSetupTimeout","_windowLoaded","vjs","Slider","bar","getChild","barName","handleMouseDown","blockTextSelection","unblockTextSelection","progress","getPercent","percentage","vertical_","../component.js","../utils/dom.js","global/document","object.assign",103,"FlashRtmpDecorator","Flash","rtmp/mp4","rtmp/flv","streamFromParts","connection","stream","parts","streamBegin","connEnd","substring","isStreamingType","srcType","streamingFormats","isStreamingSrc","rtmpSourceHandler","handleSource","srcParts","_createSetter","attrUpper","toUpperCase","_api","val","_createGetter","vjs_getProperty","_tech2","_tech","_utilsUrlJs","setSource","_Tech","swf","objId","flashVars","readyFunction","errorEventProxyFunction","autoplay","params","wmode","bgcolor","Url","getAbsoluteURL","vjs_src","setCurrentTime","seekable","enterFullScreen","_readWrite","_readOnly","nativeSourceHandler","canHandleSource","guessMimeType","ext","getFileExtension","formats","video/flv","onReady","currSwf","getEl","checkReady","eventName","swfID","version","ActiveXObject","GetVariable","match","navigator","description","getEmbedCode","objTag","flashVarsString","paramsString","movie","flashvars","allowNetworking","_techJs2","_techJs","Html5","currentSrc","nodes","node","nodesLength","featuresNativeTextTracks","remoteTextTracks","addTrack_","removeNodes","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","tt","handleTextTrackChange_","handleTextTrackAdd_","emulatedTt","clone","cloneNode","insertBefore","tagAttributes","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","setLoadstartFired","loadstartFired","triggerLoadstart","eventsToTrigger","handleTextTrackChange","srcElement","webkitEnterFullScreen","video","HAVE_METADATA","addRemoteTextTrack","removeTrack_","querySelectorAll","canPlayType","TEST_VID","supportsNativeTextTracks","supportsTextTracks","IS_FIREFOX","canControlPlaybackRate","patchCanPlayType","ANDROID_VERSION","mpegurlRE","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","removeAttribute","MediaLoader","playerOptions","_tracksTextTrack2","_tracksTextTrack","Tech","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","trackProgress","stopTrackingProgress","numBufferedPercent","bufferedPercent","bufferedPercent_","manualProgress","manualProgressOff","_mediaErrorJs2","textTrackListChanges","emulateTextTracks","script","updateDisplay","mode","setPoster","createTrackHelper","featuresVolumeControl","featuresFullscreenResize","handlers","sourceHandlers","selectSourceHandler","can","srcObj","originalSeekable","sh","disposeSourceHandler","sourceHandler_","TextTrackCueList","IS_IE8","prop","setCues_","get","oldLength","length_","defineProp","getCueById","rule","darkGray","lightGray","fontMap","monospace","sansSerif","serif","TextTrackDisplay","toggleDisplay","clearDisplay","updateForTrack","_i","cueDiv","displayState","overrides","color","firstChild","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","height","top","bottom","fontFamily","fontVariant","showing","trackToJson_","inBandMetadataTrackDispatchType","textTracksToJson","trackEls","trackEl","addedTrack","addCue","_eventTarget2","_eventTarget","TextTrackList","tracks_","change","removetrack","_event","rtrack","getTrackById","selectedOption","selectedOptions","selectedIndex","setSelectedOption","option","TextTrackSettings","persistTextTrackSettings","saveSettings","getValues","textEdge","getSelectedOptionValue","fgColor","bgColor","bgOpacity","setValues","values","restoreSettings","ttDisplay","registerComponent","_textTrackCueList2","_textTrackCueList","_utilsGuidJs","TextTrack","TextTrackEnum","TextTrackMode","cues_","activeCues_","activeCues","changed","timeupdateHandler","set","newMode","loaded_","ct","active","loadTrack","cuechange","removeCue","removed","parseCues","srcContent","parser","crossOrigin","isCrossOrigin","_xhr2","responseBody","O","fromIndex","abs","searchElement","IS_IPHONE","IS_IPAD","USER_AGENT","IS_IPOD","IS_IOS","IOS_VERSION","IS_ANDROID","major","IS_NATIVE_ANDROID","bufferedDuration","_timeRangesJs","createTimeRange","_logJs2","_logJs","defaultBehaviors","messages","Proxy","_ret","handler","propName","_tsml2","_templateObject","getElData","elIdAttr","hasElData","removeElData","elData","element","classToRemove","hasElClass","attrName","attrValue","attrVal","knownBooleans","box","getBoundingClientRect","docEl","scrollLeft","pageXOffset","clientLeft","clientTop","scrollTop","pageYOffset","getPointerPosition","boxW","offsetWidth","boxH","offsetHeight","boxY","pageY","changedTouches","elem","_handleMultipleEvents","dispatcher","fixEvent","handlersCopy","m","isImmediatePropagationStopped","hash","removeType","_cleanUpEvents","elemData","parent","isPropagationStopped","defaultPrevented","targetData","disabled","old","relatedTarget","fromElement","toElement","returnValue","cancelBubble","returnTrue","returnFalse","stopImmediatePropagation","doc","clientY","detachEvent",120,"uid","h","floor","gm","guide","argsArray","console","log","history","unshift","_logType","mergeOptions",126,"createTimeRangesObj","ranges","getRange","rangeIndex","fnName","rangeCheck","createTimeRanges","href","addToBody","host","protocol","div","details","path","splitPathRe","pathParts","exec","urlInfo","parseUrl","_pluginsJs2","_pluginsJs","_tracksTextTrackJs","_utilsFormatTimeJs","_utilsCreateDeprecationProxyJs","_xhr","_techFlashJs","_techHtml5Js","getPlayers","_player2","_lodashCompatObjectMerge2","_merge"],"mappings":"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,4KA0BE,IAAAjB,GAAO,QAAYA,GAAQ8C,EAAAV,EAAAic,GACzB,GAAA5N,EAIF,IAAY,gBAAR3N,GAAqB,CAQrB,GALW,IAAbA,EAAI+Y,QAAS,OACX/Y,EAAAA,EAAA4R,MAAA,IAIA1U,EAAQuyC,aAAazvC,GAW1B,MARGV,6FAIAic,GACDre,EAAAuyC,aAAAzvC,GAAAub,MAAAA,GAGIre,EAAAuyC,aAAAzvC,wBAYP,KAAA2N,IAAAA,EAAAuQ,kFAOA,OAAKvQ,GAAa,QAAK,GAAE+hC,GAAK,WAAY/hC,EAAArO,EAAAic,gEAe5CwD,EAAMgO,EAAAC,mBAA6B,slBA6FnC9vB,EAAQ+oC,kBAAkBpsB,EAAA,WAAAosB,qLAwK1B,+BAAQ0J,EAAG,WAAOzyC,EAAAoC,QAAAqd,WAAAizB,KAAAA,EAAA9xC,GAAAqY,EAAAy5B,IAAA9xC,4RAyJjB,kBAAAnB,IAAAA,EAAA;AhIvgBD;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;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","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n return new Date().getTime();\n};\n\nmodule.exports = now;\n","var isObject = require('../lang/isObject'),\n now = require('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n","var debounce = require('./debounce'),\n isObject = require('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n * edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n * 'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (options === false) {\n leading = false;\n } else if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n baseMergeDeep = require('./baseMergeDeep'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isObject = require('../lang/isObject'),\n isObjectLike = require('./isObjectLike'),\n isTypedArray = require('../lang/isTypedArray'),\n keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n props = isSrcArr ? undefined : keys(source);\n\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((result !== undefined || (isSrcArr && !(key in object))) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isPlainObject = require('../lang/isPlainObject'),\n isTypedArray = require('../lang/isTypedArray'),\n toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : toObject(object)[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n isIterateeCall = require('./isIterateeCall'),\n restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n try {\n Object({ 'toString': 0 } + '');\n } catch(e) {\n return function() { return false; };\n }\n return function(value) {\n // IE < 9 presents many host objects as `Object` objects that can coerce\n // to strings despite having improperly defined `toString` methods.\n return typeof value.toString != 'function' && typeof (value + '') == 'string';\n };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n isIndex = require('./isIndex'),\n isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isIndex = require('./isIndex'),\n isLength = require('./isLength'),\n isString = require('../lang/isString'),\n keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n if (support.unindexedChars && isString(value)) {\n var index = -1,\n length = value.length,\n result = Object(value);\n\n while (++index < length) {\n result[index] = value.charAt(index);\n }\n return result;\n }\n return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) &&\n hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 which returns 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n isArguments = require('./isArguments'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n if (support.ownLast) {\n baseForIn(value, function(subValue, key, object) {\n result = hasOwnProperty.call(object, key);\n return false;\n });\n return result !== false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n isArrayLike = require('../internal/isArrayLike'),\n isObject = require('../lang/isObject'),\n shimKeys = require('../internal/shimKeys'),\n support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isFunction = require('../lang/isFunction'),\n isIndex = require('../internal/isIndex'),\n isLength = require('../internal/isLength'),\n isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n objectProto = Object.prototype,\n stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n for (var tag in nonEnumProps) {\n if (hasOwnProperty.call(nonEnumProps, tag)) {\n var props = nonEnumProps[tag];\n props[key] = hasOwnProperty.call(props, key);\n }\n }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n isProto = proto === object,\n result = Array(length),\n skipIndexes = length > 0,\n skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n skipProto = support.enumPrototypes && isFunction(object);\n\n while (++index < length) {\n result[index] = (index + '');\n }\n // lodash skips the `constructor` property when it infers it's iterating\n // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n // attribute of an existing property and the `constructor` property of a\n // prototype defaults to non-enumerable.\n for (var key in object) {\n if (!(skipProto && key == 'prototype') &&\n !(skipErrorProps && (key == 'message' || key == 'name')) &&\n !(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n if (support.nonEnumShadows && object !== objectProto) {\n var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n if (tag == objectTag) {\n proto = objectProto;\n }\n length = shadowProps.length;\n while (length--) {\n key = shadowProps[length];\n var nonEnum = nonEnums[key];\n if (!(isProto && nonEnum) &&\n (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n result.push(key);\n }\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n errorProto = Error.prototype,\n objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `name` or `message` properties of `Error.prototype` are\n * enumerable by default (IE < 9, Safari < 5.1).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n propertyIsEnumerable.call(errorProto, 'name');\n\n /**\n * Detect if `prototype` properties are enumerable by default.\n *\n * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n * (if the prototype or a property on the prototype has been set)\n * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n * property to `true`.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n /**\n * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n *\n * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.nonEnumShadows = !/valueOf/.test(props);\n\n /**\n * Detect if own properties are iterated after inherited properties (IE < 9).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.ownLast = props[0] != 'x';\n\n /**\n * Detect if `Array#shift` and `Array#splice` augment array-like objects\n * correctly.\n *\n * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n * `shift()` and `splice()` functions that fail to remove the last element,\n * `value[0]`, of array-like objects even though the \"length\" property is\n * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n * while `splice()` is buggy regardless of mode in IE < 9.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n /**\n * Detect lack of support for accessing string characters by index.\n *\n * IE < 8 can't access characters by index. IE 8 can only access characters\n * by index on string literals, not string objects.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\nvar defineProperties = require('define-properties');\nvar toObject = Object;\nvar push = Array.prototype.push;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar assignShim = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tif (propIsEnumerable.call(source, syms[i])) {\n\t\t\t\t\tpush.call(props, syms[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tobjTarget[props[i]] = source[props[i]];\n\t\t}\n\t}\n\treturn objTarget;\n};\n\ndefineProperties(assignShim, {\n\tshim: function shimObjectAssign() {\n\t\tvar assignHasPendingExceptions = function () {\n\t\t\tif (!Object.assign || !Object.preventExtensions) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t\t\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\t\t\tvar thrower = Object.preventExtensions({ 1: 2 });\n\t\t\ttry {\n\t\t\t\tObject.assign(thrower, 'xy');\n\t\t\t} catch (e) {\n\t\t\t\treturn thrower[1] === 'y';\n\t\t\t}\n\t\t};\n\t\tdefineProperties(\n\t\t\tObject,\n\t\t\t{ assign: assignShim },\n\t\t\t{ assign: assignHasPendingExceptions }\n\t\t);\n\t\treturn Object.assign || assignShim;\n\t}\n});\n\nmodule.exports = assignShim;\n","'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { value: obj, enumerable: false });\n /* eslint-disable no-unused-vars */\n for (var _ in obj) { return false; }\n /* eslint-enable no-unused-vars */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tvalue: value\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$window: true,\n\t$console: true,\n\t$parent: true,\n\t$self: true,\n\t$frames: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\ttry {\n\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' && !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t} else {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","function clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}","\"use strict\";\nvar window = require(\"global/window\")\nvar once = require(\"once\")\nvar parseHeaders = require(\"parse-headers\")\n\n\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction createXHR(options, callback) {\n function readystatechange() {\n if (xhr.readyState === 4) {\n loadFunc()\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else if (xhr.responseType === \"text\" || !xhr.responseType) {\n body = xhr.responseText || xhr.responseXML\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n callback(err, response, response.body)\n\n }\n\n if (typeof options === \"string\") {\n options = { uri: options }\n }\n\n options = options || {}\n if(typeof callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n callback = once(callback)\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n\n if (\"json\" in options) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n aborted=true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n xhr.send(body)\n\n return xhr\n\n\n}\n\nfunction noop() {}\n","module.exports = once\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var called = false\n return function () {\n if (called) return\n called = true\n return fn.apply(this, arguments)\n }\n}\n","var isFunction = require('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n if (!isFunction(iterator)) {\n throw new TypeError('iterator must be a function')\n }\n\n if (arguments.length < 3) {\n context = this\n }\n \n if (toString.call(list) === '[object Array]')\n forEachArray(list, iterator, context)\n else if (typeof list === 'string')\n forEachString(list, iterator, context)\n else\n forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n iterator.call(context, array[i], i, array)\n }\n }\n}\n\nfunction forEachString(string, iterator, context) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n iterator.call(context, string.charAt(i), i, string)\n }\n}\n\nfunction forEachObject(object, iterator, context) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n iterator.call(context, object[k], k, object)\n }\n }\n}\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n","var trim = require('trim')\n , forEach = require('for-each')\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n forEach(\n trim(headers).split('\\n')\n , function (row) {\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n )\n\n return result\n}","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n constructor(player, options) {\n super(player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return 'vjs-big-play-button';\n }\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.play();\n }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}, attributes={}) {\n props = assign({\n className: this.buildCSSClass(),\n tabIndex: 0\n }, props);\n\n // Add standard Aria info\n attributes = assign({\n role: 'button',\n type: 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n }, attributes);\n\n let el = super.createEl(tag, props, attributes);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick(event);\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
    \n *
    Button
    \n *
    \n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n *\n * ```js\n * Parent.prototype.options_ = {\n * optionSet: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} properties An object of properties that should be set\n * @param {Object=} attributes An object of attributes that should be set\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, properties, attributes) {\n return Dom.createEl(tagName, properties, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
    \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
    myButton
    \n * // -> myButton === myComponent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_ = {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * };\n *\n * // Or when creating the component\n * var myComp = new MyComponent(player, {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * });\n * ```\n * The children option can also be an array of\n * child options objects (that also include a 'name' key).\n * This can be used if you have two child components of the\n * same type that need different options.\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * },\n * {\n * name: 'button',\n * someOtherOption: false\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.updateShowing();\n this.on(this.player(), 'durationchange', this.updateShowing);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`\n }, {\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateShowing() {\n if (this.player().duration() === Infinity) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n }\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech_\n && this.player().tech_['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n /**\n * Update progress bar\n *\n * @method update\n */\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file mouse-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport throttle from 'lodash-compat/function/throttle';\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\nclass MouseTimeDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update(0, 0);\n\n player.on('ready', () => {\n this.on(player.controlBar.progressControl.el(), 'mousemove', throttle(Fn.bind(this, this.handleMouseMove), 25));\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-mouse-display'\n });\n }\n\n handleMouseMove(event) {\n let duration = this.player_.duration();\n let newTime = this.calculateDistance(event) * duration;\n let position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n\n this.update(newTime, position);\n }\n\n update(newTime, position) {\n let time = formatTime(newTime, this.player_.duration());\n\n this.el().style.left = position + 'px';\n this.el().setAttribute('data-current-time', time);\n }\n\n calculateDistance(event) {\n return Dom.getPointerPosition(this.el().parentNode, event).x;\n }\n}\n\nComponent.registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexport default MouseTimeDisplay;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.updateDataAttr();\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress vjs-slider-bar',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\nimport MouseTimeDisplay from './mouse-time-display.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: [\n 'seekBar'\n ]\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport assign from 'object.assign';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder'\n }, {\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: [\n 'loadProgressBar',\n 'mouseTimeDisplay',\n 'playProgressBar'\n ],\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl({\n className: this.buildCSSClass(),\n });\n\n // No-flex/table-cell mode requires there be some content\n // in the cell to fill the remaining space of the table.\n el.innerHTML = ' ';\n return el;\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-chapters-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabIndex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-subtitles-button ${super.buildCSSClass()}`;\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n // label the current time for screen reader users\n innerHTML: 'Current Time ' + '0:00',\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n // label the duration time for screen reader users\n innerHTML: `${this.localize('Duration Time')} 0:00`\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display\n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n // label the remaining time for screen reader users\n innerHTML: `${this.localize('Remaining Time')} -0:00`,\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
    /
    '\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar vjs-slider-bar'\n }, {\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: [\n 'volumeLevel'\n ],\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: [\n 'volumeBar'\n ]\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // Default to inline\n if (options.inline === undefined) {\n options.inline = true;\n }\n\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using\n // a horizontal slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well,\n // since that will need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n function updateVisibility() {\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n }\n\n updateVisibility.call(this);\n this.on(player, 'loadstart', updateVisibility);\n\n this.on(this.volumeBar, ['slideractive', 'focus'], function(){\n this.addClass('vjs-slider-active');\n });\n\n this.on(this.volumeBar, ['sliderinactive', 'blur'], function(){\n this.removeClass('vjs-slider-active');\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vb = new VolumeBar(this.player_, this.options_.volumeBar);\n\n menu.addChild(vb);\n\n this.volumeBar = vb;\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n /**\n * Update the error message in localized language\n *\n * @method update\n */\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (let i=0; i 1) {\n this.show();\n }\n }\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n createItems(){}\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n }\n\n /**\n * Focus - Add keyboard functionality to element\n * This function is not needed anymore. Instead, the\n * keyboard functionality is handled by\n * treating the button as triggering a submenu.\n * When the button is pressed, the submenu\n * appears. Pressing the button again makes\n * the submenu disappear.\n *\n * @method handleFocus\n */\n handleFocus() {}\n\n /**\n * Can't turn off list display that we turned\n * on with focus, because list would go away.\n *\n * @method handleBlur\n */\n handleBlur() {}\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n handleClick() {\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n /**\n * Handle key press on menu\n *\n * @param {Object} Key press event\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc\n * @return {Element}\n * @method createEl\n */\n createEl(type, props, attrs) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props), attrs);\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive(true);\n this.reportUserActivity();\n this.listenForUserActivity_();\n\n this.on('fullscreenchange', this.handleFullscreenChange_);\n this.on('stageclick', this.handleStageClick_);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech_) { this.tech_.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech_\n * @private\n */\n loadTech_(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech_) {\n this.unloadTech_();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName_ = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech_ = new techComponent(techOptions);\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n // Listen to all HTML5-defined events and trigger them on the player\n this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n this.on(this.tech_, 'playing', this.handleTechPlaying_);\n this.on(this.tech_, 'ended', this.handleTechEnded_);\n this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n this.on(this.tech_, 'play', this.handleTechPlay_);\n this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n this.on(this.tech_, 'pause', this.handleTechPause_);\n this.on(this.tech_, 'progress', this.handleTechProgress_);\n this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n this.on(this.tech_, 'error', this.handleTechError_);\n this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n this.on(this.tech_, 'abort', this.handleTechAbort_);\n this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n this.on(this.tech_, 'stalled', this.handleTechStalled_);\n this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n this.usingNativeControls(this.techGet_('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners_();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech_.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech_\n * @private\n */\n unloadTech_() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech_.dispose();\n\n this.tech_ = false;\n }\n\n /**\n * Set up click and touch listeners for the playback element\n *\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold\n * on any controls will still keep the user active\n *\n * @private\n * @method addTechControlsListeners_\n */\n addTechControlsListeners_() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners_();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech_, 'tap', this.handleTechTap_);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners_\n * @private\n */\n removeTechControlsListeners_() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech_, 'tap', this.handleTechTap_);\n this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n this.off(this.tech_, 'mousedown', this.handleTechClick_);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @method handleTechReady_\n * @private\n */\n handleTechReady_() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall_('setVolume', this.cache_.volume);\n }\n\n // Look if the tech found a higher resolution poster while loading\n this.handleTechPosterChange_();\n\n // Update the duration if available\n this.handleTechDurationChange_();\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @private\n * @method handleTechLoadStart_\n */\n handleTechLoadStart_() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @private\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @private\n * @method handleTechPlay_\n */\n handleTechPlay_() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @private\n * @method handleTechWaiting_\n */\n handleTechWaiting_() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlay_\n */\n handleTechCanPlay_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlayThrough_\n */\n handleTechCanPlayThrough_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechPlaying_\n */\n handleTechPlaying_() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @private\n * @method handleTechSeeking_\n */\n handleTechSeeking_() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @private\n * @method handleTechSeeked_\n */\n handleTechSeeked_() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @private\n * @method handleTechFirstPlay_\n */\n handleTechFirstPlay_() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @private\n * @method handleTechPause_\n */\n handleTechPause_() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @private\n * @method handleTechProgress_\n */\n handleTechProgress_() {\n this.trigger('progress');\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @private\n * @method handleTechEnded_\n */\n handleTechEnded_() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @private\n * @method handleTechDurationChange_\n */\n handleTechDurationChange_() {\n this.duration(this.techGet_('duration'));\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @private\n * @method handleTechClick_\n */\n handleTechClick_(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @private\n * @method handleTechTap_\n */\n handleTechTap_() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @private\n * @method handleTechTouchStart_\n */\n handleTechTouchStart_() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @private\n * @method handleTechTouchMove_\n */\n handleTechTouchMove_() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @private\n * @method handleTechTouchEnd_\n */\n handleTechTouchEnd_(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @private\n * @method handleFullscreenChange_\n */\n handleFullscreenChange_() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick_\n */\n handleStageClick_() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @private\n * @method handleTechFullscreenChange_\n */\n handleTechFullscreenChange_(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @private\n * @method handleTechError_\n */\n handleTechError_() {\n let error = this.tech_.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @private\n * @method handleTechSuspend_\n */\n handleTechSuspend_() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @private\n * @method handleTechAbort_\n */\n handleTechAbort_() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @private\n * @method handleTechEmptied_\n */\n handleTechEmptied_() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @private\n * @method handleTechStalled_\n */\n handleTechStalled_() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @private\n * @method handleTechLoadedMetaData_\n */\n handleTechLoadedMetaData_() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @private\n * @method handleTechLoadedData_\n */\n handleTechLoadedData_() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @private\n * @method handleTechTimeUpdate_\n */\n handleTechTimeUpdate_() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @private\n * @method handleTechRateChange_\n */\n handleTechRateChange_() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @private\n * @method handleTechVolumeChange_\n */\n handleTechVolumeChange_() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @private\n * @method handleTechTextTrackChange_\n */\n handleTechTextTrackChange_() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @private\n * @method techCall_\n */\n techCall_(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech_ && !this.tech_.isReady_) {\n this.tech_.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech_[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @private\n * @method techGet_\n */\n techGet_(method) {\n if (this.tech_ && this.tech_.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech_[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech_[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n this.tech_.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall_('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall_('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet_('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall_('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds === undefined) {\n return this.cache_.duration || 0;\n }\n\n seconds = parseFloat(seconds) || 0;\n\n // Standardize on Inifity for signaling video is live\n if (seconds < 0) {\n seconds = Infinity;\n }\n\n if (seconds !== this.cache_.duration) {\n // Cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = seconds;\n\n if (seconds === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n\n this.trigger('durationchange');\n }\n\n return this;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet_('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall_('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet_('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall_('setMuted', muted);\n return this;\n }\n return this.techGet_('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet_('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech_.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall_('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech_.supportsFullScreen()) {\n this.techCall_('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall_('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n return this.techGet_('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet_('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet_('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet_ directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech_ && this.tech_['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech_ && this.tech_['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall_('initialTime'); },\n // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n // played: function(){ return this.techCall_('played'); },\n // videoTracks: function(){ return this.techCall_('videoTracks'); },\n // audioTracks: function(){ return this.techCall_('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n } else {\n this.handleLateInit_(this.el_);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n // If we're loading the playback object after it has started loading\n // or playing the video (often with autoplay on) then the loadstart event\n // has already fired and we need to fire it manually because many things\n // rely on it.\n handleLateInit_(el) {\n if (el.networkState === 0 || el.networkState === 3) {\n // The video element hasn't started loading the source yet\n // or didn't find a source\n return;\n }\n\n if (el.readyState === 0) {\n // NetworkState is set synchronously BUT loadstart is fired at the\n // end of the current stack, usually before setInterval(fn, 0).\n // So at this point we know loadstart may have already fired or is\n // about to fire, and either way the player hasn't seen it yet.\n // We don't want to fire loadstart prematurely here and cause a\n // double loadstart so we'll wait and see if it happens between now\n // and the next loop, and fire it if not.\n // HOWEVER, we also want to make sure it fires before loadedmetadata\n // which could also happen between now and the next loop, so we'll\n // watch for that also.\n let loadstartFired = false;\n let setLoadstartFired = function() {\n loadstartFired = true;\n };\n this.on('loadstart', setLoadstartFired);\n\n let triggerLoadstart = function() {\n // We did miss the original loadstart. Make sure the player\n // sees loadstart before loadedmetadata\n if (!loadstartFired) {\n this.trigger('loadstart');\n }\n };\n this.on('loadedmetadata', triggerLoadstart);\n\n this.ready(function(){\n this.off('loadstart', setLoadstartFired);\n this.off('loadedmetadata', triggerLoadstart);\n\n if (!loadstartFired) {\n // We did miss the original native loadstart. Fire it now.\n this.trigger('loadstart');\n }\n });\n\n return;\n }\n\n // From here on we know that loadstart already fired and we missed it.\n // The other readyState events aren't as much of a problem if we double\n // them, so not going to go to as much trouble as loadstart to prevent\n // that unless we find reason to.\n let eventsToTrigger = ['loadstart'];\n\n // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n eventsToTrigger.push('loadedmetadata');\n\n // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n if (el.readyState >= 2) {\n eventsToTrigger.push('loadeddata');\n }\n\n // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n if (el.readyState >= 3) {\n eventsToTrigger.push('canplay');\n }\n\n // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n if (el.readyState >= 4) {\n eventsToTrigger.push('canplaythrough');\n }\n\n // We still need to give the player time to add event listeners\n this.ready(function(){\n eventsToTrigger.forEach(function(type){\n this.trigger(type);\n }, this);\n });\n }\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) {\n this.el_.src = src;\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){\n this.el_.load();\n }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for(; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n};\n\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks\n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks\n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks\n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list\n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n //\n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * @file text-track-enums.js\n *\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n return {\n kind: track.kind,\n label: track.label,\n language: track.language,\n id: track.id,\n inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType,\n mode: track.mode,\n cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n }),\n src: track.src\n };\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n let trackEls = tech.el().querySelectorAll('track');\n\n let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n let json = trackToJson_(trackEl.track);\n json.src = trackEl.src;\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n json.forEach(function(track) {\n let addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach((cue) => addedTrack.addCue(cue));\n }\n });\n\n return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventTarget.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n /**\n * Get texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @return {Object} \n * @method getValues\n */\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n /**\n * Set texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n /**\n * Restore texttrack settings \n *\n * @method restoreSettings\n */\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n /**\n * Save texttrack settings to local storage \n *\n * @method saveSettings\n */\n saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n /**\n * Update display of texttrack settings \n *\n * @method updateDisplay\n */\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    `;\n\n return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport { isCrossOrigin } from '../utils/url.js';\nimport XHR from 'xhr';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n let opts = {\n uri: src\n };\n\n let crossOrigin = isCrossOrigin(src);\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n XHR(opts, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let i = 0; i < buffered.length; i++){\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n","import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n get(obj, key) {\n return obj[key];\n },\n set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n if (typeof Proxy === 'function') {\n let handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(key => {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function() {\n log.warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return new Proxy(target, handler);\n }\n return target;\n};\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\nimport log from './log.js';\nimport tsml from 'tsml';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}, attributes={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n log.warn(tsml`Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set ${propName} to ${val}.`);\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let val = attributes[attrName];\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object=} position This object will have x and y coordinates corresponding to the mouse position\n * @metho getPointerPosition\n */\nexport function getPointerPosition(el, event) {\n let position = {};\n let box = findElPosition(el);\n let boxW = el.offsetWidth;\n let boxH = el.offsetHeight;\n\n let boxY = box.top;\n let boxX = box.left;\n let pageY = event.pageY;\n let pageX = event.pageX;\n\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n pageY = event.changedTouches[0].pageY;\n }\n\n position.y = Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n return position;\n}\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' &&\n key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n return !!obj\n && typeof obj === 'object'\n && obj.toString() === '[object Object]'\n && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n let args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n merge.apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n let style = document.createElement('style');\n style.className = className;\n\n return style;\n};\n\nexport let setTextContent = function(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n","import log from './log.js';\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {(Number|Array)} Start of a single range or an array of ranges\n * @param {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\nexport function createTimeRanges(start, end){\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n return createTimeRangesObj([[start, end]]);\n}\n\nexport { createTimeRanges as createTimeRange };\n\nfunction createTimeRangesObj(ranges){\n if (ranges === undefined || ranges.length === 0) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex){\n if (rangeIndex === undefined) {\n log.warn(`DEPRECATED: Function '${fnName}' on 'TimeRanges' called without an index argument.`);\n rangeIndex = 0;\n }\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex){\n if (index < 0 || index > maxIndex) {\n throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is greater than or equal to the maximum bound (${maxIndex}).`);\n }\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = ``;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n let urlInfo = parseUrl(url);\n let winLoc = window.location;\n\n // IE8 protocol relative urls will return ':' for protocol\n let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n return crossOrigin;\n};\n","/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\nimport TextTrack from './tracks/text-track.js';\n\nimport assign from 'object.assign';\nimport { createTimeRanges } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendFn from './extend.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\nimport xhr from 'xhr';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = document.querySelector('.vjs-styles-defaults');\nif (!style) {\n style = stylesheet.createStyleElement('vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(style, head.firstChild);\n stylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n `);\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extend' doc for more info)\n * var MySpecialButton = videojs.extend(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extend(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = extendFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number|Array} start Start time in seconds or an array of ranges\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n * videojs.xhr({\n * body: someJSONString,\n * uri: \"/foo\",\n * headers: {\n * \"Content-Type\": \"application/json\"\n * }\n * }, function (err, resp, body) {\n * // check resp.statusCode\n * });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = xhr;\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = TextTrack;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n"]} \ No newline at end of file diff --git a/node_modules/video.js/dist/font/VideoJS.svg b/node_modules/video.js/dist/font/VideoJS.svg index 876f14b..016dc06 100644 --- a/node_modules/video.js/dist/font/VideoJS.svg +++ b/node_modules/video.js/dist/font/VideoJS.svg @@ -1,4 +1,4 @@ - + diff --git a/node_modules/video.js/dist/ie8/videojs-ie8.min.js b/node_modules/video.js/dist/ie8/videojs-ie8.min.js index 55ec89d..16bcdcb 100644 --- a/node_modules/video.js/dist/ie8/videojs-ie8.min.js +++ b/node_modules/video.js/dist/ie8/videojs-ie8.min.js @@ -1 +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 a,b=Array.prototype,c=Object.prototype,d=Function.prototype,e=String.prototype,f=Number.prototype,g=b.slice,h=b.splice,i=b.push,j=b.unshift,k=b.concat,l=d.call,m=c.toString,n=Array.isArray||function(a){return"[object Array]"===m.call(a)},o="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,p=Function.prototype.toString,q=function(a){try{return p.call(a),!0}catch(b){return!1}},r="[object Function]",s="[object GeneratorFunction]";a=function(a){if("function"!=typeof a)return!1;if(o)return q(a);var b=m.call(a);return b===r||b===s};var t,u=RegExp.prototype.exec,v=function(a){try{return u.call(a),!0}catch(b){return!1}},w="[object RegExp]";t=function(a){return"object"!=typeof a?!1:o?v(a):m.call(a)===w};var x,y=String.prototype.valueOf,z=function(a){try{return y.call(a),!0}catch(b){return!1}},A="[object String]";x=function(a){return"string"==typeof a?!0:"object"!=typeof a?!1:o?z(a):m.call(a)===A};var B=function(b){var c=m.call(b),d="[object Arguments]"===c;return d||(d=!n(b)&&null!==b&&"object"==typeof b&&"number"==typeof b.length&&b.length>=0&&a(b.callee)),d},C=function(a){var b,c=Object.defineProperty&&function(){try{var a={};Object.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}}();return b=c?function(a,b,c,d){!d&&b in a||Object.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)}}(c.hasOwnProperty),D=function(a){var b=typeof a;return null===a||"object"!==b&&"function"!==b},E={ToInteger:function(a){var b=+a;return b!==b?b=0:0!==b&&b!==1/0&&b!==-(1/0)&&(b=(b>0||-1)*Math.floor(Math.abs(b))),b},ToPrimitive:function(b){var c,d,e;if(D(b))return b;if(d=b.valueOf,a(d)&&(c=d.call(b),D(c)))return c;if(e=b.toString,a(e)&&(c=e.call(b),D(c)))return c;throw new TypeError},ToObject:function(a){if(null==a)throw new TypeError("can't convert "+a+" to object");return Object(a)},ToUint32:function(a){return a>>>0}},F=function(){};C(d,{bind:function(b){var c=this;if(!a(c))throw new TypeError("Function.prototype.bind called on incompatible "+c);for(var d,e=g.call(arguments,1),f=function(){if(this instanceof d){var a=c.apply(this,k.call(e,g.call(arguments)));return Object(a)===a?a:this}return c.apply(b,k.call(e,g.call(arguments)))},h=Math.max(0,c.length-e.length),i=[],j=0;h>j;j++)i.push("$"+j);return d=Function("binder","return function ("+i.join(",")+"){ return binder.apply(this, arguments); }")(f),c.prototype&&(F.prototype=c.prototype,d.prototype=new F,F.prototype=null),d}});var G=l.bind(c.hasOwnProperty),H=function(){var a=[1,2],b=a.splice();return 2===a.length&&n(b)&&0===b.length}();C(b,{splice:function(a,b){return 0===arguments.length?[]:h.apply(this,arguments)}},!H);var I=function(){var a={};return b.splice.call(a,0,0,1),1===a.length}();C(b,{splice:function(a,b){if(0===arguments.length)return[];var c=arguments;return this.length=Math.max(E.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof b&&(c=g.call(arguments),c.length<2?c.push(this.length-a):c[1]=E.ToInteger(b)),h.apply(this,c)}},!I);var J=1!==[].unshift(0);C(b,{unshift:function(){return j.apply(this,arguments),this.length}},J),C(Array,{isArray:n});var K=Object("a"),L="a"!==K[0]||!(0 in K),M=function(a){var b=!0,c=!0;return a&&(a.call("foo",function(a,c,d){"object"!=typeof d&&(b=!1)}),a.call([1],function(){"use strict";c="string"==typeof this},"x")),!!a&&b&&c};C(b,{forEach:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=-1,g=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++f>>0,g=Array(f);if(arguments.length>1&&(c=arguments[1]),!a(b))throw new TypeError("Array.prototype.map callback must be a function");for(var h=0;f>h;h++)h in e&&("undefined"!=typeof c?g[h]=b.call(c,e[h],h,d):g[h]=b(e[h],h,d));return g}},!M(b.map)),C(b,{filter:function(b){var c,d,e=E.ToObject(this),f=L&&x(this)?this.split(""):e,g=f.length>>>0,h=[];if(arguments.length>1&&(d=arguments[1]),!a(b))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?b(c,i,e):b.call(d,c,i,e))&&h.push(c));return h}},!M(b.filter)),C(b,{every:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))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?b(e[g],g,d):b.call(c,e[g],g,d)))return!1;return!0}},!M(b.every)),C(b,{some:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))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?b(e[g],g,d):b.call(c,e[g],g,d)))return!0;return!1}},!M(b.some));var N=!1;b.reduce&&(N="object"==typeof b.reduce.call("es5",function(a,b,c,d){return d})),C(b,{reduce:function(b){var c=E.ToObject(this),d=L&&x(this)?this.split(""):c,e=d.length>>>0;if(!a(b))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=b(f,d[g],g,c));return f}},!N);var O=!1;b.reduceRight&&(O="object"==typeof b.reduceRight.call("es5",function(a,b,c,d){return d})),C(b,{reduceRight:function(b){var c=E.ToObject(this),d=L&&x(this)?this.split(""):c,e=d.length>>>0;if(!a(b))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=b(f,d[g],g,c));while(g--);return f}},!O);var P=Array.prototype.indexOf&&-1!==[0,1].indexOf(1,2);C(b,{indexOf:function(a){var b=L&&x(this)?this.split(""):E.ToObject(this),c=b.length>>>0;if(0===c)return-1;var d=0;for(arguments.length>1&&(d=E.ToInteger(arguments[1])),d=d>=0?d:Math.max(0,c+d);c>d;d++)if(d in b&&b[d]===a)return d;return-1}},P);var Q=Array.prototype.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);C(b,{lastIndexOf:function(a){var b=L&&x(this)?this.split(""):E.ToObject(this),c=b.length>>>0;if(0===c)return-1;var d=c-1;for(arguments.length>1&&(d=Math.min(d,E.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}},Q);var R=!{toString:null}.propertyIsEnumerable("toString"),S=function(){}.propertyIsEnumerable("prototype"),T=!G("x","0"),U=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],V=U.length;C(Object,{keys:function(b){var c=a(b),d=B(b),e=null!==b&&"object"==typeof b,f=e&&x(b);if(!e&&!c&&!d)throw new TypeError("Object.keys called on a non-object");var g=[],h=S&&c;if(f&&T||d)for(var i=0;im;m++){var n=U[m];l&&"constructor"===n||!G(b,n)||g.push(n)}return g}});var W=Object.keys&&function(){return 2===Object.keys(arguments).length}(1,2),X=Object.keys;C(Object,{keys:function(a){return X(B(a)?b.slice.call(a):a)}},!W);var Y=-621987552e5,Z="-000001",$=Date.prototype.toISOString&&-1===new Date(Y).toISOString().indexOf(Z);C(Date.prototype,{toISOString:function(){var a,b,c,d,e;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(d=this.getUTCFullYear(),e=this.getUTCMonth(),d+=Math.floor(e/12),e=(e%12+12)%12,a=[e+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],d=(0>d?"-":d>9999?"+":"")+("00000"+Math.abs(d)).slice(d>=0&&9999>=d?-4:-6),b=a.length;b--;)c=a[b],10>c&&(a[b]="0"+c);return d+"-"+a.slice(0,2).join("-")+"T"+a.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}},$);var _=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Y).toJSON().indexOf(Z)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(a){return!1}}();_||(Date.prototype.toJSON=function(b){var c=Object(this),d=E.ToPrimitive(c);if("number"==typeof d&&!isFinite(d))return null;var e=c.toISOString;if(!a(e))throw new TypeError("toISOString property is not callable");return e.call(c)});var aa=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),ba=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z")),ca=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));(!Date.parse||ca||ba||!aa)&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j,k=arguments.length;return j=this instanceof a?1===k&&String(c)===c?new a(b.parse(c)):k>=7?new a(c,d,e,f,g,h,i):k>=6?new a(c,d,e,f,g,h):k>=5?new a(c,d,e,f,g):k>=4?new a(c,d,e,f):k>=3?new a(c,d,e):k>=2?new a(c,d):k>=1?new a(c):new a:a.apply(this,arguments),C(j,{constructor:b},!0),j},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){return Number(new a(1970,0,1,0,0,0,b))};for(var g in a)G(a,g)&&(b[g]=a[g]);return C(b,{now:a.now,UTC:a.UTC},!0),b.prototype=a.prototype,C(b.prototype,{constructor:b},!0),b.parse=function(b){var d=c.exec(b);if(d){var g,h=Number(d[1]),i=Number(d[2]||1)-1,j=Number(d[3]||1)-1,k=Number(d[4]||0),l=Number(d[5]||0),m=Number(d[6]||0),n=Math.floor(1e3*Number(d[7]||0)),o=Boolean(d[4]&&!d[8]),p="-"===d[9]?1:-1,q=Number(d[10]||0),r=Number(d[11]||0);return(l>0||m>0||n>0?24:25)>k&&60>l&&60>m&&1e3>n&&i>-1&&12>i&&24>q&&60>r&&j>-1&&j=-864e13&&864e13>=g)?g:NaN}return a.parse.apply(this,arguments)},b}(Date)),Date.now||(Date.now=function(){return(new Date).getTime()});var da=f.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),ea={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(a,b){for(var c=-1,d=b;++c=0;)c+=ea.data[b],ea.data[b]=Math.floor(c/a),c=c%a*ea.base},numToString:function(){for(var a=ea.size,b="";--a>=0;)if(""!==b||0===a||0!==ea.data[a]){var c=String(ea.data[a]);""===b?b=c:b+="0000000".slice(0,7-c.length)+c}return b},pow:function qa(a,b,c){return 0===b?c:b%2===1?qa(a,b-1,c*a):qa(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}};C(f,{toFixed:function(a){var b,c,d,e,f,g,h,i;if(b=Number(a),b=b!==b?0:Math.floor(b),0>b||b>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(c=Number(this),c!==c)return"NaN";if(-1e21>=c||c>=1e21)return String(c);if(d="",0>c&&(d="-",c=-c),e="0",c>1e-21)if(f=ea.log(c*ea.pow(2,69,1))-69,g=0>f?c*ea.pow(2,-f,1):c/ea.pow(2,f,1),g*=4503599627370496,f=52-f,f>0){for(ea.multiply(0,g),h=b;h>=7;)ea.multiply(1e7,0),h-=7;for(ea.multiply(ea.pow(10,h,1),0),h=f-1;h>=23;)ea.divide(1<<23),h-=23;ea.divide(1<0?(i=e.length,e=b>=i?d+"0.0000000000000000000".slice(0,b-i+2)+e:d+e.slice(0,i-b)+"."+e.slice(i-b)):e=d+e,e}},da);var fa=e.split;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];e.split=function(b,c){var d=this;if("undefined"==typeof b&&0===c)return[];if(!t(b))return fa.call(this,b,c);var e,f,g,h,j=[],k=(b.ignoreCase?"i":"")+(b.multiline?"m":"")+(b.extended?"x":"")+(b.sticky?"y":""),l=0,m=new RegExp(b.source,k+"g");d+="",a||(e=new RegExp("^"+m.source+"$(?!\\s)",k));var n="undefined"==typeof c?-1>>>0:E.ToUint32(c);for(f=m.exec(d);f&&(g=f.index+f[0].length,!(g>l&&(j.push(d.slice(l,f.index)),!a&&f.length>1&&f[0].replace(e,function(){for(var a=1;a1&&f.index=n)));)m.lastIndex===f.index&&m.lastIndex++,f=m.exec(d);return l===d.length?(h||!m.test(""))&&j.push(""):j.push(d.slice(l)),j.length>n?j.slice(0,n):j}}():"0".split(void 0,0).length&&(e.split=function(a,b){return"undefined"==typeof a&&0===b?[]:fa.call(this,a,b)});var ga=e.replace,ha=function(){var a=[];return"x".replace(/x(.)?/g,function(b,c){a.push(c)}),1===a.length&&"undefined"==typeof a[0]}();ha||(e.replace=function(b,c){var d=a(c),e=t(b)&&/\)[*?]/.test(b.source);if(d&&e){var f=function(a){var d=arguments.length,e=b.lastIndex;b.lastIndex=0;var f=b.exec(a)||[];return b.lastIndex=e,f.push(arguments[d-2],arguments[d-1]),c.apply(this,f)};return ga.call(this,b,f)}return ga.call(this,b,c)});var ia=e.substr,ja="".substr&&"b"!=="0b".substr(-1);C(e,{substr:function(a,b){var c=a;return 0>a&&(c=Math.max(this.length+a,0)),ia.call(this,c,b)}},ja);var ka=" \n \f\r   ᠎              \u2028\u2029\ufeff",la="​",ma="["+ka+"]",na=new RegExp("^"+ma+ma+"*"),oa=new RegExp(ma+ma+"*$"),pa=e.trim&&(ka.trim()||!la.trim());C(e,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return String(this).replace(na,"").replace(oa,"")}},pa),(8!==parseInt(ka+"08")||22!==parseInt(ka+"0x16"))&&(parseInt=function(a){var b=/^0[xX]/;return function(c,d){var e=String(c).trim(),f=Number(d)||(b.test(e)?16:10);return a(e,f)}}(parseInt))}),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.prototype.call,g=Object.prototype,h=f.bind(g.hasOwnProperty),i=h(g,"__defineGetter__");i&&(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:a.constructor?a.constructor.prototype:g});var j=function(a){try{return a.sentinel=0,0===Object.getOwnPropertyDescriptor(a,"sentinel").value}catch(b){return!1}};if(Object.defineProperty){var k=j({}),l="undefined"==typeof b||j(b.createElement("div"));if(!l||!k)var m=Object.getOwnPropertyDescriptor}if(!Object.getOwnPropertyDescriptor||m){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if("object"!=typeof a&&"function"!=typeof a||null===a)throw new TypeError(n+a);if(m)try{return m.call(Object,a,b)}catch(c){}var f;if(!h(a,b))return f;if(f={enumerable:!0,configurable:!0},i){var j=a.__proto__,k=a!==g;k&&(a.__proto__=g);var l=d(a,b),o=e(a,b);if(k&&(a.__proto__=j),l||o)return l&&(f.get=l),o&&(f.set=o),f}return f.value=a[b],f.writable=!0,f}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),!Object.create){var o,p=!({__proto__:null}instanceof Object);o=p||"undefined"==typeof b?function(){return{__proto__:null}}:function(){var a=b.createElement("iframe"),c=b.body||b.documentElement;a.style.display="none",c.appendChild(a),a.src="javascript:";var d=a.contentWindow.Object.prototype;c.removeChild(a),a=null,delete d.constructor,delete d.hasOwnProperty,delete d.propertyIsEnumerable,delete d.isPrototypeOf,delete d.toLocaleString,delete d.toString,delete d.valueOf,d.__proto__=null;var e=function(){};return e.prototype=d,o=function(){return new e},new e},Object.create=function(a,b){var c,d=function(){};if(null===a)c=o();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 q=function(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){return!1}};if(Object.defineProperty){var r=q({}),s="undefined"==typeof b||q(b.createElement("div"));if(!r||!s)var t=Object.defineProperty,u=Object.defineProperties}if(!Object.defineProperty||t){var v="Property description must be an object: ",w="Object.defineProperty called on non-object: ",x="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(w+b);if("object"!=typeof h&&"function"!=typeof h||null===h)throw new TypeError(v+h);if(t)try{return t.call(Object,b,f,h)}catch(j){}if("value"in h)if(i&&(d(b,f)||e(b,f))){var k=b.__proto__;b.__proto__=g,delete b[f],b[f]=h.value,b.__proto__=k}else b[f]=h.value;else{if(!i)throw new TypeError(x);"get"in h&&a(b,f,h.get),"set"in h&&c(b,f,h.set)}return b}}(!Object.defineProperties||u)&&(Object.defineProperties=function(a,b){if(u)try{return u.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(y){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); +!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 a,b=Array.prototype,c=Object.prototype,d=Function.prototype,e=String.prototype,f=Number.prototype,g=b.slice,h=b.splice,i=b.push,j=b.unshift,k=b.concat,l=d.call,m=c.toString,n=Array.isArray||function(a){return"[object Array]"===m.call(a)},o="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag,p=Function.prototype.toString,q=function(a){try{return p.call(a),!0}catch(b){return!1}},r="[object Function]",s="[object GeneratorFunction]";a=function(a){if("function"!=typeof a)return!1;if(o)return q(a);var b=m.call(a);return b===r||b===s};var t,u=RegExp.prototype.exec,v=function(a){try{return u.call(a),!0}catch(b){return!1}},w="[object RegExp]";t=function(a){return"object"!=typeof a?!1:o?v(a):m.call(a)===w};var x,y=String.prototype.valueOf,z=function(a){try{return y.call(a),!0}catch(b){return!1}},A="[object String]";x=function(a){return"string"==typeof a?!0:"object"!=typeof a?!1:o?z(a):m.call(a)===A};var B=function(b){var c=m.call(b),d="[object Arguments]"===c;return d||(d=!n(b)&&null!==b&&"object"==typeof b&&"number"==typeof b.length&&b.length>=0&&a(b.callee)),d},C=function(a){var b,c=Object.defineProperty&&function(){try{var a={};Object.defineProperty(a,"x",{enumerable:!1,value:a});for(var b in a)return!1;return a.x===a}catch(c){return!1}}();return b=c?function(a,b,c,d){!d&&b in a||Object.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)}}(c.hasOwnProperty),D=function(a){var b=typeof a;return null===a||"object"!==b&&"function"!==b},E={ToInteger:function(a){var b=+a;return b!==b?b=0:0!==b&&b!==1/0&&b!==-(1/0)&&(b=(b>0||-1)*Math.floor(Math.abs(b))),b},ToPrimitive:function(b){var c,d,e;if(D(b))return b;if(d=b.valueOf,a(d)&&(c=d.call(b),D(c)))return c;if(e=b.toString,a(e)&&(c=e.call(b),D(c)))return c;throw new TypeError},ToObject:function(a){if(null==a)throw new TypeError("can't convert "+a+" to object");return Object(a)},ToUint32:function(a){return a>>>0}},F=function(){};C(d,{bind:function(b){var c=this;if(!a(c))throw new TypeError("Function.prototype.bind called on incompatible "+c);for(var d,e=g.call(arguments,1),f=function(){if(this instanceof d){var a=c.apply(this,k.call(e,g.call(arguments)));return Object(a)===a?a:this}return c.apply(b,k.call(e,g.call(arguments)))},h=Math.max(0,c.length-e.length),i=[],j=0;h>j;j++)i.push("$"+j);return d=Function("binder","return function ("+i.join(",")+"){ return binder.apply(this, arguments); }")(f),c.prototype&&(F.prototype=c.prototype,d.prototype=new F,F.prototype=null),d}});var G=l.bind(c.hasOwnProperty),H=function(){var a=[1,2],b=a.splice();return 2===a.length&&n(b)&&0===b.length}();C(b,{splice:function(a,b){return 0===arguments.length?[]:h.apply(this,arguments)}},!H);var I=function(){var a={};return b.splice.call(a,0,0,1),1===a.length}();C(b,{splice:function(a,b){if(0===arguments.length)return[];var c=arguments;return this.length=Math.max(E.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof b&&(c=g.call(arguments),c.length<2?c.push(this.length-a):c[1]=E.ToInteger(b)),h.apply(this,c)}},!I);var J=1!==[].unshift(0);C(b,{unshift:function(){return j.apply(this,arguments),this.length}},J),C(Array,{isArray:n});var K=Object("a"),L="a"!==K[0]||!(0 in K),M=function(a){var b=!0,c=!0;return a&&(a.call("foo",function(a,c,d){"object"!=typeof d&&(b=!1)}),a.call([1],function(){"use strict";c="string"==typeof this},"x")),!!a&&b&&c};C(b,{forEach:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=-1,g=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++f>>0,g=Array(f);if(arguments.length>1&&(c=arguments[1]),!a(b))throw new TypeError("Array.prototype.map callback must be a function");for(var h=0;f>h;h++)h in e&&("undefined"!=typeof c?g[h]=b.call(c,e[h],h,d):g[h]=b(e[h],h,d));return g}},!M(b.map)),C(b,{filter:function(b){var c,d,e=E.ToObject(this),f=L&&x(this)?this.split(""):e,g=f.length>>>0,h=[];if(arguments.length>1&&(d=arguments[1]),!a(b))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?b(c,i,e):b.call(d,c,i,e))&&h.push(c));return h}},!M(b.filter)),C(b,{every:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))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?b(e[g],g,d):b.call(c,e[g],g,d)))return!1;return!0}},!M(b.every)),C(b,{some:function(b){var c,d=E.ToObject(this),e=L&&x(this)?this.split(""):d,f=e.length>>>0;if(arguments.length>1&&(c=arguments[1]),!a(b))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?b(e[g],g,d):b.call(c,e[g],g,d)))return!0;return!1}},!M(b.some));var N=!1;b.reduce&&(N="object"==typeof b.reduce.call("es5",function(a,b,c,d){return d})),C(b,{reduce:function(b){var c=E.ToObject(this),d=L&&x(this)?this.split(""):c,e=d.length>>>0;if(!a(b))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=b(f,d[g],g,c));return f}},!N);var O=!1;b.reduceRight&&(O="object"==typeof b.reduceRight.call("es5",function(a,b,c,d){return d})),C(b,{reduceRight:function(b){var c=E.ToObject(this),d=L&&x(this)?this.split(""):c,e=d.length>>>0;if(!a(b))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=b(f,d[g],g,c));while(g--);return f}},!O);var P=Array.prototype.indexOf&&-1!==[0,1].indexOf(1,2);C(b,{indexOf:function(a){var b=L&&x(this)?this.split(""):E.ToObject(this),c=b.length>>>0;if(0===c)return-1;var d=0;for(arguments.length>1&&(d=E.ToInteger(arguments[1])),d=d>=0?d:Math.max(0,c+d);c>d;d++)if(d in b&&b[d]===a)return d;return-1}},P);var Q=Array.prototype.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);C(b,{lastIndexOf:function(a){var b=L&&x(this)?this.split(""):E.ToObject(this),c=b.length>>>0;if(0===c)return-1;var d=c-1;for(arguments.length>1&&(d=Math.min(d,E.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}},Q);var R=!{toString:null}.propertyIsEnumerable("toString"),S=function(){}.propertyIsEnumerable("prototype"),T=!G("x","0"),U=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],V=U.length;C(Object,{keys:function(b){var c=a(b),d=B(b),e=null!==b&&"object"==typeof b,f=e&&x(b);if(!e&&!c&&!d)throw new TypeError("Object.keys called on a non-object");var g=[],h=S&&c;if(f&&T||d)for(var i=0;im;m++){var n=U[m];l&&"constructor"===n||!G(b,n)||g.push(n)}return g}});var W=Object.keys&&function(){return 2===Object.keys(arguments).length}(1,2),X=Object.keys;C(Object,{keys:function(a){return X(B(a)?b.slice.call(a):a)}},!W);var Y=-621987552e5,Z="-000001",$=Date.prototype.toISOString&&-1===new Date(Y).toISOString().indexOf(Z);C(Date.prototype,{toISOString:function(){var a,b,c,d,e;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(d=this.getUTCFullYear(),e=this.getUTCMonth(),d+=Math.floor(e/12),e=(e%12+12)%12,a=[e+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],d=(0>d?"-":d>9999?"+":"")+("00000"+Math.abs(d)).slice(d>=0&&9999>=d?-4:-6),b=a.length;b--;)c=a[b],10>c&&(a[b]="0"+c);return d+"-"+a.slice(0,2).join("-")+"T"+a.slice(2).join(":")+"."+("000"+this.getUTCMilliseconds()).slice(-3)+"Z"}},$);var _=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Y).toJSON().indexOf(Z)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(a){return!1}}();_||(Date.prototype.toJSON=function(b){var c=Object(this),d=E.ToPrimitive(c);if("number"==typeof d&&!isFinite(d))return null;var e=c.toISOString;if(!a(e))throw new TypeError("toISOString property is not callable");return e.call(c)});var aa=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),ba=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z")),ca=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));(!Date.parse||ca||ba||!aa)&&(Date=function(a){var b=function(c,d,e,f,g,h,i){var j,k=arguments.length;return j=this instanceof a?1===k&&String(c)===c?new a(b.parse(c)):k>=7?new a(c,d,e,f,g,h,i):k>=6?new a(c,d,e,f,g,h):k>=5?new a(c,d,e,f,g):k>=4?new a(c,d,e,f):k>=3?new a(c,d,e):k>=2?new a(c,d):k>=1?new a(c):new a:a.apply(this,arguments),C(j,{constructor:b},!0),j},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){return Number(new a(1970,0,1,0,0,0,b))};for(var g in a)G(a,g)&&(b[g]=a[g]);return C(b,{now:a.now,UTC:a.UTC},!0),b.prototype=a.prototype,C(b.prototype,{constructor:b},!0),b.parse=function(b){var d=c.exec(b);if(d){var g,h=Number(d[1]),i=Number(d[2]||1)-1,j=Number(d[3]||1)-1,k=Number(d[4]||0),l=Number(d[5]||0),m=Number(d[6]||0),n=Math.floor(1e3*Number(d[7]||0)),o=Boolean(d[4]&&!d[8]),p="-"===d[9]?1:-1,q=Number(d[10]||0),r=Number(d[11]||0);return(l>0||m>0||n>0?24:25)>k&&60>l&&60>m&&1e3>n&&i>-1&&12>i&&24>q&&60>r&&j>-1&&j=-864e13&&864e13>=g)?g:NaN}return a.parse.apply(this,arguments)},b}(Date)),Date.now||(Date.now=function(){return(new Date).getTime()});var da=f.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),ea={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(a,b){for(var c=-1,d=b;++c=0;)c+=ea.data[b],ea.data[b]=Math.floor(c/a),c=c%a*ea.base},numToString:function(){for(var a=ea.size,b="";--a>=0;)if(""!==b||0===a||0!==ea.data[a]){var c=String(ea.data[a]);""===b?b=c:b+="0000000".slice(0,7-c.length)+c}return b},pow:function qa(a,b,c){return 0===b?c:b%2===1?qa(a,b-1,c*a):qa(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}};C(f,{toFixed:function(a){var b,c,d,e,f,g,h,i;if(b=Number(a),b=b!==b?0:Math.floor(b),0>b||b>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(c=Number(this),c!==c)return"NaN";if(-1e21>=c||c>=1e21)return String(c);if(d="",0>c&&(d="-",c=-c),e="0",c>1e-21)if(f=ea.log(c*ea.pow(2,69,1))-69,g=0>f?c*ea.pow(2,-f,1):c/ea.pow(2,f,1),g*=4503599627370496,f=52-f,f>0){for(ea.multiply(0,g),h=b;h>=7;)ea.multiply(1e7,0),h-=7;for(ea.multiply(ea.pow(10,h,1),0),h=f-1;h>=23;)ea.divide(1<<23),h-=23;ea.divide(1<0?(i=e.length,e=b>=i?d+"0.0000000000000000000".slice(0,b-i+2)+e:d+e.slice(0,i-b)+"."+e.slice(i-b)):e=d+e,e}},da);var fa=e.split;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];e.split=function(b,c){var d=this;if("undefined"==typeof b&&0===c)return[];if(!t(b))return fa.call(this,b,c);var e,f,g,h,j=[],k=(b.ignoreCase?"i":"")+(b.multiline?"m":"")+(b.extended?"x":"")+(b.sticky?"y":""),l=0,m=new RegExp(b.source,k+"g");d+="",a||(e=new RegExp("^"+m.source+"$(?!\\s)",k));var n="undefined"==typeof c?-1>>>0:E.ToUint32(c);for(f=m.exec(d);f&&(g=f.index+f[0].length,!(g>l&&(j.push(d.slice(l,f.index)),!a&&f.length>1&&f[0].replace(e,function(){for(var a=1;a1&&f.index=n)));)m.lastIndex===f.index&&m.lastIndex++,f=m.exec(d);return l===d.length?(h||!m.test(""))&&j.push(""):j.push(d.slice(l)),j.length>n?j.slice(0,n):j}}():"0".split(void 0,0).length&&(e.split=function(a,b){return"undefined"==typeof a&&0===b?[]:fa.call(this,a,b)});var ga=e.replace,ha=function(){var a=[];return"x".replace(/x(.)?/g,function(b,c){a.push(c)}),1===a.length&&"undefined"==typeof a[0]}();ha||(e.replace=function(b,c){var d=a(c),e=t(b)&&/\)[*?]/.test(b.source);if(d&&e){var f=function(a){var d=arguments.length,e=b.lastIndex;b.lastIndex=0;var f=b.exec(a)||[];return b.lastIndex=e,f.push(arguments[d-2],arguments[d-1]),c.apply(this,f)};return ga.call(this,b,f)}return ga.call(this,b,c)});var ia=e.substr,ja="".substr&&"b"!=="0b".substr(-1);C(e,{substr:function(a,b){var c=a;return 0>a&&(c=Math.max(this.length+a,0)),ia.call(this,c,b)}},ja);var ka=" \n \f\r   ᠎              \u2028\u2029\ufeff",la="​",ma="["+ka+"]",na=new RegExp("^"+ma+ma+"*"),oa=new RegExp(ma+ma+"*$"),pa=e.trim&&(ka.trim()||!la.trim());C(e,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return String(this).replace(na,"").replace(oa,"")}},pa),(8!==parseInt(ka+"08")||22!==parseInt(ka+"0x16"))&&(parseInt=function(a){var b=/^0[xX]/;return function(c,d){var e=String(c).trim(),f=Number(d)||(b.test(e)?16:10);return a(e,f)}}(parseInt))}),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.prototype.call,g=Object.prototype,h=f.bind(g.hasOwnProperty),i=h(g,"__defineGetter__");i&&(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:a.constructor?a.constructor.prototype:g});var j=function(a){try{return a.sentinel=0,0===Object.getOwnPropertyDescriptor(a,"sentinel").value}catch(b){return!1}};if(Object.defineProperty){var k=j({}),l="undefined"==typeof b||j(b.createElement("div"));if(!l||!k)var m=Object.getOwnPropertyDescriptor}if(!Object.getOwnPropertyDescriptor||m){var n="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(a,b){if("object"!=typeof a&&"function"!=typeof a||null===a)throw new TypeError(n+a);if(m)try{return m.call(Object,a,b)}catch(c){}var f;if(!h(a,b))return f;if(f={enumerable:!0,configurable:!0},i){var j=a.__proto__,k=a!==g;k&&(a.__proto__=g);var l=d(a,b),o=e(a,b);if(k&&(a.__proto__=j),l||o)return l&&(f.get=l),o&&(f.set=o),f}return f.value=a[b],f.writable=!0,f}}if(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(a){return Object.keys(a)}),!Object.create){var o,p=!({__proto__:null}instanceof Object);o=p||"undefined"==typeof b?function(){return{__proto__:null}}:function(){var a=b.createElement("iframe"),c=b.body||b.documentElement;a.style.display="none",c.appendChild(a),a.src="javascript:";var d=a.contentWindow.Object.prototype;c.removeChild(a),a=null,delete d.constructor,delete d.hasOwnProperty,delete d.propertyIsEnumerable,delete d.isPrototypeOf,delete d.toLocaleString,delete d.toString,delete d.valueOf,d.__proto__=null;var e=function(){};return e.prototype=d,o=function(){return new e},new e},Object.create=function(a,b){var c,d=function(){};if(null===a)c=o();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 q=function(a){try{return Object.defineProperty(a,"sentinel",{}),"sentinel"in a}catch(b){return!1}};if(Object.defineProperty){var r=q({}),s="undefined"==typeof b||q(b.createElement("div"));if(!r||!s)var t=Object.defineProperty,u=Object.defineProperties}if(!Object.defineProperty||t){var v="Property description must be an object: ",w="Object.defineProperty called on non-object: ",x="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(w+b);if("object"!=typeof h&&"function"!=typeof h||null===h)throw new TypeError(v+h);if(t)try{return t.call(Object,b,f,h)}catch(j){}if("value"in h)if(i&&(d(b,f)||e(b,f))){var k=b.__proto__;b.__proto__=g,delete b[f],b[f]=h.value,b.__proto__=k}else b[f]=h.value;else{if(!i)throw new TypeError(x);"get"in h&&a(b,f,h.get),"set"in h&&c(b,f,h.set)}return b}}(!Object.defineProperties||u)&&(Object.defineProperties=function(a,b){if(u)try{return u.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(y){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/node_modules/video.js/dist/lang/ar.js b/node_modules/video.js/dist/lang/ar.js index 07962dc..d471cb4 100644 --- a/node_modules/video.js/dist/lang/ar.js +++ b/node_modules/video.js/dist/lang/ar.js @@ -23,4 +23,4 @@ videojs.addLanguage("ar",{ "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/node_modules/video.js/dist/lang/ba.js b/node_modules/video.js/dist/lang/ba.js index 69c7923..d5c003e 100644 --- a/node_modules/video.js/dist/lang/ba.js +++ b/node_modules/video.js/dist/lang/ba.js @@ -23,4 +23,4 @@ videojs.addLanguage("ba",{ "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/node_modules/video.js/dist/lang/bg.js b/node_modules/video.js/dist/lang/bg.js index ddb0909..35626ac 100644 --- a/node_modules/video.js/dist/lang/bg.js +++ b/node_modules/video.js/dist/lang/bg.js @@ -23,4 +23,4 @@ videojs.addLanguage("bg",{ "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/node_modules/video.js/dist/lang/ca.js b/node_modules/video.js/dist/lang/ca.js index 8a72b9e..aab92d5 100644 --- a/node_modules/video.js/dist/lang/ca.js +++ b/node_modules/video.js/dist/lang/ca.js @@ -23,4 +23,4 @@ videojs.addLanguage("ca",{ "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/node_modules/video.js/dist/lang/cs.js b/node_modules/video.js/dist/lang/cs.js index 8684381..3f8c74a 100644 --- a/node_modules/video.js/dist/lang/cs.js +++ b/node_modules/video.js/dist/lang/cs.js @@ -23,4 +23,4 @@ videojs.addLanguage("cs",{ "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/node_modules/video.js/dist/lang/da.js b/node_modules/video.js/dist/lang/da.js index 8b40ba7..b25903c 100644 --- a/node_modules/video.js/dist/lang/da.js +++ b/node_modules/video.js/dist/lang/da.js @@ -23,4 +23,4 @@ videojs.addLanguage("da",{ "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/node_modules/video.js/dist/lang/de.js b/node_modules/video.js/dist/lang/de.js index 92d46c8..2f0522f 100644 --- a/node_modules/video.js/dist/lang/de.js +++ b/node_modules/video.js/dist/lang/de.js @@ -23,4 +23,4 @@ videojs.addLanguage("de",{ "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." -}); +}); \ No newline at end of file diff --git a/node_modules/video.js/dist/lang/es.js b/node_modules/video.js/dist/lang/es.js index 8830752..f33125f 100644 --- a/node_modules/video.js/dist/lang/es.js +++ b/node_modules/video.js/dist/lang/es.js @@ -23,4 +23,4 @@ videojs.addLanguage("es",{ "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/node_modules/video.js/dist/lang/fi.js b/node_modules/video.js/dist/lang/fi.js index 526ba48..a3e1964 100644 --- a/node_modules/video.js/dist/lang/fi.js +++ b/node_modules/video.js/dist/lang/fi.js @@ -23,4 +23,4 @@ videojs.addLanguage("fi",{ "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/node_modules/video.js/dist/lang/fr.js b/node_modules/video.js/dist/lang/fr.js index 16ec6c2..2682da5 100644 --- a/node_modules/video.js/dist/lang/fr.js +++ b/node_modules/video.js/dist/lang/fr.js @@ -23,4 +23,4 @@ videojs.addLanguage("fr",{ "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." -}); +}); \ No newline at end of file diff --git a/node_modules/video.js/dist/lang/hr.js b/node_modules/video.js/dist/lang/hr.js index 93e7dcd..ed9360b 100644 --- a/node_modules/video.js/dist/lang/hr.js +++ b/node_modules/video.js/dist/lang/hr.js @@ -23,4 +23,4 @@ videojs.addLanguage("hr",{ "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/node_modules/video.js/dist/lang/hu.js b/node_modules/video.js/dist/lang/hu.js index d9d5813..46a9a1a 100644 --- a/node_modules/video.js/dist/lang/hu.js +++ b/node_modules/video.js/dist/lang/hu.js @@ -23,4 +23,4 @@ videojs.addLanguage("hu",{ "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/node_modules/video.js/dist/lang/it.js b/node_modules/video.js/dist/lang/it.js index a27550b..b0975b5 100644 --- a/node_modules/video.js/dist/lang/it.js +++ b/node_modules/video.js/dist/lang/it.js @@ -23,4 +23,4 @@ videojs.addLanguage("it",{ "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/node_modules/video.js/dist/lang/ja.js b/node_modules/video.js/dist/lang/ja.js index 8e47332..d0659a1 100644 --- a/node_modules/video.js/dist/lang/ja.js +++ b/node_modules/video.js/dist/lang/ja.js @@ -23,4 +23,4 @@ videojs.addLanguage("ja",{ "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/node_modules/video.js/dist/lang/ko.js b/node_modules/video.js/dist/lang/ko.js index 681061e..a9eb649 100644 --- a/node_modules/video.js/dist/lang/ko.js +++ b/node_modules/video.js/dist/lang/ko.js @@ -23,4 +23,4 @@ videojs.addLanguage("ko",{ "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/node_modules/video.js/dist/lang/nl.js b/node_modules/video.js/dist/lang/nl.js index 6021b15..b5f5325 100644 --- a/node_modules/video.js/dist/lang/nl.js +++ b/node_modules/video.js/dist/lang/nl.js @@ -23,4 +23,4 @@ videojs.addLanguage("nl",{ "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, veroorzaakt door een server of netwerkfout of het formaat word niet ondersteund.", "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.": "De media weergave is afgebroken omdat deze beschadigd is of de media gebruikt functionaliteit die niet door je browser word ondersteund.", "No compatible source was found for this media.": "Voor deze media is geen ondersteunde bron gevonden." -}); +}); \ No newline at end of file diff --git a/node_modules/video.js/dist/lang/pt-BR.js b/node_modules/video.js/dist/lang/pt-BR.js index 8705c70..51ab4c6 100644 --- a/node_modules/video.js/dist/lang/pt-BR.js +++ b/node_modules/video.js/dist/lang/pt-BR.js @@ -23,4 +23,4 @@ videojs.addLanguage("pt-BR",{ "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/node_modules/video.js/dist/lang/ru.js b/node_modules/video.js/dist/lang/ru.js index be842c4..69edb19 100644 --- a/node_modules/video.js/dist/lang/ru.js +++ b/node_modules/video.js/dist/lang/ru.js @@ -23,4 +23,4 @@ videojs.addLanguage("ru",{ "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/node_modules/video.js/dist/lang/sr.js b/node_modules/video.js/dist/lang/sr.js index 3755565..e4aae4a 100644 --- a/node_modules/video.js/dist/lang/sr.js +++ b/node_modules/video.js/dist/lang/sr.js @@ -23,4 +23,4 @@ videojs.addLanguage("sr",{ "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/node_modules/video.js/dist/lang/sv.js b/node_modules/video.js/dist/lang/sv.js index d8af404..30afb6a 100644 --- a/node_modules/video.js/dist/lang/sv.js +++ b/node_modules/video.js/dist/lang/sv.js @@ -23,4 +23,4 @@ videojs.addLanguage("sv",{ "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/node_modules/video.js/dist/lang/tr.js b/node_modules/video.js/dist/lang/tr.js index 8239d77..0dbfdf6 100644 --- a/node_modules/video.js/dist/lang/tr.js +++ b/node_modules/video.js/dist/lang/tr.js @@ -23,4 +23,4 @@ videojs.addLanguage("tr",{ "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ı." -}); +}); \ No newline at end of file diff --git a/node_modules/video.js/dist/lang/uk.js b/node_modules/video.js/dist/lang/uk.js index c9900e0..7b09f65 100644 --- a/node_modules/video.js/dist/lang/uk.js +++ b/node_modules/video.js/dist/lang/uk.js @@ -23,4 +23,4 @@ videojs.addLanguage("uk",{ "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/node_modules/video.js/dist/lang/vi.js b/node_modules/video.js/dist/lang/vi.js index f82063d..3190718 100644 --- a/node_modules/video.js/dist/lang/vi.js +++ b/node_modules/video.js/dist/lang/vi.js @@ -23,4 +23,4 @@ videojs.addLanguage("vi",{ "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/node_modules/video.js/dist/lang/zh-CN.js b/node_modules/video.js/dist/lang/zh-CN.js index 33b5c0b..1ba2971 100644 --- a/node_modules/video.js/dist/lang/zh-CN.js +++ b/node_modules/video.js/dist/lang/zh-CN.js @@ -24,4 +24,4 @@ videojs.addLanguage("zh-CN",{ "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/node_modules/video.js/dist/lang/zh-TW.js b/node_modules/video.js/dist/lang/zh-TW.js index ea6361d..bd81774 100644 --- a/node_modules/video.js/dist/lang/zh-TW.js +++ b/node_modules/video.js/dist/lang/zh-TW.js @@ -24,4 +24,4 @@ videojs.addLanguage("zh-TW",{ "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/node_modules/video.js/dist/video-js-5.0.0-rc.72.zip b/node_modules/video.js/dist/video-js-5.0.0-rc.72.zip deleted file mode 100644 index 016f57937a7ddb303904fc5bf5a8f7125bd44718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4416074 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
    a6j!Qf)1A&zpI? zp*=Izwmxy7cAl8W&GD$-$qffp2(v=g0+~B0&`bxaSFyy7Henw|)uZd`^cc3EjSP zXvY7Cy?5bm^GL2m{|YoS2_TsSCE3m-j%1snNQ;RiYLS#ZxspReBuK#~0UZL=BRsml z{qDW1s=L1jKv0&ml67a!iAD6+kLv2G>gwvM>JIM0NB;#EAlNCfP;@}&0nA7A!?!J8 zodH9z)_rN!wr`sjIzr36HL$WW+$J&&pi?chE?nX1yj!aj071FJ99;uwBE(`w}{ z77-eX@dV4O(~I+Jy$2|1RFlb|T2I!8=Im^PgJcRb!rRew#AiDk@~Uk<;D}cGZ9gRK zS{lXH6OaFOHnQnHi3!*OvFC*fsyWZItjYh8FYy#-5t67`HW)(X)gp#(`Am_;}jdZtT8!eK-)L6DHwT&!@mIU zr&|TEQoZDhPFIgJS+^8>q!^p<{cwSXs9-6a*Wpe#g!5h3tK(wAKOo=6U{y9gysCj3 z^bc%&LK^eAp9b&o>5lvgtzEvo@J!`M?K{E4NgL&EI zUBt7jO-WGKsmInByR)oZVqI%y1-5fo%bL|LvAKOMEO+Tk?J*g3IqyLM-ZCIl?%{8Y zZQcV7$a5!Izr;|`csF>B)YA-i2V@UD@4#WDEPLJQBP1@mk{-)N{6h$ zi-wldnQIw*Uo?}D`?L|&6xXXQu$F10>)>!6j%pEkgDCcOiH2I|=OY{%#!OrckE)AT zVxKBq_$6jBTXx^R#u^x$+!(Mzg)o7E2KQqB##QNjdU|eol)1;le^|6EYI^=ATY^a` z7vrmF#X{PbAQxP|7OQtXdTD996v0&6U5{c~+Ac{lasSm$B+upX)ha8TCairy3ejOG zQ#{y>JLb^!0P2mrN?<#4n`b_2NWZk!U?G?b-f$P9QW=GIHH3+|Wmu!~UJOFnUv{Zf!%9*M5bC(NIelK}JT9!F&4J3@wXSo$a$dC@|bFzc5moEu^*T#ejx z=O~~ljf(Rs68BuZg8A-5$J4{f#VLLNc^!NRD!&ex#vQ&g`gOi9PD4_Qgmxek``H8+NoLWV;vFHlIKeO9jqP^VF-3k#9bJKXi|mXC zpy*hFYifxtcqGH^DG$$M6gDBfA%fl1@6=3(!F5s0o);V6ncRzSR9}e#xH7mOB#)FG zm_W;Wk?;=&BQrF+xG^aj;p5z9B3rjUWH{9mAb2*!d+*~}+AwIWDO7CySzAwN9C2%l zkFbUpq=14pDtK1QR*itfn3agvBFf<%096qLYVZ2wZn=A#l4VGyIi`zzp?F}o+bO;6 z(lW3{`q5hBUgvguQyQ|i$23sPJ|tz!)Q{97LpTjQm*8fkvXE9%GA?lpt+aROOjx9g zl|8KZj`-%(Gm=H$zI_wXOYiL8awIdXb-ECuV${>mZjRwqw>3DAwdO$fKpWK7-z=HC8!U; zhjLy`-h(vWq=wGaAhP^)4m&f2(Y>el`G&}FTA^jy;q>wjwO0fSGL-7bD>52H-+cmD z$Ql*kFi>ew!;?|)`w``!{>?{%I{1#zzd1rrhsSiAw57-x{ac#; z(imlrZKw~7<}T|X8Afw^PN}G!p#%T_ff&`Wz$g&-H%H`8De4jI+``kYu|jIgt65!ffdOrmKe~Q7 zNo4tCF7CJyHxsgXUE?xyd=UxDZJIT!6qZ%Sh)w->fdxXAy9TCITBBAYFS<%>N4nu> zE$<#$HFx>(06bsd20#9gpSm?fQAaQAveXD-A2b+ilTCU5^@M=l4*(_SzM^r;_g{7& zefi$fe8~Em{Wt-}m<3X!XilpCdH1CbSVbMs1NPxRL#}tEI)BGVm6rhoNp`YIbqX~= zV>C@eczQN!Cx_Mgel@>oUdh}zwy$Dt+FUga{U=>Pv^iz%X*+>!$Nu2PUW;z94=8Wk zFzJxDdOkY~S1f3RaaU%EQFrm}As*j?qcZ$6wsuSTaDzf6Gp{;F0wVMt$}fKp}k+B8Fwd z!%`pFVo;5I_;=`1c2 z0z86owaq^049geMI(VA`ZxbOw5)blv9sr*WK(t1HAbcuvhnz2wxQVR{8AHww`%vx? zO@?TKe@s-%N;cUCh;$kYw>HUW%0uSrorJ}}jjE&HsP;wYjyDFWlRm1Ri#9ue>xXJ) zJpmY+Da|CDCx{a8uXX7j%ioCR9G#7_6~b1_r=tZ5AUHX;meW5cxQ6@Y3{iDLlu6Zh zvH+Z!Pk0YgfpD$+oy~?bim3vb&C%rur37 z*2KnXR4;}H_i*kSJ)Z??q*-T|(R5D}z|gu8D)d7+sHmjIu; z`%j+n+MNWAosO3z3TemnIXtIq+V}_Th(3s7w2=WU$2Nj0U@(|X4kz&4bMI;R;lhqK zlAo^07!Gu>y9pev{U;^W3mi;;{_dNXFW2z@*G7Pgy<6R4-h1-#PT~mjt53PoeIIEY zWC2`v2?=nw4sEEBgoIIt89ai&rduyW> zRyith?a~sbQ@2mT`Bs}W`PS#}F8ztD(-J(xEmMhb%4P_xW7%3Os9Zl{#&@`5Ii8(7 z;6_Aavn=0we~(wXaGr(L2x%0Mhx`~uT0X)7JrQg`*Nl`GQC>Q7>Z01sajnGF>8lpq zQYf}AJNKuvPUlj1{HPo*K*l~s$O&#N>{vBa!G>G7(l+OL%M6)|(DYbr?MLT_&wQV@ z6$Md2Iq~hiTu|q3Xo%?IMHj43J!c~cTI49kx~sE7{DzFJGym4~vAp3WwZ>&DT$$>jv~!)KRPi|ij66gjDndY40|YMJDT3D&yR;d?G+1jh z!>84Aeyar+G*>2?t{qc4NJ%fCPe+2NRyctb)fR^$co>8^aCt{2h5A-zmUZ%0%3A|@ zYn|58TG2L*d@hn?PnadB19tL^z95{R&Kb~W+gk)pbx2cAE^7U~36kta5+0_u0rAex zO59O-biX zRqn;yJhX#N!_I|3L+y|CegK74<7=S)x-ARRt_BtB5#Ex98OE-jOyRPnMs5hp<;2VQ zLwJng!Bv@@mHY*0>GT*7xMtz8YsW~xi95gHaI9xpqCteR8YCERAD1)s2!x)I^Y|a) zhqr@xtj3cD;Y5VJ4@}Na21^URs4kKzuZuEHEm`7-5+RxpG)v3d#3hLh#2_;hvi@tnAFfQrD1|;9RF%iHb0z5&0I_4d(2WE%(BwdeNJi;3T~tWk%R#tS z0K={{RU)_gsc-a^q>Xps#aFe17x1o_{=Td5{@d4~Z74Lc-6c2C?<<-pe@xLNC4@=z zLZ3!DwGOME$YCdOs^T$p54H9O$S6Fcu`0z2I0SM{PHb7|^}x8t=2IKQL1@fi-?qGOt+mibDn|l3KJjMF(ZnyrI=fSQ#l|NTli1j4<ep==8iHxKO>ZBSy;#<1c=0Pqinc=>45FQtMFf4U1!R@5uGz>zl6;*kyWn$jbk z3$9Ym?E$<{$i~#U=sq5}r054%lkeaHI2#=!P5X=)^Aob9JP}pQ&mkqeG0_ZPo~(ol z{0+djThuE1dZa8XFYk_Vg~1PGZaBK~42plNU2%rd5o|F~6iiwr@#4ZT>PXbO;*%vT zxl8iPR*?N@3dtYC?>R^__Ce=b{>&ni8k`LSYidg%Hx51<_R<7ZmELV)g5aBc&a(g( z53J`oz{(MgTk=)VvSJA?e`k0DC4CKO-`YovJ1a@XDq^%MovhH~RNe6deX$Q<^NCGq zN6z8(JqgVUK=Df^wb((4S$4e4rID*?d+4G-uwfch?gEs?QDEGnaeu*&Uz9uJ7pxIl zA{`5jFt8~ibspXwpz+0eD5=Tn7Pdc=h?%M|mRVpv5oNW(^A2t!mk6^QBbZ0hfHBt` ze6W<&=$Beo8)``yx_0 zwj-W!`1A;6Ata`QRC6X&BFV?BK@Pxi^4%KK_giI)FYDZe5C8^b-?s4+=fzkR2O_8v zX0b|=fn4WvLPz9A4R(saOz$2p9m(zSX# z!bO`#EU;?xoL}uJE;T|r zNXft+WDkWB^)a*P23eS3kTF`px^p@hi2r=6XfzImi%uLOA(iQ+%1_@kKRFFlySSI@ z!R@#gV@6E(Y6n+j%`WFv#SjTj`Y+bk*5J;7untUQCnrdArb7tmCf(uH`4--;9+1}S zI*#@+RVY!Magcaq46CkYS_+Bo20>wqNN8tgw)pnn8bQHoBLq9C*pE6z#dZ-iSXPc+ zeN!%GVqZjZMQN4ZAgpA2ah9^j7DzScLuOp$`IyVE@ZHk+`g{m|Q%-tmepH(f62TJ$ z&~9AMw(o{GRfsH9JP}yg8No-c2&qN+gI1tb>WJcd^PN~ zV;8$(6S*kN5-AB`$NZjbQSgetwCPu&u2y1ZC8z1StHrWY1uTi~+euX0ic%ur1POK4 zc9_;lbB`*f%b$6o6}`zm3HDYDTVk))LCQ}eSu2<`P-S_orq8!A?lWcPv9xvO+0VRS zcG-gX2HT>ga@!__V0FDX!iiyL9#2*$9!_I$m-5~EE^q@WVP%B70m?%}c%Q?2M7tsn zU!;8=M(*=w_ty>Bbwbf07yX*LR_U6$AX4v*PJ z5>TnFh%6Cxy%sL+qvHkq_v!*?QD$$J$jQ4@I(ICIljx_wNfc#r;znyX6Mja54}6R0 zh=z%qh$L$lds^L5;&)-nx`vN1{y%K$x;o*nJD%*NK~vmnvY9z$;#sxH`wa!PPpR}U z{2=>%Q9rc)Uy*GQmTEi^?hU~PgVT3|4>U-dIwzkq`|5SRj|E9yctxGeCl_zHl}xu_ z4BrD~3~f(0TbpMNDn8~V^4`tYjk}9+>2)X5K-sSCT|C6&2+v!ZWTyY0gEc|cin7|5 zIr!pCG;{q2d2ewlG0Q1r6ebPX2Ga)QsQ%{pIhzu21H>Di&cWafUnmpWbNVWXcmK?- z{wG+$sX)rlZ6jSNujt-Zm&Ge#UUQS?Gn{2;YTCs?a)sMY`Vj|~6&c(l6!p&L3dZxh zwfJ+oVtEu+WPMxluJsaTw=bWt9$s6auqj~O8ROi+XrUoo#Lj=)!=qlq6!}QQ` z#nHosV(rb^kb~UILP2I*WI#b(8~}k-5LNWhao8bqzn55*KzHgsFCe;PY%m4KiA*dJ4l4?*nzCJ0*Q!xL{Fb?` zX%7~_*>YD4KTJpa)fcJJI46Ps@l+VR%VbZK1D zGDsicmRRoLIYLhI^&$OzpuL&pav%1~KJCTU&YMl$yB7d4DLBOCExGW-y-Tah3XK)4 zhQ6opCV({2RZN?clO#a+?)T~O@tO;848yvzb=ipDo5e6ph9AQa)b4!*D@oKBu5fgu zjrVHTBkr}fA~vlGCa{L?KIdq-mgn3R^Vr8xa;mdWz6mRgJ#Z%iRzA&hZsDYs^_!D9 z432Rk1B78X4Rua%x}843MqnOvg(;CO;6wqexsh-S8L&5*Jx8RDvs;)Bs4Ajn^UU{) zh-2+9m-zZI63l{ei^FXA)R_T4)gx*Ol6)uvA$AgMtseDf6P%67%c7)(U0zp)GN z;$b24h>@|5y~bTR?$_=44M;Mu6)xuEb%+WG1$1!R$F`0=XzgG7x7OeS+2u}Ef2vo4 z$~-+Z3mk)tL?N;1TA$G7qN4Oc^tSPZemgE9j2xG9JiG;I@>$&uZ@G&hGs#iABrYp* zfZ~Jym-*OFb-^Q`fH@q~%J{#N^C5I8LQNW!qTCj0`@I7EiAWIQ$>>B>hxgmKBPSu#wSQ!ztJ?4m2E=N zmyr!zrOc_9zO{=bgn>f#39g41QQByh@n1B0jkiw>jlR9OD{hOpB~OMlc2Wlj;%B>T zhX-5=7SRo*7r$Sf^PwJe;`PtIQa6l63HC66v$IH=I1NyH?~ZK?=h1i=PZ5CYH&1)< z9k5$atTvwetcJ{;2zBOfO-%M@$Scr3tbSZFoU%^&)3RBsAwAxePtw;w<|POw9!bbF zs^pHkNTbIyD09IaWfA3+gDe4ri1JZw01W?CJbMx#=om52Oma=>#r}_Zky_kHLos7k z2S)Hqq}sI^*?@WnN4NW;8HzM`+5FXK4Hj(=;>}SZT4Tn8E;G zz(jgbD3Dd+G`S?TwBfG;wbtT4duwJFNy<5Cd=gjDbxR z{;l%mU|*@Lx;eL8*4Yp!V@*Ryv3_dqR{^$wbM``I#yp+iM#Qt2P;;cD<0-Iq5k^wu z|AfOA-Hb%|LvuhI0_X0P&ewiNhDj%pvhNAj-A_WkvZO{j6u_O3e;Qebc*rhViBVB^ z`ymnr)73(0?IbwJu|k8TCorB>RqVU~O!zNRVv(Kd0N)aXk0*Hhg8nw1Al#uV;Ni!T zWC9*MkSs{-w0#9E#3RVSm#6b&^WpaT!RGGn!QSr1!PA}n{HR7SH-NH4nNVtAzE${F z-R_r6N3S{n;_X3VEM<*g}NAwF+??-5)#aFoV(_K{GdHShSj#8S`(TKtq# zq9qH`{IPp`1^>@{j5Yu5O#(MN{}6WCT$kxQ+-q-LuL}On6op=Q?=`Y}y&Jq88Y5SK zLectRID?1CNcV-^zj%)*PdeGlmk+;KJAqaP^9V92VAt)f{pZSez5W+BSHAnp+D(`m zF>gnk^sYA;_|785W@oSdioXRbg`Uv%LQt-uW&2iM-OLLS*Hu%|&3cYp5V z5op{y9z8p~KzyB{&zLPErI$Ol7p%~2n!hn+=WhQt@(<&V=<2%NpKtb&=txFSKy_UV z8Fb)p{*kbvC&X2#|G0+gbEq1oYNRE9AKjeUOai!mNkyK1k+bPT5-rlmW= zjiRl;T9uRshP=vAs9;n%y@rL4VgqS(jyBMLZ;5^~nSki9$t!z3Z&dPB)IWE1AmV&9 zlvlNxy6{G0eoD!t2KG42g!xsh3iOV6{|J{PaIIw2#W!|t`G_n@=>>FH7aSJHH+n*W zA=vO#&h69Dg?{l`F4}kR;ZOR_@#u2@<)0Q(_sc(Z$n~Z;iQd7Xj4kBGioWtkDfz8m zXws^Ea2DP0L__MBA%sva;3J~mS%sTv8Z>R5I|83RE<5kWVdmq0FfA(gp`UIdCslR^ zL3)JDo2gfy$`|)Lzx?GARX*PT%Vqlb0tG*R{6{z>{A)Vu)}=G8I(330)p#l>cZD_V za8C9YaA$EFy-OCt9}-I9h<<$R%ZmgDv4Y|RlK~u6bSZ+H30!`xA0ld)RlBCkb>&gX z3j;kXN@Z+ts@GC5gpZ)+PtBx^6}85v@{nAIdIC|$BxiD;l1r~;9YahTmp}QDTdV;M zOjI9ifj2^vr)#N29UO`C}>!rCn~TOwy^lH z_N^_fJhlmMw!b!(2vhOJCY2TydveBqMYl^(9UkD&VPFRuh!Hdm_7*SMQF{2a%C-vV z_o0&s`bFBTf585EG<&^P=E3T!hzrCD;f~z3Dyi6Tjz!4OH5Xz%8E}_dh@!8Bi@|!q z=LJ7;8FCj1^EJG?^aB%`p!#TyyuXj%{^hb<>yP)=Oo(au(r&birz*E}K8m|RYJrN; zJ&Mc-zWY={>q>iS3fF4O;GoXISo)WkZHwANaU)Rg_3Z5Q>j>1dB!5?gUX_(R@(PyF z`SEhq0Jk)Y#X)DEKeA3e=EpH30IjI*j@T4-7@c`_yQ!H#1tfzSsxbo%4o8(@H>_KA>ntX zZMk(WN1|APZ#mj@_IRx10o4rn&?K0405%<**=g5wH(fg75Oehh^yh&B|poMCb>^*dciV_fQb zx>IhHG9MieV55hhEuU}VQx4QE0Mit2Q6f^WGRw4`AOQp1A5cdV(s7a3<$SIJJ}TO% zO}TRH!1Uw}@9-lDhb}l1)Bn_}=*2u7O_EbT!9%m4Zu~^pyUpUM#Cm*IiQM!E5yLbac|tDVi%v{Js(#0V30%?seHT!SFkT~Y6` z(rBQzTEz`zST1$T%VDDb7e!U7`GTbYhf1s0?XxO> zw_G<^Ga@A_nLz>11RnmDO$oW$4dEhQ2!ATGGP7#i4Sxk>HUedCDz$?d{JFI18j6}x z5TCJ{t-=-;rb~Z23kN(>*cseyrV}SCgF>C|^Rf{+B;>vWCGr@7b8uUkT$~^ZlzKiM z(lQAbr*spcw1rW@B#Qx<6eDF_16qIu&&fZMPsEfd`9JV6oc1pc;GTiYpa#ZE)B9A+1y^ z#n!W7ULhnjg#}fsb)YqeXE2t!)?bFePx1u^RUe(=3sWV8mQ1Gf94LSx3t45cU9V`E z{0LY*%m=1(7EHSY-D%c#gOg^xf!`-X1rd$=NV9B@$>Ji1M$Oi`86RzRpsO#}87eOB zX;&8fuwH7Zm zkDCYUPap2?Y&Tv=#>N}t^;#qGMUieLt{CzCSez2gJhaEcx$WzaU=FpVg{hG)-*27- zHkGcH_r+yZ=S9EZP>SR%x_l?nUD=uP7$5DYy1AO@({KZta7u8Jlo4OA7&30yCA7Bf z8CPaDa}lyhV}B%>EH<9@3J7M95WoqmjiX&c6wK8+Os@;!DSc@CJ zbp?T#u*G{{#H1Mq4jsw3=YaEtdKBt>$K*QDS23#X&$3=(9lGK%s;C=9bpv&ud&B{< zG{uq@;##m-XHw4N6?q*(eRE4HSKtN?uHba1HkVdD$s8N!)*bHE|E)3Y!<6aTbsh>ujvu*Owr!B2qeQYtH zQk+gRT>aSC(_&Qg&yMDeeX=s|;i>Zl=Lu^ovYwrcd%4q<>Y$*+BY!I*fz3(JJzkq^gOh?Bf#1(^WFasrOSYfcsAs@;E|G-6pE+R}# zU=QjTIguoyKG%oGQd}QKW``9d*R%W$D|qe@X&P3#mXIONhO{0hhu=y^z9S$#(;cYo z^hdpoe=GZeF(^@qQ7etH52Q6Bhy+{S#sOnW?BZHHE{2q528wr}{RKPzSr&nA3Q4V= zJ*(Y%gBnj*X@bVrU@ooHK#j%oO(@--4^O>Etl_W2@py!{-ro)NIEvA-KC2ZMYMweC zv?tC^3Q<#evc)E=%|hFO#<4)vsekvbik*~6!3IElwwPh`c_dKHN^ zt&*H*8ge>Mo+X6E~@!? zYBK@iifJ^V1Rg`vDv#w(leNxFMO@flRe5XaGV5B;U}Mx3lbsYO2{j>Fl#ysOg)Pxc zV?{b0@FzoU4COrETM6PJ>ZcKVbe3}Hsv+j3q$mdQOcZlQfk)heVf;QQ6P>Sy@@a!#w$8I(+ zBaRxkuaoi7^s|QZd!I?~tGLG`d=`_?P9r#604HaX)CUx$$w?3TX7@)bUsOXG#7Z0A zhkmE0LR^mAOi_x`$TS$9R~W-mXLbHa-g}^FZ^6{3P?(8yjo`Za}ov3Hrc6118K=kJe zaimr(R76oLk;lh5Snx-L0hSwilJr{4an`N?!U|eJuum-jkj3T$P-8Kie)*!<`V=`> zN6hj5BeJbv1-zU|%m>hm^{s|8=wDX3fH#%(>K#{PvxAo&qe{cKOovnjJ;c*^an%Bj zz-5HDM!Bb2C|YPi^}7|7`qDBqFYm3(vH3 z0Y^`mqpXTH74_7vf-36?=OZ?0fsyF((d9m2y#}a(qILmaG!TaLyA?y_Q(5hd?=Tep z9F28q2cm2tD6BwWG(?cW@ko!S%|QleMW=r*Mvfc~n@Br)VkrY{PC+mZeOhR=^ycD( z!7cjT@YQdl*(L>FjvKa1u5ceN&l=P%De=}N@KWN*>^GS{rjrKkFvH)V;zrm{? zM>^S@M;B*nZhXdpeQ$6KH&lLnJVbW7bGNkH;b?7rd~`k;9j)Om2nplUNJ>wB!+ZI^ zPX>pboxRTA;Lg+kx>2>*9Mc(wNA3iziC_{Fcsdr^g2`Fb*j=s+3$HC6q*{q-`zivf zeIcb85b#5D+m|2dux^0YK5|XFwurQ6gW<7nb0y)TilF%}aj8u^b?5p&Oi0o26w zMA?Nas7JJAAczgA21PqWGcVC9&Kr?oCpU@H1vd4OV)+ebxZL4Z6N#Zizu?%(O^iQ2 zp-Wvy6g{RteMODLgejQNKwC#NAldIS^1E~IzL!2)$0fy+&HeR<>-*~kc0unru`^>o zrS6+^Y7SHs)K@ZiQi;H6_yoSWaHodFV<0C&Thye80WVBZi>EE%U^sx!w|o5K8vHlj z;UcZKUp=wf>x*+gW;ue214qz{x^^;=36hiLmGAV!_z;&sxFepzffz~^3kf%lx(HIF z`o;O=)hj?{R+1BLh+w?`_n-QAur{6EM)rkh|;McC2cV-uo0s&+iJ^WQT>pa zEh+pyy-NFe*8$ja*MLkzj20)s;i`ctnaCZ5lX=8Ln=_wP|L@B%NWugVE_LgsWbGKT z{k7y6SO>f`_nF_D zd8sf#c)q3P7*yK)i0RHpRWb^-t^Kg#EwLchN}F0Pl;-3;B>K*uTc#`>QhAu#!7%4z zEoEteDOv~wM2=$1Z5`e|wG2&4u#eTDosoQGIydV9Dav_`VhN+HO=#8yHb98a3>qfI zsF;PUIrf&pX$w3;g;}ukJwO$-Se!XnvBm`~ZV+$Bi`8xcM2J}oNDGdB9GoJlqiuOI z!`CMfxT5v^Sp(EusKg@`yg4k35Er)q^+98q7Go}27pRM(R@}wMImnC8^MLui*jx82 zj{;nvFG?HuOW-U*U|cuNgLyFmqjdpM6tyBSKF&d4e4Yo)LIlohT+-i$yXzG20)tW7 zz+md~e&@!G`P@srXCBCl@s~6vb2#D8R=n}U9Gop0d?CKt8kV?v9NL`020XE(fg^RZ zh{DWK7TCLRvxFf(D5y42xbSS2B@z|g z`54=l*)bJp&Mj;@LO7*2rMTwQdCqnNCmIkqb5=;&WsvU`#!R-P_gM`KiaF(8=-njU zAnMP-0}j4^qGC=h>(n9tJ|LR29LmB~fT7>5OQA1w03dEeu?f4hg~??QNBKIhBj_L0 z#H(C;i;1>kBsngGr+VMmY#iVFQo<=9OUo8Vz_Obz2OsNymdsV@$j(!4qd%F=}*p2*5J@K z8}Ui^HH*$29<7olLEnAW|MSu0Y*pZ_+PrFO!W8~3oNaYm)?p9Q`1g~L?`Uyd2OjP0 zU7H@uUG7;s)nT_Qzch9|PBVxV=eqg20l7P!yCM=LLQ@8eCVC4&hy=kMvq^5&7i=L)a~qE8r}-hDvMhQtgO&NX591#jtB7# zVhO>xQ_rx{SPEjdB53X96*K|6$jS$oJ3QGJ7PIIe2!K1Q3}}rtW2Af1F&Yaf3**zB z{YNb*PwQ7PL)I52Eud;`Jm1~je7b)?gJr#DT0+&_dcOaBceAx(tYAkKH=pi2|KU+< z#jmcl)Vh^c@KUkRxv+Ja^XEB>teYbWP-zO*@p6=>20t+txBw>?wt|yC&jH7-kUkwA zyI`sVWTo>VT6is${i4m2ys6ZMn-E>e>$aBcTT}p*3kj1xgl=bU&1D5y02}sI^K7Ihk;b3PBp0&Rp#{0|ox2s4DU zA$@sa>>V(NTgXDsy6Erx!s>cDfOPIW)_Oqd z(VZ87gsdq+3h7eKh+&Cw!b%)h7(TIdP*}E$CCQ9lVQ{z2E3$~%9H$YDsnlM6DD#jY z>Pt+frEQl_c3Z}%Tb)3vVbjrTA#gCy_Ylw{pO-jY{4{*^zyleJ@3xM zC`YfgnwhxB@0G5^uWfz#hq5y-TG*Q{v?Ur!P{7(xhH4uoeX0($xSItK`1!4EsPw5E zDitp16VIZRtnJ8VY1tEhFX#jlZR_J;UoK4P=NvGFUn^IhWq*R8NffSSO@U@0|5h<$dF^wD#PW>H*ba3!$ zvC~grloBPAr%j|FPj(an(61!Rn@Q0cvsQSd_TFd6%B@Thmbv;?XVY_U>0s%pz9Ux4 zg2ScJQc)TpY85A#A=D#ih_G8I`R=9n07y}UjSi-%F+33P18xs*kx~JF;|}hTQn2iA z?(HA^h}RM4OLmQ?rIHW3A$W;>Kugh=hKI~pq1Z7)mVI$aijli;iAlv0+AQ20pWyJN zhtI39_UFiyO3rK0NQo|3w%kJt1{l2*gA&K_3I2GGlCE%5+?kZ*TsK zokU?se4^*XX^$|6zd`5m_WJIPPVdkE^3Qe>D_n}JlYG%N$4AL*I8BKk+?^P?sFQ$j zY1nXv^70!us@*b~HsRTa#~Hf(i2qX}()G`mj9mkol>gtCj9tKg#GWxP8M_gchZr{qkr%XFeHFM1GqepLKn^KjK z<7%9;kN-p9)#Mdy{2$;|=E=D6*zGy;*MYQ@`eLf2bJS@U&ha|A*_EIYv5xO&BDx|& zdqI;u%CN{w=iCGf>rYT1C-0`6zlyaONG#TJ&Z0pTAK~w0S5}qa{V=7T;MstSSBTO( zTNCboo!Y-}wqLW1ZEIiO`4>zW|0}pMos8!5k-;nm#a4l}WFpSYp{WPY4p?p{a{Ssx zo({$KD8UVuhVbE;cr2+UoWpgxJDCmSO2+-qR=b))-g&-6XIV`Ux?4}t1>|s&Cd4=s z{0JNv#^5;LQ5GNQIIvwGLYklWL(*$6HvhK2`E+l4=jqSLN=>x!Tt6?Dz7pI-B73Xe z0`4zbnn?BbURy|Xv1Lp#CqsON!AQsd8&kwr#F5Ui^t9rO&T#@&4aqCcG41Ou z^5`?Ch`-hOycyzuUxN6>GxwN%5NGzGy)Xd(i@ zTyE_ZcwR_W^%7p}-ilZYv|zYUwb1|$oH)rK@WB$9xTB{v#4U@WcfraZbd`xN;FenS zpi|KuUSz>lRE;!Z+l6gLGkV!Dp9~A^sNxnK$ZC*+H$134)XlzqkVG={)xMy+o;OyW zurE5d`*&2`<$!-=barb8s9TW|3H@RJ=bKgZ`_F2jyb9XUUqwh-K@2ZSuOuhvn!-EOn5JMq-?K?6P2Y*2QgeGadbsu+r9EA5w zho=`9ZF}?1Z5bLTr?|E1^zPlid;89pH}UAe+4KUtE|f~fSqQY#Y4p5>oBiX-dv{6a z%5jGt!_T`jgu;W4G$e+?`}T1aW?82N+5XPMoo_nZ@FS0NeM=WGDOh05+>ZDjBNB=n z4ROpOCv=n_)sHWrd5(okC70 z*ouM5sGN|?&t~O<)lIQlAA^_A5n_#%vB%+2+yGSyc_rip;A*l>^_RP7c%ieE|Kc+f;3WS=hp6hWG`{?lyjsM=Ms$s) zJVO-9g>r1fK#V#8kio*JHSdB}LqQVrAme1yM(Nb~ zJK=g(blD14Sz#e?AgtMie0_>ENtF|Z$RC1~Iuz8bA_)?l8WiarXMJ~GM9LzmW4I$6 zz+7r|0tp2(Ew>Z~mJY>k|4T`cIyVYQwY{^~N*%iG6ourl8HkGM=)clt?u%g)r5VIw z<~B)*0HuJA%L<&LvKh_w!qW+JOjbjctfSsjT%797mX7V75t7JguYP9(8gdvbsI!__ zJnC016D>5!&>o9i+tntOxm?DhoxcFPLCN|c)F$0w6HO-Zb(YVOtRfR zIQ2?cpZT~Z5$8c_!;$sD$C)4(X)~Y1&2?p~;GEbr>Q#bw*4*a0H3Yjr+hQUqcuL`9 z!Mpf}ia&!U_8zFa^7TsSO)tl^I75n%PxsAYDT8+B?9CAB-0AKn^ozCs1mVPkBrjjC z^}hS&{p$aHJ3e~(l9polw!ZA&^ag7qP=9psl{Xjbp&=gM()X~9<2A~|*C4_5R?g>E4tFZIv@gB)u$#OKF$-KY@umm)!8kHj zo;7(YOcTQT?O4*PVOq$${ktMpF!;2BJ-^m-?`$2@5j0(2DX4=xj~_M?W&ZD3p-aP) z(O+I5aLa$=;@H{UsP$sJ1Sj(RN0a*}5%_f*VVr`}L{Pv!=QL$^==lJ2~h&5h6 z`7J(Q2Z4-fUI@$+K`v+wUbkwMn|{e|NEWE26y+&x8(*&^Z^94gQ?Wf6D2O;3oz39FmXJrdwWu0$*v} z#WGW3BsVA1;!}B3i=Q~APG_oHu@YC|foU7y9V0g#ET(-W+JS$to=^S--|lz2zobLF zd`=G;WX@y1=hh)`=n^WMAB$O#fMLEk1rGGO=q=r5qXBMjaRR3TaHcE3(EWe}Q~0p~ zAknX3K$|&UX$AfuvbY)WLr)Gx=ro=SRMF%~Yx^e+jk_MnN%QQUaY zguo&>?5{dQL2>c-FjCj~F$`Qly+OK$@r*_WuV(MVd7YC}+|8Y?Sy@qOHrZzicD@jw zd%M6>lhd`?WL4?eSDBEp@wCQ1$WTI}^H@;Qutm~LkQn_ia}Nztw!g(mL}&Z)1WBtt zP&wf|!2`D#pH;qd$Ugbt!Dw(wDk#n`?g1J;H0&3|+<8LxJ8D*XtdY(M17ux@n@u=o zx-(YC8qx+~B{1Ld)lDjt=DjCyqWPAS7CMk4GAU=5xwXVwy2=Xbvv$(Sm^Unz#ft6W z4q?rZ#$v2%qdYz9kvgD33bidmtm#&=%F>GHlj2(yfGO@dLA;2CHq12YfJ)e#D1AHf z)zHR@TRIc4T(U)r;aLH}$6P%vy`*Pm8mX#w&xhlMtu~g>#?}7efGbnp@O;Of26)kR z0B}Tr@6AnYpFpF3Ob_ z9RKzUe-eMqg9F(Aj3gwT_ffY3Ow?hPc32PqUX;jg$shhlOC|@<0%Jk}riCJLpz8X= zt*FzJvqL=ZB$m@9u%cdE;(|VGmr$(`0E!oao>}6%W?QRJ zZKf69)Z@BoB(2t}?AF!FOKtq&a_x}2eh{Tx9~!jG*3(KR#>br>X@*SPjHA0hvQ^l9 z=WfEzq@{C_*KO>$pT6Ca_MJ41(pj+F2J3qUyyJauy&u~=UxJT~76JUM}(%ksxh+kn>GcwlI7i<>yO48&Eel9{8BEyF* z=vRQ7L#P(=XJhI@rGF--fj4u)!RC$E=n*t8*A@cE3{@9zd^r4s$!l_fU7hs(8vZol ztzZNi#<;`D1!6rhf2^pMl3OuQIN>1^J$QfVdCOQ6y5$mY_WHAE!xqE+>bSZ%*udZj zLaM_NIH9%F*VtIa@S6q`evQDai8qYkqE^{yb)eZpcDBpb*oz@mAYJVtK<=_ZFTtsi z#767L+bR;cwqmSuG{8B;_j@j#2Im>ju-uz~1h8cALejl3YhoR4vZ{%Tw7dI#D~A}I z$}(avb87wG<&I^}1kKSFOPG@46^>Xa0QLU%~%p%=4Bt`S6T9(fk|;g%k$ z{t!e+Qx8=+ltVIv|BXW}&fNxudQUIh#cm!oi%L0Px!*M!g+KE?cW}_dlJn@^apKRP za$LVig35T^>Bxv>GJfcp`#0o7#AQ{#_PIJF6r$ubL2?6<_AO^{nki0Fu**|`$P77% zV}}wLr%R4v1SKmL@jOV&V&Zuy9+v|{{I_-PEn zd*C|QiP;RgW(6Hu@CbLpr1!pX-IA35cyp!m^=;3toJ4i-kR8b8JOJV%r!F1}vZ{Zo zQC5f>9kXVvp5>b?a z_rB~U!qj2!cFI!Sz$0@NML+TUMLT>?2avVonr`ZnxZJfx zw|#~5mFyw~rdqz%5Y?zr-dnUHk*$i3XVCwdZ>MGEIRL;$43jiNDbCaUNn1b?Y1wCDzE9%mNhK*u=&&)RXO zW>+Mh<4rpNyOIuiu6hpn2qq3B`7sKdQ0{(>U61wcuE^TQBEa;`4c-x z*MoOeXvfi~tu6cW&eudAMmIIAXx$dpX)sA zABT}q3$Ym4kAS@-e7u6^-8-pzX9FC0fM1*o)!93s&CgpnCTXU&KYhlvpTBB6%bCo~ zuws=mnWdGqHK?tZd)F1~<0W}LfLiTdiYntZg7ql-AO%3SSDg>}6KFdFvds#~YbTwK z!wbO^f~CwU?9hZkq0@?i(}zM!q|*am&CadDKf>@HPIlEtQeDECZym*Xk*NmW1_40D zYXTUDI0|;LBcTk`IGbG)=d$pNs%@d3`9T-+GD4{q?@-7m@5MsBZ)}aV4k+eg)2;QP z%eJc?_5O(_tI_x^9!Wx6J}g=cBgA0^LJIji$1~nJ&VU129*g_mbX!W@4;Ml3SwLkf zS7e}&@RqZ{Ow=%rinnBZQ0{Bo0s>1;oA^e{my#6QZE~jpS`{ux;&L$WXYP<;j}3RK zJQ+Atp%oW?M|Z(E76Jj*QDvUrhiabNeq=NLuQ_dN8Z&k9LQPihR;H7?e)sU-ME7I| z{MKLL`2Rl&v#%jK8(b0qcocBYk=1_HkgsUYljP6lToFFJ8eqc&MOH-#s~&sRO=WrTNd7yPs)?H-)po0^7;cRQsJ#Vmht0 z;)VAi`>~;=d)5L!?G-Yf%&X9MM0Q}-Q*PJujA3zhcZm@=>2hNg%pS5C=ZC^yL8I}2 zd$l@nLtRa8`W}=NKPzT7y-j-E$DDgz+wJw4ns$j4pHl!dw+nQ7RePZpoDVjUEgJ9O zO?1#)0$ZB6d;EVg@WA?lewLU4#s9~fbC_`xS=bpapVrcaj!{&y^fcT63W{rd%fvSlWnr)wL5LYs|*{DHs z&{LJ`shBok$&W$0EO4cH5r=Si;nB#Tz>bMshp^gVFayF+XjNQ}yNPWRkPq#(N1zXD zdH-8O;zGU;G*#Lc3V-Pyjc)Ol@~Cq!DBDvdwtGMmH(W>I2pW7^5oe5c{yMzCxx`}2 zt8>Z=Bov|kni(s{cn-4gUku*F((2G(JV zRLW+GLTU?jbMO>MY8^%}*CdCAzSY4Qhk8ncfOSmiusc-t6>DqNy^-QhAZy^$fQ|b6 z933cz1JNE<19}So$hSu{QO}c2M*q{!<$jPmHwQy@Hd5z_r6I7K(E`y~fhb`!e@N#4 zvIyY;)RXt4IR_M#6H~4R)%y{_I(t?p#vN>d>|Jht)=7fM<+l{R`ls4l>z~t%n;({* zccW?h?Aw#DTVpMbko~1JMCZ2MSkp{=z26feS^Rv z^3_VpY>ssIMY{MujLQ5zF1&1&yUq{$?zu+yCwi>?@5{lSmN9AR*k|YAJseoM{>h)a zuPnFa&qz4$)nm7nOsva>W{&Kr?lf>II)!A_E=glKsKLq@1euI?S*q^ZRZbyDa+^4R zhEXU{YOJxUO19fyu=%p1KO`Y`ZIb{hY^Z%s@xZfZYmVeG96oGH31%i3pVy+X*Th~u zNV_#o(e_xV@7v}sn@qXb-tEm$_l3%zBbO)qC2ffZU_D#^1vfU$TL1BMz1*8=Btdl6$MhgNB752Z6=zri$Mq@;<_jd+gSN}Q9QLrAbbTS;l*Cb+=M}suNSOB%9|rkfYS?H zYfW)i#$Vi(7}i(G6C_to@EcvdS^4F7&Vco_JQy=BW#_bb23t7243)1j*G9+_a(9F& zT3682h+$1MC*gEwSn(BxCF>j%%!?Z{lEFyHUDc0h+-pCW8FBU3>FV?y4Da*6@~aA& zCrENvOoN6@JL5H4%pGGvbV5pDgg{CUd4@&)Z1f%*s%*U`NQ4ihf9Exv-$2D1JwLy0N_B4E=jgHyXYTCmR%3br?FQz^NLL=S|0*TR^*V-c__VM0I=i&O^BRVo$ zI%f7~mQYX=Il&FlOfm<{GkW5?i?|mZjj;@afc}B}**ZPl9Yo2&k%8t7)|KdCGiLLmL@hWGm6o#J5Rg zV78=qULR^)56!R8y$LqgDRl66;*Hg|G@k3@={s<=7d(3m zKW_Iis8B3a0puW?ORqM$YtU&2NBTr)q-z8N_|DsIt4mbTZmnaOQKl@|>FPQ4J=J?` z@5C(08tn?^NZWplRvP?3plp@s)HMVm7m(wF!|(Kn%-&4(?s_M5KUkdzW$3izjuQw) zl!!{zdm*QS3SdXZpA{ih5DpqR9R8eIUgu1&S3ge>^2tOBz@)xls|~cKjmBUpmwEac z-(3(jNu=iu(#jI$)7J&Y9r)?%=6Y$~#_LV2`zru}b5ao45jxZ0bk84SPJrRCZ@D(% zdu{JD$4ViPnLY{i4bsd8CZdNpZo=gN5$xD|8rQoM`4m9KjG>ysiy7`7(2^i=-3>l<=||R4g35eIgT*4OcxOXsl&|f#;Rmy3QhNv{qo(yy2P2aP6(LzJvdhYHm2JT5aF1Zk zB8${NMVHM*O z$2A_e-uDET6K6qtxckcDprxwBq+}?=piMTlo z&;~)t3&91~6nNfkL31t0tNEchVc0C~zZ($(o;2}PLK8A_!>;I@Mm&Rxb`bl@d|9GF zetwBp8$AD5TMs&mu-=Bnrh>|f4r|HKSP#RrB(;fTFsr!bQ+5|z9fMklaZj$I950bI zDdkDAj4Y9^7}w3{-Wx=^lf_9;I7mud|N2uNPp8pH_7#BcM*utj;_x;+KOP{h-+tJY zHZF#;m0fCB?qCDh=pcb`q_)I>jEY1EIpjWb93wN;_+&<$0m=?zUKsXNcGu}u8`vQ# z8k9A^V{-uT;KTM&54oi6RtN9bio*lL5ECKjh8@}N+egCA(Rla_APmoE zA9_}=YwHOP5%RR6-z1G9Um8|*8*4-xXa+MzTYzboeH>X$F*OqjOH8hmU$xanZ0loD zr7yW3ZF$PMt#PQJ(y=)IVn85!$){jWMdFOb+$H$0TC3D&+}e!YXXK(vC}h1+A^>9L zMz7obVnm8zm-*3yc`L+PI6ZVbUvx%keTZiKQ=ITg=cie~wf9Q^{hNQIeHe*i@>+E!7RkKkBkbU7A`@V&93BO zUm9zJ+D811Ey+#(8z!1jZ_)O|O&Q0<#_p8%$eb+fFt*KNPkJ&OU*sBa1ix70f2t|I zSZR9($N#j;rHZRav~l%!9GhllyoF_elY$bf=}5y>uRlksHw20Q9E zT=(=pyvO3@_PoV(FrMxW&qv3#YAjzxc9+qy*K5{cpWUKL>UpoyXZPiw*2hN!I2Av^ z&@cbA(s}u(#}~+kIzU#)@pOU|@+eD=B6VGawpU+c7Q!22+3S#7yRG?TH5+ zB{wGLQ#=~WE^rjUpZ?~^^bChLyy-fvw!S7NaRZtcF<9CzrEkf$ow!a4tg|ak)HCQ{ zcCD?w2IOQ~TK&*0*X{o;>1NYT{?OzSX9W!|a^bmX^N-8r#k2XR>(Wn3JZpW(i#Mfg zfzDI)!sofsa_~8bk5($u5Pz8xJk)I z6$F~wMWsEo3s-N;%|oXdru62=h*n8`VP|4$Y+Nmdot!R=MRs;GsNmr4bO$T`5mWpS z3DD?23_V;>zA{cunk_^$Z~5C?e*G%_pq|~;FlgS&$yi^UK1`wgEUvVmNFV)xH}bpn zAUZC1sBKAuoaSR{4hjF=B1Bmpt1Ey@90 zB#aOmg-eoy+Es|59xbIBWUNFkrBat2klY|EJ6Te-rX8GYs|o0AlG&{3M@@A~bEhLF z&Y=ZPq9~)oRZ6fQ#8dhVlhoUMq(dHWq$I%$glCLVehaSvu8HNkUG-)1=WqQ`08lt; zF*Qc)CLwawk}9IqSFVJfowP3~!l!X(*>szSy4{V_ROyyoula)aEr)pR1WGeJ{CoC& z1-D#gv+EB}J&{D5cj_~Iu1Cz4o??Z=i#b-x^D@y<$VH-`Lo)d`JbdCHT0s}&l7`U< zEyc@738l2E2rpm0Qdrzy#_OI3AlpsoMgyjw=0lJj4ON<+8{}!IOUA(FRIZLsz;LlO zIp1erRll|@MmVbmy{+>;J2qO~Y^NWz9@Hd>r}5oK9Ss%N4T4t27W>O@8*JZ&ptHS= z9oh;e)~iC^Sl-%{Vt&*-*tu;g{R??!1sxkA}{zDi0j zq?!l;dv*x~PGBbZ9|x!43JEVGAwTHSbLN2Dr@6NTZ zwgC~v?vW<4ECaW6SLNtDBW{R-!)!Hd3^xV{0@#e$Xi!{3w}EP z@LU3FkG<0xQ61Iu8d#T=|8@nlo%bpq;)jmBeB)t*lk3$0CZ%@&e0=N&)M&Km-`qnv zo1lQi`1Pst7VQL)zGGycUKY!>HWhr=zFmd+T>UfSKXl#=Uf-BIJh^?UZIUGMcIvI+oEBszXZK`8oYIsEX%@hZ@$-C;Nn_!j4 zk{*_FX+%ccQwu=+%iTBcJN&;d@qd503^N$>&-jP0=6(3O`r(&yo`$-GfS(UW@JjqN zpzmO4{$DG=l|oLdHnr;ldZa`bp8?inNd$IpJN#wYDyO9XRHksdQFh%KT#QH9(Q$26 zWyHqD(Mlk<0c(Q>epg`y{Mh>Da0E@Po;!{Q{LHuI2kKMR41;F6Wt}~~_ zIDudZ_1Fv#Abw7MIfnfLXLLVucy2_bV1~-lc?1vJv9cw~)~iBXJu!>!pO0@N*+sMA z#FV{`bab`yl9k(djCHkhr+-_`{G5Ne`@@5EZD=3)P%}*pWb;n<{N&Z3clYbB<*LiH zkNq!i;!Iyy6L{y5)I5BFktNO}${?LT_8f4B#6^fhU?bs9(y$1-q0RktGC`sT&GqG< zG}}K}4e=k6eOa$B?)(f^Q4{>R(z)|bVx5)LVXgYzT>b76)xXTuzig`>=mxjmB=6)E z2WRi&=@6{69sZCh9GW(!Kv#WupXeuEhqRD-dl^9Sk71PMLzuV|IYdr{b8s7OdEsQh zyfk!y!Xfzrek?Glj`3!deE6%z{;&aI7uBu7&|fsMv#JJ{`$?j_jlI2Rew7cGIKrxS zC}w=6uJ}0_jHr+H;$4s}YVENJUYJAj12x1k6c;hxlQqdAR$r;>c(D$*Bn*th5k#2304;ie}pkSJ)wxz(*mZu&NhFb zWEF7B6YOI3B5ncmZehI@YAm{i#Rciv)bC)0pVzY)E|%8TexCymQxmW|b;&U@=ueon z;1aid5KMf#{D}8k_z6qq5nlAQA8wm@`KRnlLrYYezdG@&OuDhDqb`hu>2E3NUF(z| z{4XmG(+|qy&wK;+8PUKPw>fC|cYG2WrWddDe&p1rj(tgwviVOW8&GBthNVOeqy)s3 zM*M`;6`?XS+!M}0mWB#srQwK_{KN1PWAj`3+dh?W2+;*xcAV=%#t1I8j=!ySz{pSO z??Aaz@MU#*3u@N{=yOm|@^d`Ci9iaZVxR$tz}h_&PYiAgw6t#Y%sn5j%EYYOOW6mt z$SFZR-cnHq%IM(o?RdmQSLn^{&9t_yLRZ6S49Itufz0rY7vgsFJ@gg4Nd^C64CJjH z7K1{8CWFqu?d?28SGX3Qjlcn&Uk7gow#ou4tbM$KN}1~{@+8mB-=Q~%L%5o?FsGJC z_C!d*+?3)KaVqD0VF3GV?9fpe;N!}hZ;6tt3g9v@mZi*sb*vKvw!9t8#Ph&Ovd8XE z{%wj^Xdwt=%XVw3Nz51;ec*rO7LS+i^KX$3Zk`4Rn~!q+NFOZFGk^0yZtHH8IvYh- zqwxbQ#1m&2SsW=QDVX<_2vrE|Us276r;LlC`L`EC_rk@zb;Q4^zOJ9cT_gL-_0I-x z+_i|rC~v3Yku9_;PCr!~5l^7&^BH3rzoDXs9mjt<0IY(PpSgnnC_a-GtTF#8J`iW@ zbL7!HFav1!!oN4Y8ob?Odiay5W)=Ql8z<(F&%iMjB1pkl2~zu1VJ^Vww3B#n^OW{-!i~!$MBt0{ z_n@a8&L-#U2p{c=Sd*h@Y6yYAmWzoOy|3V6(=smg)sr1eQ#VWY5mPq-v6=n%*b&!= zlOVgeOo@8sm>pG&BwDPz361Rh&}rC7ft{%&r8M#n>K-w*lQDF)UVYx!5GeQ+aVu<+ z2KTj_F!_5G{=~p#*F-3U3*s4fjzbReM7ny%!J%NV4?anGU{rZ)LoYTk+bP^V}@C3`9O=vFD#GcVO7ys7)Kxo8b8gSvBf1uxdxdnTMICC4p0 zVj+F2lJPQDJWdwS&yOw+p|2zU`Jp&j zD1O7mP39{W^r3TX4)7>&^d75uiC*zPlB}-jL>|F?C~5alFcNkmrR~D5*hI(JJw%q; zBobBe)Db&J0)}QH@nIgCUJ)A?x_3z~K{$C(oMSlt5%fv%ka4d&H>11S`2wOasNNO` zuSNqSC1!!Hf=}5?p|^eCrdMTc${isUr@yZ}cQ`G zP5*2Od3ekV zD+;=@q9v0l>XO*fM!6r9D#X=Q(EkBp7lbQog#~ky5}Gj=)#`HtE`$zk`P!R!>E@T^ z?ABzB0tHkGeEk7&76!vXT)J}*$Q=HY1P_mG+0nhYw@yq&(LUy*y0W zkTu0FX6FRUxSV4*q!9vR@~uK8c{L!k?Lg$tNxg#YaxIQNrvs`HX1K&ei^v(SB3e;d z1{}BCG6#$44vvnfdN$$HwzhPNxbR;J#DNkc{j9NxFWqvE&&Y&bVQ}G z!Cg{S924M&^tVnQmGrszT0jh&v8^Ypa-Q6^2nDOip%hDx$XC6}M^f~xJcx(EUQYuI ztjs7Dg$}v#R05{Bh?xrd)%iIi&q2nEE>cOsl&nr^BJ|J?k?@>0Io%NIx9S|!IHXyk zg53U$f+`#+%|f9(N~zHZ=W%+^;V%leVsD;Nq=@BN5Xlo71)Vb;iWdUyXE9!q1TG82 zid=Wq1if>&oDGK5XWtGaSq!|TJR!(x1MXYtA&Yh`7ul#NtR2IJ8iOC%l`QvM-mjan#O zTY*;c-KPo2kM6qP!IPzsq0iuYr+fhQdU&E3U<$gpVXYVlC%<{iG0;Bu3?y?GXzpfF<}{T%8=x0S5kuT^Dg@uR6cr0&fb@ zoi?(7_7__a-Ny-I2|18HO0Eh|Z`c5UQ9NkMXQTZZMBP(Dc|m{P2y@d+30`lFXoWcd zI#c&^MS;0vV9agi?Cc6?$4+NTyRTuJ7PnrvPfvElmJC-drmzd^QCE+-H)3*{8=Q;d zDfGZVZSwB-Z)s_`Fc$4#i)1{^V4y2t8y*i3mijxun>+2}6I^`I<=|VGuV{ko-b5HU z{}>)^OD&0LX9B+%%vYbOFB1-*53U*bcr`BUKhHcrV{bm&&)6fq{8n}2{rlIHzA&rD z=J)fv2}GTN-w&z2&+YAQ+L1+W=0(A4A@F}uuQ<35PFLyG2uYe< z{zqdR>mThud5o)OcwNBM;yMXPBna~GR>8x1!Yua_*3C--R`PT8?jy==Oyvah1@EAD)coz%BpvD2BfKHt`&y2J>qbayFJ2i zug3r)($F)DQ8}#GQWwI>qIYR!m0%&CGECmDPW*4TilJITiKtNg%2g_eL#4{^T#c-{ zM@Lrghy0$uW`E=!OHC4y02YKhm2KN7x?G0=0Ji7 z*ygj%jJaOJp&L3tV+2m5cHEHuHeNTL2&(gZ3cNfIh>fZ!g!A5y}L1| zWDmU_**7;)IM(G+t@nns+_h8He2J-vWl;giTb{z~t2F1@mz)QKcRw$XYB<)B7q`{h z2~XY8Kb^osa1Z?tPKHck!2EN)dh!xrMF*Cyj650d7@@#-PH)U|-%S!`xlT2)7RKQa zh4DQ%Z8=Kq(WRgvWZ`o=LAE8#1^&jGOf7eXpFc`Nbb-jSIAf6@-;ky2Iwxm40p&Ru zy0{`XeJq9g1hRk386&vi7NI%j9O75psJZiQ9AQYzFEb5PxyuSP)Z4{M#LKAF)x|0< zUfmVB`olw;DY8b#A7YSLORPpCaNAh8I*?tKE*`7s(-2gTIBHpXOU)1=f|c8^*leeW z&7sysXO(iht(Zyen>eUao>yLXr!%*z#)3sE87zl_zAZxG^IYp+M6dNTx+z>HPIm{FNt@U5r zHWv*i%A#W*E+KwihhFc6_wPRwT)N@$F>JeW>qfP|zW5qQ(wfB`7%6hEG7(3!%VY;m zGDaOFXbS=2(vwRv(kkdMAtwNLK{Lz*f=0ctoX|6f8N^KLX)3fBU9}1jgZ|0jUJqWPnU1BrAE8Mqvf02-r_hvoWrZ{8jWsq zMh}oxY56u=8t6ZU^pv|sD~eDFmF=#)>;?)9)h^wIKXUiLDV=k zrmGuLpKJV>f6zB+hyT0R+NHi+kAj*ccL&2k8%M~^TpTnT-R^&lW_!c4(drd#=V4=w z=qToS56{ED{kC)O#_Fmp^NB52SIb&;!H~{izlVDtfD``Cy}IWxeH8@y=f88WIM4sn zqR56hFd%hT` zm@|Hl82AY;z}!IozJX)+{ksU575k3ZuCakT<@vU)ZEOA({&z6|Bz~$GsPK3p3hG*e zjPN*w*;RX4v935&YOd0N2U(WYuExQFHCDs+cZHN$cu;_!7n5kUiJ5jSuYN{=+@@ar z_3eL{BdePY{z`4_uU{|QfHy}-)nPj4@aWq+x0fF4PX8{)x^wp$gK0Wg^zUFgh z`3c?CgucDI{5-z27GEyk;wx+M)w~uhq+h4r3XK)S3%;q7Z{g7J>BP8?14xJWs~ugq zemY6=eiEzx6#pzqla{U!ZFZHnaLHCFcOV)*j68x%w)L!iX!+do_bu5jXN2USDLrIs z>m}B>Sh&S2EMjms(@$UGEr>0=q{t+7pT4}pw*0MIXWi5btB;?cIUfwc_KDZg^c>2P z-7qUwdJBbboS-LK#G~w5on@HfRh24Sd}-v9fh)SK0(jkC?adZIwxP#cmPC|i=D~?v ziI|pcm2w1PygmNtY#`%cYwIN_yCm3xv`xs_&RY4qF4C$yGAx+0^T}yxyt`+y2o)QO z=T`JM0Le_9$;)uzmT7W)QNY=nwG#ym6z#yv>XIif`QL{mQQlK2`?F8(E*jx15E8DPt-FmWr zRkC~1`Sl#9d6FXhM~K72W2?+hap9518a}7f;}uF88FwggB^5Dg_b)$|w@+p@M)Y&e z8pE4;T=I3s!*`v{^K;~@?;po!00PZV&P|y$0w;v|=ZC*3l zyy@eZk}I;0T#TS2OU;0bqH|)u3@?nl6G1( z@E|u=+}T@S;#13ugzO4$hxopzO)(l<#`;?9lp?(ccnUl%)(pw;?EXJ^`F?)fj4$t9 zjFr2$J(X9B#g7J-QmIfegmJsQm4FYG!YXFh=;m-#LID2UbY-9g?W0UBX zADy+^s35TsSp5m=B)T=WxskZPMS^>ipNlr(3GG8Ut6;p63teS`O8= zUZ2jjS^oafQ{enf7z<%PhyNXyxaxuDlg*(0E3*zjb$YF|zQ}YxiB&96qzx+cCzq~x zO_jHC%#fM_d_8HOHm7ofBbrmdK`mLx3vL5^t15X3b?$W<&q-U)sEKaNndbZ}9D{g3 zofqAd&J}vVJvcpg`jf6MX;p>#Ti7kkSJ)op)Z&!F!7#7Sca;*DM_W`&w{k;2mpN<$Vp(@&kYbM zT<~W67n##)Xbb&{12$RAmf$)&F_99AK2+Yc9MEm>6EGGZ9Z*U>nRLpA(0OLA8s;qlJSnP5?KXm;NoQHt5$C8p|uXMC!NPcwX8!Of{!`3+1tv^$mPDWdf9( zT+P$HA^I0-#Z5LLcLp4?-@IYI)FCCGlPOk;>0r_xT!2(fPloATa#;%67Xq1L_$(mjr~3Sm1b&s9RGqbIxxb1fNS28bcd4+z zpp}(}2(DEXJ4L!GgLJ|E;|H`@64lQ;50Qu>$)-9q!XTH?#%N9am7z_X=(4I{NUxNZ zCZV_{lr)aBeBhEv5^r@LPTq~l^d$G`?Be(s84bY!cwrr>;bB!_kDWIYSoiFG7`_#u zc+L%SR6(tfKpU`qWApbUwGNbsX{i@5(=6837+o+pVGgK4=hcX|0OW@@f$4(OZq_+X z>Kc=aSxy+7`oSCBj65Zzy(V~0s(6L#?$-%59E0nshDL_uz|r%;85!$WAkY?|UzY%C@(#4cYBC2JALCU^VlzOWKz~BMP)EO}l-RWO|nvrMq;`{L__?S~k3`+7ydrmnz zx~S3x%+u_*{#1IBegK!xx=)caZOX@C{I3U-qYpPPjTA^)sFvoGcG=40a$5slTx1;> zN?Z24l5)zCV+w{Xt)K}e&fE2s%B=Ca@!{)Dd$L!o_k_HU!;lAHdc1@WH5W(AH16O#-^oh;}rqCW1n9#Wpg%2tHR;O zRC)nJ!pGdve?xPPaW;5w&2D$T>x^;pz$vWSHya-hUiwi0fLe*+kW;a0=Zt;9?bN68Vhs~$^K&E}}j|Xo@Cj&&M^)Ddk*6C{w2(A9R z;j7<9vmcq4Wioy;;PZ67we>eh6$oMX@1xnvmutNjFJB(@fBxd;+URC~_D@86j?vgi8hU;A$+Zy-sr-k!`eX@U=jZ%4Sd2d}_=ee~=#T|MHi z>U(A#?OZ;XOz@sIqdpkyEST^No&Bo5y5g&5U~lgoY(IOn^K?@ax2`$Q8Dbx6^K7yX~K@|o@I9sIbtySKgblu#yFYyy`u z?o2Oj-S6b(#KQ`B1Ovj z%GRGg+}+tW46Kjg)iPQN3Er%II;N$=#IaA|D>$Icc<+!Izk=?cjK=uyGtC!yc1Y`F zLmEcveWQ<}O$QmF2c4&S^AFj5k2~rKggEXZB<<~B1Vb#JJHt_AjEgb6t)j-HR14`egILuHS4rZmJs1}QoTpWF!MT> zJzd}5{&6$)EZI>E)9mJJ_TD1E?{&WZ@~&yPI1(f1_Yo+Zvq@k0rzXwt@0)%s_&W)Cx;ij5#DD-A}ID`R7bn<;ShOh+v<`DD)_>S zp8x*C?#}b44-fXX|DVl+z30!K?drV~R3 z)6H7i7F&Mj``G(Z%bYKVwjf`ud9`{m-b#YcWe~-Be0=DjgTij7R6U}v6+Sa2E^_f4 zv#d+9hU$DHIwx7CA9Vw6ssszQGU26l?(v~m6W}iNs|FIY-$wh20qK(4mcOBfDWy7^ zQO}hEJ)nkK#dl2AzFK>T+Gt8FAd}q~wg{L3PH?I<=^EJJvql5T(+?dz91Ier$xaUx zVGM35?BUz`A`nb|xSu`%*DUlYBY4;eFfGv+_tj$6o`_R*uk0k(Xt7pyj=EqyXRg9; zY>h|NIuqHMjk)7yFoAIIpxM%027wEhE=LoDv~y*WLIL(NUmMFFQF%``zaZFg)z^jq zRI+TE_U8jUNd3Dt6F1wv$*W&iI=>C`xy@&d@)s!n*$^TkhDjz>uf~se$j+(`%ts(P z(e9lkLl@w((~_la;`@(p__&pGXgq$^d2{jVbaV&}>Vh^8kOG`o-|N9%qF7$ncy0{z z09T-MBC^2BgGda(NAV!2b(D_xE36+ti|ol$NNgOor&v6U6rf^3ez8z|dq&IZGMhjL z_9~~@BW!brGqn2u*n1Z^yRN&wcaCgJw(R&7OSbdkNU}Yn$DDbbdCHb8c{H*VMwZY> za#Gn?Bh8UC(mceRktJF72Zu+?4ejR!F3C-A__XOQrH}+lOG?x7s9PR^5=s(CO5e2b zxo`pg5eUzPnPlT~)7Go?6LDb5&hkQGqSYecNhlIvngL@^ zSV#76SP%vRu4@-Wpp$>{tnpfdP)?EKF3A!Y#35NA*{&yD^cQ824hTE;rS{ZhArvFO zyIiKgxUbj^j+6o&MC$2F%B4P&z4rynuZ8pb*w`GpV-XZ{hXX#<2vbuhtSJeKap2kZ z*2MTZWJuUhJ3VnOTeFMFcwCQ@QfW=BypJ2)QIq6k>7hPD_79ZLtxD5d-t6G8eKWNwT_nDz6#H{(f~PEGXFg&7a8Y)y$J=(q^`I( zQ9|mWOWLyjcE`OLp1-P9iDisjXot>25waQ)eUy%Lay|gKEHBx+9_|vkMgjNs&Sv*F zc5h(^7NZm_l8+F*HuS#L6YfU=NmM%waW%lviEuz=BRk11dR#BJ!K?MNIL`2z=Y7qsa5uJG4hY@cVh#6;%}XC{%ay*!V%do)W;`%w(sbXzRNRnz1AjT*h1JITNzWhddVfxxupd0!xw2k^fwv*Zb_^jo9P%q_EAex=MJPEG07GhheY zhL#I*Zv9%uKfHX-MA&Q?N9aLya#ERdMVUQwVX(2Lfez`Se)9{ zMJ_6KF4JQJgfv>eIe+r+4V$#3RLfNH@WyBHG>5WoT9chKm!6U-D5yvx zB!L?m+e7JU_?~9?H1L^9-3GXcEf66ZMgH9i$?EWSyab6hcGgOjMes~J~20&M>^+^sBY?6RwbinfPY4n%5*IP9yp6+MQ?hJ8VCd2 zX|E+gJEM{7LwgTQXCZDNN18B%lAkfb;>65IU)Ke9_C5!<<6Q-i%#-d-rcMDK21BO9 zaJs{&N+vyT+T>^;EUid#IheObi(iRJ?1ge5NJR`wiHQ@29KA&Y^v$-N1PCu+_+%oc z)Sc_Y`iNcinD>^inFGEvh&@>9x=>DwkKcbVMNq8l3iqyN{LKl zUP;^Q_N%}lC!_!f|8umktvpkgwrrW~%IKAgCxHW|#M9*OfLNYVJu1xB*3l*Ja6&2a zBAZF-WE9o5u$59{9Y|_k00`Sw*x|zsU4%smI~kW$T|6cfZP;L>E6FKZ$LAB`kwUS; zSiM9LO0|jw0PaC8NPuNBeNmRUG5lD#$)H+G3ZX?CKy2%J;8gbprU*=Gd-)8MJei!g zGOK_xFHiv`%?CglSGf+*RWjQMRWOTx*(xQVH#=fCF)IPwG(l`iwVW*g3zZj(B%`nr zk#OXg>i{%YT#nvf>2mn~bGmCIuvV|PCSf23^0+MCN@->M;q@1%P^Pjz-qlSmQ7BC5 zKzIXJ6UnxjX+tPZwXy^aMcs0Cmz|Q++(l4zc{%PJDYbL0F?Zx+Uf^O$LO3oX2HI}0 zU4mPx-aa?C02s^~klnkU_a0a#(P#tmo)OyC&)?qO47G%Zd2z*D+tCrxlcP%oaEKh{ zC2b0r!{&Bm7X~x^OaiJ*889T3&lA)er(Zz2Ju=hgqO+wd2iK%oXJFK-`^uxenCo`Z z_kvh~5pDfC>aL79kYWXwH!y}t1~8`6&PYb`2X--LmDeR0{NC zeX|jSHMx!~l$6b^@R2U{=%p|&TD63RdUjmN(*b{8`9v%l1!R}llENV-R3?Mqswlqf z#uCwzv1Hcl2gR2r=4A-hk%`9vtj5I47Kd1V2PcN|DKSd9?VxyE0<$xpti{F(2OJ|S zJmwieCR1t9!qlc)zPYus1O@S@k@Q@7 z68S}XPlCahzKeAObOYzn+UOXim5q(8%5*r^$eL-fVild{S>(G(BHFqtz#69SZEt4X z+DhhYR9I760=2?2XkTUv7`Q>)pcw8Q;xdD{VHt8Fi-%J^t$=>SBm*4;2s!z5Giq2- zqlAU^ioCo>s}^Uhb%`d~gh*y%wOP736B*$2{3ViyWQeCmoKRthVMKFWO%;%0wG~Qk6pUmBnW;eaf?%bO?B*2y5l;f% zq#{TliB#ZaQOHLd)vFea9`LA`HcoN+1g?Mjk{`I^YO)aVM_LIVu?0J^ zV=|E-!>=&N9ICIDVRBSEV2LAGI@cG{SSonM2FA>9a>ADut20s64url_(aNN6dTM$6 zPI+dB&YVH+s!z4fxS1aY^RzrEOlks`>*C50R>qR{xZPHKPeZQ1d+FRF=94y3cJSe} z&hyAzILz{FA1y)HttIYxrzJ()^v<<=XD+wokYdsiOI%V-RsHMmS(bqj+Zamxb(atv zYjkwBp=M9cA6{ykyH2kSZf|75{e9QQ+zW~_!6 z)z)F0v4Cx*FmEs5%O@1^Vw3ae)ml+|gcNL>ulUHrAH6=w1efOLL;VnBdyy!q_XOmN zE#&2r(P`dv3us`ReB55oi=nvXy>=M#(Ip*$F;IjN>q+d+tA;1l@p|QCxbN*aT#6;5 zU9lcDSbd6PRa0@OUS8`3$Ji4h%(Wj@aCOFm2DlNThX!;FSY$}hWuH&cFmpI_o@jZ_(R$9~ z^;*8#?W;%Czt|-XIfi46tSs43a(DZ_5c)`zzc|5U0nVXpV0ac? z-HFMOSxaN*WD|XI*mW^?p4*rjb8Y);Vtj5`4J7472ll~B^DA@gMjJu9XK9g8_+q0* z2LnG7|1_V|E+MTrr@MD-Ac)*1#TY zh194c9Zk($vGw$p;%HSuI%|Y5eHQ0v)f)!NFhNz(Bx99qa(V%$n^?MdHE$0hPT^SA zVi(xpt=T>|K;zZDWa^oAC^Qm+NVJn;!CS@_{17&SSiWiuK;&3kA^fC6w|;kJU4<~k z?7XqpkWR}rg&d+}rW~`-(dRfgH4s$x$9exmeUU$fq#SBPQ+J@uwGS*Tv}P5feV9l( zawRBOY#JU*_7WY4Wu3w}?awJJ8W*y4(IXjZ2_Gw!OUH9!;RVmV;~UUA4p>lZDep?6 zvHgS(1(8vsFD|exZM0O#=AGy8v8l50mGEFv_@|tQBFo9tG_J~fqb?k~3D_R+8FD0T zR;ZUuKJR2@1wX&_Q)xecr88jixH)|*^^i5K9+8yXO6goYLw;`MpS^hM;# zGjP+dq^DTcgPJnVFUXg;(U~)vZ3mr;-CE{Hj_uG1pJ36GlL`bdZ3No0=RAgaFSw+= zClj;Sh#$}u@@x{TrKGX#E=U#mx%J zM#>w_G%EBbXS!$3T$k$tz+;$6WvPiwLIV?Na|}8vp(E!YJuA^4QX=pxN>CCKp@Nq$ zp4M^vV;5~7wtewpqAE77`j9q*As-u<^(1qUkkU*50eDYkKoYiO+u5kE7DI?#9EVm+ z0SOv5V+}OI;N}auskJ6Vjt`G-+Zm^)SWC?qiueTI8ge5hGSy@73r8d#P z4F<79h(cyK86c1lBB4)bD)6j2S$cl1C8voUQO}``7PEL3b6gm3>?4z6uIWkQ3-tsa zFuNyWm3GGH77H9sI2*xmV(|r&ip;uOZd>igg3$-M*xS1U_7SFI6j;TK4~6CHgkDC= zRjWX*k9wBMT;mY(hzP-OU`5REhEhCzt8^g>0%Ne9Va&*xi_*CiZipXf{VOrZ#0YME z4+5*(k|nJ;W`{wUtRA$4poi$anPtsTt?}laL`~y__D}{+d#Rkevmmb;=QjW z!4_uftKl;+?TzgaR9j8P#JU-a9_H3{9lJfnalys2TTO@qzdLaO5!OWIa;Bi#425H+ zZhy0Ljx>OPX(oG-p^OV4?GkEieTX7zl*T|f_ui3PJk?2c!Ic`q8P$gO3awOQi49Oj zCVPZ0t+l*2*rKyNzz7WysHZhFN!qIDo6SL6gi>KMQIS>A187c$q;d&4)d4xALrFt+ zWF$PvP7lj8;(ee@;fgzh7_FAHqcws||FrNJubW4=+u)eoH5={Du;zYxYp15?+2VaK zGq`7$mN8Rt^4;}(uMSB}&g_K2tfqPR3>`mgPU;1iXc3uQt~|j8NnV3bFLZ@<9~5dU zA~YjFaiVHN3oRY1tb28McU{psP%OrIY;j&{2~iB3e40}*HHxc*{CFVJrymb@IFh$e z6B=h5oNGZta9Fg>_GXKVh5QovOkR?`OTH`34OdoV<=Q&7Rs3v;w}0uPZ6~4)4Y7S` z16pF4-ejdv@H;6Z@_G7uZ&vB9JZd20N=hhbw9%m=M^p@+X9)~lwKnHOsS^~1nTr@= z_XNZAk?|=-mo?=}7U_|n3&%iX;EZapO(tkULe@={DTVrnBPq*f64%kr>j>*y%{wWVdw zpRmkfzEJ^*7%I9ILMy^Rz<*>bJE}S}FE6;xF53?9pxuD=0SQ<(n_xuyXj;e|L4m$Z zrkkj^B3VmiTG6P^&t1I{PjdpIUIG|wI4Mkm|3gJg7SIQ_)sa?jYf;1P0FrD-ohKLV zCRvmDW+l5Bw8@dukx=$rU+FmQ0%KGH181sQ3Ts)*9QbV5Rb>=hRa(h4EaS%H6Ld#< zB+fK_L%GH1?PMT_AYf*FROMWVaN(q6Yg8~npK+W>@Qao9rAEd{ZIDPsGvebFGE1YS z?CKyTkj$&IZYM1Ilj}W;m@Nf>#Dr9vZ_bP2`36b&)VUzQ8;aGLlA?POa&501Zi>>1{fqbx z30EE1Z0OIKuU|?y*y}3U!y@I?^>Q3I>ICd3nx{ujU3PVz`Vj zYll0C>LBlR1djrzCN-DDXQMe(3;tI79z=@VS{(#$=hk?4TnqYRNOk#3qGq z8naz126_D{I!QXN_+i_saa=Z8L^Y3BjFwE= z3QG6hAWOQRI8UR}10K2pESw6~M4O@MW=VH8CDw^l+qRsc#j;d@=rX(up7u&=g)WhA`04l3{tlxSgzLk1+=&%z1A zuJi5S!DR1&8x`|~yKe$I#{?p^Ys3$Mc)&hZ55d#s_AV@Bj%JD-ZueDHu^x2;2jov9 z36g`(TKl}QK)vEC?i=du+(aH)CwZ>WMDbO~N?07}drKpIZ~eL>JqkT6_u>N$Z*DZs zP7M?z{G!^|fy+o{fX-rZ3^JI**aO2eh@YETo=^-od~xVuC0L0Z zX&48VrNAO6)Q`Qy0y-bB59s5<+$@)IK3*Tx7xcw*33v6LLX%bOD!j&!UHJYO%|AtN z33DnJ7^1*HS^zXEwJ}JMLCoI$TT4fWGF|FO$drIC)tc>gnt=0HFTK1 z2s{oY{w+!$QkbWJE^$B|WkFIN_moC-jQBt6nWZo#YGrhs6>9T-9qbz)C)x#0_NofjGs|2ICVWv>z zPZWHS0?VBC$?}Dj+o5l}Tni@qq6U^Duxu|JoYAwdU}D*PB&p{UlD$8y zx8+H(edyGmp%n|)WqKpjJ%sQkP*6W0y3IM0L zf*v+++bE;galk3H%qgO8;bQP;g=}^z)N^JrwfPb_9Y+v|sYqbEdeT>qGikK1Z-QYv z;+cslfLvCOmX=IJ6AmESV(n=&Vs|W>S+kBEy@g6(Q6)|uBW^iw_Xb=f&xpEodgsyG6va*#tQl8~j3Gql36;d<-H9K~t!E@5W&L%Mz zPN)Th6Py)$jRq0IYUM=DL!pC*DHc!c*c_>C&9vp9@{JTi%AGJ(F?^fQDh@&T9Y`0P zz@nOQUbQh1nbROg?b5!W302KTqsoe~=M0hX6W4aN3C|{Ov2!xc>t_!(tcxK*UzjTC zH?`n`Q>pdJNuq2_2D{ybv$_HHA>1o5WBV}|n`shT72u(G>m7AQ7myONco4fDDOX_H zg(10*I~%i5QG9$;9%YmG2?AcBPRV|wvNSy5Hb1pma8Q_0)Gu9h=W7_7swwgc84Ye8 zVUybxg6x(#O0p?oQn4JrAxUi1v>3u3WjxEkotzs4!RLsL;&>$i0!$o|A3F@Af7T-S zWQ5cNPIJ%#^N+-vg%Elk(29#eBqMVITyl@f+R<{h4awu#{h_%7`#>I&`eOaW{!O&1 z2_Z%WGEp7c?uR(f@yDLpi_&mMEm z11!>E4$&f&$wF54?>u;LCy9XAs`^W3+v?LwVr%Aa4u3E_0w})%x=K5+u2 z)6oWBr%}W>_<7Kr&c&8|{3NCIaTX>*WnH}NtjgnX>N98jZatKquo16C^~ES1zm&F4 z^9SA%NPuZ4AQs73#PU#2O=#w+9^);AOGvjQjO^0r&#Za`=Xe=6=)Ku6pE`>mU za2Cna%k<40AR;{1es<>BI61pnBw~SN&&uU#wAS6r{U50(NP>tNojrN1r+(LM0Ui?c z#10bBY!weS+6ZS_aZF;FY0fZRL`*b+w6t>zmlhI?CyC=co2u<0-Jk;T3o03rn??i# z!AuLr;Mlol`VW)0=oj%Dq|r!%I45_R({IEisgUaToa4@hepx^W!L~FAPw^a*u~Rul zy8URFjrRcOJ5Kh#2Lf4;{kP@$n(x0HAu^Yd##l94tY^eBjB z+|YCmsSpRO$7@#nQ6j~#%e5b0RQpV1z{VWSG0*TuNWWMhs!sts?aOojYu?4D{S z>gp-ol+*iU0*m`3LR&TvyO^(&MD2HQga&Ww1Y<5yPjS%%XUY^(-a2&&_bKK*UCj_$ zbIL#mKq1bc$D>AGod~e6ZnZALc#vf{-Dql~8cchN>tUfUOwm9? zp+>Be9Xg9`PSJv!O44?;Zq)J@tB<(b3Urg@B^A($gH{LO){VkYLl=5=9hh|M{f#?_ zV;AEUN(tN~R5n#QPCXo@b#c$o7Umi%3R3!)bJ589tl&|aEY;W{x#6Ui?4)hklfcVw z0LfUo+eyf4wS2a1x`uslHm(3`$YvNWbwlr|RvV5WHanOeqit9p?6RFtU{x*!RY1%;$%n$&oOb$C*q3A z2-cz3VC=Twz6|so-o^4pE`6V^0!NY!vU&XUDFZ<)vL*NUK}YJS44RH;Df~EO&N}{z#K%;S*p+vOMN7<9lKg;_U2GLn=VBUbbA~29A|7@$*Egvyg0~9?lO?w-T^Up8o z?uB0ER+w4ob4yL16>#w_0#)H;;-9)RDnKzX?M<6_3utd+vMej2i4r4N}MoJkvIMm~8^6GqF0IxS#PSZ?@bb_h-J zMkwifmzPohWn5nDwR@tXY0AU^u2c4_AE3P)BToYPq)w3pDPXG_(gjW|r`;+5S8BHi z#^&yVHkTJTK$Tg&57%pZi@_4`ND8vKB%@5}(Ja&q1G#Kf%IR?lEjG6iAwPTMoz6BY zQ-#J74iULn;~>N=8sk$f#!WgPcTxLJq!Djd!fa$Y7^DDfbkT7UYG%doBlyX%)QtAk zricn*l-Z^V2;q-Q)Pv52|1w1R$TWr^l7;10dN`G_gE`S?m=$K`VIGN2l7+RY-O!BY zQ)vb&<5(}CnU(-)Itt;*8H*Oj{6&HQ1_8SpQD_C43gl$_P*mHQ8SGDCByt6qIaSss zLNHPAblz4mNF*DPMHXz+Sm?ems~K{8kmJg110s?t<61?S1#!VPbJu7JP)}AQ5Aq72 zw>cg%gJ-)ZEKgjBqTJ^j#thz^bXPE8pcY{O*q_n^C~8 zgViU;12c27z=AF63+8R;66D$%VYGHMGtSmq&WN4$7T~B??A@}$7Od)yRuSa+js=^H zYFYQju4b=tL@Q*W6VvmMHjNHP@SGfGxdu<4LJP;}!u(B^5tq23449i_Lu)~1FvF)( z;DzSd{0v9qCuqM&#=QpNi(}o>n7LWu1m>$mf1I;ifY)cuM~JXdf4e5AtRDp}w50eh`C?zcdtpOB9TIWtiom19?U%i}OQ5gt;O zS*O$ITCMn;D5Ugh<1{IdWhNkVvDbH^QxHI@A)9mFZ=vWa)?=C7@=I)4E2kgRmhLr= zYCa<$iY%0V39j!OmF8A&_MEXh&nc<~>vk({!t^|}M;@0*0fhH6BJ(L(IKO%qBBU(~R3TetO8sh~mO zj}1es6c31z-QVa$bKk0%5Aka6&$#W$xU)TJqdvL^g_m8 z1Vl}u@USdiT%%9>al?I@2G5$rMGa!H z)mO7qxQy<F2`nRE?Ic*2bCM zWoRl#Nf1bSVfiYW*rnz906T{E6)=>j*c=hVRO$$}1rcAt4H)dbArkD^k*U?8%>c~0 zrN6-1+Hi127)Jq2m@a?02O6=Is-ifixp`NRb_W_@Z5&&k4*(AUft+KHiSJUrLOWp- zhcY_eLV*+AlAD)KFU?~@>^`^DUeO_Teb)6O_7_)DeAec6lGEp`BpPe1(Jgk(K%%KZ zC>f?I6=(4@w{{xv#QO9y#@6S+bnv-g#i&-}!ZU#&5Jrc=go1RF_pNh7JzAvkr?x8Y zGYly;6%=}eQ7$V7sywobWNERnh2csyI=zB#eBNvXZbZq=kqW-WNI_rBaBh*50+w){ zT7F_p%M9vAs}FPIlA<;#~2f1BCxv}ZYN1*+@{Ey_*t4WBuLDo`6qIr8A2`Ks5zYmViGiyyifQhJ&2WQ;rI_Q=tOIoZ{ zZ3)$kHwh0EtP_@1imlKr2`Y#PPNGY*jz(2KSH@%-1xu8yvJkvuu(IsEhWKHd1LSb5 zPMz6FFr_NjMHu+F)M}m;W-iGJ6RO)ChHVm*D`C(~{>_#uwtblAS?VM9(qR`C5Y(5wGlB*d5Qe}qxwa6Qk6eHe|FdkYFa~#A!R`KXXtaNy|L?FFrs&^H9`*Q_9bKe*3WK;o!xUXZOr>s;|1DrV3=G8*>t>gWP!1? zvB0q5HTckG2f2e`?g<4$xm*l(E>|qUhKPbm57Wt9L7AsLPBwJwmNrT@OiAwP`&u(F zKDG1t=ll4-FE{-_04IV!Nwg#xeWSk5Rzt|k5^?$+vnR%K(G#``>@h9OT=@w!p5d;> z2O)AfDZB|PekCR2Oh`=^2)XgolthG8p=<>sk0jSHqD;0h*|}jy==uclW74 z-^x;-UN#mk4#}dO8m>}wQ$yBLJ{|NtwuelJih48or7~_Mq08of+HNaAj6S3INHeo# zXYE15eGFqV7S>QYplYE^imaMTpjC5c%-;k7FbEjEbVznPK8F|}-Pm-PYDaW3uJ3Dm zz}Kg?_MCYB`S$bAPrtB@&ppE9#fnwrzc+Z_bd#JJU!GqajP4w5y`LF0^%hA7$7JZkXEJLK*PX0EaDbzBn2$)EjdX zz&m;oH?Ld`eG@N4QZ>Ix#+AiObMstNfw8)E`W(V_=xaZ>j}K=P)w@1jNIqPgf-~PZ z04rtEQQDasC8M2qnj7j&cty;oGlbOOPF1nvA}6t=(ca8%7KO>xShi83z_eE@GjnNn zZs`VPEL_;i7!8bK;@+i8mZAy!so3y>!mOgOW78q#nAkt0lgwY|yB>~)_c|r(#(?s0RVzm9RpuD!aV> z*t(&-_(>;5W36QmEd7s+TS0JjYYc}NqCd`Csk@5_|44iu>@-r;5IE1wofUhK=p2kS zvB7--L^SD{!paT$Q~7&zq9+wq>en0`iHj{%-Xqs7fXr6Vt1WQm6VIhEH9$7njFM+a zAA)swlFAx$+{GTIC-)<1&0MZfac+}(Tt=R_1CT-lI{MYqJ=sBn1kl7sf^%R+5De|| zaFurXD`Z|uwwas&Zr^cG&$PPx^n1D zPxlrYP;>cNG-MFPSyITtwR*Bds6nK#eh$cnT7oX#LfHa*rB1cb=zS--s%s&_3?@h< zLC1B0CqP-p0evmG5-Gcz+vgU0%@9i)Mk(dkT;{3M!3qZ+u3Wt!7F6RAe~&O&thZV)ZDDiA+POfq{hIJE-a<;CWoD%HndWkRFzmZ{cY$j zYN;)(n>NI9OW|t%NIpPaex?=R%*qursmTuI0La}aM+x=GTq#+1(pR)GbX0@Y)1cxe%o9qQwS;id&+zcSP&e z75j>TUB-*X_kUCQzOv$8TM{SRq_2P%x%Iorr;p z!FMi|d*HQwmg16$@WJ&vop_IXx?eiq?)4%_E*5{%Hclj6{Tz5r3mI3pi)H)@HTk&o z+REw!qzOj6@-)e*mO0CzK1kZD7r9kch?xurU?tAtSV!Ei-ms&^cDi@GXH+wojWXR~(J2ZsHbZDo_Pj$B%-@8RaV-uWda;BbX;u}<$rBllBMq#K(d z9w~|VM^Zqx2)-vUDZ21B zSP*BUjf*6#rfM~GedM%MFiGebk$VPqL=xkAWuF@fCN5#jN1LcBg+Jb zL>BmL*9`#@_`F3}Mr(o|i5>c;XdItBGJW9Cv#e+Li!X*RFTN<@KaXUW{No`AkyQqd zjoqILQOb_N1!;i!1Hly;zgiY{WaEG$U_y{7jvQ|AY}Lxoi>X%F5TXnVG~fK3T#=e!KqkKj7{d4hOk8lYiR}(FB6F>4kxC7C!PNz% zoI#gnmcIa&QQnQN?a=XI6UG`oGCN~ZnCw1ivSd3@Q^B|j^_=rN9P!CtA&X61=;#E` zS9y2TmGbo93#VGkht9-(;Pc9i_5lR1nD+H*T;$S}!Z?|a1F5XF^%Uo`!zm1a;8f9` z({=$2q(APO*cwQh5B708G8u~`FcfVUQ8WiRyPPHuE|Ex&*dr5mkSk-YjtyhW3o%Yn z{dq>HWMFlxiiP+@%mQEJz%(e8b__!8@$+p`K`K8?rf^77%PcfK-Tpc%9$^PfAje?G zbru$xRg4(Vj5*e)YPe>TbtJ}>b=(tG9+OB)8!n=CHl9~8HAmwS8{Qo+wkfhn?!GRH zXVps>kxm*|WW@^5DB$#w)>%bsO5i!2jR|KN3`4r03khskX#mL@n6tvj8-5dne7(1X zat5ueCH8xZAW)jm(m~9+lh0Q&E2xWY+_!?Fm<_vos~kd_gTskAShGW4@n3R`#p)V&4a^+Ql+6q)IE{d1#?08y(x+b{1SxKTI%NW07W|Z8nN* zepziKd`F0E5qi4mymj$3c7U*pcGOEx0@8=>f-)n&JJ~qH>B>U4eoi?qrPBvrxokjj zKP8A!>NIX<*3)V|d+6xoP7`}v@HU^X>6%eRvLo_3HWl~YDHGu|Mo`#@b^T=aHt$(u zKbT`B7fwB1FeaG=<;a)u#8O$tgxD1q ziw#=pVRiBm>tqdTNQv}Rd0!wTmA3_ILQ0KGa*Z+TX!Dd#FiRLSGN(=&nN`JsP?19l zp-IVzVpH5$y1aB5*}Kr^bLU9k0fm7`NJA2|V}+0iR5r6qM92m+dNfVC)*l(VjY&Yv zn7RwKLyaqb7A0qj=Bv%DXN}NXDBe0I;%Q5Ta2=_@ zK@u(;Da&Ss_F0sU{T4uzksc_yo#N6ca@-0*os-ie8NpM5Oo}@hXv;|nZN%<-P+5h3 zW^9zRhg^JhKF@mGZGE}hPQ)RKUD{3BB0bt7W}9+aWz-5q0cMm*LI~a2{x#9U7D}xt z7ICiKSh)JEHX4bu_`~!A-81M}DJWnZqMVb#RGNp4TA?taMBZ)BTs;_@jsy3@tZ}e2 zT!zZov3w8-9hB0VQ{ZeNgq>Q6xs|vQX0!D}4u-p$MOxJZPof=`^~qjJ9)TuaI%Tj- zm{Md3VNNdh#X*}_-46mKA(*xhCLhLfwiXl8Ff?X%5?joc6G{UN!%-rcO8k9^VG5`b zrm~3|n7HFh3!cruOh<9O65w@Su|P^ijoX(_C3vj9TsS)rR~KwBq8*{r)2$12Bg;^Q zg{!e}BU@=DexYwPE6&Kvcw;M!-A$FB-)!R!?8ZJvI=(O1hMkQ2a+IZrST^WgNr<4| zJg1#!$O)lz+{6nQpsTqU>=Vdo4)Nzu$jt*s$QzpxFUwXcxAFVPqfA;Hx^orRCb$ha zm4dD#kOq8H!wJ<6Pr=LZY2RXjI32XJW-FHw9Q~wCko6T|h5qPQw%A|~6X=425A7OG z!r^dtYFSiMI40&#PI2aLx(!*QD)aS1y>DCyJ8xP<)i5 zs97jwaw9dF>(?0bI2k4r$1KUoE$q-7Q?>;x2TQaf*uaaVQYac^9$zpy+pk$cU&u2{ zOFK=?mr@n?;i;KrZbwQU5X4t4Rj;2y;w2DZNArcGY)%9ddZcl%(AOD*r4hctAk^Q` zj^Q06H`QM_E0U{cwqjuj#E_XeE_{VbWTPt*1#gA)WJ^FU<~q))YQZF7ekz-6{PY!IPQMli zz=WObv&llJbf^VKEzESQ#K&U7H5-jKNwg^_fm07?GT{|Dei=w`kwdFFa~|bIv!;TQ zWZzwPz&S+EFAX>Pl~YA23EAW_Z%s}Q!x84VDFw|~p-zE4;3BZ$`%MPc(#d2XuQp1< zL~k$}kKx1>1H>2AvYG*3>enpsn^A-a7DFA6CkIU|c@<;rkh(3W=610)ji_oIQgGwl zZ1y*0GttkUsAPj;Spt)cH{T~pFi3P zJ*LIlKWyPGZgBP6_@ameaWh7puAtel)NG)`?u?9lC{_qB zwXs7J@re>VIGeHgt5=uH0%)PgY)2=z`AZvpIQ3R)(GI%F*VcVFc*z|T;L@8+sYv?q zJ{sKRW8S57S_K6I?rBnc)@{OJ5J!`5>1P0cY>^XRNYH~X3nK$8CePCz( zSp>B(ThpS#GG$05{D^Be7q7Io;|UICv1YGN4(qsPJ>7G&hZc39<673Os$tjxX08eH) zLY774AD202(q)&dXZ{I(ubrp6&md6Znd?a>fQT^wqGI{P51t#`I+vF0Ca$3 z3{83!6@V-}Vytm|{sd)hmc!YS#dLS7ALQ53qe@uPtDcovO;~#7Tm%HZM29W5g(sym zd{KB)Eth1atz<(;x^{i%MvIbwqqH)~8@6P`0usB-;^@|ZJ)FqEK;E`)C4tkIPQkuG z3@{-uMlCb~+BD+eQNOO$PpF9(b~;2}-RfV#is1ea3~`DKHO1Ux6$$EEk_{nCnFRsO z@*!jo!5yMLOS4yGC^rdMMwlEU-GYR?q1bn_#p@(McIY)#`ikrQ-_0T9>z+G~JH!?L zd|J`5m^~?M(tU5{9z{Ndul~2sJsMV1RuK<-F5z(gLK`?MRam}hqHqas(s>xub(98- zqI|X}PcwyZ+F@CmrA}bPoSI^5B2wJGk;h|f(NBHSWmgTxwt-|0_^`8AomugS!0cVb zJEE(Jv0)%2{t5E0ooZURYDYg_TG1)ij1CcNv9zqf#x~LRZAeo5q|=yNqw_24gaI(C zKyvD*=9fZnrUsV|;96Fr&T*$XSi%iPl$7`Npvp6oN6jT3rRF%aqXc>JTCmH_;jiBO zq>{cAgk~Tp%I5}Y(JrYc_CBeT1i!_RS^4%Q3j;WFiIf$yxILFN5v_dY1Beqy8_PZ? zDzrV@bNGM))hy{Q^wFb;G@c_fR~MJs7DaCb?GP4=P1@0OmrmJQ=SBKhqf>ngBqwbx z_gNSyDxj)a)l5xxewbYxpRI5`i-NSZ*5d2rT7r666S>qQWFUzcl7y$@7n9AtMa=X5 zouhTio8yhR&K)i^P?bdH(UF2(b$%Ci;*tOU52weCLNs){rQ->^>ipK_?Dn-V9XrAj z?n-vEb;6?E!<7NP1Rtv!PRs1_D-rx#p#!8t0(mZH1ySNg^GiQHs?^g3HhhU^x{tMO~aCg{hum|KoH5NvKmx0cRufo7IbEZ9o0 zqV!1hCv#n)W&)HLV;&+lv+H-1A11kgM`WyM1&Vpf<>4&u4j1}MR~Cy3$?#+&Hfs>u zi@!FMJa#@?9kP^z)4raut57y@prysq3R(<~)o7!P7nbd4I84uVB$gmdK3l~O{tt9> zbKE9GFtI~2F!*g&G0^FVT|^YG;*PKgXTBs~Wh79(_CRfJ`yW+t% zWJHWuGjFUxy!B$Ye6XkIFCp#Zy-4daL<%Dh!@fQ)SriLFVmS(A4X)l(991xw0U^&* z05+Gf@r+Kjrv#V7y2(PEInx;-V~Y}hzOn^id)OAu&QoZQM?83At z75pM(G|LbG^eo=!7jRHy*T2k|I3ximD}&@glMYRV(H*+HNKhu;@D&RVX!m4sG!kR{ z{AYV>^$H#Hd|$K1{K#!q8U*ds#tGGU0l@SjKrjRo*!E;I(zJCtM1y4!1P^ofT8ht5 z0YU5%N2firOxqizwRH*M& zhA{IN)_aZ}+?y+K$D^yohXXYt)|q(|Q?=L|j?$^09SL-xH!BeZgw9d2p7FTQG`1 zC<#rX0Zf8edEN8Ec9D)G;)tw+Z+TAKSO?M~;#-Oye{rIFW?{Dbg>dl7pK(+~(BQo7 zj{1og5+!ZxHD+Qd5JCZRe+m4yUUsFucB3u4FPfc2%EIGU@LR{MGmPxg!mQ3%FU)Rf z4rAtmk+3I{k%w*TLwCY&0}m4mJ=ny;+b|1%bAsSfrFLm^&L;CEFjzbQS)xVet30f6 z7xK1p{N7JK2QnTG?qbnoTT2ay$8!BdGb(=Z?5_0DViBGci=^)1QdxV|`QW)z@=!jc zlJsZsn1|uce<>SBy<*>hp1f(>a0ARyHroHNwhiQo0Lsk%* zRIEUL`4H?*XN(h4ST}Q=u5pYGLGAPY$oyy%i|@+55c0hl<3Cdl>^Kgc=pmf zu{IU66o%(&%Eb%|Y}8kTgM$|5W)gcOw@LZD$&?V9ACb0P2ubXUJX`TIbUW)q!*vMp zK!1O~dcv3(+H#JRShFzWN5dA*^bDGqN&}<>!1wGw0-JCe+IY{wsr{H^kNB;ep;W?} ztgtw0C3k{N*%B}m+c4Ae()=uZ{J^BFdHi^naXj^S7)!5ookqrNCFO;I?ZLnHQtLe~ zj&m}hePv;O(1v^T=;6jlqaQ($qrMzMV)ymvT&^76_VXuevRP{K%%8f+!U)e6n&ZmU z%NDpgnWR>Y!k4Z}un6}kR22c-a924~)v9I)sHF}2jO7(1fqF>919DF58WJ{!o%3la zg+$P;*cm8$Ce_F4F?3q3hi47YpJoH%>05$PG{GHS3e`K7mrl-=hZ z))_0kX?96-!B)K=2~yHvqQ*ECs7D;pCDqG;6!gp_biupJH%7RND9lBE1WTjF5g2D| z3Oy-5JBkJ0+etT%+1opejOSm;;2c%8&o)t0-3M7u-#Stx%ny2%AWf*)t$o+0H3`o35_(il1*h_4K-OA8w>Aa!O<{EP@C`%M!E+v7p6nYOy0@cpjAN zq;CnkNtRne85-l|AQu+d77-&FUd&Vg*z0ApPLa+|c0`?8<0y#q23LkT7`fDLAF_sl zl2XPACG%8*+rV<-xsd=K#@!?1nqDvt%V@tu8edD(_KZ%hEV3$p!GT%Wuvu zK?!GYuv5+&l^nv@3@`!mYD-9$0t=)FTd~wSFE;gb7_-g_8b0MI^&)~fdUk9sO9>Xr zVl%dr>>TEI*HqY4MksQ!gMHO5J}0(Ze~X2HDbfYgJVkuLg=n|;w5}p=sI^2X>J#_% z)aP2`n!hbYaQL0Rib<>8UPPieXTB-y16Z0CINyF2hm?Gxt(9K1t9gj$GWiuL$gAF& z^D|e-tY}bZ_tJQ47F|?r=d-h>XuL?joMflv0++8A3kzRF2R%%DeDr9xAoJTod^@7P zYs3%;t{H^Vl#xDpt<7AXhou1FD2?(l>4J{JKy&d(XcZ@KRi;(NXxUKERs|o&zgSRn zpCwH|p@4v6s&~5LJ>3CL8S_(Hrs3*?e$o+Wyq7#6c(C7YT$F!V00OIH?@6IF<&4@Y z;$()qdR2tJo)~G)aI;w0p=l#k!N^K{w2_;JsU=WInHc~NI|^hz8uBVcSt=E!iXcc9 zVG{yeaS?I^j7vZ-$~zFYpT?S(vC*tDuS^(i#94$UOdJaf#70Fqav=kJUDRDJW-E8` z&w*sSSqUe&R>I6F*=_>L=a1bW(bsu22|+P(HR6nZA_t zN>k}e+UZoMG`TiOnp2@rV>iLN2y+z+m=T2WuNaa6+F@5R4BsSf)5`o0?n>YM!mEeB z`j%VQcj>3`Lz|y@@EhK^@ToOjUHbP3&q7cM$sBdP^=u3>At%3UhYdnZo|}C7_|c>5 z*Z24D?C)=kLLU_Ts&7M$fr0+@6QL}9D_@F?qj|5lx*>dO?wYb9DVQMNdmzZ=AT^u zMEt`Ul_%HN>rdF_6;EdFfmiCDYtbHrBr#9)d7tePWCA3#_ai=#*l}QG#$~$ z;NfI3pg81JX1B%qdxKfpTEGj!9ZW`a;x=a2m?Z%{A|B;nGvYt7`!UTnuTvwT#rZi& zfl7+MnbfBIZw1J>)IgxqojaSgi+63#^EGWYy=&KIg=_Vxz?0e34g^1VawO;+nX={9 zu-uh8Cq(Leu_vxKjH-GZihwhDC3w>1`G8dGJdxiaYF9+3)xrcqdM1*x#u-q^XF*CU zKHEgjGt4LYylg(+3>c6dO9vOupFE+2RZrSLGpme5V!59hak$lvy*a_Hb9cwM2^rxw z52&Bm`>f@ohx5r31%KZ`+AxBMeMJ?S6)X;(=X3hGeZ}5|6nUUtWKo_0w0&9L{qm~v zbo1jvr5qSf^x1URKcTw@95^-;atQ9)9Iz^+rySVq4!~WTBbwA-0?NU3*W2dKKuU1z zYoT zv-GSb#|X6hCl}8WXL3$^$Xb5VDA`eqbH%&@{wgwL(UaYf0uV3XB9|G0yt;?McdE#x zDuhvSe%c5l1m^$iVO`9S8eCpng7|HI@~Cn@VGuM|wr>Xlg5{WRE!xqFcVmE6DQ0Wi~MCa7_C%gO}q}bYuuDEA@B@NdeKJw|HB=w`=o@ zrn7H;GQ4RAZezuj0RM@;i^e6K`mvLr=<_Yj4mbW);)Z|lv%g-y2TsVpd*Oy>*tdPh z#fIKJ-DqJU;rT0fcXide5ES`Y({)l<`Jifc@2;a_jUFw?en(12R$wtbw_|&H4Qr9AUdZ4S()o*3XwRxxx z*LS_vbxT+M&~)G6?!R~NG!J`tdi?al%*B8E*u6i*_h01SyU)&FJ+tN9kB)S8-7?kH zweF8Z^=^IlcRWtn&+>2N91m{oTeFeRpWxpk=N4A3Y~urUU*p$N8QJcA;Qlkzuk(G! z!pxP6wa1uFSM7GbTl$7CeERo3+SPUEexS8p1ntrGfgkMZddpGDJgTu8BpVT)HhQXN zKO5``2z8>Dq?!*`LE_CTF{L|4!|99!SR?N3Li8 zrT@{S@J#>S5&GH7H_h-JUAJ~=ZP)VG(DHX4__EFLcWU|z!m5=0)R6Js{4ogJ)%9f8 z;jVA*`aipVtm`*x_t(a1Cu`qb`)6wg*Zi3^A6WDIx7>TnlefHl%Nq{6+J|Z%(vrUQ zzR{2WM(u-deDQ;}65tycw}uV-wyv(HYTcuE*VetO_TZDX(MIi-My;C2Hv#FaO`A->?XArbqGzHbo@k2dey(!8&E-)qN? zef-#k+O{{oSlh;$^HY1h_B!i-f7j-&NBK7NSoekpM@Ao5$1jGl;a#;y*FCspL-WDm z2iLCKFf#h!=q>9Wtet%4LqoOUJL?;2wdp;5JKy;9+gq(;7fx(^+m6jU-u`-TZ>{T{ zy?6BuuUq%7w{6`)=Q{{vF%jUOU{|Yu($gu}S$-qv+z*L__N0$)HhyrsK2%^R=$s=eO=R{nBY-FENOjc0%1qw{Zj*Bk$4`fcyJ^`jrrgDunHb^Ql!d-%aW zx4G|``~KX9AAaY7Z5ua!K)*L^(3217U6-(f8GSL#?Lo%!RX)QF_dT#tGaSBe=&{?H z8@4>SWw@z-!~Cm#{Ed&@{}6LM&hIxqeEj$qzxc)1^t&?Qk8MA;ef#!p+r!>`-TLY7 zdaByTx-GUC%?)?gw%0a4wyQQY@_21<<5$(<^9R=IdH3*>H9g;;Er0*R58q$g#_u1g zZ{J?8-F3(AJMOYywGZlnfAq(dk$v#a-FI$O@#FfnvG6Thqt|N}Y@gq0D=&Ox{=y=` z;lWMAn>O%om|we@B|pb%+u!(t|NGLm*S7N?zdycxJJU5dzYcBM+|~8y+I8I{L*1hr zQ7ax}$sc%d9e*C!I5_&?+70~SY3;R#@B8qYH6OZv_>o6O9;x|<;rlUC9{Jwd zz3*Lj@4ENg_sHlYkGx~uy7$~mnS0-}Zr$6r0Ih(ppQo?UuHE#eu15N5kKI#yjNd@< zo*Dz->)NlXt)*}NY<#K)s5b)Hr)m%*zK(RSYp@1`8y{F(`^&Xj@7i0p-FExPy${^J z=Jw6>)Kv>wf)vRhAXc=LmnSC>6g}TT)$=Q?eAW9%Z9hyK6b|)W4FI$ z!!7IHef!!itG#$@P4#x$-gCH#rr*g9iIkjOu{|NtwXTGe$NlPcShLzHETB;9M8W`S zUr5?6lK+Iq+zEZEuiiRC-29l}w`w=H*H|?z?yB8=@7wkM5uuLBOUOniyWWE6+0(VN zYpUyL*K=Ux@W{K?tYeC6w{-W9LLNpQTeo53gBwRiML!vQp!UGp@C4ej&yodH{x(+TyTa$SJpX&)^LkW;pAMhz?0T&BuAsaeX<;v(Sq|UgpO7sZn`U_O zjLt4$YcVHD`=zskD=TL_XmXzt=MVs`*yr;&UK+uAAPq^+rK^=xnW7p~R8-2}I;l6s zGS8p_Et(oM)3w6iS$4#!uB-fRcfEwVG|1DHt}}c;gQ~RDwZNx+rY@=UJpV26x#H7y|q4k z<~p+Yaba#YmN-Xp_j@^lIgh!GJ1Ke<0=Rrn`ryjk%Gx#t@a5LJ_C>qy^N!56aC@|U z+>RsmA~oB$neF42(@SU9`hf2CKfSnAv4ytY8opXXVa)fL`vNPMoBS}-89<8K^!NN< zpI!53*+}|#FYgQ5G}!gTQ$%A$GvBVwpdp42yFU`!Y)dw>%}+g9U!R+tsZ&3E?CGfk z6ZOr#eSOb0C;IyK9^G4?KK@J{^LSt1rlv$iGmasKwJJXW+PFzmI>q@dZDJuvJYEO>;Pyxco8 z`%>?fU7Lpo2BXnUC40}zoK~!deOj2Czq)I4tQU-Z9RFKs_i|7Ko4Z#hX!t8}C zLEN4Jt7w5+;4((V6QIpsJXah=Qp(@j?_Qn8*tJK|@2lb@mE1N|e#GE?O;&HCW*$jkXmI*&2nTpUqpsDn2e z>fk`LFtBEQV5EPli9;nBZPSJ_RV~{b9z0I@mk%=1`q0RDvC_mqbF49two@%r$0?IQ zYGkzD9Bty-$$tP|xd^>YcWApqu}apK;21%=rSa{rAm;J%UK-j@&FY?GWyZ%!_*bb~t+u~8Hq@buN?X^3 zL&DNlfyU5{puzSN{3q=1c(XAwoNud`}dE)hsFo@ z4-Azk_mt>Zc~>7FBr0GG-Z0V_9nA+1eS*yQr$d=&HU}F3X<(3bV8sVU8W7L?r#>(M zV@MFL6HX2c3^vA6gg!n(_Y+Mh!00dm6d)2PT4;7`3`Br|j1s&6nHVi#UX!(E_VtmW zDJ`JDV$&QPYw{^VDX_9K3553*@t6e|8!Qq|YpvO&*L3NQSIFtjPz8kBRfxjyjfg^J zF}2dR%!9;WB)ei{v;&{7EP7@5Qji%XzKoutAl(71=N*6~5 z2`kC#vUMvYvMK;oNu;E_653Z<9sr&x-2rW?BV;oaC~BuN+Q}8hm#r+Dc&bWfZelH| z=&M)esW-EF(zRAuzR?>kAH*o4Wd(COQ=cj#Rw~+5MuuKK_+ODRc35@ivmKUNoUXdK z&i^`!9{=t5!gOFY0|adq`B)W?M2W{oM1Bj~W}?dRAi%6@_Jb@bE&#h3E)aV?HHrF9 z!7{IlpsBtu1HdX+I(8#0tzuYN)I_i>Z=DYEV!2lHc)4ZTDKp{YVzN%2{xT`9WDu5DN}d&wga+DQWg)9i)jOG};(Wg#Mvw5h>?tza;*k zr&KzuJ}Ff~9YmEVKa~EDYFZpgvr??Xe5xH*=PXNwbx?suxl15h8AP?cjw=8PvM_XI zh7mrSO@r^(M+G;SuYwCt-v}2F4H}6?C$r)h3T6LbK^c?u;T(o9s9rxSxRm()h$sbG$SuDVs>la3TwU_e$?0#Q$eoaRie|m9#Wrq=T%NRN-P#RuLmlV_*=?eh~Wz!TE(XkxY=n z6vVBr639^^2h}pNzEq!zP8Z-IJORBq!cY`h>Gp=xgngN2FSMD0ypDk+{rwYVl&njL zD5!sI_mV~`NEL}yrHIUT)raB^3DQ6r*%088>?sLg1;$45T^p)o&xao&9gGf6`J^(@ zTvjsal*4YQ86TWLcZDftKcf%_EMzRG>}2)P@y2K}BBXk3R7IoCF#RNW0iq9&HHK0g z#Gp2~-+B~FE^FbY#P-uqVH71?8k)co*N`cztW*pR^_M14g{!RdrA3-(LPFV7rN?Gn zDlRX!xzs2pRUUg%y65XWC|IP}E3^wD%D|9p#v!!z4%5Fr?Y$HOpmU#C>Xn+f5%sNd zhRT!uB~I6z!1XXHpp_YO1zu%N#0phF8W?lsMU^Xhx24f^;PvGa`zs@z7{bAU@wQyD z0|lxMqe^Qs=3Jpd9RT1xSBBIPoFxFie6TcNvxj#O+Y=R^j}4+*?Yr{RZ=jK7|K(u zS_vjFJEyd~LnTbr6#;KZ4-wZ)!sTNXXDjWN)>w5)$X3}LRV@N0RWkonD!H+zB4e8g zD2lWgemd-vO4AkiQLE@a?Eo%#O4-1Tc!=DX{D>Wv$kK6S(ET{Eac^{dTW)iIrI#wY zO;pO%2m2AxU<8~qEeMXXz*f-O7-iXz(!`%$axSQxX(--0JFwE$P*q2qP`M_jP?2l0 zp8?!B<<=1pE9M+|p8BiyBiM3zW~yCDm!tTE1K_9ZG;_*X6)76?1!$a%-aazQO2#un` zDbi(v!Vs%zA3d4^w|_w~MR7xzNR~q$U<JtEgkL@S@I% zVhq-xnWmU!4AYo2W12wiD=Co-RK$wKOoudL4_W0(1uefAIDaRqec9W}Cu;)1N(!ZRP<&Klx#sA%ap`T;*~1xV0>s|Fw1_x zBFqkjF#uL!4tv)=O%GxFNMlGw>Xk;SMauMd1Z*pN-^<&c1?)gDn%AXI#0z((P6Pcn zqE18P?kM0OWFNa*CaCrI53spFV5CV=os`_vhh!yUzZT=6>?ybutFfI**0^e)qev}N zvJR$pMK%fs4S<;ajAD;dlv6&u0m_uOmkhe;o`6z-0!cH-RGiT$tfw~RFvbTgi!zKB zIKBJ{KkupOkbqIw2-d6semf z63x5`7D$6VXotPYb3)cqd3Bg^60(*wM+9D3rUhmtBOKN&&^h5yzyyL{d$rN%OisWcn7XEDS}D_nxg#K4%Ds2q#~pmx!Is3l;l z3>c%UF51)pOa}v38FBDVDOgO%QjCs;brjilrD`3LU5s~7bf01k*>*DU3#%uvYZlwl zj!0z-<_cn@2xc3r7)a@@xjwNg|an;WA7lz9c1x&U6^Ef3fLJRRFC>6}W8nGcZwEE`MLdN<4m0d$VNisMrT&NGZB4s_`076(C*U-frXq! zFBEYY5JPHqTZfcL>tKorK~~9D8h?gJwB(}lx^S?9_|r_Z;6rs$;Ux-_)snMC#aPm1 z>wpE6K_*Q^DhWv?mN;e#%m(Pg=a$75&>GMQ1&H=ucpo;I$*;T35$8}3UZUY zj;Z)guxp98v%$-I7Rwnrj8HRWLAY9|Ito0%{UoYDF`_fe-i?r8;X(2`&F}gWoE<+~MTooM382bmVE|P>pPf7z9Ty)M86RRl z`B{|Y3BpNv+i5E0hnQzzi-Y~bDZI2$)k={LT)NtQ2TtD6<67;m`lMr9)lv8%q2iRG zqbVYGm`sQ6I>6~B7C4^cTVStlz&e$y&hdXf ztUD-cmpF|5l@TWql{(p$f(cPJB+Q67pel7jiRtniw`K|d=*!G-Wy_WHb{oxgsc+?o z^eS87hG*au6EiqAJ~D>>ieM+PU}$WtIW|>%A$wAP|0o{Uv2pUjVndNXVq~5|AW)OD;+$`~{Thfxs- ze;OJb?MIRnZ5SHE$p=gv=(79_4-B(z$d6>79Ve7Y4pLTNXnbsVTwupIFv8-G4H1!( zJRjg7L;oNh14>Gd@Ou;pBfPUnBTY3z9N8$QY(Cq;kA7@~dfaKMbz&`>*g8-IC5rmhc zoWL58H4m<{un9@eUKRpH| zo5RD*hjn3+{evLBG^GAM@ES$U?0dRhAKUR{{xKGsM#^Zdk$+u^vmpwzA}n~cEq=?y`}=YjkB7njk3&g zVvHjw7aeS50GyD`9y{px7{>t}763x3&0-ZAUw(vGx82gT_;=y_c#FVr>PtRhUjc)Y#c}y zF#!3VvbcS~E<*v1n_>}!1^@)eL2>N~mg*nxC$6H?+FJ~JKkLJkleOpZ7)`UDg|){k zzykJbUj<#Iori7mzBpX}0!+Ee`aLgE+;t=P?M> z1R9;zo<-phGC(b?eaA&+?QzQujzGy+&1CHfsT9_t`4x6Q_%lMx8mLiNdw9jrD5so3 z-DKZGA~U)6=@9X*UPzm5wJQUY(3*nHu&UV$bIft*kr%s}OZhf1-hF;aD0c&IFI zAi1SYFI&L?)NHu8@I1y(!kTqlctux1ci;`_rti4IEWDO%7^-gUc6@w@QBEN!3}ea| z7paEDhNmzh$V30Iyl@1d4~>q2$e0>ML80ihz*DF)@R;cMlmcewA2TV4^zC#p09qtZ z^WGHut`!}FA9Z|cXZoq%9Gx1#EzJR03{MC`tbjd5!-Y%mdO(W|<^V842knO~+F{-u zA5L{DN#p}_#kD!8cxJd6k{Y5Cz{sCM$v8s}Fs9_1WK3*oo>2^bSSZ=Ke)cp9sZaDN z{R}B=`aFjX`L16&`{ep!&YriwzWilnxYfT(&K|NsS?;Pgv&(vxy*IPVIvgzb)0^34 zvz%aWW|w_4yKI+b4SqAb?3>wT-^?!iW_H=YCoL26o7rVaq55Wa**CMxzL{P2&Fr#& z^6av2YrpvTC%I)r|L!Yim%Y4n=FH_o`}TRN<=a1L7k_l!{Ypr^oJs2OgDy(p^Y8L+ z7ypjy(iB~m0^J_s`%eD8TNkI0pp>gZYCOO7bzPXE%Tsh|3Yqr%DYt`vBf3CE7pL&- zdA>iyzejY5iY`y#*$Usem80vZl8);F6`p+)A60jUE>qDZDm?oEzLOxot6t+m6(wxt z*=OndQL+)Q*QF}DOocK0N6P%Lp6g%V;W zU;F!m`v*TMqw^08Hc#GGoBRH)cisI}4?p$({`Y*0q#{Ln*BzW{2k-}}e|$M*lriSIhL=9%w$SMS(w*6#k%Pk!tt-uJbafBb!qU;Fj9 zY#Mvt+cq`M{q51;|N8w`Pyh9Q*?4sG=YHfb{-+=Pi+`}|=Wo6JjbFa?+1sD_=}-Ln z-EaKaU-{f`e|YbjS8kv9iL*cbj!hr==npq{f9ppVU;E*^zOD7yuY2D=fA~|s{c8Km zANZBK|6t+|fBC*o?|S*(&;H;yeq-PF|IQ!(_~-uj=kEHhsV%?p+h23}n+`wy{8#_t zj?dly$1h#`?7#oUfwz6bp8xpEpBewox4v(7|2O~Q#eed#Fa53G_|*NA-*D!qC%@-w zj{R@FUpRi-w#UE!H}-wc`gPwtf9G$0@3-Ie1K0k>-yQkGt^fMp{m_5@&;RIO9BFO+ z`hRtH9wTeTy$|{o8+h@W;ON2mkBu|Ku+nIrXnT^W%T+FYNp1 zll6B#^nsqAy8ZXQ<##{z3txKQul>Pa`GxM&PyN`wAKU%ypE@T-fABLu_1Ayp+PD49rJw(r#c%)B@1OnnXa4?Qc)jnAKfdE1{=0wkdoO;t z{=W_E$dh)Mx+j)BpT?|Juss3m^a1Q~&8pKeF#<9=Pv+dH?VH zBl~{q9iO}7Z~f9_ z?{|#7egDeB5B=ZQdhYtk|9IsW`d_}~Z~WTZfAn*oZNBm^ngcVRSo_e&ANY$udF^#eb7VeN<3z5o92|I&Ayy6fzL zzw{kHy?Ni~zwg3^_kC>mGq-(l?H51sFW>(g&H7h=>?hCv(%=4`Q{T7q``>6k_cOoo zTR-<(yNCYx-~T`V__xmf<)7Q|Oy5ht_WnQmr+??J&%X5O-~9YNpZm@~{I1XcNZ*s+ z_VqhnIob1%?)$5M>oXtN@>5$rv2)Fdr~mcQPqsGw?%|D(e)H9H-}-$o|Khg~AN#@H zk@&7aQ|O9^7ZTf%s<}wiEVdY{N}G-^W&GU-SSZ52fP1Y_TB|P&h4rXJ)wby(*kWm zn?ND`q$JjiH8YwSJ#5LA6(3tZM<>UYW6L=?(NXMqd?Sr5%_uV?TROH1z4X#2kCNLK zxU`VVvyiq>o|ns|G_<@*fwa)l+?H2p+6#Tt--Wca-2Z>A{rbN7Mv_lXnzVG1BhP%_ z-fOSD_S$Q&z1G@mf9;R|^Xi@G@ZHtF|JpZy_}%9}=MS81z4iNk|1Yoq#m`?oxcTI{ zU#ML^Xgv7KU*G?izxUrhy8C&b|Ni&=&{s#FdH0``{@&T`H~*E-`Rxzg`O?w{{{2t< zyQ{zbrqBP%kNn)j^FR7E&%frce)`&jcYXi2y?^1aEqv39H}coM;&1-ixBf4MPtE<- z{J;O-K76fu|GR%}ZS2LL|EimR{X^gSj<0>{KfUg&zv*H9=lwV^H;y+o4@W$Kl|&y@>6D>_}&kE%4@#mk4(g`EC1}1 zSMI;=+dt=*|Ir8k-|9#1-1_sc{;kjay0L$EW#%K_@QrVH{jdMhm;ZzNUvuW*eSh%V zpS#fc#rl7F*9TsI_YHsJwa-5Fy836eFaMP<{byhDqyP3tzUiO8=I{-#`>vHg_rjgu zJpbXnKicTVPu~8qTN6L}eC-#uKKRzocm0QN`_0e&g}?nZfBR3Y{?H%!-p(I;;+N|6 z|NOW9{g>4K=G)%;jbHz#|H8tb{l&|(l^=Tlcl_$Lwcnii>EF8bO<(cFU-FvI{IQw0 zfBX9T|NPE>_=6vP!{k4>|7SjL`Ax6Bdiy=!v3Pdx^yIhx%J;qh3x0O*>f1l~#+5g` zY3qHb#>Ri=^{@Tzxj%mEdr#k+`t@J`k?O6-}uvKzxFFX?cmgpOx*aL4}Hnqf4lhu=YIXi|L))Tudn{WUs`+p#v6a> zU%&rG?uQ#c_0MlqKKPTj)<5Tu|MdHR@-Kb!10eR~0_viBJE^*Zd<> zw*JJYES5jLK3)B~PkH+jpZeh^p2PDx1nB=!MbiI2hg|>iIiWeo!2AR8pSp8r^NClT ziazowPkq`K|IVEYzvqe9egCWeEadCPmtVd6MQ?q>7vFx}dw=FN@4Nn?Tlw$2`}$A) zjqm))SH1Sfs(<{gf9cB8jq6VjUi-}I&%EwGzIt)_v#!7N{vZ5_fBYrW<==Sp(?9SV zpYh}`{o$qEpZWd2_v`QPT=}x|ul+agJ@tXoN8i2w#Akik2QK}m*Z*?m-M{?%9)8~s z|B-WN|IKIo{a1h0?w9>`>7Pz~!E64nUtRs>SH1Dyz2*Ej{LUYKW8=$i*FNi~f9fAz z_>%AXC;#eu7UnlEzUAkB=bOH5VfKIh>i;}lxwr8zPk;NujX(Kq-#YctzM}FnM{LHUDI=B4l&-kLxxc~EC@!GHX=*FwQ z^`~C=-hc4i&kjEAQ$PD7zy0)gUTa-F{h=41_fAfWt|M+uX|AXK8b>ID`Uii_U ze8aDP!>#}4Z>(&7%@=>u_D^4%8T-G#tnu*M{?2P}{?zxq_cy<){>@A8J@foWWDVQ- z(icAS1Lfa;dHSt?@5a}?|3`o9eNWx}mT#QNzwpk^>id>|<%>T0?O*%XKKS$XH@_7B z%HR6Zr|$fT%Bdgw^2VR}oR7To>wf69lkb0f{fmnCfBwT?_~CDu{k0c<;LrZ-zxwX? zz5iDJ`g{7PX5ak3e|Ed_?eF=`sks*qKY#Z2ul@b`&w1TGvBpc{OG|m-~3}Ay#AH#pSyDZd%o!V-}E2Ge&61|_`G`$e*8cG$$xbC-qP|9 z|Hc3BhkxtSKlhLQ!ndw{$9w_*T0C6Dw}~|Ma@Qemip8CO&A1TZ`qmDvTE$g|XK}f1yRk(O&2HT9Obnu}+Wpww zbjq7g^@do1SBlmE8rQWVJ1nm|COF>W%?lOdCZXU0#huzcJRIsx@@E^X?7d9#-TGP;c^Dtq+!bD^yW-lJAXtG2^c!Mh+G%RB8N{tIdyuB zUEoC={e`Ki&GukxuP%2c#{D9$mEGx2#r;|N#&U1nZsX9l)_v zo-ZOEV3wDo%VnkQ`re@1>ldP{D{IknT9Z)vF)phh&_==mlacShBR+l0dn@zN}gG&i;7X$}=mv;h#xmQ-M zEbEmd^_U#8TkH3E*(P|fw<(loY4o81>UZQW6Each$#Vkt*44{V?pCMG%VlfZ(baBq z4-9mfL)hkR@_FJnqLX_&P0Tp_O>|B#9$((y?e+$J%#bH@t-X%iOdsWX-7fCJ#MKX= z<$>}?6itv<`-5J)F_-{Syq9(A^d`s!e3X|kffQUJ+ED~SIF<{TQcFg{gSNqm=+r3# zqEy>y+6JYCsp#U>%cTex!L&IhX42Mh5ADHDcdu_6DoHb}pzw1Rck*o%9Y*mskPpx> zh$5FM zY#+F{#qBm`ecZXlzXn${)gtzEhx`kk*q9Ea(DpgAkc{@b7gFfsh=d*r* z%~QSZgFXnSBh}ZzrEF61kauM{=%oZ#;L>43N7ulUhdJJ(3g&Rk!r{WC7J2;?Z-ZB{ zDn0IqUow!0VraQO12s~7dM)o2#%zO%dCu5}tQ=O~H+Ehim?)|A-5p}h?*$3Q@; zVFC;wo5B5YXA=UfkFl4wFLp3YGI4Ne^@7ZHh!;qWQXpcYTz@xiv|G5Ep7&+RElbi1^}XU+<$~ST1dnKS2#2U zo?yxQ-F7qD+1nnpaVsvR2wuc3{D)CdUTt8*js?^TpY4OvllN=A=wh!|JGkEK4!T@# zz$@~ggogCVIVrU&b1N*SPtxVC7=8*%+GpvqH!%S_n_)?Pk}h{`4{LibET>P>w zEabQH-v-vEL(|??t-oeExCVW1QLej(2)TK%Q}2RCi;K~Om1D978O2H8JM5({%l4%n z8qm&M0ve>&Ijn=A67QU9>Jo1?jn3|lxemIGo6b#f%vTaRYIOv;V5mG_y0#0^pm$)0 zQpt-77U|)ax%;*4y%?0^EBrN$l!RpZ?i?i1V6O-5q_+p$4W)@eaG8cU26dzZ$O zRg%LUlo}$TX^I`>NPwMf7gJ1@qL?oTge+aay@}_RAb@T;1=>rze?m6tv8?40`LVno zH$XA~S>E3bcqGPi;ST|CN`o!GA2{1sFhhXuz~t9Wec#95H?75gHmY5u*w` z95O3ihRVxietAQzxG423Mn{dZV&#X~twOrvqD*u1g$s{)Y(c9YZ6pNBX0nrN-nt?H z0%4+AU0kfZbdb3^Q8On|#-znQxZJ7W`UDW<9h4G_$*EJWOazfdMk5(JxJ?mzr{JAg z!L*2sjG^@CVx?^;(%9BW>5iyOTnq!C0?ih?uo#t-uhSx2m^6;@?z8%r&5e(+4WP7gP$>cD0G$fK z_;C@LnIK0m0#yO$Atb!nY2lwtsMJ#m(ZoJh%7@soV5i@s&ai-84VKt~4(5WuJ2Vti zh_oSXRyRL;QP~ z%L6%l!T#W~*o|naXtg)@q&J1=L9Y!H2sUM~g}BEH4Oc+WB@(;S(Vo*W=bL8r?}P%i3b4&MXV4&WEoFC%POe? zmg3pfWy&s?jt4b8j|uA`0^NFke8P=&~z-Sd^>~(9{~8j6gbYEwe0`uePgwNn&9;#KE@gBvTF2F{eD` zw{E~;^+CrrAaikQiktOYgZ4K6h497)-)M>fZE#0wBbEs%W|ZL#$!@K2ueKS(K2ogJ zv0%a07fo%&+YqV!sdoQ*ue}443oPD7=7x`gi55K0wL80e14|l8E@KxkYm&UyUfb1x z6+~FcLIy=zOxLRJD;KzJS$YrPcX`VP6AfR027tjTR`RfK zU9AnaO0Df~x0jQz;HF%M9Lfs(Smt(9wxjP33)YDIa`{!sn_yKoxYl)#5+rs{lbp&b zBr`;&S&l_lr{TbNf)pR-^)!7#zV>xJ0YoaVwm?Oh3?=j17u9C$K3TQD)z*-_K|R1Q zwN*Ij^0{Wr#b3)XOW zhH)OP_(|2Jogi9%Y55=ag z|F*Urf-c0WY!8fl5RGq#h8|ea>s_e(B66v%IZvRQu>>;6pwxJyMzsyf3*1nHXgr#X zy7+Gb8zZA6sTYv-Gv>Ya3!PCed!^?8Ezknzq>UcC*45tu`Rt?Ien>{c^!w3;3y^09 zB{3c9%6i4fX1}`H^_2`#!)nLHK7JOesP>q7v5O}8U!N7st8(2u8@S^{YtWR7lv$>_dY zUv~_=vEiu*s&M;$KoVY|1Yud}Sgq$fA_T4PwYLXQ$(&DvBsFd)ZJfSC0>Gx&3>Y2K?u0an+|*CQ2NwnKyB+A&dyT=z+DJ9o2@HvE9(18hfM`~&)@CF%u>VV_1_ zwjuJwNovS8BU@xYRm(!p$pt&XqUC*TtT=69`=uk>#RnmjVV98~kiiHF>MUe|GvZq1 zmKE0`Qe?_Z^g%Ecy;d4-Y-GWKPG%*SopXMq1L~?=H_c(g2{TS|NIV>CPst<$6mY9s zd9lyMK_q#w00eCt@hglXV$Q5isqQ{Sp5*(0*R#8PWKWGygCL~;-^hCzJ*YN=8bWFe z5A?BtS2Y`hCE;V)tw~*vJmilEGuBo|yN*003F4IOt87qa&Cu3#sc~F{0dTbyaOObH zGF(PId|)~R6u`MpmLUV%o+aj*8`x}={IoL60pemoBPb!E!4=!yp2U z0wv=?skXbjeUKY!lEo=NhG#6_=xT;xg45D1XP922SGl~8a3KJGg3YNu&~1y+PZiI+ z*d^?D)w^tA`>#=RQ#RjNeKQ-(NOLBy03krmEIS+x>%Ss0Qul#Z#T z&5vMhNH9iMhA9nb68`v#iAGrwbTU(Osd*jBGR;U?nbpASM zJ3?NI0OR|QO@JA3X{KX#$JS()`K95QN&Y_tri4TsB``B5RTg_jl(s{%(({H9n8`_z z4e0SjE#@vG&hEo5pmLUC-vsTIN+mZR3K4#xM1NR5S}}D3Ib9nJOApGUS4vJNsDj{O z!sdq?X8mSGBsZm8S|K905v~$UFdO?OTMeBSR7b|`+!z<_tP{c`=$cOH=j>EAZc;l@ zIK~FpPP>ChR5otP;MGOHG-E{gse8TM7JJZ1;3nIk7$K%mvddWDqvzmQV;DMvzkzZZ z!zkM35cLvGA?Z%E%xKrX*?%3?SUFg$oznlD@dvAE7svW?Wl%_&!2m1D%5Mw}SWZLC zkTu+GP-+7N9UwebLpMVTWp$nJRsRX$MHxFgWNh=Dc8Fi3Lbn*LZ}_#?xp>-mQASWo zbY6wDb`lRJC(}CsqSkf`xFXhGP!9Z|y zBF0#eOYJ;@VNf@`cqY2O1_BRTegN;8?gM3Ngs3_*3czZhw87m1PFs1zZ=9G7R4Ndj zC=yl9UWl2bBTZm=WTX_Bu<0o!V+@wCP2?uH--~;2(@z-j=f*I{@%Kz|x7+UICJKmk zf$1}EeZsO|#8gzRmWYUHM@JcEmcxmBPMZj)i|m$lW?^jAq>*MvF%o(b0BJK9T@BCf zB4@ZsN|dL)+n5@YMKKVUwqpbf@9jp-T4z(X2QK=Tk=4Ox7!R6|J;3CwSX;fk>Z+q1 z+~wn>!umS4G&s{i+uSHQEwYe~@jyZW%n;almD0j*5Ryh0!p@lXYqt?aD{eSd&4<$q zcM_DQ^S+Y+k7Ty_#&axNh3tv3Qv<9$MTF^j_#(|v*H+h-om4PhjkI~l3JpKWN@6W)c6m}Hgf3^s zYJs`ZOK{3a(N=KGWMhNFenm{M*K0l44PYpS3Nti#AW8#f(~u1fM9A{QkaAU0cTF?i z2DktRSP^#jdT|k<$%%yw-}I3&vO6_p;07xjGK}OG#-D)qOdWnAVZoD{e8@RTAQsVbA$ZJuSz0Z>v!2Pl>of6rlV&f^3XuHYFD9m&hsxYfx>1 z2!VVA8%E=v^U#`Qn%jSkDE88-km6S194d0yvU;91;md|q})V}0Z~?k7-&7b4hpZAH+0pi zO)#c%ESGMEvVag&&)+_H3K;aop0m$0qn5)G@0&T@oZ9uu(W8USMub}~kX}7d^&p&j zI3a9Vi!8+x?}DYQGehlP>vq@~%r#gec#JT+SVkEtfJx*iQ}u}|L=&xU7iJjOvE1!K zbQ}NCHw){O?Gvl#3X5}yQW}Yj+z1v* zqH#|U#hA;2EOiro;VE-Gh;^Zx;?xL6Uw+76vzCmFDY>WvC7}DRrQc|~8Z&*uRnSbP zU==h^a@>H`5kB7P;NUB5=UfIhPfvwJA;%bLY;+nkC0N>YiXD@=5pOdjminrlBEY}h zC(@lwQ4aGw;zvbN3gsp+ta4@sQpszYghexN5lcN`^TTJxW{nomkX1#4s6Sh7%~#9Z zrd)u6o(TM3Lt{?k1&8?hNn6-Ti?I}zY@V|rT+xtwZl+yLo=EJzodd2r#4C)MvvpgD zxK5y!9l$vuD{o-7FhlBb*x5sD8&oWBUA8PpDh1ur6b!k^Nm|sE!f6bMY@0%pbWgt| zIEbZ{&iyX(V{mb@eev`W<2fG}BwY$+wIjDTj}a0-fMx^$ire5aaVG@7@5Kj>V-15k z;wqSgL|Ic=;uO)LO@*yvk#BWWh^=9HMz7b~5F71+X(`})TW{o!fCW6z+{u6?y5hqR z!tHKCV3=hjCv0)uS_VpnE6g#I#JWCzl6Bn`I&xj7wshMoPq!<{5h%%xY6;2{x zFlrgXrCL6LaPfs+G2w#zJy8BnDqpm8AY$}EAZ0%Jw4%orGojU$vPG8B|0!-tI@WH! ze&QsK3<;zfS{4Su3W|_us(>~5aNNBf|-T-bsGyTAjcxnd9yrpvs zai6iANUuqJ6elb{fKFaHNw=)Wls$? zZus~p+!|QChw!|B&?!6bq<8qE6-S%CG+FdR*BI*|v@iL94@s#b4csi`T2lpTax!oe z@V)&=w$gTw$1Y5>{0AjY&7=Fd}c#;7*AkNU9FjI1fjuZGH19tg%E_=A3z^_40 z7=Bz9JYgCJnFK99_Ntd&;_OOjmggda+N?BXFFyH~zhd!|ZTTw}>A^Jk?2r;c(MtVy17pCb53SChKzv{?`f1l~N@( zzX20`@Gabk;xKH zwLTURe1~gLOj4cDMTmU7v|H)lSc2T{IP+y+))ag5xdpKbejZQ2`;>yE3HxH6O zZl&)}h30&@yym5V43h{k56#9@Mv`}N1Q-CYx-KGFYja{b z^q`v~F4vdE5A+L_@Z}^7s4q_l3CGzQOn@3nkF$dqqipl&J zBys;#1c4noHn+RtlGVOI$$2WF-%?4qBaj3nh|GBfrI!l~**l0V zKUuvZ*mTEO)^{%XE7etuMj#o}UExr3GCRhHD0VYE$=z&){YCt*6#=LvmC;B3>uocl zX=;y?YNVqu54vJOyo+tLlN2gD@NhW23L7V`wk&Gful@DA8Rh{$J|Vt9)K=3I6hUth zrkx%uTlQq*n@72on>7IMP?3IPf=Fv&3LN=I0F!s=pPJf`Eag-cO zck-;Z2q4qms@_8(vexZs@}a|~$`i!0;{+~5rQ2)c3dP#C5gY-8jJ>G7eLM*-8W9Cx zQevlB*YqGnC+$L&6u4>^R%Q(6QDzi<7En{wkE)KQ+8(k8hQp>Ap)ccdNvl1jbf@_e z5(&uR*CWon`9f<=x`DeRv2dO0ViR@sp(YlB^tC5YXV+yC2V3z zKqZo9;j@<#BeAa}9U>Uh0t)h%6kapXAPIQF0@Ir1b%D3Jbmx(83EE$D5vfsHIKJD| z91j*j;^ctKS>HAMB%0An-Hx7#+(t^HespW?5_1DEVT4bHx!1z6;OJeFSDJ97qIxmA zEq0Vgf9z_GZ#dW>5J@14pScX7 z5FLOJywSHaz`d0!;?#3UB}WE9tw8Bn?R6YKG`Wc+vSI%NorfBa8DHUp(g?+esA2t( zqhZJ?3hugsoJ6D=lW90)1@~mRtL%==xWP_=%|_gxJajEJPDc0laP?}X;`6HuCX>juzX%GWzFHN?D<7uPcHY`&Z2=2O zp9*41CC`y;!YeiYo5df=18^CA3dOA+E>urrWmeqe_{*>$QyPYT(o$O%a~j#I`I4qn zD?(*Uj{d~jPz6_dfu*B~5=taUA{@hN0ZU&E@W(A?hIMG&1B7?!&X*)GbJSWsQ{tVx z1A-Wzy{zQNc^`bCwZw9d9R*Vm1na$9$HfRjr(rEz$L07wbMDn8iP5t+SFe>+7_?gl z$YX|Nh?>ZZGMw^at;;ei{hNCE9ah@RG&RY4?abf}iD!bs^h(g#t!21$h)WpDU^U@} z$!xT^MuYzj2L&nvA5i&kg?Z#Bgm)F=kX$OrA%9Hd-^)a9YlI7ko z6F-x)m8zEjCd|2K@-HOGYKSHCZq-~DAPZ4;$fa(HC2H5x+zKIfNyXVJSDpajYs^nr ziPnIv-Q=^gxX}{FsgdAxsBBfr8Y$uA3ady;SY)?B=MFSqOuGTU2KIhktWMzh5LS;# zrIATRZp`5Hm_rw`8nP^Q|0`>2q+^B$b4 zlFCPS>DVE|n8kIE8G3Ar5SuyH8??ZL7Uu+#wa!7*-^0!33Qlz^UU~1?#iSjHE_OoX zOnG##MJ)&T5eagFqd3GVpPS==AV*l=uFY-SQQ&SoI%Mc|LWMv?AAcWdFfe86NMt0o z;0MS-hb%rw9wfWx%e4+R2RpTnq^~h>H+jV>l*g^Ty0~Vh%hT1F zdD#rxyHzC_EAA(H0lGEq$GRxtdz_n?EKg6*&7Lim=Zn=dYvszq%-q6Exdg@hUC_ZO z=qhn#RyWQ}tg}17eKZjB?IxiR8iXITgj@&|?xAY2JcIwQRc98;W&FQ1D-gxLJgP>e zQk<@=Ri_tb=kb4o1Ez9 zx1cer`6=K@$7Wn0in<^YPzP-t;RDsUJ zXSo*&(bYn98B0EPONh(G-ytUo0a(axZrXf(ew893!Xtp2d@9Q}<(RduL8lq+C+pi! z6EJ|QZI%4b6<*CexfgUwynx*&dhYy1FZeyEg~NYQUH-v zx0sQs9}g!wVO?tA9#ffJBx6ac01xEHadc*R`_VRao5?(29nE{TgIkD1n`1Ju-59|w z(CX-WGWz2vScVSFF`ik(yobm93}})P2`pqih@hkA<&g89l6h-kqZJu+CO%vbOlhvVCe{PGR!iYvo^LYDzXAU90XulA|F%=hxz=HK_Dc= zXoRJBf=&~1xd9l!(itXn7@%6bJcN-t@ZNO%K0uKG8t-~!+GX)k2oqULABAWw*1c$Q zs+btj1X8Y<+9af79Oz1(3EsGkNm^AY8 zh4x8(4I3%C@V(gZ^`da~0O0t-{MK9i4%u0Jf#PiCER#n!2mVfRjsz^Gbt zzSc~3Eszw~nS0dEl#^;(u;_(LfRL@rc@WTizz4aZT$P4)>av6*FrmX$=Fed4Is7&s zIKB@OZth^jF=a1xcagCcyW9ryUUhfO4w-x9X-(&edtSEN^g`+yUjsnbY6q_}+WjI6~BjUf0*_2sL zh(RL}MS)#7My{YFhj_*?IV6BVJINymNw!nGjC3Urg{7+-G*I9iHbiN5HELL?O4G+y z;=-A(H6yjkqp%ZyX1dPok#%%b(skyJtP>0#Dh8`Vf-GkY42W~A5TkI$SgR8y3{%;G zYd>xx1cITtb{Ku;d01h*@U%l?7$>)U6V`CatDIaoY&kR-Mi|uhHv6Txu~X|edhOkT z7RIFHFYOhQwk3PHp1OAf)$ht1;Ki1iuKd z>-Iw#V{pjClJAcih*1hEv^Z1}kG&>$ta&ZmxEL5#ozvzH#guF}9VrKb zgg784*{~<;_*fVm0t}oh(5@{l1$+F)dhWcF_?ZY!G^ldJ#Nr5)L#~W$cvmgNH`%cc*}#9n)fBJi)Eb4M8&?Xl&Z6{{=GROJi*7V2-b!0 zQ>g|`I)Gsbd`F>)Cuxje&kTOg#M?MX#hyI`Vstewz^QkJ`eeWT5`N6_YqK_};f@~N zq58jaW@ra`avPVq2O%}~QLclF8|+Z48>Wqx{IOml(x~E5!}5C~vwRZA5)tyyIHyn- zQI{Raz*JEpjO@x5D$8b!6tJVfB4pDEcT2{R#GqX7>%5YyRX|_NF;Vui zNhD=c6lKTRE)8SalU#P?1gTg{n`e`}t>Ph=A^l-r2DWqdym0}nAvX3Fz(zBVZh-v}^7xV0sF#QIZO)IPN&O2A5G6H`F82B9e& z2igL$OBjnH#uOrW$ljA$Sgf(f@LNC*^CZ{ewMB?9xh&DaVGl`=R)OTD;~Z&k3eii2 z2p0|BOPUbZVr0yx5fC97yw56v;~9UGfDr-lzz4`MV}xRwZr@XZWm+3UIUX zHQhjZrJ*!}Fe(N;WE-Sp(M`fcuNmTj`191*16v?l9L5$zlIP%!ef-A`Ih@!M-WSgx z{vVc_%_@b%`RGhJQG%w)l&lsxGQ4RiGcJ9{WN6RJ~v1HbB;ZfSz~I>hNnnajs2Ug0$ZpliH?&rm9xN> z7*~)sj-~AfFF8mrQR+tTj=ZIu1;|Y?Eh1^&;mZ^)orZ@M=%rMTSe&OqTPe)=+(^^A zWYaTQ?Xb|Owy2i^yX5Gw0zY@7B0vtm3)ou=j)tFVm!z+te-NA%9F)mwnB9!Iz8%xm zDs}-66C*JK7o!|jqVq7@Odr+N>h#O$YY6{t2KW>S+%VH6d3&8UIbG>84FNO* z@apel^PQMN1mdo*U0IIc7s6uE(%fGW{PAz=cHXlW_qx48w2IwyjaPp48w|#&Rk~~K6X;cpvex`t?j}DCZyLTD6p_)`hQQ-VIHo3Ag7StdJ)sy#7B9qXAf~#( zU_wT7GF`l4!Q)$P>WVl-M$#az*#rpJu_)p=5hJX&i5*TA^cpKA2F z{eICPU6f`BVrAk!f}){6!dD2-F+vH0o>7&Q0C6}xcBth5FPG`q3YFNd2Ma2Y}!%P(jt05c~WyFjyH-z-c`!m{qY|=&3mA(AgO2D6$4umHzAjO4~_FlyBG%n&h`=ck^3ix zKW&p!m*Jegw%g#f(&mg0m^8n{7R7Ik{k`jm8~O=R;I3W2^fWRSbvtlV4-nV46)t$$x>cTbA=)S8-!h?r)yF4|*-Tm^- zxddg|5&H=c>4Qb@9k2rj23CQfOp42Bde~pZ+;%SA7^qbqjzR!{tBfwcqh}HBh?${w zzuRs`cU)>bat4po)aq_SEBm7Mz>N&0qU;`uRwWDH+c4L7Uk3?O9z&UHV78w={nYDwh zk}*DHjt*+b3Ef*bM>JhEJxo$d<|YtvQ;W0ih-fck9FS@wrpTQnEH~}l;?j$;Y9j_P zN+_;Foplv~p0uaO(76keXqfVb(HD|EBAtYJthm9pji8>hzq8P0C0$W8$(c$IvqehO zHsVZiv2Iva4?iN4_x(QN!4@Qabcf2w9TzC6qJj~EI01+tZfpt6DtX5-!5yv+LzH1t zXyQ1nB|8{|v>6)`cT_2q$o32l4P_5Ao0jJ7(X!xp+IF|QTcjeCX8VvdZtRd#VY}9d z{pyC5!fR1SwM}qbG$k&UPPq!i1uSXyER;Q9hKXLqo9qN1e~LGM4Nf_oz9^Sd=ZoLRpVu z!^53KGt&&lu?yjhUNh2coCI!!eu}YlyQO-tv9yDn27J*`O_9K2O<=5swej+}v19obY1S=Xh}JirGy_fkf-B4vQ~^%!f>Ai^ z6x046VGK}%nPbfiivU|P%Z@8{{C3|e3fSHUvhd~Yu{APFG}A%vwpo=iq0^l+Z}c?3 z`EeuO?e+%!r)eYUAZ3U#dn!YqFZ>F*#g(+r)wFW&v(J=(qx9f)gm>5TIj0N zX>30=#k}m(=u8$ZNPbyZ>>#Nn8Hy8`mlLJ^d}m=q!CjIQbl90cE#rZ2!pykXa1XGn7EK1bvfp zBCI85OJROVxM8P@VyAz@;tm&p8Nz$Gdu&kWj#qUJb)YiCuAT8XarK79!whxEmgxxB zA%jH{oyTC7jKL4MRM%7$W{~;Im#$tcR_Cy%;8DA$m=>Q)0n&spI|tw1ltUfRHQ)-V z^>CsDDLWAKjjRsATUK6HzYJ$sR3i|cWJ59^3=eG?h^VI92AOO&H=%XVFt*oei`Sk{HBsr{r*hT;$E_#%mFfiD5dqy_omTlwE+KBMwd^C@?>iq#S zXsQX$**bK|rTx~L=-~HRS=L-K#={^r!6s>er65(hqo+2z-c2d5=~E}LAZm4pkcl!K zLW&2h{~E?uNA$>0)Ksb^8#SeMgP**wc)tZysUp@d7d;<}?9?IGz2`8gwhXXWpl{5>Oo&&uC< z`FoLnt5^7U7JsJ=SVT1&Q@enwqVSdFD_6iSMD`{4WuI?1k)Qy3Z2?0@(r$=z;Sv%m zNr%<}hJAx!bi)(@U++8>BTKfF+y#gs+v)>#Q79DF4}b#FX>I`68bK|0u)M&Zkph&e zllnPvT27D?2IkHhz&!6pP3KN(5|r4K1f)Oc%XiFWuC9&}<{=O}>3jmKoYZ05!jgtd zKZrx|ZtcD~-zIwo4~4F46>ax$8l*2SXU~g8aT1HaT1}h;7EEUT41$Lf_7&M4q*N~U z-aTiky>RApx$!}UYc8|gIP#Xk+HSTO(Ky&bU|>wS+t4&&;qGo|66>&NLPDpA68C_k z3XBg{HB$z==xr;5v`OqUDgr!n^Ul@IGoxy}P`=|IUpmFIkP)bLy-G z&r`wB9Eu06f={Y%lTo`SWwYzpKTYp7k~>A**qwtPmetb9|PwaZ^{ZX zw+*GCX1TW_cU0Vg^%wHG*k>XwTG%lNTLXmBGHY8Ir<&kZ<0iJ(h9jxV{KHpQ)}rUM zCZUAKQjcnJ3c(`vDV$iv{GNJl<7bkpYIUwY z7n|5u$2;vtcN-cFrV#SSOJbjul`G4#{6Kf%a551V^%iJ0Hi4;xkeI!BquY#2PwIkp z>+0nwcdG+csn^Ge-K*Uu+$7QESR6)BoFo_Ci2m*EH1GDO@Hf#f9aJRa;oh@!xBq0o z-o0)Y%0mlb*WI4W$T~qUHW{%oz@njY&SqXy@rnR!1qTD9B4|7}!TwxJ>R!>#f(goS zeNn3IG{Xr6NqX_>WoEBrhCg`VNGv4mg7$c@)7|TvhJ5lN1(UP58?mAhUI7{gQN_cG zxWH16cCV5A;;Iy9zGSSEoJ>jsaNrJdfjoOt{Fctfhl4$ z86{zFF}d?B`j&1X7^x^oxTi{0IF@A4FtbfJZB*gVmJirGrGZ%{6JI~dad2q_dH_Qw z&Zjxxd=3H4<9*B74M6J>As^ZnI9RgmGc+9-U4dnZ3!2a7AX=TO2D|n&*=lQ5uJJ$x z{o;#jN#@|dO9Cy`foN{1Y6&{R>Vpmg0N{&05TPQ07|-4WxuMB`Sv4^0FNmK%1AeZC$Qz-+uIGx=##LFZStaP5qn8qpf!X) zR=wM|wGjn*`!*L@QN0b`4v3u*&Jhv#i)euB^$`#k7m*ip6H>uUx)Am;q)a0MJh+&I zBsd`irN!;r20}=(VcU<05EyDpDGfa%* zn&3yhQf<`*tODvu);V+C!kZ*SWJ<%?O;w)WyxZOCl)Al53h~V;6% z&7>uU-mVtN;TuxfUXKcAK+aAKDw#O1E#zgWI>g`jf#tLy*V;`j9Fo z$6uC}EdASPQc}n_64=XiT*E7^?A#~L{8(j7uR(&ogXKul{DmS^i^9d171|skK_jje z#sNYyeAWyUObMEQ%>F3YIfL7D>&zK3t;+$^$wICL68dti89=(d=b7F&7|`R&riM6~ z(BDvuHwZz3a|sFzgr=*Wr84m`@F9^c6l_)048#qVf#=iW+iQ2ip)oBb)8mWo*4T<0 z_h5jC;f{gvegsX#*d+OP+JlKc6U@h*QnboC4{$F9-9w`HLYp46u__*vWT`McQ%QZ@ zu7zeUki|!}$1&)ycCx&kK)sAKT`nxA*=@+RSZV(NHfX|T$F^(%lw|Ra z&9%?D2^_+}Z7RyOB889XE3v{19XqC&k|Z44qk4P=V^ObRfSo2Y3cMl;9m;q_j$ulo zItr9+)FMd)mv7v-eQovH?bWBAUB0vibS92#z#JxI{#&uec15J%jvA-k4<}Dn@n$rP z;~EI2_^6(^sRzKS#|3hngKGVHikuoq^}FmEj1ww+Yu5?v^g%-NhVwW}AZHmwQk0xD zFbt19_t3RrpBiy>95A)Wt_oxDtjAp_28e{TW93&2!aZ6*+LqBv zqC^k32sHGG--SeUhf^HT9>x7u0&Q=03dm2+$0al3h3GHSvddlt2nZk8lMbD^M?s z>WG{~)ElBbHR+#(7CY<*NGR(o?#QUc!bh=thSoVe|sp|u@`?%CpE=)~kMkBBe z7HPN_ng#$aBt(#g#5*9*T0KS@@-}+?fai#iYE}|e_Tn7`yQa}XmqftczJ13BFnaz_1JSHF#4mdUn#bUF3$_kWpoWG~TV|G=Y`xCBcgR4)b2n^z z!-qi#L&U>fdPzsRrZXWVh)l-KqD7i_*+N&S9)GcyW#h2YbOoY`A+-qQS$-8e*<)+d!jyJp_g$GVVxyCUFC{9UUJdRSy zo~0Z8D;`_%igt< zTlCe_C~WD0pf*4wZ4oU%LMgw6G|B2y@XT!f%%oknjc@od3JO1f@Rvw@YkC>~Qq-;0}Qa8ut2aI8p2gp6sIqgaio5)o<~F=&w9cXpeo+tS~emEgAq| zNQbu7AQ>(_W;dk7bWR+*Q4hQ}N#a1NnhlrTlczWJA!`KG4*4qK&?dfyg)*q_r<<8G zL-s86a|Hqd;Xo_Pe$=?mU<-kK+00~1Iff7-y#j_(;SR?XC%O=0BHIl|ML_c^fVurF z-iPB!LBNsYR45~dRQ2N(S}-m^4&mm$O@BC$@cKxKrmxcj0_oI`w_Awfg$*yRA$UqD z#_c##0O~=)5Vx)>S`_W4S!4S&K@1JF$T>Qxb}9erxJ8RsWW(c=l$t^sNJp}&V-j}M zU_l}=r@FQp+{${=apmM{BgYc-X4;q33Y0eDXn`=ifGokPuynzu7gnuzn+M#}J6QIM zF$sBgAq<6#GyezMaS09+gorXp^aM2h7$y!Du^(-UL3c2kU)pMKH*;D$HOZaG4*V~= z_bl%9wnOVOAzK7`%xpK|Lqrx*tvjgRK`|OADMRxDyJ8x^HjXEso)>>!Da~b>J=N{U z5j|DVXoFmk1kpq!IBtg$Btk>=5v7u@x+4mL4`r2K=`Xw8>Ji1;{p(h`ts)7J9Zvq6 zz;e))Jks$^33NEJ;ITzSHAuJShA?0ZnNw+=P^!7*C6mAonCAxvE73>t!m{B7w`|J; z%2*>ZEm7pT_Yt6F!6iuy2rO}o78~teV-M1!wI^5Y&{UXQtxhTg*t`+&6lw;$WUDDm zk1B500o4NxuN#3C=q~!iJ6)a43Z@FDMG!TTPz9VviO<$_E9|Js-%3=j%@=ub9p@mX zo^!u=!wI(lGGe-+9$|XaW-$%{DXk-)s12=kd`Qq{3HB{WQdI>P8bwnDY+o|dG@?^j zN4XT3JO#WVA!fh=+~v@#?x={oBRe>(tGa|HxRK}q%<7HkG#1g*(VZcc=?>Dy>X1FU zV!{L-UF4aRM+omg%)z60&`55}4a{3S_o>~+u4JnVBf(UI8j>#jxIiy3mm-)3y}*_r z1A#1rCC&mphkXPU0TfXdxOLFQ5SOA`eJXKx6m_$J-JvrzY&HutqG3xVT>pu`7>qhL z2{?Y!!7>9e*Q1?LVn;%Q9Rwss68ynfcer72PwI|g5B(gjxCMLr) zxXnG}9>JO_N1(t*X5dpusI^hTf3L)_m?9z=8<8n;7y2Adq{I zIt(^}HjucfV|s3;8hH3GGXOEh)D*2P%dbCN!rBLnS1ReB%3`Ji$4cHmkMj@KA5B^q z9`f&Haggnj;V3Lzyp<;xKc4eGN_y`TOs+Xxj`rEBkLz)r_Q__lT=f}bbp)aQk_q9l z-0~zV{bm_0*=<*PFE`|n&%{E9SUmBW?}23~VupKTJ)KxzGTFuNzoic$i$Vw;QyV1= z$D|$gNn~Xo8iGEsfGzSwJn2fleR=ujr5h{P*PtU|M`)*wGq7^u-{G-fU9VLlia(wm z$$+-zQ88*9s#i6K@zc+mRM zDPy9>3I;ubx)m_gw&cEUG2;3Su8F_2aRixz1n^cNO);yR?NBa6tT4#jdU!2yNf543 zRvFg5eFDM*ZksX4j1nN0{DheLzKp^)UBc2y0~&(2FF&XujDX(2Bb#YbOkG zNV1<(Xs}?NAh01>IX#;!GRft_J~i?`8^qB;3<>V?-6!NvL_h;*wPO6XHMxy~>YPji z?LDeP;GaayKI1Jjjd!BE%u77sO{G61-LuH_OFGw zZA3%#&*|34Skf&H^t&Y5BgQ%3)g+mC++fU8tz;>}fT0X10g;Y|;|q>}l%Vd>u)?Cr zJ#jwylRfp@!60}1P)}HLLJh&m%{?|+*)rP2&6qJxM2z6HhqKWM^H?&Ll8nP<1I?d5 z;b2H$$Dy~L1{d@$2m6lpb8`_s+M%79MiESQ(YsIa4SemmSa-}=iS-Zx)H_Qo7y%Mk zvnK$R*iEX7yI*TDLWQ|tdo=$iiom>V7S9m?Yi`Orw}S)%iDwj!O_Lo@Ha1`)6MT|| zn)Qf!(LtQ~aht*843;cR%>zq@CtO5y!kmyl(zJ~|tC@N;OV@(DbW@ANP|7O}1UsmtDaVQfeXZ6_7 zv<@{mi+!nvy0S4Z;JtS6cM{Yjgq5S~0o+i-?Wy!hClzDXP#0 z%Iw%!f;-p+YQe{>vusz{?P<}Nk5pk9QF3Gtq*1WK8bq1FWlNv-Z04gv>)RJ8AO8{}MKneK@!R`6ya z3n}#Scrl(Pm>bFr1CmNyrEr!J^6Uv1|7?QskzmH1!Z*F(qj3An--dBRI*~?N!@Z;t zR#6NKlAu`<)E)qk_PBAkz5s6)Q26~)=zsUp0HRcO_Ozk5`?!0zDJwIir#Z)Elyamo z;4P{!Ux?M+5g7H2A7dQ(T{J#<96BU4B7_-?wp@uj|HhTGT_$2vDfz z!<$4HP_X1!G&{}D2_@G22?lOHF>tM39Q#}N%+Tq>aPahr8=;4;^RL+OnKpkn4xqW6 zw-((%Tn!yX&zj!||#0s2f>R(tem^ z4VZgD5Mo7A=^W#OK_T{b%n;V(K3LvIhzdQMZap6LKAc=bm2GDNJI5+INa_2O{`|I%i&-~***>j*FO7rj;U?qWeugBOpMtatr8%-6tm>GNukMV z?4&>*z+U&I*xiiksHBgRRMKZ3Un-e)U(OnHLMln(xZ|iao#G`UHE=G(N?u1P|0+o> z|2%_Y7^sRQO_i90)jZQ+(1fW_jS^Lphy~e%!mHnicO{*Llb5fUylMA6t}lx}(VHqW zqcCF!H@MML-7b{04(v6!y?_@&^5OcrZ)RfyY81AL9VnnyX=b@qZ+oDvr=ua8{sLNe zogE_a{T_?OhU{xnm-j_11yPP(rR>U{Zk?r&Ff-k5M6)U?|Jo;Pw-Rvp7E!D{1?CBHDC4Y6HoBJKa6MX`0Nz#Gw$B)7x5kL z`3{ogjM)`CS1Z)>569in!STgKv%c3#&#Ya2?j5XZ!ctG2%GFb@(s2Pjo-Yi&sO>e| z-K-Y_Xv_D;^Z7y=1(%g){M@*G=h4x<>Zw!uZwcvjmh@|`o?jT(;qawRW|^gAqM5~d zF27Jq=7!-jlMTi;n#(`r2!b+;64m7+g$j*DGjYLnYDO$H7q1MZiYdg48h;s7Z7p7t z^i{#5&BeN2Dp1(sH(UjQTTI&c%1r2myZEx#!P(N*pl}c0VM&MYzp%a7l&y7PXR(3% zRJEN#$DrEoYarSq*O^-Wp>ogox>6~U5*r}a;*M_8Yx%=McQJ$LHxG8|-R)DS#{2Tc z(^p@(=GSVQh20D~xB`XuEQSa{-!(`@yB3AQSou(58!({eC-V1c<_oP|N2}l(OkQg^PL-W44zlIj8)E|K-c_=-jl24&vE?go;>HwG^~SWy+@Du zPybK~4GMdU8uaJKRW8gZ+)tno^my;M9zXDXQ_vgZ=LQLAW&p*>4vX%coA&C>CKLh_Q+knumo;9z{$(VI?m(5;nJkQ>Wat z$Uh{}Mer;l=Gn-ZWN}FA@%{0_L+`L!7^@UynOvx0e+a{sT!T@kPp;hg+`&7e>m1erv>VxN25@y7aoS*zJ;-JA&IDUtnrN^-8jr2 zE*#xjuC`v^SZqKq|ny)iUo0<_ z6%rp*rocq}Qq18ikk8c@bM*`5M~{$7_p~IXZNWR(%gI;XPE^O;>jkvC*1eA0iE@jQ zZ`Mu=5{Z)SGK<^6<%1>`6CppQeJ$5ygAKE&plIQ8j#s;z3Jq3>QNgV=wOp(XO0%J82B@@RhL#w|edV?k`SDeEE3x6N(CPe%>Z#f#D zZ1{PK5n9|d^3{r~0sy!S+3c6c^GUF`SkG9jVCH zOSJ_;KD1+PfYl2}K{|x8;u0m73k@R^i?O{90UFHu2DF#*xvdL#&)vm^J8exbKK|zM zNnBxUTJw5SZk*JIpe>A>cXoP3x$((%>29~($>C*wayU(lW0n?lonUu2~Bl|opO97?$k`AVWcy=XG|4U3d#!eP?^TCWt4 zLcP9NGwPj}vsI3OTTpa8D&v`5T5#zASQ9c;^+L~_qOlu7v4ZQi0k*Whv0(4f;qVq* z0SLmv*fZLVm0?^l7Ytadj2hM~l<_~XWhFrQX!O9dS*RJQf&})YPQ#;a8z#P{8=lFQ zOHR0knYr_Ya^CmN)VcssYS(S2QeZ8Igd3U_j(5*jm%t9txkK@RHQtY*U3#OtAqV?`Dg=Z;1JC9QmvW-E7akf7 zf1zXe@oi>Hk{hpKyY<{6{s9ti!$lU49*yP7TpQn(FI@G*ZFQ1Gtilcav9zy&N@fim zZ*{xle!Z=!4&c{7vqgkXfTe1zl0U>iD6fEEz8*K0!LF{cIG$DkMf^~w0bR$&fB}Z8 zL6Ho;H(oeTG%J;%<#9}mC?kkGZA7Wu%Y*|(V3t}OKBpk(uO)niEn-2x$6VkH{dTw55pX1GVZPK$P zlc0s`?g}AWI>S(NiOO{wdi8>#Z4>f=zo8f63QEdRC`(qXY+0HrAuU;%ar5AnXVa17 z3>KTmC8wZzLTYXbcW$2BBsE((N&W){9m}L7CODXIbEB{+Gutz&d1SS4SSWO1hKa;5 zsNiI2*+)j^|2{}bOg}bCer$xai=9}OWTq1%Fe@d?H7sT4>M##7#|0+AwMDz)Io`K# zb*RRXJ2bIOn$5D&qM9(zszg?h!$UMIKbl9#4=e-NrXd1)bFgKXu*X=P6p3S~ZxlCl zUz9zoQJYq?cR&U(_9c3lxF*-LNs4heyOA!Ji9XeskL8b)Zb1@eufU7dd@CXN&c)0$ z!ma+fbFyKSDTNJCYq7bGS+;RbVmJ-dN9k5w6lS=r&hG@a#|0aZMfP_boPRRoMNV5>`Qyrm&iUAoLMQ20= z5lP!~O|TWX(NeJn5|WacRD8Qq@y6oVLu(LRpnc?!78E(%vl3)H$&K4W*qPq+J5X5N zMwE9p8B|zX9D6!Pb2l#O%olDgu6t+&d<`?9po}qS;#)FF3mzo0tKfGQs(1|BHMXac zf_!|V@Q%e>MrdF+s$0#%Lq>}FQMWsRMeY#6sZa5rc#-tL4jc?QtUh2TilucQ1*xcx zQ8R4dzh<^r(Pm3*Rm3X}D>0=4T>bVCq*+flX>r?Hyot>-;bP*iJ$ls4lW#cvsN%QJ zTf-9ep6&dm>gnpR$+e*Y5g%XWuFR?Y7CPa_1e|dfMun%bJHMNM^e74AuEMzCS~WgP zOH(*5@0~hzFEF)%MsQ-5&%NWq&bb{-<%h(zvv_NLXX6~5j^Tiy>5gf-A|ea#3`>pV0f;Tuvna{R_4#1nVqf1vxRppju&wyTDe>qFT8p2GLGka>cHT>a&uM3hjN?* zfN7G2axdV{B>y&-ce4Fm6jDhz1x!>2$n&l-Agg;v{RF(#lge5wR`Oe+h0^5K(bx=73laA6DW&K_>jOFq1b%O*NaJlw!k z#@gIm8ZVA7G%w8KvotYkV@0qIn(h9EItrQ!IXAvAI;7St!oIN#kt1 z=jz4cxjeR^aAy@Ne_;MqffwY8Ya=~B+SJO2Ef8o%^Ul7k@oL3|H{2s;EU3@ z;x;~+=;!t}a_*acSv;|nO^&~79Blb!<;vTkWDY#PLqq-S&DCq_G!41&TJ0M7kuP(w z0Eo(wWL13?aOtU2nXq-zjAB?N5Vyd2_vKomnea7G~xaX38Zn?Ypps)@zHvALC`H zq;;5CvRIzM|JSNB3uU+_%cWVV06{yde5F#HuB=t37iQ=2f71Z`Ew#n02Fm4Pxq|<% z33N7~80F99#yt9u9yQ=;t>eG3T8%zNzVbuov{UOHf)xr5G?+yBJEu1FayY|f8XTcTXWvSil5Mjk&KOXOZU^^xuZM8!^T;ogPCGv;x!QNEcQej_zz z)6eDUO!BEbn+~7Jld69rzbp24enGH97!yt(Zy$)P_FfR$8}5o5-Y&Zfa1)QgQF8YX z#(q}SkdoZ^yK^tT*nBv1_-K8yxWTV;hxy#nLQx)9hrX}b=L_}=3WwkExI{3O0?Zyu z`K8>u9-%~Ty*Rm%w^dwuDZx^223s~4*UN?JN?~@sFpsTD75~jv3YD|isX)e8XQm6) zGt-6X@=RfR8vo7B!lxgw1q0YP`>+$aP+6)hSQ}5&grrqLtxHI*R;-nqRtax z+3(fzPa~>hlk8rHWdX~>=7yW}V$R2rN{lxC7O-gI8~*B$f;_1_dpw0C&QXr35H4`BUd}cPNKd+yKr)C%G6oPeN7n!s(qn| zool6fp?&I9b>_l*f3$sFHrPHs>3@N9A?KiMgCr5=pP*ayS1RXjU46IZ5Bozj0VENH9tA~%iYW4yx0rFr+TEDuZ7Sw6?@r?b9%RbGjH<^NQwXIZkm-;B%kx%zbN z%pB(7*>V67T48PRVZGLm7b@|YLLYZ%FU%F1wLxtGa>e~`qp-8LJ!nH_dM#L7>2{aY zppy`>G1wn9&d1Qe0O(vET4?Pwei7b!1CqymU2MJuKiDp6i9V>(q&a0CLqH&t5CUj} z27T00eG$dj2IO-2T(MZ^UOeBJ zs;F{U!2NL!6t-S;7;E&~A|2Z`n1~i<%JXyQ@<0#^Nn=WXvKZf0^#z|-t(H|kr1QDO zO_OkU0zM_ASopotK^3oVB??BRzE~$Ym&$6dQigz4pnL%&u3xBz_QP;jr6SHUwcSaH z3BBEcX`|hQmdRj5M!7fRMtcW`IiMV(`G#$tia+=Q?OW^HIE2GE%M>edwQ^yx0S)T{ zq)oMAjXP#wRo_MM1DdNA z=H?L~k}u*PSoSZpmV#Hs7G5nhI4iU)e-}1SFV4)Cr)THq=dik;DbLK$VL6?xqIBy* zSqBp}?3~3;XcM6qn4Mct#m?o!SDf{b>{~^=;NXVuOrsSzTiGg$Ew*4%1C;8tfYB+M ztDHYyofaT?j#~cl76pt)1e%FFFa=~&iub_;gq#$oMOaJF498Gkz#wYnxBjpnv=1cw(VkFca!!J zALJL{c$$n0G4_m26CK@xNRgPP!MQ3}ZoF0pWJItJa#K+IYW4i-DQi%9^k{}9O1?m8 zDWAiCL5cAJ<;gg9<^6##*C!OH90mg31}~Qu@>2ywNE$64i;b&TS_(l24d-*dQ7DW4 z7=*EhECz8HcH1|V%P%cWsa^yd0MI#SdhQp^|DU~g4UXf;(!~_vYu~W!`@>;h|8az) zhI{Xd91uh|-k?^iTixgvfNr24=tg5__ipw3U5&1O&y0g0skbzeX7rqqM&yj%GZIA& zB~g56;$BGm!{HyG?QoFmKb9bp(vY&lzZ~8ONBBFLRn=8p-5~Yga5iEn0qCyG$~@=f z$#YJgJb9AIFm6H7G^9BwpDcFn-P2)DV3yh7 zi8HJY5(gBxO>i2aII<@TIRh;S*#P~3SWrW?J%6`nq^wpQ+4FDq-ut~D{6N{aXMa)M zQLPN3r;xmN)J~fP2gzg2!!>EeO;b06SZ-#3!Z}TG2ox~Ewkbw32xwAAdjI$KX2~Sm zTi{O2l*+xO{c2^HI222y$6CNvW3SiJ$ej+a3dpGjZQ`hhrZuphzFYdM{=FOfntCHh9Qe-ZvW+9j{RWY-+cexza8T=*CrQJ-!PyN%1)xgu$WX`9flAfjrA!M zTW0|TE9jqLJn}{od;&?ZrgcIH#){y6j&zTKQ=M+ za@)8p@$f&DQX>)=ao_&D5!fU#(T@QGccB#l%YXiZ%75{L%nxe9e?0c-&kuci>?fZc zI`rA0&Cd=U{_N0^&kh~^?9hFm9lHOsLl1m*=)unpJ@nb3hd(=X;3flwwg5gSeM;3Kq9;yF(fWEjTnuFu+RqK&8rA>yt6`WDovrqpjv#+3f73T5YSqwK@q++`lD8WXV-2;rq$%HUJ zZ`-GtXxghi?#(jY5jggDw!dkw{q2~>nYvVGM^YW^P7LR<&u+G)Jub#UIT8CdvpS7Hk z$={RPo87;s|5|lgcz`9z3&8HQ&mx5yKd9tk8JuwGIo1xALZ04<3RA{HV`@Aqgm16c ztT8Jd3is_-!G}v?MRR^FXE2ZhpAX;}$&l_%9cwJj)JcK$EF5eGhuOWRZ#}Qt!K|u` z3Z^a$n}J?rls1H`D_?hBE@?O zdyy#w7Tq8T089&DdG(?OelNn_Jy^+Ls!_w=D?z#x_tDHL-w0reVENt+kb*yrg9StI z2355+Z{G&@L1B+}6b?f^kaC6*ARR%bx6DpwL$_#WnW1Vl;b3^GkNe=`N0kvM3N%;V zXBb!YTqVb5KQl}CsZ}^Je#|s5BV>*o8$GL@o@MSao!f(t!gy^d_O>9Bd&kBaBdd zks;tTU7q0_$agCerhE3#WleCRklC+a%>;#rdNmx2=%t)KxQC4@ zEI$%MyIqHrgo>rRSNY{f)E0|8*{`M(z#;LT-@o_J930bo4s~D&-|3Z_B4~P#%|STE z=iD;rJ<*OErVI>BGM6E1*vz5xc&b!3#6sMY0(Wck7fUv^1}#L%^~wL3c&1mIEjVai zLNoTBQa@l~RqRXHmX~4Hlh@{lczm<+WAMH%2c(xLl%@96((hQVFQLVCPp{mAqc+S` zL`c1XRFXC=`4S8A0G`a0~2!r_?wF%w2ZkKGS?xnt5n`$>)TR1!k$w1dO? zRu^r%6B!3K#wSqio(-mta9)4Vl>E_;Hg?rVIBfqth3TWZrjJbcc5wWDQ176FQ9qgA z`O%N+9JuB^dtgK`zSr}g4#{1=XFpEm59$ebC+P=0dvRG%Tl?Gh?16~=7J27&&1VL` z$HfWkedh*iJc>TkW=v1x87!TFyxStb;-CpYabVWw;73qrP;Ovz&5;~yu5MJIxEF-Z z<8WHS#YHHnhE4&~l6q&-Vh=bjNA6}aHB$&V%fMbwv%mZJ@KJ!7t`D#l)<45>qDsL8 zotvUx_vE-jL!y#iwIcV^8q0MV@V)#%l-m35rcq_Uv6KG@;5RD$+dB&w)XIhU!}gf+n>mPbE? zmCx1$|Nh_8njD(|1Gya{0`dhLVWg*#azL}kDK}$J@zXa0)Qm-WbJ(Xr>x1nrZGPQE zo<~Sc6*B`2JmXsr3jY0@!@=Lj{N63&qzRI{$xu}3#^2V{@Ih_qaZ8 z2LF+&?|KtZ^GpkDy@DEGEmN=ieyo1AOJ>(ET&AT7mN4?^w9 zHwR2>;b!51Len`~%WY&KTL z{?G2XgMKK*RY|I3$D|q(Sg9$k4&bKmB|L0MSwz1{NFngUJB2+fxFK~9RPe<&FP^%1 z=F-ELj_$!-I(t?moJMBPU&FJ*7hk)y$(}nKHFiTQ#W<+NM=w2y3U3OibM)d{^!w7o ztnNIrzp{%2waW8SgEAMO`B1tnA$}I=(X}%6Uaz4`_W_{SFCA8!f{mP($}CA6^?K?4 zOAlWBkoWlJrH3!RcJU-@cF7lYvGV&azK(~dw8yf9Jsk$_o0slWU%U9$rTcp5*5oWM znou;9F1`trPF%W=wMxOaxQiy8uJE>j=5gN0Db~pwtX2SVyyluj&Wk4nbTjY;KjLax zfA0ZzpvziWt(5VY!^&T0WHnZy5o0H&Ls)8Yh%SBzV2^5u8OJf)NYwN7Qrdvo#gi9* zi~cy&a2@k%M z7N~WN6JEb`0!Hy9nmSGteDl)% z7k@`A)knB~N@;u`v~U%p#wIBwLB!BW$QWI#H5jwf>Js6><$lU=ZeruFT{I(fu#>A@ z0xF~^lB9RpjmiNWczuoxV>cRRm1y^YA&!97Kywq%KrxjxM?p5wog}8tru^%DsP`tA zj7S9n8NNVfU3`}&o1lxAizhCAh&h8PO|s^G{KC8Mp|7_t9pOX^;DYa7S{=S!&B&IK zvC?E0HPOZdpJ1FdR4yi&{^7;nTzU|K480t^^bo=RF!k{s`X%Xx0ecWQY+}IhbH+rmVVZrIwZv7hN*9)~BNa(#MZs zS*Fm2libu>(^S;zC+B_9Wd_EQuAWx$3i1|lqzozvD{oRy?73OTtTZZlAzj4PrL54Z zg!~AIGE~r%4&wK-jZcn4r4h9ZS|^Ymt(wX#>Ly&5s}fQRVOpgc#U#kd+AwLF6**Or zl#<+JMHVHa7sHhx73&E6(-1H!m$G1Xrn5pYM*>0 zRr+zdE#f@X<6?=AFag_zRZu6!NkayhhonKm5|}g?Vr;aahP#*qIK74Wl%>Ih_`skw zAplf{`TFuVKrL3JkDtU9HWhqMVPRcVMR*>jy^!xVq3Pu&*hS?`tAKs+U!VQ&ANZGd z+(AD*0h=8vV6$ccyZzG(4{v|4{rd}twm;fFjZg1xzqkGV_Nnc6w$E?B$7Z%JdADEM ze&@mw)Om+J?-#$@zrw3$E*!b=(Dp~d_Pc2Dz3p>q8x|?N{Sxc(6na04{!U*wjM`_> z=SLSdFC1p=TV?Y0FR2iqy$e7F^wKAt0nq8~-wSB;9bx{ADx1SKU zpV@wH`={H#Wc~I;_4c#qhtN2MAArWmVUXD>7QdrP7x?1IEV{Q}z3}+n*5VfzVGIEBFj zA7SwDk%+UYHr}r$Ol>m`9r~(Kacut#{6?(ALB6r((E7P>AF#z3?Mf)(HI1M^gcykN zA0yAV)GgaT1EJr$@F4Lrz!0|2(Ra+EchD=bI*lmJ5g>S4pjk}-Z~t!lEE|CLhQZb^ zt^b(I6wE#Ym56en@HwFIK7D{V62N2+6CH`CO|w#aKzsspIrb-kJH!w18qEXt=MW7U zXoI#+bJFw?PJK%4L%J|B(Jyoeraj7L$~hvk3LZd#R6(zhVrUlh-#*_@!`q_qb{Fcy zh94AWTt#RxhB`x}qY230;A9^{WunhJ+aJ=D(y42tBh51!J(aA)l#F<1Nr2HiAEDFx z@fafrnZy(VCeTS5E(n7Uh{E^*>A@%}{riZ|N&ofLFf;&A)^R6+1GU8{aGo&^0Hg<` zdQO9-2zH{#g$GEQZJ%NMC(sj)iH_-@^-%YJfAs1W)P`(BWgo*T$H!cr*I>A1dqa8 zhuyoeb#CkRN;1zu(v+<$Ak6zhE@#BWy69C4tzbr}a#s40tX?3JS}MZ$esO{vc78kOQw3E7kpx6VuYm7reQYeTDQRC;L8 z0LqPZo;M967-1K1q?N0$q)KNNl}fenDG}z)dA!A{d-Je-gT8$-)sTLvW&S=4mkI0Ud-!MRV2B@Bta};E^<= zZz*^}6)O!mgP}rMsz^0wUKzGBOJZUhH)~ctc|M)1Z5>x- zqPABv-2EjM>y54BrOMV@0v4rQOjyM{@PX^Axpf@%hRFH##Mb$yRM>heX>6)b)*HW) zSkpv2xx7C9d7pSEKN(`TR9R|RK!vdcXLZfXCTF^|bzG1WHK{8%i^Bx_dO2Mo_m-uq zCfL{Or3SLW3*Ba;$a*mdcb&YwQj3reb&|Ofm`kXtV__hhNyNib)hHD^tPhKPR||z^ zrwaEZuVfVLD{?ijs4w@6b+yd=u3;->QL5&lS$Ly27Uvq$9FLwegz&2|SK)Uf$GJbL zf_Oa84=%m7PfoyLl+1M!AOAvV3JNsRpMdvk2(*dD$B*}c%pGA3IJy!L z{eT{5u+Q+8*5&;I`Oo0X**eesNSMJWrCABDSXHjcMEpMq(H-47{>gC?$GOthTLAjw z#{eh?vZ1>32zb@?M3Wq1(I5eDW{=^MV@UL00fD+u*hG?UswNk-Hm&Zg|KRzLjsF1x zlYVrenHp*zryv`QLQ~8r)jYRfO_nitU-x^gNMb^S*Yhbhb1lL$D#1&h!%i*XZncL) z@a#g%z$Vk1FiJ)2Ve_w}6m`wo(1axW%cQ2hE#Rx9N?WhuJSROiTEGyI^#+&bW+91h zDW$meYOT!Pu^PThjUsfVsgfocS5xpgmO30WgH-fmb5VP25r>?(w4<-UE6g!6iNRHn z0vowSA`64bA`4l+6!>VWW|W4;HrS?BZtHX{o!fe~jJ-VGXTOlNG&Q3v92sJJ|j}3)w%pFEngR0!0CDuqghlk=|V}! zXBA+PP@QzY6!~L1Y?z1#JjF%@4*z@+TN#L5Ar?+6*vzI-Z5oCYc3IdiHom5D0SJsU z70tAYL@JHytb|wRzIT+eHkru?c2VkErx80^???Hz_*WS2MivmT_uOP0(n!Ht*m?zf zB(&*@aRbYwOHvj)O_apKgeeJD8FWdcD;?klF_Mvz*h>MLKpTmeu{({@n%n{jIXT$W zQE5@*wD|fm*^Rq)HS+d$93Tjb`4RyE3mW2qwt^@YV~}b4qyOcp|KGUwu zmgcQdO2_g*ww9F=d_Lc_q$c)RN1Q~pQ7LjkX%X4Gg&#%JHH=dpMK&Zh zE8In3doZjZ6RUPp@;WM)N(oSyy0H|(ra+s9>2sqLS`8F*i@`w6tKsb%+-Y~=UV|lgMIfyERnQs(TpT^62eSe zj|#Yr9Vy^V*b(m7_pI}>6xw(5$RplzgN7Qy>0G^A7h3sR>Q6#g&kx{~Rs*>A&~A}u zjgZH9Vk%Q05#nU9aHL0N$Y;!;t(P%@NU3p>GV1X6us7TykwS%Tl1%VTFv6naCWN>{ z72t!2q>h1wbH9O5-#Q1ejp%sbz(M3lV$MU7Yun1Wa4QIt7k{#8L{x(T28s87dMf?y z{{hiXKe~8N5A|G-OVTLbjZSJ+JQ=(f!@Sgac$a0}y9g&46Kqxi4?i{ei(m=u=Bn0O zW4>zDR5iz!!dWeo(+T-N8$I{0Ch)nNdYQpsa#NFsiHlr=8$*@)vOR>)9&) z^?H>Xc&WK%ZO{YY6-D)6YoPUO1MaPcdyNn_I&k^$n2dP(f;DXejt_>XMIRU{pgGlH zol&cAB(v8V)zoF(*H-}~2pG^1XK+?yKTn3v$6)}(m}Ma2U;-GtH>iRk!82|D z#_Eju7r*(}2mH_h^rP#63@#uXeB2;|=scqyh{&*)RAH$pfQZy6@<;v7n8?=4<*k=1 zxpch)?)y^KZP*8A*TtN1t70sG{+ zoYa;8TSq~feDAqI{A)#9F9T;F%z^9I0DLSeINYf&BuL`whXx|#v&n-DgC)LR+ylTU z=k;RtcE4!XOARj@q&OTgRj36V6(os!VnhK?sX%Mg!NW*R(J#RM=-w9<76oQ1?m?)41sm945DLU@plLIW%x9xQ zT>|JmgfQhXDcD2enA+CM>;V(f2=#=$ga&f(i(2rzeXbU=^+=RxgVD)j7eQ8v2%Tl8 zMIgzVQlplau?<5MAnb~Kz5zw!N3?@kT9*q5W5qS9KvuzW21W@M%pv_11>kD6q zFEXo}Zz@%LR%fJ*t_jvK z4uinU#_=;q)iC*7C=^2jrC*>%;V@C4Zh>3LKys5N!anbFtA zT4+#$Pc{$Xdy^}evY-LZ!=Mudfgluaf@0{%3a35}Cm{JrQ&uBJ@(4NuuYFUgFE)}5 zFs#CogBq=C8hVZ?LP#2rB6KJMqnkAF#~|rn`-|p(WjQaE8!G*CebWEW=cVA#{_}Y$ z{k#=l(U8z5*DQJa|9oERJ2+I!9juT#v`O~o^HQ{B_|N6M)Y#9I|8NARHT~%3b*?eY zr;)>A-{{j=N*53lqja~9b0baPy9{@?&S7htS!eyO4K*?khi~(#PoAv8H^Zt~Ol_~M zC|y=$wY0tHwkE;oX@2q~YlhY9^Ja)}Ph=1dhBONB;UX9t;V}lAd+VX4PoCgUbbH&8 zhEt+cZ*mJ*v$9E2Y;7VYwJLL1&E|F_4eyGAh1DB~>8x}EBDsmP@!N5m46Vi*nzG{8=cvh@azxB+RCCGN&r z7#mkI4+FH=;d-&9N23w$m$DrR5t-es-wEJ=_YrQ&dg?dE2h_8+YY@rqbRpfv_7Ml} z#y0s<8Z<@77B)bzfF(mq=SfcEZ|S!NtChBX*QJA>xje!}%Xv7x&=0L`fjXI{T?$5r z4+Lxm=K18w)Yki`a(g3EL=8aNvtw|=rM(W_DvmH!a z?CwZ~6hf%Cj%Ot-L?py$zF)zzTj_rCBppgM;9U3?=UXdD2nqc}E94*OiU|a3JeR|g zQe&x{+#O^Kzxn@k|M3LGH2vtJI$s|qswtksD5^DBV=BNJMjy@hye2uha_%9MGRS z<_JLMnNf(-X-KpMHO@|8;};jIvT?aRz7e3HQHd?g8(Z&U2MT@u_9XpDkTOXa?K~XqwreC?{`lK259gMiu*TG*$YszFjVnufsKc zqyXjM5s?s4U2j1)Q%=^vNFCl>${peyHT4uvaXzkK?G zoz16NnN`4FdHa!_!w;KV=(E0e4u80FRx^Q?Jtk3Sq0RzWjjaS z*g5?2&XH$WKfTbBog;6t*B-iZ`oW#e-?LJqHU8zHcfUCP=+%eczw*0HR%n*|J4c@0 zIr1BV;P43zg5R-vRs}Gy?&oJ;x%@H*N>c+nM_$@F@(P2BXVx;P17q12ul@SV=ZEY& z^3mEk@>@eQCath@_&pF~=kV_tRY1MpFsLoc!CFt)ISfkk@iHojox`ByuXm0-yL0%1 zog=U99N~26R}j`}rUni6`Oc9|t-;>|4F=zhmBi&op1%6jSrz}oKmGjlTVT$e&1ZKu zKVrW*3x7+kuyf?Gog+sW*J0StVeo;(>%?RDvI%~85KPM<0Xyy-Ika>5RS-mHww=vK zzdZC5VB6Vz?efbfuRIO#`XIbLx`GWiX3-N25m4-{ z&f%YdR)!Jm(dV{km8-{2U3mhqy?y!V$G<%ODB$lAVe{e7&;OpGhM|9kNuF1C4!@5< zHgHzLDF%zQWnr1i9bV zLAiW_H}~r2XMTF+@n2jygpqiAXY=sRVMyomYzBM?2)=mrk)6$#cQ(1m#w+Gwvqri^ z{^!5{zyD7xGw4UxNkw^>PNEPNqfWa1%imr<@*)!qx=yG^t{;5?sD5?i5ODtL5k4{&Wz$zlxVCu|W5A#^YMSf6 zeB#<`oDTikg%_D#G-#CTC!hZ6C~xn^iUgQkd+Mp{&%G>g)ULmHRJi`Z>!8tB&pdej z;rFgR^5C^c5K2H!uWzYNt{o*-x&DhszuE+2KKJsqSDphG2-jac{ngXYU4QnsL{$xz z7tdXL|IoEp&I#!J`p-{sZlP+g9TKj+c~-Cj*OQcg%upE}WCkna>93wXCR~5;IpO-V z_xI>0(4fD2RQT$-4{1IPAcb)4=|`{q_B0p=%z5oF-pBO(#S_<_U^riY`r&I2KZVzy zzW&IIdew8hqhIz9RF4+7MQi9p(Ru2W%2U^#c)~yvz1|<*frz>PiR(u;3EgKOR4HIC zKm6P4KYs%(Ky<)-x%TiY#H*NYBw~L4&h=x5u0Q(($gC1hWfqlie|YzZ@P~Jv?{%)q z4}FC}d*pndm6CxD&1$KGguXBur@wmsIr9i%;y@%agiOO?)e5oyF7jp*8i9Uvtxzcq z(+U+t&=|D>otI1_wFpB**9-X2<=&Bgh2U-EamFAmMDhiGNXViOmSh>}PSsMYDli;K z)!XP(2F9<(t$_jFr*Cw?3GrB2)wQIKUw_7A43-zlriE#U$JGtJxMs_L@n_)W#SyfO5?-~C-H3--#XSh55TwHV*^1hV@m*T$!?k- zUXn1?Qj{N>-IlFJO%l^I@}P=#wE{)W;DjJMTgOPr1{>P}+7VPn5DP87zEK|~CSuTW zP6l9E;weMZtWz4rCOrgWTcz_a|Jygdx*L+2e*Tq~48K|*b%cfqXjW*J(GeN0M~i?) zT6_|Y{Q{af`B{lYGSh>t*S3DmUC36^%=ZUKKqDKK>Kq@qJ)rImuwFC^U0fET)KWTQv`uCYJpTwI_o>_DVR=iYVHe z5SDos0*g7WA3ai$)=@;%7wAsr1{-gRQqxXQd(O)u+hj;V%~EVp?;te= z0pcVTg+1O@cmA>lRt0R2=r%wLu}ZFd&X&k#g@{Fd3LbnyA9hyLXq zchHY+1J{Pe%hdYfWst5B$z|1~oN9hyo=MRxbXg`{Bz$FMlzW(xDN;&V?v?15#M`}G z!|ze{Mm5{;g~ta=XD!<>S~X-FzVImZLp`d!SjBcP<1o^#q9;^-yuUZ2Ne!U}&{)>t zp$Uh7iG-8C*nVRB`EBko>Umr!-|#k)2~)yLJyEeH%t>IH^9>KqIQ$Yrk`Q}LOFF!L z{=y^M9||m`C2}oqa~HN%^iw8GH7n;$yss&SzD&ewer1D}K;m4a@>CNQ13KQlMN^=f zAsg|9M?q&R@30)ANV}LqZZde8D#`ZpvxIUt0V#UDe*?f1Q37ZHQUY2H+A^$DiLE!!e(cVeoMPxz+ z`y&G?$B|`iW!YZw{3OWqA)XuZe$zBT{#OGx(~BB#{YLa3bH%`z9H0U`o?jTOZibbK z9Rsv1df!W9XX@gmO|%!qRcPbqIK8f0ahGDHdFVJ0FCN+Jv~fdRvi;YFI8 zG|-?k37UQ?-4;*LAOX%ejB?+SHDn%R7wWk>mFyP~ge#X<#6;zNre{hVTQVh6KXAFF;IKXi0== zUY()@-NJ>(=s9OD1BOUPjW>?4--kh!BNu*h;qV}ZUHCWkWy=WyW#|b4<t^?sQpcD#wiXGns8 zOfr1=W^g*Wx8ARn+wXdsOqNC+8iSW>XZ z$g{_x=-&retyXF0g&~9s-s_aa6T!h~!n9t9q}wc6A1kq}6IiL*vvE;idaK{{Z+gjK z{j+qFH=X7T*(PyN6llXii-1`c*DfQNQA6rGa`d|pCXTceIQzkpPL_mhfqdr_1r4`& z3hC`qJi{d*;V|G#G+;ukztV4;{xL21dHCqF`DBqfT^O_kDi0=?k%3>XlY*uiP&&_m*F6zqsQL`q71R zeW>+Y@3VfFI~9pb3SBsp$Sor22a^*0eyA|Au5riq0LcvYC=0zBR^hxT(Jf!S8hxIm zxYYUhWCh#7eTiwDVqnR~!0EY;;#=p6*lJGk(0ZfKNG-{CWWLW~7R?cW=-TCK!A0ET z@fzATRMJFq7zarp*SIb-$Yy#jZoS3;v^aSfff0-D{rF_}V}7BpNhXV>dPmYqEHYUu zW&NrnVz{l=RiutTK8fMN?uELq(=Vd?E3vjpDlEn=0tb#ZZJjIMe3D>p)5*j_Wg0pm zUnS)X!Gmj%`MJJt>5$<)P%h6J_FZb&@f8x%$1j14>gZ09k#x3!gh!1}UaDKt0Q@l} zw1E;IpQOP^eS8vf`Qw*_4nq5J#shFBNy*hE1%Nlxc$}akdN|AvoVe_Tj~ZL9#MNbD z-hPd9TZC@}J1`j8B<3X;Scj0dF+Y9@y8v6SAq@$WPQa4TGmpmC_u#7|&e|i!C6l~x&&+#hnc5zGlJ1Ph1>BNTxbOs1Dq3ZoxUp$fn)!^lT3;F?gRe1cmMPP3Kin)!Lr}M%y^;E#zE)6F=v@m zp7|Bo<$pAasD)AJsI-WlqlCnh3pL__D`cYTTk z6N#CA65SS!)F-diS!g5-IN%7FLHEmZo~4S|kT4Jp{&R>>x_s}{wl3oYke%&Z9AQG@ zF6NELC9n8K{&-MClfq0I5Swd!$khk)ax;JRQwEPbgvhga@o@-2@GZOSkuj)&%y4gW zGE;lE!Y>c1oFicdQ4Saw&KP65g%yXH&XO81WfKSi#Y=%ttF+-Rg-aK7L~B*973NtxJ|j{?jwR2lTbA-&S%1)M!NBI#xka3H-|GRjk|D zk(^BT*VG5q*7PH&dID8ghx|OYK{q-+J@Zyw*!mR`0OTYU63dDv^6A+plfuVO5;?2- zu$eUA3P$D?R)w2BmURt>qS{x@sPvqW z-np@s1MbHwfEj}XuwLuHss&3WIf~lN5Z^(-lOJ@egSXB;n-|K|XBIqu<~P(eV*<5X z#wcpwV&c=YkMKA8CGa0pNpZ`(nAwGmbpG zQ~C7lTO_z%0h$%Oa)Jo9^%iiie0+pHvw1G08Xa&LlDl$}_7mXiubmcoLqvHbLH_jY z&mdCx98hNxGQt6LmO`|$b*wW;j!Qoo{r@76;q;>inRaud&cLt*6)QAL^D94n>&jE= z?ctQ@jzW2^{G84!bK|ywh&kjij35sw6oW2mCZ<1b%){>zv6fn9?j zzWn$zSKfcnP-cPe2%7r*+=)w2(3 z2iw2p^5N?FC$FA;;mfC<|Kh}n%O}o#@xUqG)#s-l!4Tu%CQbw69Pk&XUfDTxn9;Ep z>HfzQt{ke%zc_Z~*tyH+9{>FGV^^L!aplp?D-S;N#i9GIyztoNhmT)={&jri7+wAO z(J!BU`^#TFcjeh*SAO?2=U6KWw?%Ybed^@rXMUm%=`#;}e)jz&E*f?z53qa z?@9!}|LzwbocQw56JNaf^5u7a0uju+A`y&X=1CZCtMKLU^b6m|PjTV<`MEPBf4T5w zxR79C$p@|;Jr3c^nbj&fZkO=A^2|APFyDOY%JB!0E#b=nGK=?9_(9rz)!j}_^3*W21I1QN#5zL`MXPsLL8g|Bz*`$o;;OrCTQ*Ikq-sT=Se zV}P{eOy=$+;ysjf{hmfWGdg>BLQ>MxllxP)IZr4nIz;v_ZxcnCeVVVdL@~&p4*u;} zS?$brsBDgY&Er+k5eqI=1M%@dJ-$W{UGz{~&f?cLeT-N@6^a!v_!jQrlBpj$nAbY|o{=^iX1*c*>e z*U`Gi6(hOt4(LfwHoRAZSzsFkmRF))TOm|+{y;?%JX5@WHuz{mdbg1U~GLX z>@5|lbGF7pcq!Ces7y82D-$cpS(kHVChKrb`a-jLWm=pW$u(9&vkN(wSZVo!v!P1I z(aM$4x8LSml0DO6qtywmryT8U3ec@M=8|J0!O7OlL~yK@btRK?>D+u!nOvSACqvw(F9zMepRKzcp2HEIZa+dAHp= zzqZk6bf#k?Q7`#?(e9GF zIO7c|v)%c{S#Nt;S+A5+$vIyu(w)f`Lyg&_EeNPwtM$@+HWBuQkl(U2vnY1mBi=#; zQ(?X~l1wyH-k^V?oAh_xxtbV{Z?wbf?da;dWUILr^BaY7XE7Fy7M1M8+=9PU787E^ zGuw%k#pRJ!JEnMW-{qofW2RQ}`26d(a=PTt=0o+xy3~$2HVSKgM=I{IZ*)`nhTQeJ z8XN6cEnb&$`C4S7F;)qzbr6-+P0xvem5IizGSgh28Vk5rlg(5ky*L&qPhd8Uw@13+ z`8iK=WFr!8I%h|UYqLtmBg&ner=TdEpl>!_sLjjHm~AN&T?&0?lT@samJ>Bxhmumh>WwuiCm&I%*I@#%le8oxo z~&L@8%qNk{#Q%X3q?5awTMYP^sf$$Dod+8bWSxFRQ=l24r47!S`Z zEqhwUO0F_HUUn`oDNF56(-9bR`cviQL^R#)dMoavZzEV*P1!f5H>O+DpksN>?W;zr zi=F9>4d;@$Dv!)p+NI^dvcDqPr%S=yS|Go^Iz1z8l%!0sDM!j1>of6stR8J7s}rlu zLOBymSJ#RGxf^TP=jMVXn=)(nudgnzj?2|)=dycoIW880Vtv-CCTqmr}Ny;Xl>JsVwjxkkk4tS{s61eT>@HI!YO9&rY36)72*DCb-WhkvC!lZiL& zQY)9*@GQ=T!$n^to}H_P7N(ac;uGGPS*bh~%*}Zm%eHX5y&i{fnw(h8#K-4K&eE7K z8qRp5c6zL}gN(#8erX8EY3}o=$jbxg<}PqswwL z6PjObw-!6?Dc98MTsN{Z;*OPzvJ`NNGroY^(~3=ZLWztoG!n|z0P~{PwOVkv?3rZ3 zHMi_t-B_Hi`IG-O6Z8TydOH+x&WG6ZAZ)g4UZfU)mD0+%zhq7J^`Zngpa4R5+ z<+wAj&h*>5$B~U^MdwOHT!(BEa> za@-lrN}jQCaYSs1kw(_DBzp77wRJ~8k^`d0x1MoLtpuHm?%;T7wW^HEYmUrvw=25B zo%uyaa3SRhjR%6EiC{SF8Vl0@E32z3tKJQzsnpgW0b8>Z-IeBwKj3VLv6YGW;JlbF zq{?&@=3E(b&LkHm zW_^v3(8^@cm7aC3&Q@1uW8U)e%G$VVr8_$lS&_$W317t>x09cVk*^c9Kg{%pZ$(QfrHDH^h3>U0PqAoUX6TgvKkrsY)`DA4|;_ zGxK$~LmZ!t;|N8{W3F^JQeF=%)~iX;ugt|8)8gV> zQgY8scjcv+FP6;sJ`WmTe0&i{XSblo`uUroAhHRwP-A1eQX| zQl>N&Ud;GxQD9q<=0wRw(TCqH zF&nY_oBpD6Iuav8+r{ktXqim*d1j*Hp~H?};%c>$@RrKH@%&tXOm-XD$(dQn6V0uQ zp~Vtr9qfK)cL&PML}w;B9*Q;k?6BxEb^_9AqpH5eq-U<1az?x11i^1##V^M~kS$@@Yoc?K|HUg* zh9Ap6H?Pl@IOR^RJ>{NVSy_QVX%Ug|FW`wSCKzg>Z9QIPs{z)YH%7&1SnC7d7=5E8 zeH?5-fkzB0ScCL;Wfs5Ge?hdr4xoY1jv{%_T@ z?p_Cavq5j$%?1~%lB^295pM@fr31{O{IMpe3$gkt#0uL^y^ZU&l$@u2E}H4-X;1+#0hzROm`u8V&XdHHF(U`c1>)I$c|EGCRPfH^BiW(pA;)! z79E(?^RteHZgN=+CevalIU+`q4Ke6%h++1bo-K>1n3#3e6KT=sOuO~JzIf2*jIZYS zUkPS}chy*)NUuyg#j@KM_PDga>bw*kSrKrGel}kNU4O`jAAj2;Mx(J>G^RKfn=>&n zENj98)0+GRanY3(^P-bPj?1=?Pe$F{_=HgN{H@$-09s$EwZMTyD;IJ>$_*G*(ZzbF$*gw-PO&B?jNh{LlU5|w#d$L|@BiPDrK;RSaE|R7SXAzn=Jb}KJad`MEt<`xjX3yM1t;x)}+H73a5>L(7+c7=`@PlJxY!$B4(Ez>@UUubX^+L>6&$ku3Ua&(Y{(+>?j+HEnS|$i^#^S0$E1X%gtw9 zQCBD!b9b;xjjVyX2MySUzTihx6O%!?&>LR)@_q=k9W6ZJWjnon%O94h+358Cq@@jySnl!A59 z*^cAA)40pji#Hb1aU{M8$A(#2$3jraPDilVUCF#NTO@qb<&#B$lBkoUmD(s~$%u zIUaB(C)@?_nKPb;{8)9jz@yptDxOWaTk$Byyb~w{%Mj7)uJx=_tj5EEaIhH2V{&Vs zLyK`SAG9qv!&NclSa-D1iNjS4bb>{%n8at1>IY-^?CHQ!8-`rtbJJnV0-pIK18*S` zw?Su(FST6ddHm4d#g;3N&jc$y^LX*&b|k$HjIFzXANE&q`0*LKVvU{!@<}h|mn~56 z#oS`tQE9mxOToBnF}v!6;~EkW-nVSl>2w5xfnd?K*a~`Gu9cl!9)i5`%H;DMgr4ntRm6|)Y8?G~HBcvNx;{+9@<+NfOq zEHQZvm-4PQK(N1^T*9E&q2FB&dvIYgX0K0*S^jrSHrNNuPC(bhV@!T<_`$yfkOOnp z3*EiO^^$9zOaqv}q z0&v?gPb$84e2w4-Z|TnoFJC)I&!f9Mcl*2GS<;v7WYjm}FE4jwNz4Y@3n6Sdbj7$g z>vzI+?MMWRiw;rtyR)_h*lmm8{jgV*7w{|qS-k8NgNyTRU(%T^x|~^?!yTN2vXWO^ z&B;^H;iht3!B8kCZ3N(`gEzH+QG49UUa$+p&477YJPKT@J2?uR1h-+6tOu~^D z6|=KGS6EqJm=A^>*RN4VPIFO<O>!m5NRu9wsMOTG7H~`rS#=}sshqQ= zyyEmyXRh2UpDHBAZDKU*sFKmR9)t-Am&9tz5f(kG;(E(rC;G&Lj*jS#i&D^0r00p2 zV^MVb2fY`g@?_T06+K0&*C4yb9~2v;u?O_yW$k4hCDH4ner&8?lKdW@m=5Bv*Dt2B za2L+|#FR+oaax_1sXp3=5*49d0k>z8%1Z=qf=ppNhsx}To>|zD^c?MofWwpJ?SS*J zHHvz(;`+e%C&hS++GVyqTGRf~`eT=W#GfM8JV8Hr%;gq?amWgnPYf0v&a7)m47MEe zL6Wz#4p=oIa-BlXuVTKslAd-h9jvz!9{1EzEKp6B1Il_Z+KR75yX(RFcw)S5PsCR1 ziM6P0Jy`91_smT=E9=dKH(Fm0+v^fGf>Y%=B?bS@QY=?pAI}EYD^Vrkh4w2)ONqR_ zl&FMC$?RMi{HH*}ch+Ok#!@UgDXj%P(DwHD+Cs@O5ok%VDe#+bAvuBFa!<*Y@I<># zPav1{hN|Er`YgxS95(P|*Re*Q7fRxIpt;^!FGy<(g@k8yIX+(M#K+r!WzL@Rw5y5o zYNYq9)JTBWb$mnaTq=gPJNDu_t?bIB7W!=_NK@cn&n;K4HPUdzr?FR$t$n`Ju0{(~ zSaMVSu~P4p(gzX3Mk!C(#y*Q@$RkpL1vFSf82Ta|EafZ;LXC6SHQ?ZDK_&1o3mvRs z0TzAG4Xb7Z(in^(AR#0ICn|`lxa$WQyUl*r0FsO*^R*=MvHwsbZAP+0Q+zAr)DCt7 zY}^7Eg;pB|gN-7giDVF*c1E0U5$ptmmE^mFvKy8Y{a7M%dZU~kEh9?CfGfw39*(Mv z$GSx2QJbZj)pMUl{mY>KCHIZ;2;!sBj@B0a+c(lg-ipfX}46{ z1r+-&r6yn=MxMc-539W!2D=e+Y6vmQdE^@D3;P-f(YU4BE})FxQepz;VdNPM`mox& zVXzx9r-u+ThX^+dnT#M=3at>_Qpyp4!-!#ob66cKxVw>Qrk_kKZ&b2|^zoxC;Lk!1 zLxo$alMVeaK!)LKsHeiS8@{u<;oHvReqVi}F(KY-or~4pcTF+e8fGx`lLlB;p5#QB#4JC;iM}pk5Pp`y+u&+#tr1Q_PiSo z2@4KdetrXEaeVZHQ>x8yixATKH=snxo)B|97>wPpOZH=@o!+t_rxn~%+_X-Hp{A9a zBd8gj`>pbn1vB-)nH4j&;MQWMb}|$*GZ4FtS-KxH1)v1(;>D*$StsW@WULs;ah>My~%`ga!j^7#oDbQBj7 z;eMxE#4+YRb_36{JXK$1D&m%|p9gfb8=#gIrbIWrk0SY264zDJIfYxpDwb|`15#hN zX}W-P{@C|%RgpqWbueF{F&|BoklYaWHZ@8q1zf@GAz~My>jv}zrDsQIZm+^Z||~^BYlHbgZY! z@Ico%@JJ*<`(<1Wg;$d}UYe2EP!SmPmP)3ZcRT?KG%Yq|+`ETC&817tG*S2W~L25X-+P&hU<6s3tp}IenF8c$|zVZ&*(ggY?;M;eH5;s8lINYNjTFga)l9f zv@Carl_-M?2DSsh-FZF)?tBert=htzkt6rY6;L;yA)aQ3c8SEPeFua9j_Ov@xLXKk zcfruaCb@L7NCY5;4l{;!RakWz5*(l+*P}Y|4l?+u;;72{KSc4sGhF>Is#LMQYdF*; ze2*@$$2~ulI&rM|gqN|9j&;%4AvZDz%qK~{0>%Tny-7ekNr++k=okp!H|oXjt5V1O zOv2rMH753qlS^%%`9m4`DKRqy3xl7oR--SprjwBG5xuH_v18I0LqVNSG`&G&Tv13b z5SEa&7(z@8B=}821kvfR1HwG#Z>ny`c@UvdDWw$%44k#53C3#C&}K1RD{S)UIP%37 zU888gi#@bYkIpf~3`8eNm!K9fSgS9?6I`OR= zpBdP4CJ$m0s|^8?od8ssVnxdbT}Lc)1(Gh?(Z&L&*V|P(whp4|LpR1T9Wa8aeDlt~ zVyyqy0))(8$%z66=&#NE#4x9>7<@fZ`mGK#s;IboDkeOce%vLfMRs($Ej16&rS@5ArxrLyDRWe6mqP@>f;K zsI229bqPC!33B4zMg^CPk#L2iQ9VzJDmLIW;525f>BbA`EGuNp!;mbFDmfV=%hyBt zE8GGzOL4g>CG&OghMk76nOE}c)<8U9pG#>?q6)r>;B(Citud%eVL@t2&_=L9g}wOd zjrf2f9QpVN}+!;Z+PD9v%lA<7GY8p38_Pr{V zV6o)c+n|X8nn4iL`w*;j*REVa24A{&FI$tUIoN$vrLPULZ?NWK_KAdiLW&~c7GFph z8YtyXDS=4?T`SdLdDhY!4JPYROf!pP(Hn*e^K`Hop-tv-)e6#Vwi{Y=Mhj||TTtxL z&Dt*mPEljr)Y&m%Q^C>a#FY9#mp8Bs%~F6PC6O)y^Qhkr(%=&>60#a@Zk*hj?whLo zt-ftd_Lc$BiFBEmi>(55$PP^Lr?X2$7TPc~UZx@MtrF{FJn8_wF~ ztYYOrC(_ZPc}8%1<)APQ!r}Zo?mpHmb_kaMOf_6Mso+q1t`3V1eAp2ZxMLY?Th~l$ zh2Nfv)doy_gPpHh#KR4LYe_AekoIEFQ2qbFEZaZVOj^~ns=>9{P#|CrsB~vm;jqGC z&$UMDHJHy@1^}pe+kr`isKgo_S}2bWD;oIRDphrk;+X=|x$pGZQ@`D*U*-#iQRsW2tomJk@=KpZnHZ@28 z5nBx5+1a`Mg7!lrVd7g0OYFj6yl4P>v4R0DaUwyorE4|l*+GNCFyDo=A-4BVuRg9Fb@{DCY#P+_37pv-qhs0DwKMJ)cqafj){p0_byyC zIk8`u!Y2PT{@M>H88B5QB_hIxkEu>Q@1vn$Ej5ST1r_JnLHGDg{#{sHO1 zW?W0?RAUQ?8&J(iGy7oS(d$JRP- zZS0~yzE(R1;b?eofJEp+3?ML9asS-=CXApD`Hfa0vhuArJ+P1j1D19y%J zdwwvthb?<@WW1&FDO$?3)-xyhxbxjW$r%5hIsDx?1A*8 z(S#Z6a|yG;2waq5z6Le9PzDYymI);G2G3|+V%BMSYZlU`HyD5ECWoeRdMd`~?;gDF z(U&z$H))Hqfld`wkxlYtg(gwRg-Dq6w6|(4TOMm3(!R=EC-h!7GzRJ#oUJ4zIvJqCNJvSq7RH67)nHi7-ej84rAvGcXJ#z3R$_d$Lw^NO*@ zp2h{IW+tK4T_+U;=AgM_mb7f%j3#lnAhC7-&Jv>GQbVRyLxF2eQ!EH>0hbIi>o|np zzY`m4OKEa^;3lM^P=({L1YdJK_dO~x>?h&=AM-{M-05tOX)jzijWVfrHquf`+ zq;6^-wSv@pUZUwi`Z7v8MOkd(DMC&zVN^+sPgL9eWf0?tUq;#7E@f5t2eB-K7)1*t z!1+oM3-1GHkDA=A<3u`%%_>Eh8rFkW!9KJG;OoJFS|%9Kzj0fGi)a;jZGhOITLlqw z&uCU(Pd@37O@c^&sv4)Nj~B0VL8O)IGTG1{F_+~zy=E@Bf!S+lP}}=dv-=Sa+Pa0( z{*6K+l;M~#6sv7pUt~M4eJ`jJ%YofAk|pX!4s+Cz;-{Tp(%p=~((s;&4Lr;RySGe6TfZDl{9f#-d^E zX)=&|h*Yx1(ro7uHWVxo+5)59U|aO>{(-q$)$R}y4&!X6d6|(#3G{_CT5Sls-lKu&?5@DIB_ILjh8z@O*| z#_C<*+&p3rAi>gXV|RE%G`7?Wk%Ibz1Ol1VcnToHb`y9vXicK6b9g6P>3ofiB;aOI z5@aFQWVD6kIIKN3vTRP6{13JR)4f5_CAR~~Fn6QBI?}pPsuSL@no);ElZVDvXcm8) zS0K@vOt22t)7Bw3PX7q**PZmWw;G+o{)16?^+B_)5~VFb1;R}sIUY{ne-d8DqHP_r(v3cc8-n~QNr0CoUiVQk>qF5 z6eKVzoWU7C(|9n6MKea5{Mz0cr@qb%)}@EhwqqkRI(|T1I%q`To?~EV5NNgoDhV_n zpc=zNLJ7-GXyUypC~2>?y^c zCUbejlmaf7AWj+7|cu-JBK7)WIre5G#&B7>Djals9CTQ;_ z(a2zn?<#W%=tX<8L%>}s+U)g=bA=mt<8n^0s?li8v#sksQ# zGdLU9(*riXdJISdq>Dj7Jc;Q}Ybf@C3VRp=L>{g7HTMAK`iQ_)0!PBIA#sECB|y=P zCo;zLg(!ffMX0t_r?2UURT%p6074tj%~*7r^}q}pkpa{;!fkLG5JqO(QWH+v3;mUM z_dxV36BR&hF;48FGL|aRwQhRGtq#C<1{XTjWv`(>;w;PaKk)@gpAJ*Wt8J%flgNHx zg2+37n|d!Wi-}JFn9H?%m)1C@xGHsoH09be--iNWY*X_iFosmeT;C(s+T0z=UU2$g z+hN!~&;W5U%wAFH!FswmbH$>52T)lht4;z&7h_jeqM#LvF?GXc%n)R2O5%-PGDQzSYFo!`vKda zMfG6rzQHhP*y&+|H^tt&p=ummy;YzSfoZ6sf+*F7w$Tggk}b&$&lF*=b^>TjKWw#+ zIWK890D(k!rCx{IDwSu}LIv?4SmN<;UUuUSqO37%5MPB#Sf0Vj$Nuy{;G=&hg>XZI z)7l$%lOvdf+<44>Q3Iq5U>y)5xXOpZB>{6QeHV-&y6uN;3*D)SQj*`)72Dh(YnXS0 zU?@Uax2*a034*BV@VLTX!h1)3K!l4O*yai!8fvVYt|1K8>J6Yq)#FT~Rk_-z8u`vp z$n`w~fpm}tYcD2WlTf4-G>%~Qj2e}I$)(vI%+G;1Fc@{ah*(4CLtq*;Go}ulx=OP~ zif|-UCO5RdE9OSw&H(A_XB5`|AT$i^>#u!HO84GV7bI+An5b(cyXFiZ#r6naZqZ=q zPZ1-iJ{=%&twgyI(T#p1MiL9OH(_nvsFNPsv6^%wMUR!V^k<@ux-X;BXPhncz7^g* zfptqU?{)Ldap%}#>{aZE76Wj<8Ozvcc^cuirIkzY1e zWaevpw5LoC!@q^-ZUmgCYf1Q!2l5Fi9tJR{2Rns>^)+ETz*Hn3%CM1Ut?>1tMLIAc z!YeS3&@L5BaNMvtb8YSyC)myFZf#+#x_|~CHZ-7auVr+SB#_1$K1pnDjy7)JIqZ0Ba)wNU`@dR%`SpUV9)RWXYW10n!4VA@mj6cZQV-U zTR@Tk0Yt6$W^a;^gv6NyNJ0_<36KD4t$Xi1>#WvU6|Gurt*xTs!YYc@+G^dlb=Nxj zKj)6*W-x5~`~J`OJRdERoO|wj-t(S!o%g)w9LPbW6cc;ID(aJ;ZS#q=zbKP)(`wI0 zA_)f<2y;&j=GTC55zKtXxFr(TaB#N?E|I-DMs;N1(L&NP;w14JP5dh^U|>ZE-`wDh z4F)?a*x1HJbc_K>yskI;ig&>37$h3T6hl9GhNA3%C} zhtEfCe8}L&DRQ9b6-;g6xD#mmu*3%+cjE$;a!55&LB}zOeoh9INw3|**PSYmX%Zx! zHj1%587m21*!v$OWdlS>SFbWhuQK}Ks8c7J#NaaeFvuS;%GD!)cXTjPc(cVYlja>{ z;_f-38FKYIG^62ey%!an-H2rv(D@1!9F*0H$KijlVCzR6j0k?QVha61Mi|u8K8eRD z6Kab`u`IMj&(Ge(- zL}QrFsT_SDvV@KxcpUcvyiY4t5`n{ny;YT#09bl?o=%J!Fk4`B$?dRSwSvRPH{3&Z zC8xDyngx+T1fEc=09Y3R+g@QJTO|GwzDarRV>u>9TN=0c|R;=&xNVV@-n(O)dJh2{0&sxG7tzB7iT8{Es61J7xI@*a#b*+RgUolxjf=@d9R z7`8;iBuETtfG1dM2533m77S&unhX$u>xIDI4H~dYaMq5~>zhh=hxQ71s*6!06QoDhPX1dxpU!?d$(| z4XT>h0*)q=qaaU$^i?O=^G7TkgT1q0{IPXqxJaC7gu;uB32CJPt>I{p+j+r9-+@^` zN5ZHjmIM$uTIBl}FlxmRqz_@UKuQXBk!_`5$x0Q11o{&j9fG4m)B~gLH$ALijIlfv zLYy!tA0)uuI@ zPej5oGNI=I;IPQyhh{M!q9sM2K{|NTBHmBMD!I zPAOItnWwiA#Pj1+VjbO2ZB@0IJkZyqx_MwE{ajD*J%kj5;0-@)@jk)n95!l%W(hq# z_InXC5R_>k1(5F%)G1^joWPw3@={b-Q0N%P8So*tLCjA*dfCyd(XhrSJIN|}$D42) zTFFvS@@dk_DDICZP5{5=sWAwG6yOZ?lpatDG2W=|`3n?ABIrlTv@Zb)aJe88XfBwK z1^ArUm_YJ2&hF%#44fJO(v9JnPp~Rjb;ZO2o5tfj1(^w#6&Dd6gn;nLC&6}5Gy<$J zwucU5LT}1b9~$6$5N;&?VEIu*$S(x90)U_!@PGq=8J@EmkGDf&9z2_@-e88_olnRl zb&&lB)ysTjmR;!9sD=&nfohZ~Ttyj0dgX@8JGle9OdzvRX1wIUS37R%wKPEjMIOK5 z$Fm*vRUg9vAi*3&;2-#%W$Q1T0PWDk!i0+$51cy07YcnyEdh`4^J+Or338}#L+*Wq ze5eGjCP~QZXi%9qThKV9OLZXAGV{ z2y>7jBEDHIc?bxY1Q@}-CxEp%O`n&KOA_ht;xNE*Hhr?m9RFhEsOH4tUxM-2M%a2SF)#1`;sr zU=xlv2tke|IW`!-<6{soGX7-8Yz*KzfB-nSFc-K=UYxxL3_-PS$prQuUx@{6f^(@V zBs2*zkfz>pKk|{K-c~7&e1H=c&=0ENsYD1XaxX#(S7>$ZukE3#$JD)7&%*&6h;rT1y}TMC4lF^KKCpjaIOm0 zu_z899AsQ6SCC~?eNdRP#N5shz9oY+8)@kvrW{ERY7JMl*qL=8!jPHY7v!z=#0q^b ze=i(ya5zl`+geEl>WdSRD?R}^)ZXH^-=7CK*h}qdA&pfE2;NlG0m6ooIsI?f5J{bi zLr7pU1acCpq%ScACAcRrU{pOI)F{zEgAf>#{AWc}KmHYSd4nsFs*k1*IB7S`~;Y zM6{~ct0kaS0jZ97Rt2LPLRA%rYKc@;K&mHDRY3_9rwR=X2tE*M2?Qaq9T)gPjJ~NN zHE9Qnn-D7}6$hgH!zsYwCj(VPzG-k)gEz?K-K*pc=MZtZe;OmDgL6|U!J-(L)Q8J$ zsGegE4w(BGt$xJt#em7^9-K~iXEH(gAwJ?!b4g&N0v?1-$>_$~3!;B87C;GsO|Ia8 zv1-2n>4gnCXc1=Bz&Y1jb)0At-v#KCop<1G6Htcb zZGmgg`hZ@*bNIb823$h~oZU;r03!lw5mHAyE%a(Fuc$!1M@z&;o|cH?i|t+{aK%1T zVuAQN)5w8@t~RC>Qnj`kCY}hDi7uzHZ?4nU6F!R~3j3rvaz651&kVlx=v7@fFbdxn z95oAax3GMZD6CO8I9nzW*it7@fm?mc`|&=k77w3dC5A5P6Mx$hxdzvA8^Gx_+g-&Y?X{*2G2O)tIh}udGH^WoFjG% zG%6}qA=MlA!iYV9ne zTf!E(C47fFD}x6HG89=H zORC4E%e8Cb(-|~}Q)6MW;+!IfC|fC4sZ|-Na;8F!SktV03oRxN;mGm~%50B-o0b|c zLuJu<4z`jLV^TQGV!MSdjnYLa`L>L#1X`|8DOThOGh_2~nbAqccn&Km&V+Je1d4cz zi;2XAn{$&C@j^2P$#e_k@rulR)NQtdwk0%{*ui5Wx$b<0E*15dQUP{JXo4{+Tpr_& zi%; z;^3P#ZgHH*u4IeRIA@%d5e^oG;tYnk@OYH3mKBA zJgYujE)>ORGjus}7A?lYN6hwoh9t$A92ccxXC%aD^0LCEaaIF2uYk_YwdN{wb)q~; zUQ9G1c4sEAjN+V_balF&#fk$5t!eVaY2qYDv^tH+mn0>y!9_V>qfv??TF=ZCYx6Rl zc^rd~i}Hk)JU*8rwd)NzHi1B0Am&=*_zG8i0b3N$_sCqjOna&^LEugy8@9*v7O%APax6J>}fWM z$)d;+<>);cG&>_jf~IPD^y~s~*1n@az{$<_Xq?&{z1iYS&d!a>l%{|jmb`+r1Vow? zog43p%hSb1Nx3RxUTSWdC`xLN2GYdvgcm5;2|QzXcCs>$6(4R*iFc**5J$e5m*H~d z%LVb;3@6*c($K`|YO%s5NLR?Y77aH|V-Y)3oGNRETJ6fGF$}2N&0|N4byA*pN$iLzT^*BOpb%JN=rQp;1rnpPvSQdWuEA!eC#9(+B3VML zSpnoPHI|WK3^(!PqCMGsl;Lt1S$Y8yo6S(hiDf*uHPf6K&#<#(Vwc#HpNC4LSdvt` z%%DyyDBx#uje=~sO_fT|W@aEGJf#P>`Gy&ehnh z4!x9x#0jKao?FArR~XU-ig1O=32+wiIjRhlLr*svI0-VoDqF;KT5?66C^}y)Ri$#$ zlnPUZUc|8rl;S9^M?{x8xN6`+ImO|5PLH{OAI-E0bJIPd9CL>MXo;BYgN zWU*?2hi3GsH6A-!z$}p1Jkhb~ZlEenSy6GR?#w7Ri|Atv9*mUv7OHdn99GFW+5JL=Lo<$`QBqI63U#I9vYb(nqA@lcc2gs_s55ur9i zlJ7u-3g8@MARG^TZUOesJlb*P)T~<(laFqFM5h@p^@)QiIToEl-DmhVd z_BrPM=PUmG5xRr5P61&?H7n_o4 z0$qw?$)g-8G0EJt7g4j%>!4j3qwx+XlxG2J4vr`OOt65|W zSJTjJSFA1vsA@W2&O;T+_9#wTL9$&Z73E|Z5s527o6AH*2}V6Pj#=OkYXll&x`ZcF zTGgq!c}fkq0W4eRDxk&C1O`TuHageoL50Z$PD^q^EI25*AUs)0Pq)L72K<$iVYABI z8Hhx|mLmCdk;y4Z7dTYH>}-*WCQ{q925Y!kktSk?8(8ViRK8YgQ80Btt!G$;CNrC3 z&ljQ@7IUUuBVr>Qa2bmVd=P`a#Kf>OvViH=81lt*Sw7vN_ozi`)ML!o(uG2oN}tSg z8`F(>Qky4%pR7)2x@fUHg^VVQ6DbWWMS7GaCXJsYbtfC0$x^YxB~G`+Dn;o6nwq86 zr>c3WPCYxIV7YA5rBW)h$)#a$&*-F z%w!GpvpJZ%ueL*vosD_upb({le-Kqxrh#v>3mBFJDfHNB&`nN{*Ynh79ikA~fY1TA zA9K5Bx}1rqG3n1^}fm|ez{ zDxQw31Ko?4^F3T_aKWU+MBq>DH--yVj^q5l{ti*b=z!sGBi@r=|1AaFND`Q%B0>S;FtNfBnH%Mp zI5CI@L9J5J@-^?O;cFBM3YVq62abc#PxWL}!OPP+NMO#wJJD zIL<(RQnBYU1O-yfjz@(BMj0YErXdPrIFfA4MdXrPM2UTdWiljHgP2%3hBQRLO5=L} z3bb+oORF;DfAzqN;H#+54QWYC7GmcLlspdkmyk;YH6Z{`M1skyv_PT|fM1D+hp5#W zr&{AeMR{==MCl-v2M}u*F3=(z6JkMFP~~uFLW@z&Ezm}D5o3xp1K_PRs`)044cLzi zZn7jrsxb0UkBTAn7^4xlF$K^smB*H&Qn|~-m2*%Pjgu$Ki{tYcYMWY?fNi%rXy@E96IAB!3|a+8Z?b~|})u3W6d0xg&* z0pw7%i3e0Lz!R0IB_5*!ja6&(b_XgKpiV@sgX)>kU%=bZyC6ZJu%coUCzG2Tg9;U@ z0H=*02Lcd=RYR1?pIs_oDQ5PHgppm_+wg+k5)BF*vOFt`PB zyU?QwC+MR>O-6N+i4!e0aS;eJ-$Mh=7>zD2a4^L*ZZaYVzbY1p&2Tk(8l(ekFIp=` z5+r(#J4uY9HicCOBQxIdv6>5EQ5!HZ}%yLB6p-nk=CUKr{r53H%P|p(>E- zRM~nfk}a~L*@zrP^p-3{&T^{tmTV398-=j4vfZpKM33o8sE@&qPK(-1uzxP7%3%B| z8iS>jL<=BHr6gHWfc=dIpVg8AwNnn@fT7M7Igo5Q&yg*%XFKH}mLRe_!|9-X6MTlX z;T;br91k||L;-wMAdf*&4+qMD8PbfSj6sonjzS>kAyIBb$wN3O4;7%GrWTQNw46Mk zFM(~#cH^HpW)q4iOiECuKHzu1nTn{fFIE8C}uXGjh18LYT)0fEVD+PW6;nYDE1eO0idfm%1c)h2jQ44 z*&@2iDavcEYLayQFgGp+#N+D%w`JjD_{{X+p5Ty$h zShNX9vYa7vbMm?7c$D&7g<7!ZnNrXP{J9F#p&YYS2lOz&+p5cBApj2qWg|8a2z5(< zN)oaWo?5_iIR%ItxIuN>e6Xyyd8Lq$<>YDAeA zPM33>%zPjRF^JQ|0)Ls{Ie>-pCsfP8POyN_!cy_jd?Q23GDdSV0H3k67N9>=TsPoR zlU4=FqPcFZ8jN|qG(&C&Dq6?UnOI1cRw-4=tx^jRZt}B2q(v-pnvkW;LKLVD^?*iD zj#Zj3xAGAq_>92%at-**%Lj2GRT-3-%!Ps&$z%TaKg-XC@U@KB!nbczB1Nov!GXxqgqD3>^98@gVazrMT z0K~0<1_Z%3lZnMb<#MUq$`QHcJTXuvSRJ=qC7b3RwQt11xk~V&6U#xGQ=vBAtotTF5xRpCLYJl$(FMm z@E6LRcYNrO9zYKQ9`M<1C9u^>m%j}LzMCc*j7O%~fd7RAC45v||A;Yt4I;{w`T+7k zIA#OIt^@ndLFsZ~jE0^QgP8EYQ4WfKfcXiaX~<)k{=o4E{0k96fz0xO?M}h%5{C`- z9{dc;z_U#7YY}G184|M=MCg5OU~SRNX7Janp<8JU<^t;45u3z?%-_ zBvatgra=4wZ+XjMzXTpRELT@j&Xp7Zo`v?(V^j;mC3ac9Lywr`9-#uPI20gSzDdFY zk!#c-w~A22A>o>6Lg2TF0PidLh(idpC#B*Se0RIBOBEychJ5J#L0Z$<-n^1uDJI(d|&K) zpJhTd*c6+1AGB{r6tNn;MqxA1vXWJHb!Mu@V>a4!SvsCNPid2SpQ-I?pm}Y11`Fa5 zXQ1A41w);yOA(q=d1|YGCyW*Fr3_txke15Rnsk{$urP%342)QsPUCSIz;ce!o{+86 zNNHlbnU=~&nBx2dyYG2yhJist)Fw0wI*mFxa3MiRLghx42v3FR+$bH=M=MA35v~@| z%TX&VH@Hy|!j*)2PXnJDO=tnav%-40(65omkz8o8L$t%k;F(Yx!WY1HXjr>Y^Ya8q znjHM)OOR9(h!(O1NGbxKYvJtN4(kK>z=$HiyaK#=G4Qz!;%k7eFenEmGauo_13wa$ z12_o4gJ;6w0L}v|qo7_qq6_(c45D>IxR`Gbppidt{!z&f9a$}(}ph}?~`(93#(TPLt=j4LokFSR>6c+NCa?T!Ksp5RIa@f)$moTX!! zon?Iu|^%EPm%M0wWn)Sgf=u<>eg#w z0lx`^#%QoS&a=@BJaqw!Cp8=SiY&lK@Uugkg3Lp%rNj& zGA+ZFuVr`uE(!Eho+ry-S0($(Y`F%&>)!qfp@IZgYcn^9;~ZfFEB} zF2|Xh22&Y&^h(56+3}P0V!#23*mwNYM|i=E-Zm1;Rf1cqBVm4CVDdpgibCLH_zIbN z88VIFZQHLP2OXE9ecST0rKWpDBv3s5c%L0zjR9wEmqf!b47 zb}l%<=3kEm4kl!CdcWqt#^p?mJ3!88z?SQOj|2|fN37sBLSks}!;m~6$T#TtCcdMG{1&07d&t*FkhbB z>l^rxuo&3wKmQ&{to;hc$PbMQ>QJ!>*2q$@J2X>}pJK0?5B6MG(Z0NMOD>q4)~PjTHEfjesMIKwf51ei2k>MSP-FvFnuA@);9>{tkb@AVuE?OmzydH` zCP>v6g9818NHAjHzQf>+2-M2t0Sc7*zMTo3EcPsiGe-~Z;i2qN@Rj-ib?i+MePTGN zCD;+Ug_J?EWP)>7Ejd02xaVTarA{iaGCDIdq0om@B0RE}@|8f0mPqbOfx9eXnSB_s z-2#BeL`J_YoVXw$=@y%f3WY)!Uvs!)kOPv`f{CA4ja?uk4UW`&uPX<7n+Xn+Ec9_E zu}z9b9hF3KKU`#fUwHlmzy`QE7$4y81EdHR@jeM;kaTcme5w~vU;N0O#DYlBewqhJ z0ff8 z43~GPusv8+Dj_`9hbfwPQqfecMuK(<5nGC)u}y3wU&cb!Me+-F>@@|?j(Q-Ypzj#c zzT?RX35>ZQLzzh#RGh5?LVUP2z)lN?XQ)ySVZ?9EAThzN+rs$(R`l2CB#$u?y&BnX z+Z3jOG2X*I`9y&jYVuHW-vHrOpfA|33Qnv7cd6o+hlaKSL8Zi*qO=GQ4vX*Q)!2k( zae@Qda$S9~TmOiIY2ev_;EYONd8n$?6OQnsXyNgveZXB07!>S~pn!6}%izh{!4(69 z!#hOy7BX<+A2!V1VtnIVA*Lz8vE~?E;Yo4Crb1XA365?9qePToH6pR`3}}j&I=cc6 z=?-YhX9_Sxg3dm#ym}=kZwI{S60+#u7FO&F_eWq%=>~{f{8wZ zt&5ailj7@lHvwsaNR^0tM3`A7F|iCORUP9>I)`09XI` za171qp>QT0Lg=xQbS2BM>vFw?cKmW+YDKIbOxDCuY6u@b+f7%E+Tn2;_EX%=W+{tJx~g%*{QBA{YLgz&FcjW(%7 z@Oo?B55QDcpl>PN_h~eW!$$>Ci8_57Fcj@VdCgA{sl5TXhrEO0Z3mYe%8)MDKzmxM zMc;8Sjqq$K6aej4pM^RG&PY3V9vRRXiVefM;D16KSj+_Hbopr}a6v5QBoag6r@|-( z#;dTrGtyv3kM!rrIS)|Hq?bhlW*m32;E8>t=);K@cF(wPo*7U?&I4`0(I+Yq7m;J% zyf6Ex;MW0?UKCdrJD%L%9c0E;^m@7joC+8`Z^S4|a2I~PPZf1AIEB=sGl2o~-W^{- z>yfZNn4Ch(4y_#6K-3o;g__e7z6<{A<)yCAmyV=^&t7{+%#?g?sdp5;UMw*K%JKjt zaF-j>)Q^Z>*}+&P(g;qEPYeik;8*B^zFMnf&k>GS)yQ?qx zhydpQLU6@ET6!sC1{V^fIsX@gA-hAd2bgOQE*lFu5rE}>7KW@H0sx^0;M}Cbp7{w> z06!4Drphss{E2%@m@wyrBqx3pjh83!IG(SSKFmsB<2VtBQi1wRUC3VGg>W^=i^ki( z0Z&{B5yc^y8}A5(>fXsVMLFZL?;kt~8XaoKC>}WJfr7)HDt(32z`>dapUwgQmG}X6 z0rz<$u_-xa5E8&6(vX0Ue#$$<_)swp7+=h2RDcQtJE5IG0gn*`;6OOtFx~`t6{ZF0 zb8?*6)4@4!yrcg$Dnrv!vze8!M; zS3sx(#uR+mlDu8b33CFaGdL-5tcXc^MONQyC7}5ru1}zP1-R0!=wSurf%KuKPXsEN z;JgVkLP>_LNQ(d)^SW9-yeLIf>-#o-8i50$`iTfO9F70JX`em+zsm3v6oSD7f??@> zq5*{hN7`2p6DXVoBYoGhQ)o*u3)O={dV2&6EW$_tsTdP{bv0Po1_nBU+8V25hNiygNrH^Fr|BM{Vs_VZq*jSOs07v{OOzk^ZE@@W2Ki+Wo4bR@ya+08@I2vlcj=G7x$ovXt+YHsgcs z`-E9v;Nui}sYjBNoL@$Iyn!r00(j^pSmeX!oPmf14_Z~k47&dpdjabZ;e1tX&#G#} z*IBHl-`%)D&5?A72hxO7g3$+frvJRBKB@R$_SM(QKk6;kN20%==YhSghJQiYc5-SG zYTi%b(*PeNs6lvfS@779!0~xcu#e}9iTHbw7$gvt1ILJYGubJ~1P+W>zf{zTj=45) zlTIP!hBM3?B3(`Yc>$PtQLa0}Z;0}lFglz&BnC&>uo6sfVRwlDsY`Pj!J&sCDTSef zcM{9!NK2)7`lO!=CNveljC-+xvIc2{_Z25m#n1g3uL_udWo&tj;@eZ^Um=}_U>81k z-U3#)D()-RJU09}mK?CHqe|j~bLMd3Qjc*~^-WDn*XPAVr9{1 zGBKLQMa0k|V!<+WXmS#%lz}*UO-k_a!AW&cDb^HR?FJ3Sg&emE8uF3F+hnjKigzEo zjGZ73-ebz;+w>3?oT46l{6Za*K&25%HY&gy14uPP-ciLATPV&YA>k{Y-nd|34DLTz z&G+fh&^Ep@!r<7EZYgO#8RSn0!{Xa41M+;JJo(17kX&pDwZ4GGc!LKUbD0=@hz6lz z#ZJ8q7EJHVGmwJ+K^W9Ge%L_!t<6xV7u;cQf4r+NgzUZ@#6Zp@COrNo(MM;0*7BA6 zK6#}JM+c)lWp>~TI+8A91@2*R=W$dC1fh)jdP->?7rP)aB)E-|UI81ZOb!ECtO`N& zEn@?;z_JM#AFzqUE37!QNZc7AX9q;YA73h=>N;l{$T@(ymXY`;>ND@agFKjyFc*fR zBe4Vq=v{%kgh;zVMs9)}4v>gQUNr4p`@uzkOf>K}5PqUX?PN!b-Q?|PWj!QOz_Pml zCwRy+((wcceJZ?860B>HYM45i#E42+%EX5}fXe`ybiSqK{wWUw^s9a+q6 zr8uJjPECk)94hu+GxXm@4lD7nLLftp#s`qnPwP_a`Sm?e-FPoR@n5_514h;f1OyZW z^$Hfh$9}G2h>lHS#{ zW85k-AVOe4I&8sq!B?4*0*cSAg57z4hZnmoo}yqYn{QBE(_kOiyBCVgSq%}=B)1)T zs~DNMp2aU?_i{;qrov^Gvf++o4qT7o*RTH{XB5b$kaF0C=!C+h7U6fK`;7<|Bc;rL zE6TC;u21?5g?BX&rj-PZY9JGbzzwNr41^7TPzl9KkfG7Yy zx>$Y^dCRnSkO`pxnu3zQ6uK&IbAzop(I{@zL(__a0gk_43#4}r849j#!h6dx3s7~^ zx6e?(?h|rDET2*5!gPGJh}ACqj&R~%Fm3LL?R^Ov&(O&xA^aH%1%lFsA-DO6LLme> z6csF}`xFhin}8f$U!N<|F686_UK8_A)e6ZGUNni^c)yXWBu5^+AGmLo>I;ORB4i*) zK8%|1gRi3)Z&O5;PLdQ5mvsBVM?$M&0Pw|pq6C7*3&0M&CWk*bT&BdLMk@HI~{^t%}sEnk$A^4Nw&B!^N=D5en`M=9>lJjh9hT#7cbF z5E{lW%`c!`QUL_(7F?+i@YdOd z;iRF03dEhoBLQ4uW!L|5WDGR%#1}UW0llI+lm-GXdB$K9Nl+Cb9pbSMVlb+ep&0bc z3&`u1;v5xlzg)$347Y+ImXfLsp+ZZDUCxXv0eCSp;CgDhFYpekb7^qM6hd;Gy|W7} z@PM&TKoK#dzU;q9BL5ECjF#vve@o;rdiwePA#aZ+!WaJW73|&W_TK3PmKeV!_#crk z;Qq*e0)skr37AS%uNQ%n(SHPloLl{)m!1CiE&mfL_&JgP2#L^3WpBX^#2RV^0fOp@ zlmC$c|EM42yoHDk{v#OP`O&`t61=ADbp!m39hJsaUoA@w354!kHDFXn?y3e;wdhq1 zqjJHi`u*z2PSsGVAwE?DsTSu|4W?>AtQtmjWU*=}0XFuZa$EJJscLkHPT@iIe~L_q z$OLu55!%pJbPTc&K&qC>qlPPnqkIp%Iw+?Y}-k#tN`padIvV zgBEWcfuX~@knuShyaySdYzB4$ciO>p!gmKUw(lCI$mQfX?0td5P6j&21)|_-p?6h} z@Nh#=D?~#eV1`|DjG5(XAcoxoREXbj45t&-?h(-taZmAEHTSmf5Kb9!wQ(VStuY{_ z`E8KJZ#4Gtmv^BqCIWa=l`L$6LIC zH3(PlGy%{A%AnP1Lx$HAdjaE1s3bIO7Wo#i2Eg4hL6}hc43EI5E@luK|2qlYeg4dsrtSmwkdWBX>Ne!68#+N+CSxNeplTOQpf?qXl-{Z&Ulbd_BE>hO{Fc^6yn zYTax}*^f7uC$3M38FAy`7-Usca#{JA(hE&&r@EI93bQ#9GjH&}FFM%g+gI~ABc>c-Y|ElAujK?MM)h~+!sFl-S$)K zkJrRCUqoY;&-!au?5^0qW}M#E_`+X1riP7l?QDGd)XZnCwxl)77~Em`?T7RePZYoZ zxNrEmiwiCcA6eM$=8ZbxXA^eU|H5q9X1Bfn-iR$n_r$F{|KYMO6DKWDEZwJGxhJyq zPv1tY`HSm#ygBdph@T#E&T)o}Yw3EjTi^e|&K->tk1rpYa&;B2*phT-+!y`x2F)Kh z`lxmMsnbvD>S|21$=tV#?fjOPkDrTuC_BBk%k59T8V`$I5yq z4bl#>vK~hm4YZ55A2Sozzjv86Kzn^-|8ttM1wHrg*%KQx;eNAQMK2x=8g$@s(@mQm zpE#n@+&cB_{H65O+U+WbIa4%_<}{sSpKj1?V_jMO3oqNwJwfBI*%o=RUyF>NXZ16^ z7$bS6$a$t%ZZ9ZQZrP@qUUp-X;}6|?^*6Pq_n%Ot6Ytxw;_U6^ntNLkMdI=glbali z){Wh%8@X!M<|V)M%CI*)p7xpedC~l${LAHO%UA8|cH+>zFf{U7M!3~tH$QF@Jym#O zy=VR9nZ+khoD4gsb8lGJc3)<_S{X}q?J~x;pBKCAdb31pi@obs?OkObxXGbrZD_c^ ze=F_IJ=sgPMK;;o_|mHl4c}9YIr-x0(}RCK8r~-Rb}L(-sn?UQCb`u+dPh7RpERv| z>$7EpKl~oX<9`4e! zHuSmpi*n)&m)@{;9eAV)}t=WN2Kh2(a^z&C9?YuUFnyUt`*>^ynKGq>!-MjOT>MQIXr+Yt2 zrq>#G^%wi5u?NB~*6EO+v}x&AYqv&^oqqA*ydA>}T_f{1?MYzo-ajmNNTD^n^tWc6GdHY{>lMwmiZ?hME%unl>{YirA-q@A zo0lV(#`Mf=$ZRq9#nK1%hTUp?)v5Id!w#%#m|k4|!_}Lc;?My@U|{SMrXvcXZmYrUKu+iLW< z^l5^zEb?Zz z=D*nf`e`T5$v=uNtlHUa+yhaAKW{Fm^Xrv)P0fx+%!PH%r!5}L%Rk#Ze|-0P!XmRm6BTI|R52w|ieQ{867r~VNUtb!zc>BfLb)MvB9_5{~uWr(Fv2)mg^E~0) zX|Eej4qGrU{Db53J1Cakuv;Hrc<;OWPyebtto+8KM{Qm_c-jz|d%5@^@80=S+AA%; znPPfRSAO|B)#A*ypFQH|b7SkaJASG6l4~){qOP11pX$c+e4kk~u=SU^TD^8noHSup zzio^594POXYFU3}(YqhS4UfKOKi{c5f7AB)$L92W-;-V1cJ6V*q&M69?|P@GD5Ks1 z;n?lXpT7P@^u0Z0W$*f*jXQn=DVgSo(YCu3qwPoU-NGcE9PjD1Xaqj z{sP(3PHpZF>t9%OZqw3x_e+Bpj&jnRMcY$Xq^}ZAS@KCUK6hW+mOsv0Ui0&Qtn%ciqkQ zHs5Y4c`*9acVEnYlfR_r{LQI##eZ`8-dW$DSHv+?Uby=z%xDhRv$^TA!;T^_e9<8i&`CC`d>kI7&1sKf1Aw@yf& ziMRC$kKE8_(Xx+5Dn4jbW3#PYgOd>*&WoSkXr*2_|JK3$&-lwBV zqE5?Ze7tk=!<$5hH&V@4c1KYBvxg7oj^sTRumJWUoaS+@G_ z4-XL0@;i&CL?+qhu5H$BaidQgj#+J(a_+NME#_$!s+u=%K7W3Up&x#EpyBifTMj;Hvu;Hj&bnVetGoOA6;tkvKh?6u?!{j% zYjN&G@AQ&C<}GN|LM?mTyyd#x*WcfD=GYPG;UBvlyM%UIziensPiFkF>09pb6ibtZ z#^LG8{_A#4t9gCN^YfiI?rT3(eV}of-df!KVe@^Q`dz-?EYpTqK;szukg!KDwWB{lX4sF8_7w$b}xg=5Ol0{N>UkvkMgTMPZ*b zzPEpiRUU$8CFoo8Gk2pN14L!#bXrSNs{j9s1(-*AK34vV8tcEm`XL z&)WUqF1y&hjeJRS{=8rB?-{gKTVnpU;Qq%kXS=Q!9ZHsI&%W6|se8>eF|`zZ*L}Kq zpP}~deYa=5em30^7QK}=`eg@AO!kq?=8KR2{C8UP#*?ELJv~x>_Uy}_mRww4)0p48 zS?_1R&H9@$%67SAK<_E*Tg~{(6me$G)+wt?6|y_C4(^}ScOUo0oAjqwgz83}m5J-N z7b}Ovr|Hh-6eyIjza8BF^vcEFQ?~5<_1tjI&&_A5JlkgcvN3v74_2qC!Y#kvR^EMb zp{)K;<((Q^+x$Fel)h8Mu)RE8+EZHFB@@fn*J6);u;u-Omu|DiO+Az_{!n)Z%QfK} z{iF>SdYrgXR3X$KB{g1O?Yr_yVi@=8pv$*K-^{7^Zo}zM)!7S+!#GDyzdQe-YfQlo zJAZui`Pv81jX3#0xt)J*t!ZlfM@t81e91j&zqGS)@Ar3?Sl6ApB)cLxT{h7qYo0nJ zYxn8p{nzd76Gxx0IQkuKGfS*;$>i*wUuitc9`kA==h-anjV6(g!ot#Hd(10LPnJdY?z5+0@~(QPW7nK7 ztJQy6V#%F@#mYf+X{VF6(NS;eo{Dg9nE1(#3;WoQr@s?6`(nq=e{#Q#-ahr}vm?ca z(|dh8|H+pN!+&0qxH>Ak*G=Vy5#h%-+Z$Y%G4bxS4^|GIR`wS^ZT?M8m)0!}bqZ*)D(n@n;v#BW~x;o#E)gKc8=E{q_B8@;ZIl z5d*g9`)s!M{B2A8-agN^ob6LHV)&CEdd<^}DjuiKy~+$9nHN8^;hqWC+P(B#9h_%A z{`KdNjxPJHolAOkk@0g^_>0Z8Ya-?@C7luvPgxhc>tXb%?aLZG7YENLPHdmrFr}^h-nv$*!VSGz+v*R0vA}Z8 z(4uL&>r%h){&$PI@2bUW_>1f0(9=nmo+86~hPBVz{b=n@W5Xf8ePr%neAMVokNd|u zw|~~S?UA-6wTBgdavrNCPH!9XU%7b zK8V}&)$dum?w{X2dkjao_|b#3I_=Ka-MMz8<$T!Pquq|}j8>VKvYI9*>@H&+`}oo~ zADg=4^M19Xr20V*N!`8 zl=NIUO`F;4*gn%LTKelX<1=3>vfwUXa#=B$xyw&i* z`8ioXv^cj)xWW3oXwqk4`Z2|C;@8nL8Xda&@~-|^Q)BzY+Pp7+eLkXwV9dw$R=&6~ zW%Zr+IFplx-+%SpYJqZn;xVCYn*5u!6Ve5xG3|DAOSnw8ws06S-mAIh`xYl7=`F@y zZxxXzSG8-hrD?|euzY7!lc>5c7Dp&g=cIN|TdylBc~bIban0z)t>YW~S-0lnIxQPS z?8>Owqw%saKaSn8xaPtyK8d3xg{OQgWd4zf4qJV{1@n*CZ%P_5|0o2BNARTHO+S|4k)r#-#*Ykv9{OE-+Crx%&ZH`{*r;PuS5M{UQ(Zn=NE z3%6lkZjSy~-NP6EtZ{Tk+rFP%dT{ts_Q1w{M=k4rt5$8>cayJ=Ds6bAVJ7{{^TU~A z+tilP7F{{htf6SfA;pC9#fP`|Z8&I&KDG7cm9uAAw%3?2a+bb>?T=2iPc!~Z8rv}X z!%MXj&+yx3rVQbhzRx;MpTlh{s1qhwGi~izZfPg(oXh;S#;(7%6&Rhac^$q-n4LUf`?yED~X;~ zBJ8sBc=2W?!#b@**JbCa;>~f4k+mO(*%lmnx3-mbadGX$6T_$1wlY$79vV~IO22ri zwly}Tc(}c`HSVHq>`D5?!DCNGUreZ-ST_7toBKc2emV2dskns zqHCwl?t|=WeuuG^!=E~PLB}C8a^5SQ&)0MsGCikZX%WAS-sN$@+I1zZM|3F#H!My+ zbfQKk*BLg}QRB<`ZI11scd5U|wA`3Fe%j{f>6>>>+sy5<=~(e!GiN__bg94d__v#P zs5|M?wTt8})8`enz0%5P?>7L%zR(r%de<0sXoVB}S|7lO& zFI~eQG`l^k;KMt0*V_5A&Pe&9#KR-nbU#5;GE0Xqs&_bfLjUnkVoIa=r#ttb_@rNH zeSQ?9%l=~is5a4~=C?UK%rs$Bv#i8xjlPMSmDf49lfKvCFXsK6ay%;{Eq(#xLs6T9 z_3ud5GK`+(^bf<^zG+!{ng4r7{i?(6E(fOWs&l9R+5`OGyPR)(__MZ$KYHg`r&1oj zLzj_bp7d(EzN91atWD`H{;-ZCCqHRXTE_pWkSQN*D5nWnZ7=n02tuo0_FF%`cl>JI(*Pbm;A8 zQ*+B}UMvfrwUxb3824mTjcsQijLLLefA)Cqf#sLCmF*qbXh|Q|`G)+s&R5ok&G>aR z!28`->TfR3Qg__K)~&l-_QA`i`{)^6ZofR6-mElzZJmK1O?onG0DDi5LHCbc=)`>4 z_3&?uY2zl!-@IRHy!|}Bv>D*573>1(p07XcadB8_vk6@~Ct`J_dgpA``hlXcmEJw8P&@83_12}p>}oud1GF4@09UBy8Wy}?wK6N>uFEw zmu};Kedif(<16>Ik8eNQGVbqnm!IG1^^8_JLNw*IDr>M!P!xsKTleh~U4ya~Ehp8! z(|hV`d;b>AI4{n(Y*529{kUZDJKQzw7q>)%CB-J|4WYwR1$5^jEc} zZR+;yY`#$CrZnceNlqO{&E)*tCCMQ2T3{ABCyriLrOXU*AheCXLm z^FHkT{q8wM7J5XdDuGfi4!|!~2j>$M( zoc`oTfveOqGOBZ*HaA-oq1qcT@4eSLB&N1FWg zq^rE0Z`L7vVn2l^$h8cA05;-6&1>_u)kg z5@uLxHZqle(`6C!HvjO7F|%hd?r$uwp{u&nq~jfb9lwpcAFcvF`quu z=o<+hl0C45}#MIf;IeR7UWyGGwMAjBT@hKV@O1D}-8SpF5rdchb}n}2u(I@$ zU&@cw*gBt?wPiC>cKq}W-S^tTOD`1{DVKbimoazi@(U$J=a%L^7=~r&nNZ63V%zPL`tLfV{?b>^5` zj8s>vPD}T+zLX%EwR~#vkpb+Njc*vvt9RTFA1>@Ou;Y4b{U%egAE332gZIDxbL(?0 zJ9ji*D~Nm~YBG&9KZy|p2ze2Czx|CpJBo@O#^;@f9cohV;=~JVU+U}TuaDE$pW?f>N=7035-EiMhWd3jZGd~wK5RQl%+j5&R>H5D>=wS9Tu{idGi*0Y+s%G!K9wb%Z$hnj?!H~t}y_MlzfnAaVP zH%^sYnSR&3cz2y^{ntNep(tFLCn)=9*3ze|dcNd0?NDDZs`K;Tm30Tqz2>TWaMm?Z z_WK8$j{P|Dkt6l{JxxdOI?^8&3SM_SG_&ceu7^%HebxEUwx+MTANqa$?Y!ByuXa6q zfU~-ADf@Y&$(eDJe;d;DO8cf)3cKz*&~@K)K~9JF&yM7;emRN#oId%tW}WuQ1UW0~ zo*gM&{c_B>XX|GDq(O6r&AolF)7g=t)h}nTpZA~qTb-s?W_I1Ta@_4vEmyxB|N4_x zn(sD?Urv8L{+0W?t>Tw8&xW6S!+v#q*Vj!BG3*@-DeH50zE^yBQrcqX%3oEwtP!}{EF+(c*X;onu)&73=Y ze68?qDcufb)XnTMqrC0b8(&Uh&6t{SNj|5(^aKlJIGGay)zA zn7Mq7v+14Qjb?8J0NOU1ef3bM(nL_F)kOa9prrpY_Pzyk`M>|_HuSys=aAyE$NOhH zu08MgQ*l}6uV?-=_0=fpw?BR-ShO^u?&BJrO6q*^OQ$yXzMQW8wAH=6(+7RpEbL3k zp1~y-xtTjt`k3wy$lR&R;{15p&ODKCYqqCN%dGMed)<~<`J*r2Z@J;{*dK3hAK0S( zFT2?%GV0a03l@C8tbd99*n$%Yh2t(OA~eotJ@>5BZM|s=-;)qo=6u$A&pPeaTlcdw zMSCKy->;i_V*8K9muUBxOD;N3tynwx%D0!4F<)GcFI>`n_ne(3vtd(0;;fHEk!4xW zJ}mlf)U-1zd4ko?-j$tm4ZUGmFndkW;5SWQ?dbX-ZQgYI`SPNVA8R&TE;u!GU1nIq z(wWmu<<^MTv7djra%b5_L$s+~%%ic(a!ZQ`#b1_o`RLnAjmqb2S#|&^d=zg=w8(a6 zU*HrzYHr$ZmaX{tzNCEat@y&J&u+YT>gxLb`IC3L&9b3C+u|M^vo1RzDl9#8seSp} z2g?rd3Ln)zVjK}A**JCQbBoYn=s9@bvXLDJpZwvFZS;5xt4;q=rk!gdrtMFeF#gV( zi=L_JZ4OUJiLr*sc9>hMqfZ%|HF2#x-Dl!U>#*-rzTmjNI-X_J?P4$b|JZvExTcb> zVSLxVxMD#?UD1FFp%|JdMMSzFMd{K*2oMPgCZUPg8`fp*1-s%}uvhG$Vgq~c4J%^D z%6Dew-kX~cTz22*`To!Q{6F@$yKtwSIdl4)nfaiYI=4~w_ui%PovSi_3hZ)U+9eZDOHaPH%$iigDfe6)Ibvk__C^|#9>$V$jAExlRoM$Trb&T zYsEV(^Y6Idy5+WEH4WzS$~P_6dHvhu)`qVgCU>4y-LPc9tZJQ-!-lVQCl5B<(y}CJ z){`c~CVP!{ez>q?#QtKZ%iVcDrB@XFVCNQYP_(wNxR zH|h6c)ctMdM-rDle4yp9t({T7y{0XDG*92tEAfvt*F3LfbbqqfblO(^wzI#r(GERd z7+<9QR^ghVxDm2*`nMCsol94b=&HZz^~<(z!w2YY@y{CCliDHy-|KPUNzwbGmaq>~4n#Z&^0;SaU_6h@xKm4-SnK<<8cPn7_+w zuZ?=WF*ow!aa-LJ!-l^& z<-T`U^z!Cko^0P-?$9ZrqfSJA6eKg+@=3KQ=s zrk{1&^|;WgYna2E#ZIGFuC1EqA2MKLZm&fHX5|Jgnta90#3z1D?!^TII8BC$2AnpV zFEp?*JRfWD(onW0cd^i5x?!8yU%Q`+Ge}%CV14d*pH;WrM$CHYxBFRsl%(dv;oiQ* zpC+w;Aeq%j-h15q^6p3TZI+eI8((SGaM;f7W@T}$^u5CJkB<)9IPm1-zKt%voMN@u z)p_IKpt08NF6vF$>Tu6(PkG+>;!m^I?0FRwoLlDK|JLfY-76L?3t2y;heJ$*OD4H( zD+HXfId1FZ-6jtVaww3uTl=`5oE1 zc(JU*&DadvGkT}=|^S1uF12{ zsFY1gUpwoa!NV7KmiwI#neKO9JME9lu*7-#DA&ajhDPq&t7Asn>-KqD? z?99)@zH6t=PCdN)M#kD%L4Tg}y1v}+kER#H-R%~CQW!#K3fug-de1ms`)@AS{^RT^ z_;tbX1t#yTY@ECP(Mh|Y@}};0MNIX_oO>55t9DnW4$i2aU0K!m*1hDS;$4bKebOf_ zt<*kvN$>kshkctIrfFMj{8KUNUEt-A`22vfwd4M{s%O0UR%Q14`^k#O=PM^nTr(tg z+RT@wr=qV0%QsfuUgjU4fAq>zvs-7kmraQ3Wpgy~XF<}qqF4QLvLC*=aM(7#iQaT) zho^7+rbgaQ)5}+gj68WS{n{ky4UaF0(t7(O;E8UiLc87jnWpyhrdU0gQnqr%&%@j+ z0?+l|ySmNhfb#eEL-gECGu9c}cz#}bcZr>1QH#f^&*k=SMubn#3zfS>p9yf>l+f{f zivbN^-}&?Upx5RWKW&_JXx6q3A-_r`LDsZ`37obf{zLt$A+_ zjobH3Upw%(%*mlC_ax)*M`T_qzI(i3%eU)1cYpEjk~u!q@#L-0w})2l8)}*nbE;uP z)+NEs9LJV@kFD=gQ7PB5?jfS2p zQ*8wyzioNn)p3EJg~thtYqGBy>$LOYm)&c&uur3i_kA~w$kRPoy5rE>5}V`C&i2gC z@?0|TxlEM0{khqIknRx$H6D&Zi9v?5yC=QX@wn1MFMEnZ3&zPP@8;lA~v9ls>;J@@O)xe+zujCSblDBdZ( zjO=;OSNOdP*7Fp|j=z@=+7w>&(WBRVvq_svdclUxyV(83bF_9Q5A9j_OU9n+J6m>r zICHzxh5lQ+-X7;z{VZdTIC<#CvD-FYesZwLq4T4aqHaAScbWNuWw39^$2%*o*q*#P z`O^r4-(H@NTjuNRdbm;Jms<91eS$2!4#zhRZ0i$z_RrXb zW1ngzaIg9w{;ri^V%z`l7%lC9)XigE+nx?cT|2h8ZQuTf#f@7ARdE_mGJO(|I)1F3 z){LO4*v6j5w&90eBab(K67sG?V|lyI&+VNL^}TYhL6>LtE{BREJ+*Ah(q@mIR5YV~ zRkJIW4Z1w-WPW#Wp`dZ!>o(4Z1d+#ov5kK16ms|%tu6(3Uu!K{b~jh+aZ#_IjgI*1 zhuyv3p#5IO&r>7Y|2#D+(MOi{?_K1f1J|48x*=?^o2;T27Vbm znm-w~x|wb99Fw~zcm< z=Z1w18;eu*y5C(;c(1{dN3vh8KIx<%JImDbP{Ne~KaVRM*H}DkdYdZom872|q9!%# zAluVeET7(b^Q}3icg0u2ey-U4rqSZ(_CbfT3X2={J#OQ7NPcN=Szy&2t?!?CK$@Lw#jpNB%7tfOwxHhEWk9;WF$waD|+xh64i@Ojum=bFeM%5du`x7)q)cKJL^(aAdQ zmcFR8$Z+d%x7*fv`wib5$Q==D&~;&{r{S9|xg+8XmM$z!G<>rscLd)cW?^Zl;hP<~ zBLoI_7M5lhzS*DqHP*msVX432n{ByY;|vZiER`C*Da!rIHyE|BG{$gix!Ydf?q+$P zavh%LKD%pMqiFl7psKy8^up?KLpyfrF!Rm1bH~5A+K$a__~^k%-+)%y0z;FtANx=&mt=lKrQwhd{z@KRpr z+cxE07OxNmo4=lM^5GxxDF$y3lnmCY%<3)K;oElBv&isS`-~k2@3Sb{_2hoqo|TVN z9^X0DaF+d0UgG!A%-A?j;YhCo?QOTX?)$punI{He^$D3 zo+#ThG4_wQZFLs-HM{>ZksBaeGI`MEfivRzMYg!q%OrE@qM4xy%}%*DJEc?od&)hF zn6BDRZMCI3Tb}MNy&Gszeb2uAoJQ+h-R6!lP8#O6%Kew{&ev9=|F#oZcI-LhaT0$} z6(=O)*F1wZX3yS5o*Cft;LrW8ZL=ZGsncX_!1!&jvz4S^ z;J_7$ZRWMNJ#nq&fW*72W}JMt@YfpoyU_~^yA1N5tXMLo%;@~$CM9W0o^7987I@Cq z>HO}WrW<)&2^@X0!Mf9}bXF#HK6G%bZ{afYmhC(~`!)=Aa|rI<z}oaYnRy*pS%pNi}ZUKVH7L;o_L#p-=TV4JYVLp1jLtM?u!(K`(-CW?x)?HC}hR zeeUCo-`6g5TzGY6gOF{Lr7Jv#=0=}?`hM(*hoxWFth_V($=)?9w~jaYa&-FUKYS~z zmQGt^bS_{`?i!SG3FBf6XtrFpP6;BY$DwzRTG+Z;$+A zQ$@Od`JZ{$X2(qyMLun3yL8$x?{jg(SGji#&*X9)*LO3|K5$OB(`4#z*JEb;cGc}Z zrRV$s+p_0u@+}`5mDx5s;@Ryf`!rJ;VFey63@{{>=OKakPEUb>>}u zO&`8W*2JWy-NwaZPFfGQjyh&o-hIuS{p%%z9t6KH-0Kw_EZ??{<1p^>3-hX7C)X|P zx6Wnj$s5_Ob5FJS^JSFWdeP!>3+;uQOhTXMFS%sjapv$_LwC$cf2g;6nQ8XO>%3L= z&0nluB%C&L1aEQEHvYY#|jH7xhRxHmrn!n<{ z&voM+lkU5Eb*L^HKgMbO%!Nhnz5;2&$7Tt>_S?T^4*zZFt7i)7g{iO3-s=_L|DHp) z?h%7W6qL2ETy@1@-o~!HT_=M+1`e;7azE(u?HzhYlGluhYPBTu(yEyQJqz;e2EDuR z`MM%) zoOZda(<#Hx)mtun+ZR1zSJ_STXGcFi5nH)!H~yA%n!B;PuWQ%W>vk+FOHH_YzR+f9 zO0n*X>%60nJ}uZ*{A5uA6B%|YfBUtQVYixJn4`yCQ9j|t zNsj|ZzC1eOcA&w7Oj+ZVkLOIyJYirv#Qn*b3lE2!>X6&2clox3!zzZAcrUmzGHd@v z(+>NJy>IhJom!?h?)dawGv;gvJkxD@LW!M&j_9;kO;OQX+nf0tQmc=pRu8*Zx&6qs z?E{R=+g426c`n;<#OagSzKO5L2c}g0I?LpW@xhB7It}nB{;)R2{)Se@+l=-V^P|Vk zi9Ry^%ei|8r=4qhdfnY2oT)1sKmC4XjMjp%IeuCD-5pNz628B;x2als zFK$T-`%w2PefOuv->2_&sl4F$@p=2;SJzf0kDs#F`&B|z=1E=a*HLr46LSNbo4Gx5 zX@Bp250BQL``yZ3x=g;WW$A(D!kC&KD;Dk2aCwoy zaML!ez1M4&RrB0B<=-6ei=T9IC$sqPA@k;Oo+R>GJv-S0B zLz36;D2#6R?0R&v*O;M-%i%l6-5iqqOWNQfza4j94qa{&@ov6elVpVNJ`d^h{nm!;hWckD2DR z^v1Y;<`cc~{VuiUdR!aY-f{mf>*lsyT4#KSj@N4! z{!>WAh=!+E&-wMym==RBxA4g^7B~dn`4V27)bHV@>RlG|PdRj`XrDZ`DrV=|s*Lk9 z4{cbv_V9ygk)_%-A#?Ndy0@;;`8>IN+NFo_wrN)GvBTy)(QlBSxM1z2?M3d_Y)!Jq ztPUJ_D*o{AgY=$!YxAi8(nMaeN$Zmj_IUaXYxe%uP0yyfzQ3i5ed3xg@jSd}Yi#`8Vc{orW~Z!tVeIkx$OVH@9uLc>e6`DS^7oDY{l;Cv9RFuS z-+C_@Kh^m1)Yc<54JT7}#~pVUP3C7k-^mey-%0Wc8&3lfBY& zFWEPr)2QU*x}BE#IptZMvV6bHDy`Ync+1jnpR@HhK8UEkY^(3cD+@2Q8e8nX%6M8= z->{b{+8ce|TwB}k&?uL%xeczRe0ZW*WV`If)fb9gvCcQXb$)z2X=JyR-(F2!aG}Z3 zuHV*gW&#s+o3=Z5v$Qb~-R zE-cRx_lVlC{zlQm%ylCleYo_p=*h&R!qM|(7q#Pd`i*$Bx?=X0x8=VWH|tXnxZAFL z>T^E#R+Ctdf^8Q@_0}tYQnu_;^A+v(E!VcmKa?XYE9yMs+#J$@)ylhlF?`Wf^Kbudgw7x%Vc8!NnD@TrNdVA%B zeP!Hcez~7Ior>5#Mf>y0zV|nttZBceY5w-;=DiEw*f_q4n%muW$J3;J`3s_7Mpste zAG3eovz*G2vzp#6Xq~>2dBw?1x7tPBkZ#}Er=#QK0aq&eEG&(f z7Jce-;5f&s#G^W=yF6|=VCmbG!2_LER*lko9+`9ItKP{y-gAGR&vmZu@nwIv&-r@~ zj`Tb~;Lg@}d5uO*w=eFnFHkqOXo<=G$jn`SPn&rzets)1%C6TTBQxK*>D5ki#82jY zw!Yw=e(w31BHI!7hn@e{V$a^}`NP*MMh$$J-TIA#!AFnMSGgl%HVBtJ)pb}E^J4nm z;;xfFe0vnRYTKSkr+>dWrKS7EIRA&-?%6XjRohC)?4b?94V-qvvlrM!78=^ugFC@~-LSd!NRM z`~t?5<#kz{vi5jr-0KA;?@ZTD3cDG4x@O{=RR(Ok}Wgd_8D9L6MtI2 zf@jhbemO>y+`jF)|Le`8v-?l_-WT6l2KwU5JYT0D4F zGG#zkGb*xmQhx-S(gNZG8FfI@Qi$TEiN@WT(bZ&WrR%nKGgEei?zp}_{H0CAQ_Cewg{6lj zvQLJ?Pd4kdy}Vm$kBBmf;7Gf#?Yiu_)O%jYj^CWuPK{fdG2}$iUK2{mX+x?xvh8shP1PPyb4Rw_}mM&3Re*(swPYqSLNkxii0=&hEJj zKKiY>>1h)=Key|tvlG*U4j35*HR$FWAKA^az;Wo-vnG#k@mg74F4|ks+2eeh25lOA zaWp(X`1((w5B<*-jCJq#+xPr)Mn9*vy~j0;;2pa5&EuEg?{j)RyRhWh%ButYtF6+S zFYYLrK=ouBPR^tMWR9+k{=aS2KCz&^w|fV;{blU%dRWzF`OJ zjvJn|99Hv7*U;-XoEEejspXTtM7|~SlkST}Ry%hzwSzQ0MGuRFfDU_$XBgRv8~eVXTYGp^AW-EH^x zK3j38mr#DD^5%ep$2)l4xKw;Zzxvp*MKit~H#2$AQlR^JbkOSZ6E8ZtY*@NEFZt2T zb1QU5TZito7kMrG&?hut=ASEW7@c0gOZ>Rs>d4lLgl$Guo^e$z+SIs=+~y?HSs0k< z_tn1Pv0JY4>glWXR=zym|HI-Lon4M~onhOYw`qN8KBsp{R;Lz*)yI<8ymcF*FPYtS zMZ*K%`ZSbG8M5@|vl>I)iY~s>syYTfGrq4^(Y$7n$?azCiu!r9GoQ9LuEn=y#w(_* zemBl=>ZgGg+|6I&rhW?C-0f*bNc*?DVw;ZJdok{NhiPp;TTT5Wun1hRhrWur$dxD$IOdbt5A6MwiL;v9ZuIi-Zr(^Tyj=I##mKhf%%>eTpK;jyUfU~& z{WpE(e9nv3y1zFgY4Jci$AB|#u^)fdb#ka0c__Kx-NLx?N%r01*X5q>)jGi-MCV+T zxbe5dA@@EFn42_y^f%$+o3pED8eL9(GgLaI`2*hZCedZV9Wpj`Jl6Am>pLTDj#^L6 zy68W|x5eDlH!Y738rP$*gKPC~eNsbhi%l%u+^$@hlzX#lSnKI4c)I(&*Ix1M`&hO& z_lwhvmap7?nUJCP{YKWq)i2Ut3qmbRUPexI2rW7NB7NbtIept`eZSSgplxKCkh^<| zr;GFHxh~G5zfBk$`g#C2v)#<`V?*Dj@_hDSrReXRu$T zR{!#uDRW;BSUkMlykYB-%o=AjoH^Y`I&Gz7%DOwU>&1@-e@<8-opIhY_dpNtJKpa$ zg3R0BGdxQtxbSXUr?Y*&7!0oP?viUSeQ5Hmq-?~-6=lJTSCm;AY~4S@^_*l?!TV%x z(Uh(0w+u|)eelG~mqz=}I@n!1a%r*Wyrqv@^-i_xlPo>HLEJmyk)2g^RB_Lnb1nQw zcG9>1{Yp=N)6C|_UzglC`uauH=?jYkMN>@o*f#Ih&{Wj^iq??9ksf*m8Q*(Ge*Srd z&#mjpnKRF}wchQz_I~D`yg_xR2CvB}+j9TG z>Z=CM56+C(*;iDPB#V{n&Mf)ec9m=6nurMt+GKn=BRgGosKw0%g*%;ZcRaP{=G4W9 zdiGs$z4y5f!~1!4vCN9De4N)I;Pm!+xwgU6JLT%ntLhgwz@}SOJIhs1y6U)ktQS1D z`09AXcImQ^%-z>JcXZ_yeA@J|wf@nGGpFc}{VYuw`(s(h zd0nrXKQNh6a?Xj9Q1aqXo7`DV_&@GZv1^nc*EX(aTP;!XhEvBU({)prGK$*6iI=Znb|qz-Lcb)$japv1{vt zWA-%Dy4L#mqp5a<6>Wc$#6A}GHcQC(Dfr`#$F`e`3_K!FyHDHg*14$jt3Ja=2rMtR zvB~W*V#Bm{^X5-6j&n~dnR{ZE>8h36FZT^@Z8K=tgEn0rtP|gD+b4bP?$)xL@Tq-D zO-4q#o21#iTJALTj^MuMvo<|58K-A=q7pQslBs;S791cJrtHoYm#qsc9ykBzMX|?z z4Sn-uWW(qlA8*AhTC(!}<_WD=-W0f$l^@+yJtyw$l_yVT)cDh=??X5TQnf9z7U{^Rhu@qt4tQ7Gn=t=vYShENW-FY`TG_R%IO_HXZ2zpzySl~D zuyFfi?%VqVUW9ef3BB$%TXbyB#K~4?c3U|wJ}7Mewq@@8igNw3r41`yZBM=Wx+>;g zL53XrlCA|Y%9lj3Bs4kZbADsIlDCXYdZ++WHZueZg*4JQh(U{!k zRfe~XeS?mTamkQ$yETNrPItomBMsbLPv02u)pW)EdHRoi`lLAhW5cuHS@e_%czvumeUlW5RC{xCeD~r|IZq%>G4F?JyGm2D@Qo83 z7yLf~T;^iN@sbF5q>UUJWn^UV;+RrpTjzAX2rjS?3pr^Lc#N3ioXQs@2{}Fl7EXvz zCKpL194np$8VQ4dx=R!(lG5UEHxxJoEHoXsNF>fYg^!+5F!%9tb@vN&M_{7%0FyW^ zUMT0JD->vYn)*wT4i|~Vd~;F-Pw;;Zq-v*ifoQI!#Z5?)2ox}7Zh~>PD1ocUN)<{I zIKs?SsZ1evbaXU;b2jjDw}GJ{Rg@x)PZJCEp#)(t0q)d|H!#j7UwL%91g>$8P%Ia6 zlwFd#s7HE8=#zZp@l)cBv&rw=h$yoJ(l|SvFXKQi83R>@ND?p2P#-$ck$hJlFcH>; zFRopid{?h67m5>V*F|4(&Fn-+MUqIKlSpo0gtc_!ph@N!D=}z{0VdNhBM3305aJ*c zD$-;U4pW&U#_y_yB8JH#Hp#H>;2zJM8YTowQ zIXMn!4iOenJORA2%@xx$Vn$D#D25I;qI%&9ZoTCqn5B*u4${6do>(YJR3te_O-+sETp2<<0|qQ}wxxXp19A+= z4&ksEwN*CGR`L^vOXv)~p)uf|EgxaJPz+>4Eh8!B0L^iX7)~Y*vGIr3?5+!hGHmARIp_9b9TTz=8%px0WQb_sI|0mj0qtkb~dZM7A&d8S_^s|kUYT1 zQmuwR+tZa;i=|qPwOGbl=H}fva%q}OAoS&@row|V!2v#w@q7i}9{vQ~$VXDye5hOs zFXSZgWpbgyK24F((-y93lM8$IG81NbTZM;t59f#4rFjjN4)<~O9v){Mk~PFCWVqMR z)HtscoAhwckc7BUyX5%LOtB!#P7>#7CmIr(0pIP0#)n#p<0OOA_!3`HSYU=IF2zF; z9_B0Z7c1hSFU62BmkfTWjYN>;)!S>R!ewxl^E}7ml5O{Vig{mkvJ&O#X=b7B95~f0!M%{(}$#Z$U$q{4GMIY z#E04>hlhrz!kEe4SPb5L~sVA3*0ls@hKtl(5(1`FpGHKAPaAoAP+nDAPc{cpx_Yy5Dz;ypa-vjU}p<& zOAFMmAWj4@xVm8Yy+Q$QD?giofi6%+a7kb!-w|BOb;^wMwzNwKu*e)VIN8HD%pzdW zV9OA{fMA>8FbhAR!6c8tZi6LZ2sRp@!xi*+cC4`#aaIAAah}0x;bBP`an{}z0)%&j zLx2V07p;qz*wRib$1K}`Ei4V}t#hKxtp2IgXNg(O0)ZBJwPY2k&WKo6M=YJek}P$0 zM5=4*NRu1`O@*XyEpSj>rjI)6Was=p*-FXQcq=i;0Xu7-l+@u~VhcIQ;UwT^ER(UE z4fV(nctRa(khLN&BuicXN3t{!WMT@)EYD!*&szd=K`cn|um}$&vYjOx1LLghEI?O) z#LN&0tn4fWDSl#sgnhM18{w9fQN3F#&9w9ASg;EVLeaDY8U zrT@R2yTVRg#(+$*u8&MX@(Akos!v^TsX4)NVLXQ~=P1CPjST`f4jc8coD`v4&QBC_ zz}n>)cu?M++yK5SlBDr+9>>HSTaF&Vey%a@0RjF2F+uKOL10%Ixo4(=>xa7K(3YC$BQ9*dxiRgN5s zY`jWJ0-u1FyCNIv`#U z#YHg=6kv!)&Vdx3Tm~ z58x|A0yNwHDZ-REq0B#l6NCQ*(^8lym1S}0Uhr4k2Pd2UmV=Q4lL5-1hz3l14zf+N zU;$L;0VQZ$PJgNsNg5h3hZBKu=!iO?ysMs;QMgZBz@hKurItpmSJEZ%@#JjC0Dn{#!KtisGoR1un7#;$85W+pVlJX&Kr={D3D?MsV`R)RMdP3!ZVV5-Y)Mt&^y6593juWup$mJC z5vmFui6K-(RRN#Hgp&hK8G#kx(SUSSsA#T5;|Jqci2ySWUIk)4u&fMJ9h@A1fLeF}oalWL z13)Ne1PoVAZXnn=Iq)x8VMo9%5*5JGTP-umLcTq%!VPP|#+L72+{w8X8&sbtBx`QnfW&Zw_WP zEZ?2UY7ktJl{AHgC9_m62>H7f_HYB`#F-w|FjyON%9^+fglmL(G7O7)cvy&WaR7iQ zBm^)9kC?HwOkhTEz={*KY*SCQj2IQ-)gsVNNdBku#cA*>Xrfr+`^O@o8jCeaEF-#8 zWukPD(WosgQ86xasDJ^MptuccEr4)1-7(T!Dw3FL7lCU#MnnxWoVx!yE0G3-ZL&~Z1!Oaw4sdoKA+jp6Vb)gl;G zcEb&ov_i(9{zjyLXq6%cTopSmwN@M#p=mKI-urK?xHCr%mJ?_T&<61wct#m-Dxg)5 z;emzZ4tox<*i^#9$g#x&PfBs*X{jjgj*C#V6y3^?s6d_sUz5N{0ow=c5LLUT9%O@u zQKcFYm>)o69CQ)B3dML(LO+K?RS~Kh0mRq>V+iaxQUl^tq=$b%IS3VGt<9M6>P0(v zN^H{k3$j4^jh+x0kfI3~7pVw_ZefRllfZ|)3#AB(19LH%h!I3Re}jV1^cV{2^EW7n zk{Mue0-hB}e5lI|vM=*Pq2Z6WZd9ZOX~l>QR{wR04pc>sNr0-HMa(6-4;A8}M~ooj zID!X*o7O#SEvZ9y!H6Bw7EhEVcaT}FB6cvGW*kzRtQ|Ef5+~HJju0mYAp(o|7orLG z_BY52bq5dPfy%)xS@MQMffND7NF`AM3H_xejtGpJ!V$BD|OmmNeQq03!}u7(|2UJM`owA+8bqw|@qF03HO>g<>-~ zl3YlyrQNerVW3KiI{Ko#)nP?%Pe$NrQc(9BbaN~l!@`cNSXE@GBi%8{x}Xwg88 zjtuNAZ6I!8S6}*6j?8RX@yw}@Mw9`LrspM5Azq$2nW{M{t1tCp{flT9g(vY~2}pNOV+DVA=S(;(MIAwpg~Qdao0M)QQ|VBCWGRYPT^AsnFu zjhHhuc-RKQ@4N!o5c31PfVq!-Je6_rGLdkYAlaF?VfX=^rX;? zaTEFjhcX4}+QfB$&<@oafFeC(n^5Ukkc0>tcLV`c69$7gum(uyAgdM=gfny(0l6wL z1@uFRL|N>jTC5`dYAr5^2oy!6WakeTn+-NA6@*yUm?mLhve0;%wD*r-gm?;w1SnS$ z6GQ@)e?VFeMly{sjBeVt2Xez{6DUx~1QOZ3i{!4-loXHvIR1kNV#gfuVk0Q9OGwpK zE*%RxdUzVOB+Nw`a;Z6>{2c}gjCB!B%0RUGT)-$8wG<+ZVHph#sf9uy08vx0qUEH~ z0$ozSLU@!l4#o?o8s&l|@EG8K>j;u?iV_Be7>1@SlU~kn2 zG`gBv13hoS{;FhDD6z&R1Wate!8aRZ74VS~Mm%U>&sYg~Xr#u$vb02%SONk**^*EG zSlT0=0eH~Hy=A@fwUF$=gCbuNkj1h=na{NTMB~z1MC_W(%$Z_#i+_hzF-Xi8Nyv;< zU}hj;RZzmBTmsFFl;w0Ag_PBirba3i*cL?H5imx&s6@b!K|tsMqG8yJgt!NU%2Kcw z8IO!OtX@d~jJ*EHQl4~Ep#*Y!@m?P$2NGH12t+bLnwT#mo*%PU3I0qBLmM}#iUSLC%6p#S<5@bC7SFJW#j)Q(niRoCs!0*=SPcw8moT?thUYXA~o&3sGQ}(X?2JYf|70L^KY_d`ML=F!@=k zc9p7W$>6P)aY>i36fH9pZJ82X%&1`}f;r}I*w%(i~<$C};w%Ye6xu zsnQv2W;@5nV?HI6PxT415AiN0aV!-Xe~Dpd&>Vc)8-lT*Cx`%IZ%Cv-i5NP>_7UlxqH4zz%5g>$@z2&g84dF#1XH@_~geC{pOp^6rmQ*((SwsewAu{@y`br~(u_LiDszSL?)C-w~3}?Xu zH^fY2BmlA;k(F4l{7xhV6;gi^XJDIt=JZ##?Sqs!vT`&<&trJVQ-m0JmgWEowscbY ziliS#K7L>_(A^_)gXl1^8Hi-BcMgr31{_2|jC>g)P$;K?af=D1(87i)B_EMGlB5CI zt9suw-sk`U;|bTX1CQ`Y!$A`lgM1(#6mqt#S6&@jOGx69C`1ZXgP&)frVxqYt2tfF zUeq5Ow64@5Y1g5uwd_HZ2&ZC1n&iOHSRvrLs&L}{1ZGGk7{%mv0hq2R&O}0D ze+PU{|GywedhZ(n%O*yEpT;y!8#1H8N4vKK8bX9f04m5)HjD|4*-R9j(yL8G8xi<4 zR#a>bHTp&!({1Ra9aShaX5!$(c9iDK#?qh3M?gI)lX{$GiDpC#(n=MLM)hf}lBlEX zliAINm+Hlkya|C&8tlIuMpIidBrqj2ayGP(uW3?$)F zr83VP5jw&T&R)d{iEL5p%B1;1x(t|hqC`oo8A_djqm_IJ=gHwO*vf_v*iusN79eqf zq^qXQ0uO4)9Aqp)kFYI`^fV0#lCPwIu$+3>T-iK8E%}t`j_yiLXp#L?XKGL`U7b({ zMHdX7l!>XT#7dG=fd{en`cX<_Ev;(-VNzmJ(+Q5Ww+W(z-n&3?cgi*G$FTxkO|_t0 zM99muiqafzO-$p<;_GT%S0hHeDhEZWvb6?%Rq>+eHG;w{F$EuvOa>e>`tYJLHv4(M#waCmFC>=SL6fUsjq(TyP z=e;6gCE&ntG+ZEZgqb+?1fz5`Cqaq*lm92^zCd#MLDKrPzt^00I^Hqnbk6 zs!XYrs5B2N1(Sh2_9WP(1Fi!KU_%_5Ef2v6wM4?VUYVf?Gqec|xM4+|>93jvB6cfi zAaR-?$tXk_4MZeD%+yN~AWDQ={C^}4nOIo_%KO6gqd0*mX)yuzD@ghb7^e6n1inTA z2}rRpq5ckq3aA=oq6^sckV(X4AW)Hs^eh<~pmHb3-WyIAqDck|MFcZ)v(X7;f9$Ez zzJ*fWA?FC?iGw+SJE&cQiO=DxYT-E`S4#9UAOq`AP3$4XoRUx!V<;yEwQ$RxJ%PPy z@e4f-BHdB=S5p=l;T0MQB$pB9OZL`?frAU-n=v?DwUQV)999}5EmZ1an;&rvwQMxg z)bhgWl_-mr3{eQ})2T86yM)aMoFO^D=~S$sz?lkOPUh88PsYCrA`IiQ*kCds+3d zvoc0T2R@0!Pe=fxTh0mOC-7w=bm|ArkU&rx4*iJy139)l%bvD8YmRe(Z|`0|VoyTA zIaFW>TPkE)2;5<5LK!}H#PXxSlVcku41TZ~Ot=rB93lcf_?82}Hyg=ZBZ5$j>{>ZJ zOe<#1*=<1_S|Pz#uk=>Ts&YSkCPZb;nE($d)41y7xQ5bZ1Kh>}yMXAcz3iH7!1`j9 z%D?+Tl!ZF@28&TU#-g?qN`gxO!D=L@4xP~Z4vgZ(1j}-Ep<{vyMgYQ8iKswGBq3LN zhrNy{3!xb%wnC{#5ruy`+^me>GQeo&e+DF)4%8M6R3P?0>Yba)5S9ulm@}VgKSCsD zsFtNF>91^BaZM5mlI6&(h{YI+MSPCKfIY>qH~b@>gLNZFMScPK4b~TK2NEQsW-Ml7 zlqbz{vCKx3#!>0D*0{%{VM`!e=}8heAbf#iXxQ>2sNgb4qL#4^ONZ4xy=qGQ0_);! zb{dngfS8r*mApyi3TwtV2hM;hXz>O44_@w^z8t&%tLSHgplJn&C>j8861f00sC2&w zqbcB!Bw7p(hg9KabBq+yK)hjV1O__9+u?v9qCXURhjW#1n1MMrKye$*|LD9L6CXh5 z3miB&tfDDwfLEP13t+Q>U=Ng?P!54hl;|wUVowi99HNW_Mv#Wo-Z$1r0ywBDkP6|N z5j+p*42YUYHaQ2<X})VwdC=BXrb+ny&J!F7Ah#9Od|6czJYH z)w6?WgN>?2D3zcLNh~7*2b?Je^nu9X8UrS4r<981%0(hH4C=XBPg@P1*Pt>;zsVk|3FUFPw{%qCT%Dgwv!n~VYDCkKdrs#xojGUh!jG^Gc#srE2 zQwNN(+#*0K^|-HdSWKX^hkJ~dUy!?}djJ4yXJOID($3DxrdOX{7It>X7X2}Y!n~2y zgLbOO7}!MpAF(KE)O(Z->z*Nuz7_59#OiWs$`pbXGO6T2Vg@*?J}Ea zO8tz{sa_9%RMug{tgH90c)K`>EA@9A(UP%eb;&`EvZ6xuDqJFN94;Z!)W z5BorTv9dkEG98meJuw>}U>{)8#MZcmrlb(OaOA<&)dP{ub#+0Nsx~In0GoF|Fgp;6 z=vK(ysRJ{A#S_@?7Yb2$mu3w-D?0U(a0rUo{8ff8v&E0p8`89hn}9wjroz1c${H@egEMFdb8R2Dil?JS!uUQt${yyjcK1 zl4Vdi!==KK$h#(l0x*(a&?np+r)QFmP--aoh7}yZMfE}?CkJIk?uU%4wF6%E}c zsJxFu!vThWxyM22KQi=RFguwVrMoZ_P}E7WC{5Q4TPjt~U#cXyyhY7GsY^Q%D3t1{ zUR(G-vTF$M{$F?YSi}AW-U$oiBs7d-B2y{c>+2J=D{W@wGLRv_Sk^2zl>I8PS?`TN zBxwJAsm)j<{e^Kr2tmCP`KmM_i0h?Ni!mWc8C@5Ya6OL=hJ+4S!ijFC*Cf6iPR~NG zI4=k~W(~trEhIxAtHc={QpXnrXi768#K1#Hpi@%FmIun82KxXdrGv>0W&`RA!6gLc zOGVIOLIe_g)y=;;xJD?w_Vp6PgrNXa1p!HIR%A?`BuW_wGhCK-rI=Opw@S4EyN85dhUFre~A8qcSUykzQc<{B?RE!7Nx&R$xV`9D?+cz*j0H#u!q>)FLZNMaZn`y~{_R<^n|j z!0jPhRB&<#hn6(gRh4h_RUxX~QeRd4D5(Ta7(&n}7ON6`;S9(CvO>uICP8Vq_gO0W z2k}uLEx7khJzc^dhoDsVB*=(ryv*#?v2-CKKWZYpGzlhmVZ1B41D6>86l0JUG<6|* zuFV-N7aUhtV|bb*0pSE<${fO6q=AnJhtosSttm$VIw51A>w29PTnr71#u@XUrf@>~ zl;)@Dgf_^OL3uUEG--bti?#TIw59w7HBHITKZR@f8)d{=)qDSr<(;WfEEWC|vpp1A zG1C)87Es;I2;is=P0RoL)O4M?L((TvflsdmOvjk1g{nc!E}y;800tF+Ckm^?WmnVDw9EA7J|-7 zz-!ykoc^l!`oV>KN}E+BZclsJ%%maEjw8ze8-%~%&OEeR1CSzMRlA9>G~-yAajfxa zTDms&)}b!T0$~r0F+fCu8Y{DHe5^p3xEamllv$ujgW_)C&OZU@VIeR95`Frbh=C|v z_3E1SCkt++sL;f$C_5hOMpmJcB|!<|tC8!yvVEAEHntB_JLsTr1>D^_Aq-s zSR~ac@cuQ|!g`Sl0007pT)3E}fK3o(gYQ5uE5e+{jY*}5p=Bd(_unQL0To=0!mO6) zLpAAb5%v~k-O^Jj53$X~EDFiapce@|8>ZX8AtEWi3Adn(H7xpA6vz^IDA9>{v%m-- z@_-6!C9hDFp+Vj;R0PtFoM2~3JEgh**K)Al`3|)0qavZeNb<)FNfR%^_uvEf&zCOZ$6H8<6ze^m@v*N}eZ-h2$)Fc5@$($c2FlSd(@_PbBSg--Z zRA=!v7*|1{ogk|Y$BYP3vxpd{*+FiOT#oKQ#V0h8Hj5jV*Obiw;E@ z5shX<)D%SWsBLjboRENGOcMZ5NE_0YCC#u(GY;uQT0^SKCxkU3o-|4)8k4kuV#ERR z+K@k1uVfq|is`=8BOqJ>{{SYWW6)L?&(z6Pxi*nebdtuu%SmKgU-3eCi7pkcd{*As zl)&gZWmGpoLK6glPA`Cp%|+rEL`E@o9?mzTOe}Jp{=X_}%nU&-0)$!kbgUbaidiSQNx*C-mULI*ZbPL0sIs{djP_pGOi`2r!=JR&kOx;xLr)QM{x5gC=8 zGa||y&a@dtMs_zeLi@DJnyOulU`!HYo{1CJ$uTlAl4}eW1<(O3J^2u2j63UY303gb z>PFp-v_NqE&^PAOLH-0vmi;Gr!nJ^_pBqe;iI~DH0z*gK*>YS>;8U$sbb>}vPgP_I zdK93;f6@spbVQ62!?+uI&l^>)r7zSPAVw#{kc1j_0wZIi$*?cqrNywCpADlaB^NEC zoj`WeV?eGATe29llX&X#n+bHZjIKjWf*oo1V{4Iwl4)rGel&`>S=Tp}txm57JB8>N zd>VS`1L;#`3cFBl!=s+B6iLmyW!f6Ev@=dR=5U3)L>{rD;ch;fGvHUE7vUF5lfo%H zbosv@e%^s=VGIZHkXpqbsi-VuL&hRE62bbP5M5$I-Sy)oqTjgWB8xgqC8|z+{41&| zzWbi;O(T<06PGQ&nnJQ$Q4M_RLwzyafGidxhBOSlR#LcNpIP?ClRI_U&pvbR+j>xHSHG+mfI zB9%6P8m2&5S1CYLD%ZjH%64QK>u(;BeV=;m<@_zLkSvFqUr2!aH+hAOb@A^rV30`p z-xLn3+wtUcz(8Vh(9ro)^okL_7nPE^%o9a$bu~zLG<7Dwn`JnoLw~SsN1Q1>CpIDi zhvl#ahysrajzOS<19csSqB0#|y8t%-!NI~zELR&_bnfIF64MfrR2dG6G$#Z=XrU2kPIlv7as7TCW!VD zSU1;jk*b7tY#WT0{ivCGb&dMuM-AXGLMA$e02Xx?IgP*`O3mD314aY^k7R^!5rLq@ zdjJVkiE?{HWxs>noTa3Ywm{w)h;Xck+|ljp*1&0H04B1lDg;W-@3H8BFBY>#c zZ%~i+oYY-u(ghN0Xg5TYokzYi5}h*tP@Vz|i+;HJs;&lW2(;UxbSlY~3zzae@ti@Q zGVuUlTF{cfV59z-;_?!%#j|{;QhPSA_AM_MN zoDh%;K^C=iA}?~!U4lp^SCHkP(xUOpWhA8sora<}|KThes|ze=@GE7|HOe4nb2jO& zc8(BXZ=8Ii+|@>_OYh&q06uW~k)Ac9mdU~>jZJ6}7sA}EOIx0FGh};EH^ypOJwg^F z+XNXZ=ttcZ0nY)^xUz)m5hdx?S_BEaf(a1{p(I@-lS3k6JkiFVR&9 zYpPWt0+p_Uqf_dmkeD@HMJ`mRbrC33FoiVbfdpp~I|#ASRWjfOFo0XFk5KXz3t>b` zctu>&;1URRtl=yJQbKo`AeQnK)>dj=dXTTUzDmvBy)@PA-Akn=#6N7+s(HaD^*WZl zYge-DtzN4ZY|xdpl}fEN4FjUXv#KNFTCQSvmQ@(9HZZPC71ipw7MQ5E8l0%_T7aT@ z45T10*lGFXx<9z(MkR@cM7i)DBNA)W2B2~`2Y!URydH+u10^<#u`LD4&3nhNn6 zLZNy~gfZw>Lo+;KQly~~p16iq2q{#D>aB2*axLm;j4`hPPzKw$9i-9KLINM2($qW^ zK1$HhJQZBT@QntTC`qOPB1(d3XhRDx4UH(VrJ)g#RvMZxl1f7(Mnq|7$H*oP?TAp) z(1=lm8X74j5h|oy7bS&bx0_tA@;^Jr^51I$vKah7DK_=bExsTmv9NH$F()Mbhyeb9 z`NwKQ9*?1;KXk-NCH%vxUE2<1TVM2k8_svFE164QA1?tTPSLKurjQSuX3^{`D#6ic z4E~MWE$ez8kwYG6tw%yw8v=AWy%_*rb3G5BAx?vAhT5kzRDzY91h`-o&a2~#I+&=C zG9-g~Va140=oc>)KJdW`9-x2)6rwG|R8|oB-@plEN~mL2PB^jLR8NLLSPe}cw5~ct ze3tjjSJGJEGm~k}3Yw2PL4aPw=D^{$R z+)=2~K@6nBvcecl0GQ2&>OG>MBlK*IduH*RYEQM9jwUxcmP5#mV!t{(D3v}na1Pz4 zfjvowBzlc{VG+`iaA>67C!d(~Nu_1;P%XhL|Q-%uxCa_AklAdrA$Ky)RNrc3oOsi}%8K7DkSiPhpmvP8(K zo=~aR-VwE#^f!eUT6spgutGc$Ak46+ih=+PzRUv>Cn3It(kM}i7aa0KSHkjv+=cOU zmPQQ5H`gdhq!KQQFtR{>SsFzF4#_b9G%S#!z69Hsm@wheUg|V1WYy3!rq8V6TLtJX zB4|iq8$v}IUIZY8>@60U7~UzOZ{pFs(}KP##XQ8J=yBMaKFHnxrKbddl_?5SAY9Hv z%5)HYnp+MNVhJRAPU;&t^z`X+1T^b3D{ULm#c->M5_`-?^xzBFIv|p3rLQBLYY^3p zIM9^4&WK1TR6E8)g9}kIbgwOQB+wrRKvBvm{>qAwqi}e=j|5`&sP#N6%SvJ@&=QuF zexW9mDFM!ez1S_lldP*Y6e(-c!6?m@=~88VeCAiJGNT-*YiE?T|5@Bnt$U4niVn|e zu1i8wG#u1gsZ~|gQB3wgHwAT$Czjq)({RlJUL^3;p-UzlhG~ipNc~3y78#G64d%Zk zcKD<4An+zTx|ATw#HO`(pg<-{h5Jb(BHW}B1v=gt1qm7G>R4Ku%9Hr<(hQI{_|Ad| zkQ*x7&menMH`9B&1DY#Ie;UztlE+N|=glr>{TfopC)J0?oOMnRw1vJ^8B4{aq!b~a! ztdN_^cZMNR3-EJT*%IL4pnMcegeqjo`c4rl^Mxi+@&R2CsWO@}B&Z4=13UnM{_|2tzWyus)ZUxv7WK$pUH@Jw9;R(VW zD1r?!z3q>(H&g`=Ns(dKh2$65rlVV^UcSPv7Xj5kz@V%P4!NC$et}Ta2&sq?*;yRO zj>^$Oc?U>D{gsP@GLe<(GPSuN3oI|3w0f=i;7i5wz|1F*f zT(zSibi()|!1My6`Z^@62ne!#mACj{Ujor4;fXp<9w0NC*x#sXotG5SebBdlkiSuw z2HWn4L&Wr5K%|U)`43Y>UGGC~B_YP(zw*W()Grwe-?L)@Y(Q9zI6{;@WP40R{ess- zJyW2(A_#a3^eEhF$~uaHy1|EQRb41N7@0Lz&rGMp_JB^P&KOUNu0baSkwft`D(F&q zvM3eX*AReYy*6XPF308sjEXf9+bv@i09KSl;K;#}83T&)4ycu7<=x?y%q36=2vQkd zB+=~l;m|eh8qh8p#(k}OmFU&UhJ~SX)RecukQ-oFH$+1%NbwU(%PD&C7nTZStg20gX^HdQ-&l#VWvo~K+$FfA|zo^+_(;aQ8UsN z0}r}K8b8^DLM)&eSjGv2Oz;5&tdD@#kv^jMkh+o+voKe=Vz4l%9?CRf2EbXG&=dL5 z$FD0~Uk=A(@cq5?H>44aK#{Q?WhZ^mgo=p)|AAgVWL)R=clCQRLv#Zst*lj^!D3n7LkUP|2tVrK$hkVLTnzI_yX^%w+NS<~8|j*{Sj z39*?7s1Oce{2jPMmFf+JRal(nME(HF1fnERMRoUvv@vFwjzb$7i1BOL2Z(J|K9c6p zHwbgQv}nFyNuZTy%INuEy8??gQiLZ#Ob%o|ur7dN*+z^sM-?cpCcLbCS(!s!kH%`I z{$Mh~B?Y;1VshrW1=KmAVVVqpB&hl-BnMf^bT>{KGbqW_2$>Ls!-YA-ltRm#if9b~ z$s!?I9;p)%QE}wItUwi^IL#YwK;EE%&(vBE>rJH$Ht=?^|rp_6UCA78YCM zh6YoC4$Y`OGgVhJ)mrR`eyvA_Nyc_<+m^MdM?JVjNQNsnCZ|h~^%*ZkN&ps`TqFYz ziZZFYu^@eciI8xIHvvHExSL*QrbNWwIz z19-3?T_jDD)2(pcbFA_aFBle1=i_}#a=SNCa*}juGHeC{KtS2?X##TV4Swt|p5BLm z-qoQ6^@KX35CBb4$~($XN7>dYqml$hxDt-#A*6Y%gMA7&JqJE4hktw}57 zF8?3)zWu$)BT4t?Llz>0lqF!`Kms_dERHR=I+!y`r_Q&|Yr5*0!AeuD047?efxKaXsfu~@D z0=xa|on1*01d->o<$_~Eq`sY_EJ!y=`c$;=#7lSAu&)yoYu#9j0%$`5aGaor-L(Z1 zRFHiFS^{&niQNIa_36+}XAH(&^cJa6%R!x5!6Vc-kn8?Y{y9B9XG&?54Buz68%tP_ zc!pWsp&vEddrb!{1kCrcEMwvX$?ob0&u;N=_|b6Qw2KDh?07W9iR5{wG@qV*v*Ahd zcS4mZuMl+(2L1U7+~)}7!K-qp$Eqs~NOW4dg#tB=DqMEqt^=3(IOWOczBYlF8`I4L ziO^Akvl3SpU!&P;WJ3&%JMZ8QoV~X@uR)0>2J=U*M|_cod3xd6TtHB=KfyZTbwsqM z7@kay)RAa%#HC0xJiL|IFe~I!P(ND8)Yk!O?%IPr*qYC&r$M*Hqra}jB|X_CpXXBg zGC|?&o$AG-Yvp|?oaU~OcDkk+UynRO-*mp{-DI|YjI953{(3Yx+8s6EjTBjsbQ6Ic@VTNlpz;9{8u%JUd`>6u(B zU8-%+JC)0Zg(ZmjezhJS@XgL_uDZU!u zS@3SZ_Y#+*xva~bpck>xTxEXhmJh_GY`Dv4!!o)Mg%p*r!Yw?d5fWM5;p`tEcm{+Q z_u7laaK3R76Y#sSPB47ESudx(W-`%Mke}<+{2z$nIGCGq5npsB;nT?>buX+DPFH)> z%XmC?8s}n_QBXoh`LzEn^62evEM*o`z}C|u9rk? z2o*f5`+H31P8MKhKs> zmhh~|0BtR)HZRXX5$yz{NxOa#RbSdomoZvekI&DPY>UdiXl-w<)Xp2^gqBiWPtHZM zB~Ppcez7r_tuwf8hJSpie|=0@oTgJCB$*3sqU-$3v!7M4C%zv%(uPLOV3e}FbCw^~ zw{6h@2oWxjWV({4AwDy(Qjvu08N$@lH%GgZ5kc?}Nc$k97cr19OjqT|bwZ2(+Dy%X z0(NI_f<8`mwQ^ooww@2lm|Z+gfXX&U>x;?h@Ts8&N*C}77^ak;Qu{3P@L$SmQP#sk z6IQb*J;j2cVZy1$?9Z{226KozlM}p)dQ(`Y0pOEjDd2EmB^m;-1*el&(pt3shmP+ac}uS;;`mp4a<`TR(# z6PNDhUpg}!y0QOf;l99A@-qSdksITRVN&I1GjjirJ|eQ%8A-2e_4S<-F9-#cVC&Sw z>>uT4iJXvZxQ_@S`dU@99K)tEM2j1L=?pOywl8Ke^lm>QFa)$*Q9IfKOKkaU_=^lQ zAMp<<$*O3EhCSBcq(AxyOJV=vKZMZ&47F&1BQ4xB)j)3yX)+M);m045UF4u?1yUPA@5mggd_y0JkgVYk{n_JzjGkMs_Xfu_qjC`vb$bIL z@e^MfYe^Sde4$Mq9C+(B?h+}lZs6W0;Wr8cb+847fcV*0V2MMB_#l_gm16@1ZeoY! z3Ow6~!#zqnFari{H~@HB*hD)y7Orzq(6c4)#hLfjtv_{UcuomYH{?TXrIV@fVIpS$ z@c9ksbQV6{c=W2r4!PyDRnbeL&4uaW#?DRMzDQ{onOyz2w;dI279rX8j zR-`l3Kg9_HYINp=O4TWL?o&=jhr(n_0&)XN`PKn}&yh5!oHyaYSkzIU+6PEfNXm$6 zIgPG!sk(c_ZMX|tNRze{d*a)kI0vZcH z3Q~9SsHjrn7>OOh!Ea3rlw%)RGgG7pcop9*Pl=SEQbMur3}z!Z57+mHGg|l|rLUii zAwKP|WB3{EmaNA=;=Y7whdcs+0mwQ}6V2cLCwDv;FX{KAg74C{2?V24QaEHPJjHGs zl_1jkiS?2WqWIU;G`Jl$g~=T*zt0K`XIiLH#t4s7)})JVxhOmF?m|#PL|8z*fsOOJ zp`Mb!V1G!lT?@%$k;RTTK4Xrt8Q&Ikf>Sd!AhSx5{Ts8w7_9vC*D zd`sR0f5^e`@MOy6@u*#XULY7TGCGPI6(zRcwi%-#Jt$obeE9As!2fd^BMHJqZlx z-b4#`897Q@C8{nv)6_qvd_ra?5eRZ%rV%2+`magQm8e)2bY=J|2xw+sGy?uZW4sG?LtZf^#zvn|Bk5rpqgKP_vq|AVnj19Mc~JxIG! zMlg~?kfBK1lb`q}4f8Vd^fY5u@I8X%vr&Z7m*Pn*F8?e5@)Cf&6ifvmY>|%%`<05YF!K_syL(w3p_@oq^s zX}3l{2t?A2C{Ezn#~r>-W6e?lF1;c=o?i=YCdvM~QXi`RA<1}!IPo+4W`FFNem~@gXGrKgs zju2lv*#9@P5TWn?`3lz6$*Xjf{!c;+Cu9BqlO0sI{ChSS9pqmJQ=AgB{QK2l_vLV| z;MKwY-S3+PPXQo;L++0cCRP+85Kw&QWIj2PsJ>2et%Z1JT4-hmVq^3}I#|adcDnU`}XL37z~91i_0>Rs&xv zdw~m|_B!EeQoMiga5Bdlz}>P)l<&6+#2kZ?Ti4nU;Uv8R3CwQHNri54))u9N4zzf) zN*dSZq=wkE;>m(#3nnm)AwCKVs+F{@xtEj+4(P49hh_tkBK8^___4 z!|E7scFBzBu>sI0y(%nsP)UrZ3}ua|1gaPK0-Rka6vK8#*!B(_Y2r+n+ z1_0}V_a^u0f5B@c@bDVW$hoo121Sm@|CU=%>@to7%qc4+Xv5<_U1mn1b(cl%8$pF7 zzU5rePE6uOA;nZ(`~^19upT;gETF_N*Bwfe*r}#YfU@ zb;S!WwZuLog&}tmrccl2EhAmQ-wuYa7Kvms9U^SHKjOSGp<;T%XYsql7rPBYv6XjD zftjWPA0^GD9I7i}xMUgzG|%B=LC9#RnohJ(wiUS8XrsC7AalHxaKoNLc+GrD{dqwF z&c#xED_I=sFC!{HKU1QyhE_rZ>xjshO?;p>@ky&Lb*+}s8dNqVke$0m;KutR$8&tnO|u6B+4~fc}Vl4%Vt(q9@E~aEH7zy z4GIZD^{T$3{5$aPXr5174I%Owz_6mBVuB$FXnr6MrwE&v@d0z~e}1M^SPN@|y*hXd z)97IP1U`|EKTc~^7nt#Z7btMeg1DvP%Z2-OHW{ZM3LylxDcv$^2>FEI=Fdh4Rz~sP zo<4fmgZ3~R)ZMB@mRzT4Aodh}<8P~H12{gOsrb6U`GtA<94TkY731*^e?7o6dWhsd zTu0)!H|w~3IG>Drzw%DV#>b7lFnE1Dna*duot?q#0d9q$A;?#Q2X(2x1)9sRk*5XvaN2{B1;isF)|J@Igz zIsD>8;%Ii3MKR1HRuAzuWkuF(70NdIV+OoX9%CFn!lMwjiT|ZT2QpdbT@9K?tiiu~ zvWpzAGy0NGpb6{W0h4c{Tww78L56ZoGzv*wO96e#5#R=dbrpU~kef_d0~}lU49~a} zFNJ-^5Rg_dGwN>(uxL&JeW^aj$ztK^y#DCZ;!@^cxe5Ikg^a+3)uz9V+JT%!Q+20d zr)C!oBR7!_FuA;W+^Yc};>;wyab}MWU{HRf)23H{U$Q_MHc+NG{mu?qX_~A^kxXF6 z_R8NHHlVbFD6mU`N)>ORqb1uT)k%#Q0Ed{*@w_=eD!?wyW2CQto2?qAsK$|;3EUqe z4L>XhWC4&~!~!}`Urb&x5*Pxcg$FX=X(G=v>ka%4){9}>0Rpu#dI-Fv>xNroo`~Ix+y{4%SZD)T!Jmeth`-ZJv^%)CT2!A_P7uyod84Ige z)mgV{alI3@fNmITL&vQubqyb|v)WXwNAxMkGNYpt?Ruwb%2nh^;iH&1X7!q#(w1F^ z_um=8;m^&ea7$4eqTME37lb8pu?#g-Tr7x_W2MNn&RbLQ-sv)4+Ud|;b2D$?5p}yK z!_hwa-6UsJ5wP5;XO#Izuc{8*C+t-P62gfCKNi=1`*pUyTc2o9-!XaNDg`3{pgV?m zYYRr*molRhV}eTm;q?Oqw(f)Ec^Pq&)l{$&=Av>5aq&69%Vp}>D(&cR`YHoVpG>vb z5Phz86RWuOEFF^!wfVTJT3`_iGoRua0#H6#+1g{wvh#OtW?<#xoq{ElJ>p^5Lt00t zo56^>Yt;yFQ&+zMf(r-*To|va^p{1+eX$XsqVuY^;jHM_86%v~$ry&d;D~+#lNyDTfCW<(35zhbOo%EXpZ7n5HDD68Cbz!hkV&Jax9Qi%(3j zWW%hva$(1LF@Pj$< zs44jA`^Ns{s1*EAk8spVSK>!Ixv#qWEe0UY+DA}u;;bCRYM(kzbXpH}Z`?i%e9eUb zdr$AkuABxtN?n`J>+WPvm-x%2uoB?Oit=*QO;)W*T{DddE(k7rN1>tRi1xh)k!E-} z&f}HUSB+NI<5+%HeUDrhE=ZB{Qwg>6kaFyzApD`_h(=0;x$D(}u_{X(8{kEBkBTN^hMXTm z?$OUeqQh`iElHGTsCNJwoz?a3@l&(E-OmAvS%MeBV5}gtQJLwCsBQQ#E-SrtpcHBX^~2?IGem5SRM~`b zt$rZ~MHSFwQXb-4lEcY$mE0(Yo`vc18=5W|z8l^}-byKvCW0n7V_ws_v%gPeZM+ZR6E``aVN=`P?lUvT;57_h z2NP8d0Cq}VQ%d_?ZcYA?=JpUPfPe(5Ck;(2?yavup?l_XN=1_ZR6X3sXojOO*e{iR6d?+%*q!AXW7!ADStAUYML>LP;!ZjQ) z^sC?}sNex`K~E)%0Xa4L5H<@{Y->bi49B-W0=zZquFZ~dhmRK%v=rr9NT>DI>ztA{ zqT+y6c`)iB*98n4n=hb?Aaou}R}U6*X%;Qi-HDpM`3AVn6iR8*oi|OV#Fi#{*O7T= z{sN1D1Vy-uLmC`0^YQTCZ6g!JY`6)dftqf!J5r&8pt= zUb9nBi;<}F2N`TSve+?mWwncbPen>pTwJ**=>nc{Vi-7s1RX7!v~re; zKC?y1^l2YO1k}y>y{If@n&0p=cS8Zj*NFXh6&2&$pyl+e8K$K1$xoa>1q7~z(wYoP z-wbsFq}8Ii{&b%OJjoAI3-~2>KScMwuf{0{9uD? zA8tNbM+%M6V0{l&76-1{p9(-#I{|_X`j0R-W*UEh{HudU=7MgYwUQgIyO(-#)^!J` zPP?wod6%Y792xmgky(Q0Q2J!zAM?ZQ@9TDIK4KsgA;A%)!|8zXA!RWboDkYTEw#^X ze(nF(xBI((E=g&{wf8VYA>@D-16ai_hfT>?h;NGLKn5;)$#pl1DM z8edz2iw;t8%j`Xm7J-442Cg?GfG7F~W73!jHmQh$&B87cZt=|x^XU_arm)SMk`Y+U zd#h=3ziz{aPSPHhlE&ahCZr&@ZP4#tk_?ZAhcA?=C6hJtRNw}ccFil)RSv6Tcv38d z^K(U`F!oA4DxS|V4lz%<4}S(=t`1oZn%BIp*;%v!>Z|fFEso6y7@l~IL+DfIgK6#w zB%?pFx@(3H`Y(}r29rE~Lza-Og3cs&I0JqKD@WpBgfhWE#+d-vv*_f#z zPGTKTHJdCImF`=r>=h!KMYI3N^c>VCM-1@IO~UPXmDeho&FZEcER zb12SZ-C@!WsueaeR#_B8!1DWr3RSdiHh&wgT_Lo7Hgy zcKN|Uv48||G{Gh{GPE@|7A`@{sS}iJ|Ki-rA5fWTavV=~tUOGPPMn4pwE48NmKE6@ z26a+M>mg9%Uw^uP*Mf>*4JhoDbg`63xPMsVhQ40RpW(sne+2HqkhHIazy|$dRW48U0yAqg>kb zDxwRdDpom&fCjpBs%PegNDmnqW`Y(?z{7EGF3eU-s z&-e-EhXsTakRWa<&tdqa_t-)?ISw}(G792e=|}-@?CJmovln0u;cX7wfzlyPO;0Eh zp&idxzx87jRjwNZE`*40Pfqq;+(DN4-0IRP#G&yhzFj8BIob+48HPo1fv6_0!wBgzc zs~uT0Dz{}4sU}3~UN`tU#Yp_o;1d`ei{sJT1as2?1!=!t3-Bx6*??U75YF(7Ds@;F z!f41us@mqZkSOa3T}KC87gx{Fs0n$@D$0y_;8?h|E!#C!^|3Z8m99te6+yxV@> zK9+T^;Wsa;FWm-Kr`!ehC2ay9K`>j<4!KeT;JbstG16&5q?f|vqKIj>IuEaPe#RqP zST#hr@JxZI2bMwhr2Isbnh+u&#m&!#Y)GV2k*Juzl8D8o%t7PK&W7FhcN7G}BbO6| zDNFT-=mC1VROvE?6n}F7(1dfA)s|bkUA^f}j8m_rYRQ zf0zg)MeacZATu$_W|NaSl|}-9ex?I^*M&4Kc?JJb{zty$6+Mc&rMOX%Bs%!#u?V(c zX+9qvbh#QdC1(e)0+yfo3NA|?jp=pAWt@Y_L@xb4gHYD`v;719JlLQ0`2)9qJm z0qL~0@C975gOC{(a-aSh+C5q0F11kqCV>6J?U z>7P7CoXuUmG9zUXG~auL_iYes#v?mgUDd@K<>lX}QHzPmD2VQ7b_dp@7n|&KNJ1I~ z(=U5BWTEDu(r+-ie43T4+{Y6ycNr|sPorXTk#nns7>$QRx}s4|t?k&L)@ajM9>hl4 zDA^t@WBZe%Eyn2_y~(1TY+pt{4QdLy*s_qf#wj@%tzO~*2TC#`M{$>JiB8A>oOt6@ zbj9kl85+=u=yRN2|B%8^=UlORv1wpSDkAdk&Z8bupR*Ba5#>WRa zXV_QcjZEd;EoiC=rE0657a|i!w%0@uPC0sf>q6ndxf}~jO50;_qzmIN{`C0P-3jvf zP>C<)qErwds(1BdH*DJ8Gxq!X7Jk4_!uB|J_yEPziUh_vF zwSuqcp#-z6P9utq!`4fIZK+ei>vPJ;Yi#2u?b3J=ZHx4}RKi16kxv2^KnSYo)Px%w zT1&dBOP(;}=7z~iJOwf+(!k(k3rz(ULl`aj(6&EJwFTB=NATG;BO>6S(3D}bZTo@I zgQ^DPCoY#hwlcd^s!%zRZae>LWAFFx8uTq(UB3YR9+NP$|y-O$d z5CrU#BWP{YgVncf@xaR&S4viwiP~n>;A18GDkM@Kov^*aEnB!#*N)z-Cw8#*T{ure zAuPKJnoE1aJA5`cI))uZd+!$kWKgk~tmMe=xi_|0_9Q>>3UYwP$frVDxQsCe^Q&I@ zE(YTi7iMF9Mit$y&;)fGy_e^Qix)baGs}me1AfA6c9#uD4X_qT{h=i(JHe7k2aK0I zNg_Bmb?c&?4^tkve~mcC9|nQL)bN;*ubl_Dwvbm~h3Um`wn>n-UiX=@f5AG_aTmTS zJ(5=D*&{J(j85IH_*wjrZA~Cvt;E5!%DHKnJktva$ZvTKNf?^!fr;K}qE0 z?bzv>5}^nX?No4DUPz%P+-G(rn%w9jq#@8>ybEPNHiTxhl=VcdlJ&&5uBH&YhZGfa zz3BTu>^rdyfRgSInNV95ljYS_I770c`v<<1w81)dkbT))fv|YWjqFoU8|nyjfq)7$ zRZHb$XjL{(cFeF0SLJAPISH;xEfVK0_E8j zqYA{UA}vx2_7rX;qY~Jv1R--s@fAED#OWx8RF!Y@4B1af{+qVLOxJTl{$EMy4V5fKiJafsvOK1p&sUo_2y_?%o1NF~J^mrFaCgC+3+UOc=} zl;;vtAZG~P75HEjhO*Ix=2I}S+^Nfp2@168UgaYR>5IYR{KOb57MCo=BPir|!hz?! zRia1$0gn4(fXER5Xkk%2oVdn926|IR0bx2Fqq%A&NJwfWWcrQuNELeO4OWx-3x!Jc zL^P!$w$5xUV}#$ESmC#oNV$V(3Qjx)Z-Rou&;isKPR4VDP0{;>fW+?Z~$i(kG#|17vE}rPMt;Zde_{@9hU~s%qg@T$;S1KrFrDBo%EJ z91s?)>O_U7No%>OSP41D7rJwtlR}#Qnavv7t6H_zX+_+_Ck9mo z6XF{`zV&`r=!fQ9@j*m%XwnJTKo1tt2q1u19^&aUDL`n8G_3K)NrP_ zH7epjgh2x{^MpL7W=RzpQjh1zBd!`-n~af)Yj(3nsAzMa&Z^)_ZJee-4Xjeq9=J~& zs^kL?vX_jE)72z!1z4nmM-=+Cb=hm@(T_`oIN>Z0fEhlT8q$Oo3gLDbIccRfO&27_ z1xx^!0#Px!6jNPIBhb7I{N?jYC|EW_N@^hD68}^5RR;> z>GY8N0fV;P2z8QlQP&T&8ROY_4}-D&rs*?MdX2Ki8ZX7V)1pbN+@9}?#AoG<5s6^d zl-l&tsR@a=AxJRQwAb!H+dLXP!s<`Yi0WT56bq=fqA)LTcZ-gJcax_e2p@{q?iJ&oS4D67y!-A!-sr2#Ie4Wu}}u0nI1U}I}x=f znH@ZTFs+USK)?Xig)n%8*@lo*ur}>Btl$XGb|Zdl;`e9pJ2Jlr&(^&bl3wJ(cda}u z2BcBFw3&niTAyAGa2%r-GJ!d)zF%tw*j*HL2LFAz(B*ybtpSVn89%u&&(a1q$JSr>cD&BOYihv)90ck~2~H zwV0YZxHE{<;;ZnI9z--OVbbE^C1c7&Y;s*fmT@Tdj59U4Mneq1_JgjA$HK9GZUl#w zOeE7_Q>0KG$vtMppZ4FFof&(v@vvK^K=|9wF`NgFBVhc~g*WNaVF7B0`p_Qo#5g5Z z+R-`{%xSTT@0P^A3VzRCIG3=(Xz`_)FIbRSm484%&)_0UqS2bpTPxFl10sQ4L$hS( zV(-F)01M08Vy$DWw;>;tW8wh9vQ!d5=iN#`q>LyL2qJAp!JIX2>7>tT-*{#K7VHne;+PDuvz9P9WvBzxX zF}%PjxTw+G!%T|_>$+{$EXV|kt$~Ura|+KQNN(A?aFaleMiISji1`;=Gw^T>AB4H? znvt+5+s#V+QVhVHL~Cle&17@eQAPlbsMJDX<6##_^-B%O*5FSf^71pT)sF^!#=)H&8##Fl zUBWnpJHO);D|z2Y{VrI;=P2$FFH^V9`fptY% zbYT!Q2|4k3F`-^uQ5%dv4skv0>T}9ec5g)}1OlzIB#BAIABx$ak4Vld%U7(=)g2EalU+Ah)@uyn$!Bpyn?3l zB=W+Ad#at-pkO^dG3;lle%$)O=m)sDUd#on>?%}JPy-c3t;Upk%p%0q8|z=?62+`= zTnG0FJSSvj8Y4OY0d+Yr&;~y!nYj@PrZVBVx5rL}OE8D`dy=`x&TXB_eG!{&#^+ zC=C*=(v8#L6`kM);}FMcgItPfm!K}JdQlJfw#t9s=^9#Ck0YA7q++!RExXmh2^5pGmS!Y`OxyJS-R3V4G3>IfSphJ{|kmlSfD-GON->$X+qr!+p=9U+1kvU3n5fz-sujo2Wbk zGTY|?=bz9>8LpKn5%IaoaulWo!aqVAq>dQc48Llo&J^w73t~>00BjS{d}0zrB8=0$ z)J<1IDJ+rqo<*wwe{xL%WIcGz07lxD?)>;;VinM4Ab@bY8HB`I(mQN_C5aTbu1JO3 ztg@oR5P`jQKAF;*xs+NdD@j)&jXlQV--C6)&p5lx5yLaY`=6wa{kh z?8%hQU`fgXmAn}mOd{}JulL;Hx*x2Tc~KpiVf zp|FO6yrDx8yQk|=(Kvx0N>pp}P@)V;4Vm}bQt0*b>b-^DZ)>SH#NKVt*CN8sBKaZ| zxB7#PM%lOS5FIs+OP}eflJLQSYAzRr4-U!`kQ>jX&{koXtnL$4Pz)KC5#`PU_0lU^F~>vAD=sep* zqJ3Z2d}*^LBJqdgRI)DNUyyV$sPjhl=@M5a5n0kpVMhV!=pF4WA2DN~50Pu%L@9|1 z67F0vuGy`FCQOQVW)V+9tCw^2mY?x8$U)8CG#}7hvE@g3dne}oqhM%8jYW*C8m2hK z3K6_P82Q*EfFR6at4%c85`|T*{eZ#20m_aAA`6;bq9|fk0WWB!x{KJU~c30 ztux?8YED><7x;Z^^OgL*jorUDzi(&v4fY)R!+Y?1XZK4wr0DXVjNcNdt+Ihol~2qL zH+)tyesVpjke{KII9}SZJKzR-_=#Tc^zRF{k_;A)iLf;o|IKC+(pG~xEU|ekKTM3x zlZ{|bO?$_}31Em>I0LK`gdW`kft1MhPYo5*dTFscc=gKo01Y2;ucJ3zWk>1cH7IJ8 ziYNH;zcKv}Pooujr;DRupGa%$AS~B319+$<)#1>DJ!=?e;OaYM`66m=1uf=rKn1TfLT(&4|?PHo>d=E{zi z@V_l;FaKfg#l*NwQb3Ls^WicO45t+4sHYJ!V(q$)ZWQ(H380kS!H$R|R@(sYI?o^> zz4%3QWI~h|JZThG(H~9dSHeAd(VHOfJ{AR5tpx4IBNJ6q1hTJ)8ZMPzy;8ZmVkI@~ zbwL*Tw-7W-ws^@)vb>gcP3~N+_kK@*MSaE+tw{lt?TSfaacg2e@Wb0)WvQ1EH~yV zzoS6=MB|0j(5U(S1W!!$QE~PLtZeJ`U{5O>we=Y{ZpP-Y!weE8s7MR&r3Bywejhy7 zUApFmhvM+khc0A84;dhX7NEs>6uJ4%^vajQrP?3*k_??j@^}eqFvHmsVz3A=w?YCE zfElfWchf(l6Rl*|i%}2Y+MDzwRjZ2RX5+n#Yy{^-oEXIgcwuIIDtNqS$s}z^Q99!7 zwueUpS*yW0X5D|2-TdL@cX|{1}Dl>y6_3Uj!5Up(VFFU-KUh?x#DhhTD{G- zo&9tEw(3D~=8ZffP5I`~`l!iL(kg4V@D%lsj%`gemL0V%N?()1!nw|AU}F<_*I*mf z`l-5lDwiiD$~2bA66#C~!QmQ9liU#`(V`}z=JT)E2H$mVltfunSPVSL8;k3PHzAkM zuLK~y3TpMF%|1cO_qj6{L9Pk2LKA*WDU(r(xB({b$n8nuHal07anghAy{b>gbazd& zimQ>x&TRK1Oe{(!%w!%fY{xkegU1ILef|782lH?UKNQpB>xwVgo>-^4c{heBohPI2 zkf~)(f|j(Mh659Ws;#OoCDy1_5^8+wmVm@c`(|TuCe+&+X^cX!uG;VzY@kYdZvz*c zTJz{D#WSC=xuKhAVuu1EkObBBj3`1)wOoy&s8ymUz6FZz>?dC@F@xfzm|@kkhzD-^ zq2BK}Z<0`p(Kr*G=Cl%VK0t*#likmVKC65N3>FnjBo?0ok5A-K3tA&8t{LH#W~xG|1@Tsgc`6-SPOyqpxn*}LkS}4&We<(YKfMr zphir|3PdjF$IVlS2sqwxwNsn?)o>rGqlZ6aO`^+F__zKD@0xmM5VV_zMOn8z;QPe2 z2?)6mf?+DK%4UguHJQF-K4SFjpFy3+!`BEkcKz(}V7iB07sb-6c!8NMy~S_U|E-YIXwPRx&o4Ocb?*xK!MmaLnhg^ zaG075?wu@dMwl)uM}`FeLg-5?BUl>kEATBpn5td3=AZ;NueWyYXX&Q4X&0)YKEOzJ zgy^nvx^YaUwSk(G=%%}-X7EzBG;EQJ{?*8rf-cw6R{xTIU!0$QJ9wY^Rbf0ZRJIc^ zh`w6VOuDo5U~MT2-xbaqTr&Zr6g>1O5ST<&QHYF?#xt7Cahop+e8#z9Tpg+ zNY}C(&%s=^9*sq5;KTa(IT*Pm9$DSQ2m3+1le?#C6nM`nlYA!Wbnw1i3P@Yo>;y}Z zo$Hkd&tJQm2aJdUDwqazQgKVCvt*NCFt1HqjvL$(IvW0aKizaId5x+?@4D31voX3p z)M_?kqu|K2+BSJHVp7 zObn)f@MW9h*K0hdi!XoDbq6>Q{|yhlqY+XE;r8wi5^F+4XRb}W@r(rJ5NP!j8`3ic zW!zvAe;hes#7bP>^~%}&&1lfG>N>XtJ`8laA*ma7s7W&5x%rf}-GdGlm(w=fn4lF9 z8JxY&{qe!XPHvMOry9UrZjLce67nM*E%oe^W)na8?Roy!tI>V5YI@x zWb&eo{lRa$c;IZq53O|!x-Nj%CkN~ObsKu!m1304U#$O%$JwWE)@9GIx*LMisW^`6 zh_F^~kETD^*68^0#HCm>0?-Te=|Qy4+iEu^>A<*aqVC3EE*G@3)$_8{Qn7)C#v6tq zlrgdaN2QM*`?`YI1cKZIJz!nzwo28yRRu`xG{ot9zjf=|-VB_#N&;?ernzkl>1)ZQ zU@{8|29wUe52m<$kE!561Fqc&I?_~|;$i<`r_2Aa5Bwduv!ZLp)~FRstuYk-4t_*y z8b9;B8O|AhO8Z%|aGCjR54USXP<}jjx_=@x$FGeu^!IxLkVL*Uu`#=0#-;lcr$y@Dc}WecU=JQb4&8 zaYcV?#-E50>+Y@3?DVF@sPVi6Q4xY)iyl}--j&0v@mS~nZxcjeyA?9jlWGI$$`$s2 zMC8^px4{1=)ldt_EUcXp+mlD3B!MT5{6*ee3NtMKvcAkngKEb|cux8A=9B?)o z?hU#(t_K{rRdn-)FH)ZPL%2>~^P+(5QSC_dt!XPCCe}juZ=QTOT2b^fk5k{zu`c&Z zFB}g;28AI#-|aDiJ#c4L4Z#V(jAA*W>Gq?$k8b0r9`EBcEt~1^1zdTJ3_^qY__aFl z-VzpKot~}Pm}DoXrTD8D!_{9B&Kef!ts^)<*XI3W*H*#Vbhm_Wo|*g)>pg@EK4gfu z(86oFO_de@ll=)h){C)u4-X|*aIHN#1ceC8B?z~8|Cll!OJ#0wtAGhGmgmg(`wJ>`q3#3WqgOdSgOptvZ5yZ5+;hfH%F+F=z>z`AoSEKIJxl-P>A z1c%jrs$S9w$nOeu)RT5PSjyKFAM{@jkHFt)!G&A`k&g@<0`vZfGSFhFGYN4iXLFB@ zlYey|Sf>9U^dO4Id>#Qj@S4f-$p}M_hP$FJ?3XvTCUW`T>U3Z9;gp}^x#p|v_U0Gb z)HiQ{*Wx{5w9^ZwV=N|a=O_gkjv<(gL}@nL{_z8cn$P;c28j#}--4$&Gb3(+sUx4^ zXfQs6$txzrOGqF~#F&C=Vp62p)_EoD(r;XjcI!qA$0~ay-R}pW6#&vqETG+wX!JE< zRErIjG!aNw-n@$6f^p&M4i=l2HNmT}kYi~gmT)5=#R)rras}A6Rlwlj!2`2>sUZO%#TmY6XT=-e-;kJwc%Q7VcWEea z)zr3Q&F>(g>*2V{UCLKtE2xl5J002XG2NRW1bpeXz#UKHM8C~?ohwGCQt3blSA6b} zZpux8D69@1xr33PSqHe7`JPANr7hMGY-jH!=9>B|%EHsFX}cevF;1#mFE{tsfAVU7 zSFd$755;*T=`PEgnR7JAME2jrY{?RMIKVYUY;&@9-2~jkG8B`&jc5xVShhzn41WfZ z$ir5B3jGr@5-zT>wFeC&)$8Dt+96pnD?ftMiCc?!vCKAF%Xm6R31kN7e?{WxXZ zn07Qe6hXCYZ}hxscjs*caPaX2(1!0Qp}C!lr^C|0<9fNXra?g z-_xlLg27oF=UF9D5Sp|b$gn%#*s#?}T<-%+)n3KM%da^@z{%8ad%`>fN)gFf~&y}%-O-ID0qg9%Un z;=9Sngs8M>>Z@m4G|Vl*CgN`k+-;~FPxPuXRR@ASPXl^1o7$sSz!oZhw0Pi&B? z7RpB!b=4l^z}$8zBNm;^8?Yhb`J(&tHM3_!VZ;4#+zw)dfTdYeTWo146gY%{z9Yn9 z`lUzg{?I@8T6R%lpkWAbP{kT(9|j0L98bDa-9Mg_brcP$6~QfFuPZa{2Nx`it!B6v zW3e}=^Slj3Y-$@h49`C+SUAhvP|pwvs|#4zK-j=(@a_dZiVBG9g9H8`oS44~$nxltGstJ3d*9u7MjpK7M3VjtoP-5__V`5gA zp>IHc4?8cJyII^HZI{o$d4PUfJ3uO057LEyOVpx?SK~q=egTr8UN^Caw6Ar#STtpL zG1)z`?@{gL`_x!Rn9ivPmP;>PNq|z?J~?)8{~hMYZ2`F>u(-iYw9YeM{zwWA=v{Fm)_H1z&Jg&U#32`3>ED z+>O}8J^*?%C7(m6Uo&{Pj>JPKvks>iQ1!_%F4)LWAm(p?7i;0N3)4qTVUHb5VURTi z!x8FowTAIUvvb6p-E?%a4Uwa6hjXO5##<1gIajjt+Gv%*6Vg!D<@L_3FOtPK#PqbZ zTVTz_t`SSax29dhx~f(Wj~7_PP6AVOd4vZV_(($rIX0IuS&%C^CNLkfU?BOaI0~(& z)9#n{FwN^=rOjWBPcUfjr5GjOVKF`im7Py9)?U;%(GTw5X%B*A+ zlQWm<+v>{8Ht0QRe`L}p;Q5pyZ70}3&h;bE`=QKn?-CgH8w|Mv^Bwxwhh#=c7*2N@ zVh4LCGEwEnlVZT=*RAF5vVG^?2H%W6*LaUJST*KNJpgD}&7pI>lEm^?-2-ui2BT=X z+pfDCA{Our%bwQDowz&z;U7u_4j3K^h)bB_eC8`n`(W|}%A{+vdt>%75PcTeA z9l{;K#oWNoe+-piJ~{do0xNdBggxT}+ATKY``j)&ha>pwM?Wi*TWMb_;HoB9FjOO! z!M!R8So)ZbsFHU$vb&C|`w;~mdm^=t3zCY1^xEr67#YAf&1BvbTO@T7EW#-x4a&o* zxhcrmBqBPca93DBrcn@rlP8G0U`V0&4;wSD2brqWxW&*QZlIc51kOy4#dJ`(p5hmx zzI>e_nm>`ZaWx66{q|XixU5-{arwPi8TZOBr;sJ>&P5@=cj4# zr9KQxq;&eG^AOw?(%OD#Y)yuk4xtaq5z{CwEb+dd)~E8ss8~`H_*r}wsePPt(Vv)c$)Qr884N#aSCeW~7n6z~_wjz0Mo4G<>0GL8yOd2?R9T|c-_NM> zs0~gP1?OQ^sZEo%#4+xliMpz)C4E%|-53fd$=Uc-j9#`p7sdR3GB_L0$}?*@uAU4I zdHCqWO1i7ItNzmoo)U3yx)#O^AaMYtMqJma_g1%!+v%(-qFB`iW}x|S&pSvrkPXPq zNDZgrh87%Sr%L5oFBEz}wRCZF%7P@Ma<6CP3r5V;lO>EY)knd|6&1z5HH1F-=UT z9!o^?J*n0L!(FUYN({Q9Ze=&%fJ?;>4!X3k=TDWKsZtZl)lZmGkW(BVcN4nDo#a)%`-5( zaJD>k9gu)SK0%g?lRdoZ2h&U#FK9m+4FN0P?SbWX{$k>{OjV8Ma!R=@bU7EwB0c`* z#BbRE!DHx(n04+TO2M*cFlaq_C!F{z8qZJFda3gqMC?FMZX6h8^rjz-Eo~qM6hq~XPVu?lJngCj)V0?mWR)@Is z>kgbfUL*w$p*aujDQ_%s%7G8`LsV$ccywl7f;5t>K+G^P!}Gwj?QkBRE(k7Z%hhz% z-h=`uKOpc)_GhI4lWjjjUJ%bJTfFV1=a025jQGnG7O5+Mk0ZoiS}68ncwh*>Kzh!a z8Mxem`4%iNN!EnmN!BUVTg%cay$3c!#8AV2IXN~v0j2|ogLUHM=oU*@W-Lhns^CvO z7c6kGnvN=>4hHyyu)ky|zaI@=#JvR?GSjnk{Z2dzkqk?6>f{Zc$io) zAOZ-}@nI{%-xeK0o`ry7f8*yCH;@YB2rwUrJ~6w)qgUg{j$(VI=2nq>9_f}e<-D5D z^pedjhTyA<_-za;ImGQu@sm5y7DuvwPWbrC$CmBu}W&Dg`yfIz}4w?Dt}?w9MI|M~W_pq=gxV^RO#&UHh_bw|S0w;wCP z39bYkFwztB&Y*(z-9AH4Kkgte;2KYKNK3=LIqpaVx_di2gV_V27AWyDOP(ES&qWp@#%Fh0UACOY%EndH{Ad|J*`t=+co!1upCo>g-xo~z!@3TV}+6-ealfomC>wN=$xuZ9*z zUTbkS`e+~EtP^N&on|sZkj4_4U{NatRBcwlQB_Psg3TO~bNl83^D2KfQ5Usib8R#~ zRO=mu%lcjg?P+b(1P*XG&2TIX#_jAVm$xycTpF!c0kv2=f$`g9gu}#V`uFlj6Ngqa zVX*#L;cr!+tH4~$+?b3pU$8V6a-Wq2<)>R{?x# zda^5l{T$PP9Ar(-G>?S=&NY#R*2`zI3FJ~KImdc`f9qE&m2#)OIwwcn!kaO6*=8^vfV)5R7l@4YSBV185O-;?-aEFBrfbllGR)( z+0b?bMAkyhjFu~MnlvNkK9?B{QB7{ToNrXtGPj4huMM`LyN@13b`tgs1o6_qUtOnu zyJZ>A!*S+r1Jl;FbO|w1{l|o}s^&`F7VpfbNk`K(Wgn@S5kv&HibmyZ^wlGlzrkel zR(QZ=DQeJk)gtxzZ@LOFXrXu73y#VV>IdS zZ}G+lK;Z6MV_0guhcKS^DLS3XDAFVN%B)en&PKI z9OTa=1~>ZN)28+5J=H!}hph~bCHd6luSyi*hd4ZqBl1f+hw`Vr>I`6|rsRcpylEs} zwj}L_yjV?inAZ!dw`iHeisc&TvgOqZI4oka*=6vvKy&5x7dL2eYe@F^EaP1*{ot#t zcO;Rj3mNT#m*-PsK7cu+u4Z7oHEKc#TEfh)-2PItY89Lo4r_hd?NI`*+@(!z@5=434DPCOY^6f;LPf1l-D}!DE&XcY z>gxKnk6T%gc7^1xga+F!0qaKn)9QV}h4TVR4CQpc`U=+9FK(RM`r1aFI@K<1u$MO2 zIAp;RFKw`pA+im2w@q*EZP@2Zu8o?jgx9D;X`*Se1@5z6T%R!6zFOFBSB+Ct<4`UP zo7e&ID~u@?OaU$+nKvZi?=@w8GBNmGYG6HxZ3zBm3Fc6W#MTqM3Xp-aJlt#qsn{z5 z)Iua~)=N@iyI|a`&WTGrw$9Hi8{bi;e;hSX6xp_ z(%X#4A44X?3B7>}(7PwY(LVa!r1YvH#rZYoQ^=fE3*bBn)Kx*kmrJ@5i4W3R#tEc| zEMI|TV`P~dSPfTe(k6a@>loL|F+n6gkuRO2bj)C<3DpzE1q;;Qj5H~xG_06zQNNsQ z@i|RZ4mrh}P+S^Jckm=i?zvmIpQ}ntn}qBbWlheLe^hVJRJd(yk?z{V$#^~2@Rsk1a|7b{#$irULsu1a6*d8F>#GHEu= zPry>E1m3K7PC4ABEve~q%7HcCq-0KM>E^kmrG~sNj&}iq($CoGd;RHt7k=pQ)zT%s z;HqY!uQ$r+1V)PRf&80D8Zvl=QyNQ#ST6Y}*~KT8-GU8Ml*UV3qlC!=#W5J#4ff^* z5!6u{w$D-jdIxQ>TWqLj_`#?Q6zHFFN=I38rF)IP1mM@IU%ELYPk zJ_7zyzFcZ@Et;&bxfZpO0MRa67Bz_+p7(`~(jLL&iC=|k^5ACOBqwctP^)VJW5M6U zY6{FHDKWmKNt2icw9FQh`dxx3tAq4c7EX8~yd6jin zgX~+Vhs>;8mLalJPJh^b@FVQ6-@u*)gFnUUZ?6pzi+Kwjidu>edMZICq#%SV~WwnOa~+C9|*5k2(g8! z5G(f})ltP1%+0FQMYz)pc8zL8o;4nxdM{)>xg zrb6=YOHnCd-%Fy?j#XMEommZX^4hT1=s0o0+;{r4s{2$ajqu@xzdOvGfvBNu2$O0F zo*TE?`X~EC+-SKb!OpXrJeJ|bUx0p>9#Dbg=M{|p@Wg|=PStp+@$o?l9TImJcJnu2 zw-gA!7ran*AzoyIW3Il;)R=2@&2EIe))t{+eW5pr5lv@&ZWl**7}6k7*yFm$xh{m{ z9$kQx@PnMhQS5G1%Sea=S>={oC^|=|E|c(ej(`)$)eOvyv^wrI?#u^BI^IlLWv-+M zeURuyLz#`-Qxoj{;^(uq17vo9Oh5a38RfPH6(8v>mEJTE;})`2kM&6k_Il-n=_`j- zbvnmvlW>}ZQg2`wK+YlFSi`-lF%xz|r$}j+20^9x*xy6qI$WBh1q9E1Sd72WrCi2* z1zWTCdn#HO&Hr2zKEsq3?1A0}E<_|N5>IY>uaO!9rC5(ssI-TF7Q1w&`Fuq5D#J52 zWm?XvAg!%SwX#T)n3JwRnLM^o)y_(uGvK<+!F zSPc7;;N?MuAuz29avQaqbQ=V<;DQpXeder-%tH;q3~umpYSrGSnHfYhkC!%bj%#-E zP3K1Mv(FZ5->mHFF(hk$`PE|WTVC7tH&}&bp`8wR*@M~HGMm6r6I>Jd)J|~wmik~~ zn#O?BRnBc_h<4o*S-#TK2gvfqTcEf&V%JiKc*JRXq!4~FAM<^{5{kD(c?}$~r;Q$& z!Hsuj$Jos$nSmZ|k{I>CEHIFikKh#B92SsZlrIsW?e(>yYb3&wyKp92;v0!}Rl zjZe;)F`MCdJEe_?TsnyW9i(loG~NfN6Hk_27qF+|u0(qm4i`LiiFty3;EnR3F#=QQ0U>~XFPuFhzifjSRFUa_5kqW{5G2`lLB}^N(cs5DsXDc}#OGAi zD5Ssc+GFk|6w?OcGiz!zpph%8#^;w-;g4NKFd7N#_oC03E|7aF{#dgGf&6?L25r$R z1T|2oX;l?!45EiKAP}`O{(N_5l2{#TmFpFxQve|$o|S4LzL67aF?-os?id_4{{TI; zit)L|dx`O<1ygJ6emSwsKHS7&%Om~XDxe3jp=S$Cn6m7`ZGR&)i1k5jM_hZRPM zom?vob&NBkym)+nK4^w~wOs{+-IKYd^1R#oSp`gciv(D5O12>(6;?2$udA_8R7;~R zb$DXERp!aH(u85STSRm^DB1(wwjmCs!DUtS6Ffc18#w9kLidGgn-4&=rsYb5H3|1| zWARf3h+DMPwwGhxr6!ttHfw11jkY(3W?D3nGMO}?_7>;YR7;AsNpYnqAs1t3XU}Rs zs(Cj4KAa8lRuUda31vdUwiW)^-yMwjJxk%soRLMV+$CBj@x5$FGBBAu^xtAUHLCUB z4;uy8zB;8qsvyLz)%UPTSOWzFW-@5$Bd<<{))6s%{&>D)r*ymEszhFGVSP7yH?$D+ zk?J39v2_7L)N$#jjI7JrBNPp!`J|ua_2KMo7hF*fayABiOtYrqH5U- zRe7pZ7H>kYcW%;g^_@Ae*4J~Jj=-cB%Hl_vM{uVck&`vCU^(QB<67f@2vOCz&xXG+ z#`X0Y;thOSSY_K>wzYieh$BwBVOID_UTWl?escc~Lob*c(AX~?LPS!>T{x_&8*=V^ zH~z?0cj{_qTi&+j&7-I#Rb2RSHK3&}%*FZd+bx)$6khBThM3NBCd z52mPFu7lG@15rQd!kdvAiQK{y%003wEa7ph1W?d>VX7E_DG^9EGlTbWvb`e2|zs2i=ED^fd+%#=EWn2DT)c9+Q@j0-wp(y7FE@O@{-H1 z4cd3ujEHaiVsKRZ%00lU;oGa>3{E?fyWqPRkUf{%t~uDy2csmgi<9)Fjh(j*3lcwA z#F_V}-PRzIe?@{~JRpWGgs85dDch(er35#A`;Vr1uBrX*-eKc+&O zg`VCzPb}#_oQnUVIH|I3*w_K3ct?71? z*_GR0GZ#;9qb!zx;A;Nj#DgQ6jtIV6UUn&WckI(-L`_PuHC<&bt_LBbr9P1_Bz|Zs zu`D`>7=;PfpSs;EbS~z^x7b{16pSJ0*W$>98*_=W6{cJ-USh~)DHf_}#^q-dL6#eF zS;tMdsxCv>QUfll{66z-9;71`O(#8Ick%9-Ssh$;3d;$~5u-I5+`~1Hc~?!YcW&~H zYDz15O=*JH;@?CsT06AhqgXsfIjBW}AakW&n^C(orh4R!6%(0Ej7X)SR;q#oDc)@H zm~$DR*?+cxtu{Z$g!Q+LWWpgOv~ML6`?U1=Eaqe2fm$X0lMIz^MzHJkyxRaQAl`*E zmaT2)u_S1U`I<#xFaXerUW(62^vf7(ZJzO_X{=O<6QXR!!c&^E%f2B`m~tUwVJx6N zwIIOcdlj^5W{tU9^>W(wCCyl1#-O!Huwenx9jUfiEsG3zWt4ud%wj zc=HnPosNa8rR&uxm*T4TMo4_^MuP*r)SQ=2xVWBhvju`QO0gL%UvnaC-EiC1+;eDP zCgyO$U3A^!h(&-JjAc#qAW$ohcpy5jE4<#(I)5yqP7}y!IgK?S$9DvrU-9RcC8iP?a%v+*2ExecPwoP zfeLO?w5Y^b%jA8ru;ncTrTQ~x7pzkgTS?}) zP@Ouc_Uu~qa?IGW$C{P+sY?=;sDnu5Yv{2^%yhB~ia12ge=!m>dfDkgOWo}6y+Ghm z&%;m2ZkVNuNrIzRQ51@Bl9TJG;eC+hx>pxd0@XTuE0|d+?79|PjhFRwQ*0K3paRV> zm|dup-B=6&-}r)!(<)^*s$H~{t;2+oMt`nDkf7}#0atK;RJeJAQux>Bm%?3Pk7N!w zOJJki`1mr_(B(r}mk(tzi^1#!W)vl{guC(|9pyvLzB3yPUV`B@WWf!7c0Xze62ZqJ_^*mXFGdrEMHl=#o_wn78W|7?-XaU2I!`wI(UoQ|lI zdSOl#6_!ugW2ndo-eS4JAc*V{TD&#iO1NeAR%XF-KjPXLnvzEi{8GuIu67}kN6AwV zy!>a%6n{RqOi?hVi;^Xh%6u7M@&wPf4X1<4`0e6krs+^uSuPVfn$heJ9lt#r@fG2x z`fo$%k)6%TH|(#<_*J)DDFRhv@GO?7m7)sT#!ZFQnCa{JlYETo5Rk^08!S%NiUmn; zq4BEeE>uo4rm7z&PK%Jq;^i*iFj7SK_pKysvzPJIRQNjecsYnFN|XfYTyFn zT@~x7k9Z88grfm+3go@1$e$(YCHN4*@3#^Y))yy7$bxzrq_U8gFq(BaQ6#U@7qh`k zouJ8jl#&5F8Fx=Qe|0VM?ZcC!-N6)j2{H~u4OTf_qtED8d)?4jq|{uiq|f{{Q6C?vzzWuUg5pnF~W_^9HiMfimIDA z4_N&!YOk8V-MmRvOC&Ukx_BL8oZ_YY7%KQrAv8B_3_!R9(yg-O1Xb9PKVK=9B>lMPPaA7h0QpP8#xutP&F|9&w zrrPicb_yV)**acIi8oYCh5!IhF*HL-wDG(10dlc8vsMZQ5H0?W3I)@O#VdD{4`ipm z=qK@wYEPUTpM4#FIzHnn{&c)#4Szb0^>{0+uiOhi9iMk6*xOe|)+tj&V>jegsg{j6 z43}Y!mrFPkT^>#FjxLNDdoPjt=78C7aLm5Ki{UzM@eKFw1V7d%V-$mdOxw~c&E|vS zd)8_dGK*>@DvQsFy;jpGNnmLKb2oh9r{;T1slgZ)QG<7V;MG4TQocvBr_(UPI!$!& z+wa1~dMhqYor7V)&m=z`&2BrZRQ1w@jNSP0;z4?v$+n>j%XDi`+pdvn3uQQ2by>Uy zapz(GNN?UY>&fc72#GP0EuL0D^BVb($(!fBr|4ZnTJnEk=B@5%FTN0CaI3B5%I!bj zY`CJwFo&GYMU957Mh%#nnPNkEU7N-Rlzjy=^p`izZHC@Enaw9h;Wt>v+s1o?>7{>r zI+=FYHv8jC|8}Uv*qe`(qtSKa%V%P3uQctEX$KYVW^Jm~me1&n-1;ADWRc8%9^K0eQtnwHKXS+#sc$E{LU zOVtaJxHe{*o#d%6Z&K>Hd2XpEbs>&(8OC=h=3I(7|LI|TE{OaMCkLgB!O`&?$$m{N zL4qzGrLcPS?KQ7jBC)HVg*eg_Mc|^qOJIBkEE+RDT{!!B`Z89TSoM> z4Dz#k3qp|4S96otfw(AZv`Q+1Aq*q=FRZXWXN_uW zWm`;3539nlTB?(^{HIuGc=>?*LJ1yaba8gl(S(`MLQF-Kz)bMJ3yO`}ZlYaXTbR_Q zu{5|5HFzwHn3?djq(Va~S{R}!9WChw;?iPM2|wA;(+=VJg0GegA97a8BC4fO3eiyR z*IvRe1t&?WqTj!mGX)+K^M9a%{Ud$1Y^4kBm}@32bq+ELJwF~Km-L56VkY}AD&W+f zF+648Lyd$V2!{)pE01~yC*YPW_{bCF=oOBEGy>k0Y-jVq7v-cI3X8FlRv6V}E&85BO(q6O7 zUXxgly??PnLb7zgP-t4jqiB34;V3HeH2lYkMmAbI4{XkS&#JX6Ul|2nEe?Q!frEcG zl9a^#qMfCUh!Qt!QGPR&7gt8*C*+$%WQxiB#xqOJUIKw~B&Zy(s}+x0!}* zq}{$&L(AnQX0j+{A5905%B_Mwb{$Dx$hM@)FjNX> zRY4NZDo>)5hYJDbLu^o4Ap}+(=4HS_EyU^mWX~w=*#KF$Y73#WkR&b{@;>0Nr8BjP zq~mPpD?urR)iwQ{AM=-&D} zdismZGU?n#7Y#!!Q`uX=YPvA9t!kIVQGBi_#IW>j=h-jLVYpVGG+r5a&(+GfHS8as z%w90I7!R`;f?CeL!joJAv7;wMUBlJ#^4~l8`A}c|urnvBS>O-_A~L04m#xDCD1?Yw z`Eo|y(7CMdMU89eo;8>eeCYF^A@p!*^hb`OL!QGYc~a6R)PjKg2T&WJdi>p4pdZX^t1}FB~21= z9EdPA>;MaIS7yxQ7OTe1wbD?!n~$91Z9}PSV}HVjiPBK0OC%wBc7Tuo&sLI7F3Sn1 z{^}t4FYRHg@FrsohwAQ02=@Mzum@B~+g z*@4U|&ES$hoI%KuXS^Fz3WHGf9RyIueQ(zs-*lOrcp(X(l}C@1wBR`-?GS3VcQnzacdp`vjk)oF*qLFZtK zch|wZD|@1 zd7TFZxpRj4{%nnr6N=+lgKcqtF!twtScCU?I={}4`D5N0O(w_WUALJKfhU+%P^FE| z_M^LxV0p#cI|rRtv_FnJ2gAb?ocog#1UWP480UNE71GCp0QPa4>QKwjc`=_K&u(vQ z91iC%PIh~UKHSii@?U56H{`C3;cN!rH*S9Y<>$qyJEfFU-UIHz0?e!h7`c%HJ@MW| z7cmKugs~f=8(U#3es`6x^YVG#sNRYg-H$IZ)3D!K<0egM70RAFon07lUzVQ~7>nli zw{KGt=#f#rpy$7>5gDA7fVm`^&Ai21$q>qaKfwR5U?yqatcw-$w^m_9U-}Ty+Gq$n z-`j+*;@*!=Huhw~bqeeO!yAtW(;v1U{CL}Qg;z3jxx&WljAKR^5$L(UdmkJ0_3h63 zO&>Y2xWYDHEkH(!_B(}DKFnk$yKUpt+&OD0jESp=FEuyt;o7!4Td&;g(H$$6PeBdNIl3_ z6ZZ!uu&i}$zci+xuixKi&fAaW}i zN!*%Eu8w~$nzFG=3RCyxE6SIzD8pG7qR!!z#B zf^|(E;S_qx%SVd?m)C)^Au@f1*vK}uc{c}(#a*I>C#^n2cGtqn=?93ZIN8Y2uqQs2 z9r1nhsK#>1Lg|5De(p+eEXo_^zN#4LE3JOf%0!<2XMVB z8LMCv=0({+faMmz^UuTaaBi98(!ds924f4QTZI0+o|~eSDp)Kct_^sdXKQ-Ql%V0$ zH*A+-g)h1M`3*aLwuYEMt8QJVg(+h^7H=9zx|VPo*wo+FhrXk8gWJCm={*S3$|Ln7 z^6(9yHFYVxgXr-NDul$P4}bYHN)(;7S!mh&0a1}i!uLC_E40x`AvhPe5-^cOp~dH< zjc26gn6RQ=My2ZyLXaU9Z!hO1GX0QiotCj|;c;q#-bN+UArgLm^4K|>WywpjanvuY zTEARU51l&&GgiMuibEC~({)nR2w05>?0crjhDoc$L~K~>q2GRmB04$j7RA@KAzG0X zTLRTV-KomCw}TMhs+Vn(lwS&rh6zNro3HY;T7%JXWHRx*r`Jv=zJ1-ByYNwUoIRS~rF7wmwRadjQ3?DiW`? zH9MaS-qwQ+0ts%TfYI92_KDe@fQXxWsF|sEfbGn`9YJ=IyS|B;&aZoN1RX0Laor$2I*Y-4=SJ zd?xVhD2=NnbH&Mrn@nD>N_8&5VFpJu3%tSRJlCkuZq3a(jPp&!uQE$WwPFNR-(*2}jl%&HrFLcvCm%v{M2v z_nXPboLc2Xs~l%SO3b<&|G>6t_z&8aso_P4jbD4uxI@n)tF{dUQMK(ex^9(J+v;A3 zpt|gci@VNWom(WGo$M;C?gK=`Uy7oaub_d4?ae1syufI8J#Pag|CL11{|@orE`gr+ z9&zF<4bd~sY_k;ofi4n14OZC<9BmXVlV`12Q<`lwE(KX{P>ZpR`b`NoqB{LlZZ{@3 z`Un~J!v>G0LI3HaM-!yB0EIAEMTwSjU{#PTsAc%*EU4$g;zzyr2DA;C$fmF;5j9#B zb4;NX31Y-nEU(@Su1Gb{doeLJG>{>3HNGs9wi?wgT+rHWUOW8y+)@^G88`Z+-Y&}G zcNv+m%;R}!1HH6?{udKGY1gEh8*CkC(9+n1#A&htwAp->^|M)*Qo=vh^r_Jl&Gz9g zppi4nd_$~S3}=PYWg2(JX-f~Q(ArWxVRq7DJ8c@dQD>PCDZ|v>(JHXoTM)8R{KwTh z^X$taWdt^ZT?^T30zkH7ZBvO`p&JDafj#f9rmWs*=K&wqJ5g0wn;TV|VtQE3+U4^`W9u51yE0_i z`F=eTIEGm{YA-WA?kMEKOqMCALtZjo#HfOP5o&QWAZ^WfLMy90Y<8`oxYA(4sTlx^ z5P5T{n}v4@ye|)qu%@y^&RQZYrh_BAk*H!widDBj0Krk00^Xf zc=AK{;?8^OZsZiNJh!VdFZ{o*CNa@T_ifR=O!PBeas4 zMG9#Xf)ucz{;z$QRvZX}SamFF-ToVgv}u}xo!(>w<^+sHo*DE@gCLT@Ax;Fr-}5n3 z6LFo&#P)1}$4CbV_QiYA-j!&ADgI@F`X3Y?=b~`~&ugz1Bin7s_&TJZW%GS${}oqSZ+B#$lWv~a!0sceYisjwO|ef?+h*4JXn5Z-b%RghK|GRx}g zKv&jFfU}QxXUBT0uw%5L7d6L=CYO&GH92M>#3l)qTPl9c+@;8enfn3#smKah-jm)7 z1VfLf_`+Mzm@4s2Z(V>T7IulRfuXt`g?EX4h#~;6^r4E+D+So7usUX;HN+|rR;WX! z8FS!&&ct6L*~SF8ITU3QgNedsJIOKjZ*F7md?)dx~jrFEx6X(4Jx<><1qNP1%ZntoO@h zZr1ftI_2(52QtZ--Mqe$6S!&~K%nu%{XZft!e}wwSR%91;(V|~Di-V1e9fTrnq^*} zfgk>I+h7`g8v-JZW(NY;_QY znGWZ(@v!${|0954K6|0Jj_*$r?6H2dP8<@{yg zj%VLuRh#QH+ulCXq#t~IuQUn7MGPrxRo0BA=h0T#M$&+2j0-qUz_Ppl*+ z;lPTkxtfA0nY5_Q4gJ@ghkEHVq|9sibdiM`zLNHDHT7zCPB7v;TNmoGXwyv?e4R}f z)fA?cIRnBCdTsoZa_AVb)cY_hkk@JJdM%W2MFY_CB+(V0+fJrZrG9hav_ zcm!&3>Ib|oa!RIr?OYQ0g(tV^cnk0eU9|lMaV6RiYwYoi5dtOJk-m(l zbfGmAOt_Gm=X6h+blKQJ7*}(4cTK(3*}(le$}Y0S<4389Cc?wh2x|Mvg8niRIoW0X zPF%A6+66+mSM(K8s%+QBtg^I5FdW%bp z!B&=$k{pJe!{ll>VUMaZ$$qs*Z?grP4DWm7;@n%BfamUUsgZ zx@(k~E)@`vEQG#Cn*COFO}mi@q);~P=6HRdMAkO7%dqc-td*Z}HWsSLlhNuG8iX`F z7hbqbw1-)xa_ZJCwcFbO5b)BFSMZw`wg-g(mjy-ZHfoG z_U?;Gx&DAN1oXQPAAoDri}EFF=f=ucSABQ8z0OQ}`YuEPPhwR;wT2w%oY3&pH{*Y+!r_Iq>;xq7VMFzXTc^BWSV+aNL{lT@#%2v<7-!JO|8Q z5nA}u%v*R|j2cW$ifSzK7jAq84bIe>fBrtF=d+R7^Zh?NKzqy>()(sU9^X5wJHvE|sLk5kOKtz|o}2{n!Ai@Us`j!qG(Ns*{(* z*>63ohQU(=N17Zki6x>|i8Xd@*HkX?V=Y=%C#J;BsvsdK^&*oAbs^HqpUsfXoG`mM zI)a`IDknZVWe1emO`)axX*4>A8;~iFq$(!RTp$ivH}!yl{=<%P6!9%q45$rG8|S zXy61W<}=+Q`W74(~905NLdj71MZ$=}hU+w)jDX(A` z%H@y*Tt~!fcaM|V{)lcng}ipnwCiSt6jvI{^;TDjbCVaZU^WD+Rcq*T1^(cGuZ}mgLqb zz)`r8*w$#aMrLc&OhS_z!9%6qEwD8jhfq)mC6}AM$xzex;B0*QYzajct*tX8xOWx0 ze%ly2eB4}wq=ZP+HyF|(wv_J7nju4`rQ$~C$Z`Q2hgmG^ZanG8$r#pH3<%~3=2lFl z-)7Ewm>|;Nr%qwVrEK_oFhM#&@UJxLV#<8|43dzN^j|D!5VobkIy@U1XNwsw0Z&f`O9Y>H>BE)2V!crPb*vQMD>a z(luqzG@XWs9N$B{rLi==1vNKEq1fdWLT}90x1Qo6|Ga_Rn}&}*gk)K3^lJ*aweBZo zayfoxE3Zq(0S@21w<;Pp`UXvHd|4$FH>&-kCE^dSEfK@{YXEnU>FGPeCNy9#Z`_Dr z0Y(pi5WJI%-x)UXjQKmcnC4o%H!UN_A?*y=Zu?FyUTm9Y_qQ@^Qjy)8j7}hgOu;ci z5E>6hNRtU)r?(Xko(z8K(!#+X$7MlvdrMUADg~ZgNnY-1yGCg4s(wAmxvPga5}#Y* z8TZDx#(xgctZStO=Nq=llIe|a6~8-ro951WVA5}F@T|vu%d%R6bce9E)g`T^*<8*J z|If39HWugd+SP@%1kHlj6nI++W+n1g1qp-Yvf8a%x|UFuX7$UZGEt6DbtPzVwaFOi z+Mi!TQrn`kp=FOu?&!bJevIanQ%MVX1yoBdY{+lVh>QW(3AKDH!WJv|a$f5V!Ik%I z+H^MlHRR8(0dRYCeO@JrcGdkyi=!W1TO8%afGU%nnZHHj?7Kv|1-lM<_wG%Hi_yPG zBHh9{1eEqy^d)r%%L7OoixD2H8Xzk%Y#hrM^xdKia$Gt;(S$N|qY(@*H+#Eg5wSO! ziGLAsCzBJ5PA0I=SyT15s)fHb<`QVG@7|0|0)l|rk9Y0aMBr1hIlyCmuU3) zYdG9Y8o=Fl(mi2W1=p(0ITRqp)xA ze8|5*r~ToN7YpQt0S~E~ZVN30; zS3Em87{1(GnNYORRBeAtAEN}H4wmssJg03|N9z*8mqg4MWXS*}?$U!)nD>!UDptcV zxy@51e=HAKKbs-m1-V3!I}(S%+oE^w3nZX+7K8_E@BsBysJM|Xz*wq-RJnvtqo@v4 zZ|O|KE9!oFh9ZQ zFYvNMsOYg$wVVWWoJM5$kWZiXUVU?Mb~Kv5?io0o=y>xQk_c6KWZkX@Vy;)hFMmx^ z&E-&YS>l!*IJ~zu!M4BR@c83}T`)^f4WT3f=l+z!6?$=`F(ONsFSsro%?9&f4y9^f z5_~t$@6F~fP-i^=ii#x!iq8oIU6b$nMi;hQ{o7sJeRuSWR`exOa9q9|)@rVW-`-#$ zTdNlGtwn>8VD<*b$0Mc^8c)W{m%WrPND*$0ZRw)W>lf73qFh{8d0Hq`<{s1Iezb6e zbzI_Yj&M1oDzalTuq+wU>3fx?R^L9O^P9cfw{G3&FK740KZA07=ol>l3JQ;di|IkSUW?zQiWfxR){pY2Ib7gzklc7k&2`HDQKq9wY6@Eh=DtO|IQ!( zKn=wwZ>phiozOcQ!n=GF@4}h>Y23DO<@g)EDQ_pv z$#9|wX{Q$xiy5hzs<$eScKKBq{oS=-|E5^#pK zuTM5kMgu%~Fj`dWWkOLT+%mZ(vEgD-koI5UkDE%%VCJd_Ik&WZs@4q1fh;p8E0UA| ziOsT9hi^J37w*^13X(xBPI#NS9{5`D+3*7STbasN zuYjkM`7W>jJ6p?aIa?yy|6QIjsMadBDse^E%B}B)fPKXJE<%T(bNU;xPLivejFUcI zk8M(uOPMCsN*7YM8;6m7)$HJq{yE$@ia8b+Q{1@!fLnMX6^aFUgKdh;J5Zlol7A{v zPL&Le_|odi)^1#SVPF4-Rln(ejXhs;yZS_s8y7cJ-zx&%?Iu{n>knSJ-Xxt(DM&v4 z6R*)fzUei3##e~a3rFuR(|1Wb-zDvwgDqGY+h%8_p`GY&rz1om(fkae<~qGZ)Jcuf z;cktPO5VanEzblVeP(KIjl_a&{!@*VtFK#7u9cP)pT5*PYO6=fWGKV1+4d?!$2fTc zuw5R^PERMJ#^BquTW;BdtMyuo7Hfwr>ZReHOO|xe$u3tZotEH^x=F2S!wEWvW+0Nr%WCU!$hXR+JplgLFzB}TMd@@=6}ii;!6}zC7`9x{?S_%d z!M5dJxa1-+YI6|R7==-rr^4lN44+=yES}=LT|dQn+w@220S)9reD%6|iu3jlngR4; z0>CcvQSLq)!OTeQQJ7?!^VM?}_w9{Iq|8woOP?6B%`i#hIfyirVeqp-hacc&5OGQaug6Zqbg5II@ z>S$o1KYL5sF4INwHOv8PgD1z9Pdz5QQ?kwLq38pN2}WIQ8@Jcq{1@jE7uKt3k2Xz4zWr#g0aS zjd^QJrx(*smTpBF15nzB{SvS0z~YZIn6L;hdJhumQ=OJJ)Mi`z9@#fDi{of={;hUQ zYZO{k6*d~hjHEaw{RU7;+8Im0O)53R>FFWYABRlpL|0w$m=s#scZ%b*E7wvScPgmQ za0mFUZo2c@PfVF_=c)M5MKoUyyV?@y#pfqa#tgo|^p_M!2cp1#%@#-3W9 zc+f?=Y}kxjoF9-mx`3A?`js+VMTO&3aU`-TxoUw+A!!e*f}{k{4Kg1?n=)9AXH$)X zRvS=C60F3v_uey;FD>LGFPctb8>```D-NCreBO7+)~31o4Y-MeI!1##thSTu>O_M zB3CbQB7dzAf*XcvdNztbbCmkENYjn06qv9#;gb^3ejq$0dlCwvh;Pr2qjOti zoAE52L>faia4~KjX<3#Hcs$_iu$-6k3T)gJ?`cClS{uyUm;CoTOM2X^aTJa%ot&m5`z3J|*I6Ov0x({42Qlo{Ps!9cxmtcA@ zf-rxpk(0QvX5j`_yVJ4qt1Qmk(LP<*tKZN}15SUd4RRZ_>|9?fmzR}PbNLh2)>gJ* zyykkZX#g_{W9qp-%H1hlaQ5*}`belt&d!oAo;9*3##5OZ{7H|86K}G#`u?3yJ}g|O z9AdQ~8CJGGU0Xe$%dWb&9Q2iC2?ACN4m zYnl4fq0b=y&W()!2qY&9bMzj`uct4-g>LdxW~= zKytz^tM>WpknKI|IujI!eu4s#0;%LOP2$}90$1f|I$YqTQuf(YS;5BD_e3SC^r>eK9@U{iKR6bBY08ca*LOUMtq+Q{6J9`V^KMT zf0F#M`>VP?l?yF6KNBMMe&ctC1dzDy8$yPFMD{|mNcY=9f?f~)XO}#nqwRE7blnR& zJWZMtq=Ur*aR8%=_5>+{rem~Iml_#+HOktUFYw@X|k&xW+n!wPyRXon>y3pMhhkVnx zu9K;$+vJF@s7n$YXc*KbU!kX-8^)C}ZhC)`fHw~>dK(pb5zrX4#}fp2w|zLHSqA6` zI>k_CT2fB>^3^N#5J55F;1{a#V z*|5BIU10{GC!ekYZW9Whm;0562Lx7b5T0mT1NE5n$w_y%5l6parluL@SMYfHD8KX# zdbCbY(_{Buk{#8h7GyK@AnmD{x1!#jo!67`&-%$DZ1Z>w2d|IP6L$6kZ6HL$CmXtgHclgQeu1E=EkVsA){0In4{VlLFfhIwdoKV*_l-xu*>tXV;Wg+auQ)9y)S;%j;%E=6v2?$md*NJaxhR)b%8(bS?mXk3IcP_ZtMb6JVvqnNMZJP$uT}|4o)D}0X+uO#W{Mt!PH^BFZtZzi`o1q;4@6QG-5(GXZ?Zr zE_zR;|2=#fmf1)=!^Tt+e@QWp7lS3TP;Im7;9^MeRDBz0F&drGOn!1P;pp22nl#0N zI^?`zF(6FI={aOOYGOc*B;=yrdwd{1c-D>j;bav~FD8?GR_E_$L`i)^ePz+8`0_;bgkM0>sO|g)CK>%sq;Jq-BGBDL<%$v<4 zyq1?IUim4~->4>Jjww=6&ACr^%rhVyNBIhneWv|CzM^YA*ON<(c;a7w2b6#>R_Npw zWQ%C1%4w~tMg}C;H!+g@h~aqL+wy=wLkZ;MBjRBq$4f^Ora}O+4wl3~=@WjG>jhCA z2tEb9##5p<|B^(R6(L6SmU%9W$F)Z`gz3Y=6e*QvpG1 z0I}(&1uqFG_|49pFW_Fq{-uwt4JH+fZGE73q85PX+w=h{M?lxHzBFpG4`p1UFuf|z zAMuP`+FP=mtQh8sm1r%9!~;)Rj1VRhG@>Fi79;EHhdhgia_KRY2~M> zuc(jZHx{ee6G+Ar8C;rm${t8ronB=|p{S6T9=&u7TGTJc&YKi%eGRPSR{PZ(v0@LR ztM)Y1E7{6R?imm%$uN6T9TI{70N&S5>xWYlF3><#Q#s;F#YKTCxJH&^=pj$$P^|KI z`e-om$R_cU-WS-zz|VjlSLx8`Lyh|I#q^Q&^m3CeiUc#UynLZNVGX{<;vLxU8P2+g zT)7mj#d3CYd5IXj36BS~<^!}JlDoV91GL}}CiZgm*5G{n7F8H;F~c!8@$hsqI~q*x z!u}6~Bwu7sY@n6kv0f|6tYF<_9Ya{x%xvL4Qp(!Pd`IA4@DBLa;(T;GJ^>wxgG4kV zOP2xJ+j(@KSHTyQR(h}OB>z3RX6l;w;(R`S4ziOjiF;`ucFxCGok%Ed86TH@#*ma- z&Iac_kmUIc4_q7C??YWXnv&teHNDk)wp^Ys?rd+L;@Dgq^})t&!$S~>*%q_;vx~*H z?KvmSJtu^*{SVOV=e;K!U?1zelX@9GKVI}-eAJ)KPq&|)Zs)ab&j&BI$UAQ@$LHG* z;RW=3JbKZ8wmh5s?g?V1|NCOJSmw1s&$lu9dEEGtyW5+LxVx-Ye4LU)8rC0^J6}<8 zBwhLsA8`KPkBg>eD4|#pF1a5f6ws6_pZ5BpG(L-7$47Pi`fa0;A~OM%ut_jJX^Fk|7^io zS)BrG)#p5^2m879E*xJ@N9?!!DxLMl4?nnkO8Q|Z+|JvRTPWf2^Mh_>iCB<%2dg;( z!+l0~XbF!g1%W(*Px7t!yL9J~gxvbHH|~Ar=h|Jz@#*)!w;K@s9@7C_7iE1YQ;)bt zc}@CM$3HxQpE+*Q1~D%AuDD&R<)rp@Lmt7J^^EX)nJAJ!b4Pfd0fc=E?X6-s`y~KBTF3s%WZiu5*Dm?k!y6yuz>l zVjlgJA%x&+Qh?$==N%rLTPys4%ryzw2QU{WQ5#!oE~=YREGC@wAoQ0NS#$ZUL%9Hw z!+agol|zAG#%E|svMvF90vKK(V4hkiNZw`r{ofObj>Dcf$+zSXvVF7nwVg?@Q96^q zgY5cN|4_H!jv+CWAAgba7lZMVnjI;->69UU)WwWWzYOms=9@e->hA#7m3%YmR%^U7 z>WWG6&>f>xS0~HrZj8rNgT|G40}EF@3P} z=8Tm(DAiS$kw?OusfLJd``FJ%D-?^6cH<@IhOMF^5&v*u7Q++%J8mIp zOe+Jm@1c?p%#~^JB!TS*#*m zRD(oLJIFQ#_tjd+Vg&3&?4(W9FxVU<$@H`O5lnHiKSPHIea;!RK5(0u&Cg)@LniEU z;~6b_lZ{-zvoF&)wL06s>s(Jv8A!{(0RwEgCNRKD1fvS^EM+~sHay@HS?10s7pGu@ zIV2rA=y9Tp-KGiIa4-godo;ruY9QRhQbs=y&Y;+~v-|bFcZLIf`V7Il^BLiwLV|*d zEe`Y5!NDUWv1-if1=wf1L|_1a@ys7t^22a5xuMdR5oMYud64?p^pGfg4o6d84UOdZ ztpRcPmY|$f9L78I`QYUm5c^ya+60*nFfR5%^E-ehj)sXR8xQvG-rqUgd;Iut_uKu0 zhYxU5;RpiTepeLjeEIP4!QR~{yIq!jvv=_Q!^eM(vJcC$yL-D2@9ss>M`h9eaB^XX_G3L@G_^3mS`2ZbCg3HAYbV4ko}H~1gO`2v@e%qs zXm#HsZp7%r3t$uw6$m|_UnshemjXBw=C&91sJ=)NpR70cA z2uaUho--dLjr8)rQoCmZkPR*oxzDA>7$TQAD&m!~{)Q3Q?cUB1U>0fud;n3{F<=VM zdrk$(sDIioKJ_yex9|!m@$siw5rka^!6kx!${pv=pOro3$I(IJ8Wa?u>n3t1oSi=ooRaP{$VJ9cuL zx!3D(nsz5Un+0C;7J1F!x?|wKBJUszT?9Y@ zRUek|U#43`gg!(gnH|Jdu#5MMoU$P=McLAT%~SxQI0i#I7;y{Xr?#b;1cUk?@Fc*f zW<$LNPtj6sQ^rxeMZ;4bLP)xcJI!)t1g5@ITD=|D9bjXaNi!w^9UZw$^e#LlYHy?5 zH=U!bo@yj()mqI9(T_b~Q**f897mwKNoo zVPll;JWuPhK3X@aS2=>TgRp9E{{*CKMPUg*>i=GQ1N43SWLiQ;?mp{7yx3Dc_k-EN zcsUvE;uVz!bYcz586K!dm91mcDaSJ}n5u(yo1!UKwK)@4Deh1p0;c)hEY}P0lC$%R zbMTeSOkm8p3;h;2_IEq15mYAb-78p0jw4f9Xd}P$BnV*kjTLx+5z75Z+3|`SO|kLft(;Ym{vZTHI3^M- z6^P?*k_4uw$U5w+K?WYz2oD|)dqn&n>>LQNHC)3jmdpj48nkAyaYF?4o52}# zwlHxId$Ri@Jr;-Yb6VT3OXSIhD;+j|uw^!;8SczD8iS+z)8XjnJH4&jK84peoNAP( z$B@QO=#vct_w}t77kP{M8Hfg0{r5GCTXScg3$3$UrEkQo)CnTCx5{a z=1gp%st)_VFM;%o6@4j=mmF8LPN%Gi%-m-tE2Hu;&$%!6D!GvX7e@5q0{g4Yg5oQq zer0*$yy(~H#-|4ucLhqTW*evVnMmDz?j(x`2ME_oM#GHEAFG^G97p$!5lC=KtEuiy zt~AfR^`XT+lHcFOEnpb4H!1JO)z&d5j77dJgzRV^wXY3e>`1+e-GKJ$ADIcPb9<{) zR^pSz>=81RR@W98r?$l zE&N(R>|k93XH`E%oK9?NREP)NdE^R#i+Si0HymtIVtee^1t*{RA59B+U3eCa{G~o> z`lyOs)qsDEJMSx)E})bLv9dExOeaQ^Xk1D1uX~Upy{=r0x^O)N%`4%1RBrD|l;l@| z*&%N$sbZy?Mwl*Q)sV5exB1bBH)znor372g=IxJea9LuTbQ@{5eVqfvvV8O*?cU9= zY!*!Pr90wV+PNnHb-gQIxno~~yF?hFBC}D2|A#g^@u1bhM~mYDVhlDv{G-+>$P^-4 zb6unh}qRk%htuf{i)x=4zj)=!%C8c6qm7Xmzx=`)SY2GC~d^>x2)1Ry88LZHN9 z7NAqX>Pw-hS)x_(Ih|XrvIYa18yzD2k4w&x1fWa8h4=OVTB^gyHj0+}7H&Ywd+&cIR$XSbxcWRCUW8sR}OH z6IW;u`SPZ8rtG}hw&a(>4JOVm=G((OliEXpsmdnx?$KV*W`ROrS%Z%1J=BK%c>TtY<~QArH8bSP1Q4_&MX@w*+zEqCq9w; zr|UnF%agT5{6;Tt%P<;*6Q)NHy~6a_HjN@#K58Lb{wrj*wOsOecfoutVL+4%>0PkB z&J5N0NTHuypp3>iK}#R9}avYEWC zrF;KCK5yhcp=W?jEB0NGcko{(qBlT&T>(9Y+)M__#uE0$8$$_^W=+LcG?O>r3>i+c z&fPGo_bQBTscyZX=s{nT4ANLlR4NfCzHJ`HPk}ZR3tAujkU@(h{jEI$9WBkunoi;h z86?%N%(xA~R2b8GXCpOD;^#W9I@LyY{lR1r2IDOJ70fju^>$fn_UMc?e_Y2_+u+xF z?eHp0wVmOHqu}+Q6(**>MMn6YhhQ_)@;lK0>U;Pai=t3Cl0xE*6MW%P=!n04CmMj2 zzY!jcxFjD%bl<}h2%HbiZMOctBJMb68oN|9NGw&$eJquLv?Ld}oUIq?3*1r-f3-L$ zWi>L1*%|JCva{Wul2Wz+Wy%ieGkw4~82ip?f za+_Q*sGoK=b02|@o^lEFy?U<6*%D>VL)SSdDctII!+b4iM%<&6PPOFGkUCN$<4J0V zx;0_ETwPM!trjwpfRV;omsgC!ND>=pO)aFg&~oywY;$jsbH_uo3b?0%$@v`zh)k@& zUVzQ2**tt8vruz+g=paAC4=Xm5WndD1Hs>kbwa86?c`!JSEt|g&XE}Is~em;6`<~W z(_n~qf7Mj-M1%r7AtjaYiEjyCNKKM=6JttHTd+!A19d3_6)z_46`+c#yp<9@m9XFJ z8PzFFdEGK{+7jE1=%@0gaoXmqb;nkergIoxQ(ZHuXK=Ml_AmoHGK-N3Yn}}4=;G)| zxuP%5`@L_>qkwi;k)to=s=2VKpaaD8A?~pu?Li)*hX)82qm1dZ1P>6Nha%(i2=7mB z1j=TssAyg^q-bvpTUBT+A3R+rzol=alUU;q7e)9r-B0X*1u zUo_a|c7uq$i&dgQKw(Qt8xwI%$zZ^&L8$R*SQ;$OsUyYAyI7^=Vg;l7P73Cg}p9e#a}T=H$xiGYI9<1-!I2* zUG-W@8U*z&9YKB7-M8YWy!W>dKJ}N2@vtG!dFQ7nDe;XpFP*$~SI_=S%LCdyif4^0 z2l7vsj+OeYheMM3?xB$NwHzkpKwdA$3zgJoJxmn{#<|7``fb9_vOeKpd^UP4m!R%t zFHydQ%=+*dYA^rG3;H8>H#|~VyUo5lm!FMB&7em|9P?~udD%99y>w&C0TR$p%G86+ z3FpEsBu*@cJylnf~y^TV>mI^tEsxZ>kU;KB|1|0=s=n6EYE_#wLBbfjKN_DtLV_Vvbu>pu;TEOeoR%Yx-e|aP@J7`%Hnlwni~Vvi$D#9|np5yP zTX0?mXRKQMx!RZRe%8&XyG5E9^0dt6D^Nvc@%~~pjk?vk;p>`d*aoh^G|%(fdg85( ztgw=(W;LCay{((s%0`?d2oKXlgWw?X`Pt-?9?1us9F{%446&5Q5YNpFnba+mW`;MQ z@H)`M-&atu9zxYBId|54fp>9l$5M2Dgz!+gAW&y|~--u8|#UM;q{Yfl^$ zX$Q;t*V+O!l=oB8`diPNK&h0h;se{tump%prrid#g8zZ?a+kZ!hSnX49qWKXGj0S{ zQIIEM?ftu;8({n_!UtdalI#5kT8a?%?gWUDofPT&P|g13+xvHEQ;1%17xf+*yB?o( z65QAtuP-Tk;T#kbuWlzhEMM9bO)}zvv7-x%Gh)U=Ym-hY2wQZZ7&tEMfDoC0*6~dn z=BqrO!3?ai6n03eM>Yq?6Z~upK|uSvX@mm^15WA4QQchpVy2M0N;#-Bdu$q*`C8Y( z;1s~nb<4hQq+Kkab$0{;t0kwaA-#|%P8}wr6d#EwN(KO$gWwWI?wI$yfC4f98x=xpH8-Ce4!nKYppa_TcC}c${;l(s$m_qO@GfN_7 z7!@tMke;bc`Bue1YNB*adXE^899S8!SAXe~sd~s$v98SXJ_Hq_V`aE4?O8O#H^|G8 zdh&dzqhY^y7c_<8wLHjFzmF6ozMXjcPN|!V%gfB@!S2Af!Zy2#=;-#_!3PMR$MOzUXm&|1_9nSd^dh5+=leOf$7rgT(yiwS^mrGLhZ|`{;&VZ8yes&W z@t}d2eCVn~X^F5>iDQ3!-PRiN#S|jSwvHsGA zXUee68!|%L#guz5A1C9?__!qh=buAuaheGIC(*L zoWndR>(vn*G7nq%mAlk=LOtYtf{37JiAQ)qY8qJyKt#5{S@JFc z;ewn7;j__Ok<%&_aVI?d)0V((g3miX8)C?_X%Eq{d3U~tKMU1^L28-FL<1-C>9@FV zFweX4@#M>ta*Czk)~G-j$Yd`dh+1xV1j5@+1(SnWU>CGEdV!tG^g)Q;F%UStNRxst zW1i8;5WZ+gKg{alx|mC&wQnV9mB}%k z6g7sr5*_6n8Al{l3Embbr3K;SqXHqtr1bn8mwyNVtBBAlEz5o@NGS+wO&6_YX_+fh zX;}v4&5dux4-)N=K0jc22ku6q|3Q1%RgSfP4WX11N`n`q*{=O+zdSFQZ#h8RLIDS| zS`lZ0l`c;bDeQQ$1FuxLtm3j!v_2Fo!cpKglVw9OF;E54LZ$>KUy{$NHz%9W=L^QX z4eR^Mc0qke6U%kubOa|6q%k?o^>J@dPQY>Dt^vdsDMVVPKIt;curK?GG>36*t!}&*0qG1(H=eYJ@$(- z%_Km%ej*8wTz9jJlga4kZ)VHHQypHis_ATtP10f#gL&}q?!!AKmunLiXOLb&+jv;SqArQ=27833tafbF0K1f{nJ9sLh`NZ*M^U1&td$A0IPS1h7k4)h%-X*a3gko@DEduzMatU0^uDnC&&hs+lql7ed9*3!HCG zLMNk-TwGN@DoKP-o)>$Q!x-Kh#pgaWXBh1p+%9nCJ%ePeyUZlas8rKb%<->y!4yzb zGCNQlT*h3LqmIT8$mmqp$Jw47;q=oadHq2|HqhX*Gt6mBnYW;$RJ>clPVAabU6H?y zt{C6h*;OvUPUZPDDL%!6<|Oc`ft5k(3KdZnQuZ+F{H)(D|v z(vgQkPG7r`G^&(X8s8F{lJ%7zzcz(X1>3tD8ncd&g}g-gwhzb81Etv!_t%9E{FrI^ zV__T^@!=9izLDP8p~A(T@!1S?dv||dm)RLL*|6u_zIE&WRBeQDL=VH@q+r?HP|q=w z&Kfof62$P@m4l&nd6@bsS~Jt!0erE>(OY$SS_|c`okw5ef;sq+sBK=mgvZ03#)~L z*7;;S8g9XZ$%*rpGm{Hsuf$(4LU?Xw3sD0TXawe4F)9x@XKoy?;9LnEi26ueE^tk& zf5Lx%2$`TIZJ-Gl+nv~4bx-Rx@XuO0-3uB+Jy7hebJ*B27(cf)vXn943@GlJdVyOl zxt4?^T0Rh#<5W$5BCP$nmte>TvS^O*RGVE_P>7H>K}Ja6BX+0Hti)1VRHzn=xU?Vb z0|Naq9=ozx&ZfK!wGH6^Ap)aMnzZ3oMl%X71I?6&1!`QT6+M)q^ANsu5krKs64=TW z%1NO-Et7}UaXqnn(D27@r$M~V=P1eKokYj>4fyF%m06Wy>;*3zJ;r2Rp+&zIE3C9U z+B*u06FSC3sB+>F^l5k=OQvw-R^n!(?86Erk%~pS^MJQSPXkDCH1rIXpx=unPk$(@ zgWm-;`@re&poqNB3&XVm3it4Fqo9{4lN zQsA1GU& zg<1s?GE#sV9lx-A{6q$U0VtGFPaQQB^ZMpQL|bW>O{125EUTSNV0CTO(zmiwG1*4d zqNG^0!FF$QPr?#RYsjPr^v>^n`72)#5$HGq{R+hdP#tl_AMwkFeBLpz^{3GYkB}=v zzaN97BBa_*>N>wqD2e{WTM$HC&@<1Es84}VFN+y8NqC@B`Np1I({!Y=#P@QFnbdqg z$8+d*ctnq<;GLiMHb;|fT(UPZ{Z#j26wy`Yd-GjLnwP)V*vODQl=}`C(@B#~1y*Wm z@Rr)d(hPnHw(cij+M{PO;hl_sHVwC34xlTDF*JH9Qhg=;#F0XGWB2G*+#*Ef={`BLWS<=>>R!fP=-)q2aj?JBh{3? z0l`S*X@aEknZFCXAB;OkDY`IL*F=hm`+PuUz@NO*tlT8Ph=3suIbZ=Qwiw-m_sh~z z&xwl3+~dVJgKsufhxH4cC=8r3Z7AfWVg}@4u(@&n%nXfAQr@ST-k=MZzt1!&;_ro+ zyatpVKCRfPCjnYO-By$ouB#xB=3DKEXo%g+&ecFKYc(1}G!7GZ!EKWlbtjRp)*YK= zxCS*%_P8TFFXP0NHy^EYU_4FpCAQd+m5vRvzhSY|tQ0l;2sugBxcbz6N^D*QN!5o< z&Lhy6h^cw4NAmZ~5k&0|+ic#Co0ByYpd5g}3BICjl#VWt;@x({$N4YB!h%F5vR`mX-kI-4v!HuV zidrS@Dn4&&G66IK(Pp=PhXkvlmwK0|o_IE*PbXF-GJePJ9DD!~;Yy@ddvE*y`>)~e z|LYF^`MVPNu8_>w#S<|1Ej z(+0-7A>zR}m2#c(P7I>t$XbsqMDE7dx?+j4bxEZFw0X2HAKtzWqt3DdeKAnFa`V;_ zf6A3flW)8Uq;8lC5K?fwgj@h5l8mxyj~e#IV&FqO$6Ab?bi%DF8@zw(iyW32;25+d zg*@moy?o30S&2PpR{%l^5qed1*LD^?#6h-;o8&+kCAsB$?ssWU#5sRRR_z5{t(NAk z50+FnmGv3aZH}N~)O7g=STUgA{puN&=SkK%*VM<$O+dkUhE(~%#bh}qFGEMQ-2BPyA9~y6 z@3(#^Zb`vWho*sknd$pB^}D%=8& z4&t1rxQdMK)vRJH=#5dErrOSe6R0Oq9FQiNy1xTerNcY8Dl8 z!|fH-DkdkLx|nW7BRV(9Y61nN(pz`@y{4ahA7SP4u{Jy18E?5A{=kBzeJbki*z{bU%XFxG9W|1KXho6LT-o09=&wEKspkCi03C ze=Waox-0ec55**`s$)_%>C&%Wq9^@v6VS@T>x42SF$(=W`}+?phl3-y_3&Ze5~)HDz;bi}y?GiYi- zyGp6Y#9glQ-pxuHQT%gRuf2k{{raI#T7mtrUKXTRaCtC&1UlmD10(Lua7MnoMP(|siQ zqT#JAfQ1mIgfL)^DfIwsLlEkj2p3BM!=)tN#z7`Cg9yGKE%)dY3WC5mit1OK6Ocz-hoZ3L zje)Di1jn4S+v4izrMQPTx*ebKn1`U_6FKa6S2Gz4q|D9`TGT3u4B@uze)KifF?agt$9^jy5`hF!A$~8aJYOoUN@IVXZ20#dL=WKZT5aEx zI8?RoC?6Zh^n>QpicYYR;}Q#kZNQH$mMYUwl2AYJPBocFlE=&H^yx-s?M+YNpAiHs z!@lNi0SkS83r`;Z6n#SL+p8XY!kEQ$;g>L9GBZw0y4^hH;AAM~tWXJ!oMwz^R13yA zz8~RYkj*e`x_AZ6IERUrViH%Qxv@lqH+J*ABsg_NIB$m>6FR7kWtJkf5ydwVe*u5qL^i2PoIj2=0LjOp zD1J7i82{P#sbjPq*pR$5~;pE4azuhL8LwfB10w z$HDUf0=LKKOSr}>aBE94(H7l@;h2Kqw=8o=biM-vrGoG5DQS=jsKRI+Ct={L%Q{It9d6^tkw{|f}8-a4gd_oEY3Md z--!N43US1ppcn!|EPBl~!yQ7UgOpk*^#s}V7@lQ4Z45BXz&RRzTZA*3b0|=a0x}hl z9t*iCI%PSOI@dTj?*Pu=yz6RuY>`2nX3WhKuu%Tj0Woa>zz}#rTQn|4{Iz&Z`k-*b z8QX`zT259VGJcH#b_yAWy9N0n!^3TXEWBC}l>v?jp&F-^t;27`H6%yFc9YXJtxAfz zrdml4EXB`I7Z!&Jqv#WBLU{t@T)oq-Yh&1A)rP0+dMB`}hwB`{uJ)ImL6Y_a*>e6@ zAepTToT>);<3go`&@wlo5{5)n?2kA(fH^MlB2`Gf(i^(AHK^C9S)yB`D503G(1NMO zO_FQU#sgLUst^DiQ88sE?q9-p6npgUhAZ!_fPuoB94U8f<>jzumu$tZj1p#)U-$!VZT= zO_F)0*b;swwXtw4m_QLO<|YM&I5QUlqv^_Ve2$y9KfxdX2c6Y4!PN5iAU&RG=l7sD ziJnoeiD|$%w}@MHlfhh;H-g;X!YHop1<*cvxnT=%v_T08g1+7{B1RF7ys1(}xmOUkvSjbiB$utB28BZdKjUtj#J}WnuL+0N2=Y9|W zSa5`Ye17{621G{@E;JZ+`k6O4VJPmA~}UvAoBi#Fin#*A7EzKReh z#Bd}c8Bj30;D;GR#2P+f1otGIKfnew%VB0411q7)w`3HkqSidQ3FOvSO3q-BS71nR zTrg2yapW8G`UIU zw@=@UwhOzF9t8}cLg~eBL=Xar=S}z`;y}_c{)6|AJ;Aty3n!^#m2?VuLTis(nsuR5 z$W1p7^Uray5D|*cwJ&H?l8mNsSR;ZaXBY=*s3iyqvx;N|c{FphE5^w^w>Dq#^SNmt zf%Uth3-1JcSaI0VN9=f@CV3JqCJrcRU_#)aDHNi_8^3_pDta-^lcgK79_k~KIw*%} zoC3B}s}@aKF-^q?p;7$bh|!1w|Loxk8EkT*T}k_CQ51R_g?G{qLV=SC^|P&*$`WCl zqoUD$QlqsvI2|GjDfpB}BzhGdmL-YMcLOC6>eX;F!WAG_H}(E=rl8BLA;0%_Y= z7Uv@Bd+-^V%UEBiB^C(ZXIM8JU`NOO7hvsQoc3pPBp8x{1$XDR1)(EWpBxXa(mw0| z+i-TaCGhGY0L?&?%zM;!k9V}(+~6#1Y1iCCx5jFR^iS^#+qbgdvfKK5v)p#?o)^{| zSVP{&s`e%=ttxD+ZU@JWSb|tuAfqPk;uN2VgeSA9I(>RPnnDy?s9l3RxX{gGD;84j zk+HGVP@&8UX5phxZnwdNTQo4h^7cH!PC)CN6P0A9#%;{qVDiEmOs&IT0i$`-`CK~j z;GYIkZh;phFT*Q`i5unD!p-Zv1@QR<|4E@pWCM}968MOUWHeV2RTTabfcacHA$2dw z4e9P+b(~ZjxF0Xh&N(qK>F!zxopbwax#Po?*6O|x-D~y2daX4H^0B%}P*vC1~LjL zEt1-xzPeGAG`8S`77Pe_ixIB6p~-?|=EY+qy+axsy<>k6HWeF zwbD(WAbVAcV%#Xtn!-nn!)x!DzF%p#9?3(!^H`}U?UE+mI#on1AY?^EY8coQs|soP zDqFksF%mlxH3}^ZaDm1#3b~}H>ohRoD0MYRxbIXq+CK8q8XkEi;gVIb(mODz9wQk& zqUwynB*!Lx+SClh>O?V%C7JdkVXD2JI2t}eB6P;H+>m$c?FPE0nGi0cAvB3SmS71FG_BM+{fm!szm#m5=wY6rh^D@f5M~zcA z&{b4JyhbjK61bHhmd-Z4svB@BRUwi#^??zpx-WJn(M2!GQ4T*YMoyYzw z$u_uN%_`^Kx`vRUJqHWLo!S=YwK!kAtEeoG9Rm0b5%-h8Y`oo}g-U{(BEJv5--9{~b}#DXQ+-a2(zfn8E!XC8kgM$a#7f)f_KFdQg`i@d_P#&+|g7UU9N@~;U$Zqx$g3{ z(EH-*OJVIbD`9b3NWyN;J1r)Ni6igol+dd&IBgd$qsteFTlebgL*+HgLurd5;$aIU zdjl;Hc?%Vmg4RUZYL6nLQcl3`j!p*9DcbeY*vznkq2st{;wI&F0WsW&Fh{15xP(Ke zExf+c)16W8Nw?=#*#nMkMapCdeq9P;v|v9Up`{U}7e)KTK+ zu%NrRU+2j7lAb$38m$o${NV1H@U0g@2J*rA;1skO>qPQP6D+veZ|~be&7>0Ji1CgY zl@k`RsX0@Q5fE5)54EJJMkDP_$Ej|x?v5Y}umRX=C=|pU((8)mwv^o+=WSS#Hyy2_ z!WG%YW>iOs@J9BVH4@?{0ykddI^`wa0m!_70B7S;SDO|nJDLHU4Vq!GsLqrK9I`9( zB<+8HkNgh3FfyYB9^n4oZ6qW4emwnC|MuepQ3YvLa8Nu;eo(aBOtcLLJ4`F=+t0Z= zuwK6Cq(TN!T!@})Uv<}AqPc2&V{%#A5{Dig9lwpcKRq+h0GD6>G+p)b{vnGL<&bhE zEzTv^E-J5E1;=PMYOklOmfbhV@yb9LCn_Q~#qUl(DlBCEe)**koxOgNu`_bnndy{e zcuM_M6!;yO^Tg~}@+YzqT_~p?F)b7sr1JOWqaV z)V-9l#)`$1qh4h>InYh`Ci~IKC9!f5AG>B%t&rJrL9N0SYiSJExg5&1rp6Tols9+0 zVqfXa!imrn!IYnhpfy|*yEJC3Sy5Ce7ZTsn{0nC@yjFt_yWGk2I)FrOsdh=y(&1l% zOVcELey+Vv>1UmX204BBhm>#|~<22*xct2sHW>A7J__$$jWzRWsnZJSAe#}0a&q=9Fy{~w) zl1$qZ8}5fqPB1A4Qg|wtjX#+3LjXM`$4j$>kFlyWL`m@ZNF$OJ5yAIkww(h~usV`HwWDOg6Me1u*i^;Mc9dBOrQWBf2-slkeiT(sM$f=%Pq+e8G1qd^9GFTu6krbS| z3<|HVA*v2Yg=(*3=MK0-23E(VI7kn)wT*+sAu*>*5R9`ft|4#a=oKJKY5^7}|9}2c z;Yi+8*+`(q`3cJe>o**mI>!<)844;if&w?hAgWCLrXBmUlEMu{ZU8%=C1Y@?DdL^L z7#NUn9qu}Og@wu@*i%3SO!D!7CG{d3iM;MibIBBIiZ>Ku@XSkCGL`>$3OyXMta71h zBR~0kp6Ha$?53f9s`0TTI_x4LWx}d%e8f4>ERQb66H9M~T!SWs*;FRuqXqE?FC zsxnimS&po1b*x-bS4&mcNBB>9>RLxWZ{i>Z8|x*~Br$~T$B_f)P6rn|+G9$pJ<8e% zBnFfb@|=NX)x)-_PLUb-O`&lyt!8y)C`3YsCNzu+F<)1C+IVCmPTXeNp~7Ur)ySME zhx*AsHAtToc&-IQa}vsi0tylo>_R5x#a0vWs~>%2Ew@JJ7ay(37eU@0$vp5HenOKI zFLL~2YklcfRk66FZZ??TAEsIWR4p2fWyaRD-YaM<@{v4pNH@&Kj4hL+dGG1dr$2hM z1RGIIy;4NMQv|CjV+bu?|D?43uTmI_1+Czo;fhHj0QdjQ^&*n};> zqZutA>v(wq9)gb~Aq|8D`!z2WT-opn)Tkg>q+quC|M35jFwh^VZ6NMrIS)wX2{7Tc zb$ghaAj7KV2K#<`Q2u@Rn8&;Glo6975~~`}Bo*u7C`(Ke-duWF*Yx7Ln9+JTADkjK z509ik(KDG*BZN`Q1|1AgFYoVoktfsZ9bkRiw&-&5Y3{4AL^zlJIlv536Kxc7QfQfA zBZ{|>f(*I1lG^(Z?8eW98hfmKjaO+LeeR}KsZNPq>EmVrg1EBDmldB^MLvnrrH&Y! z^xk_#GxsL3d$IT)qi~(-qBfwV4ug(#TtRBqGW~S5G|#LS=_SWakby-^5BKy_`!11= z3@s3wuBF6{(CLun)@gHRQ}c*xQfnMu?7eLrMMbXd$ zhR!{7Hn{yEJliPze2DP;DUyjw?`|Q-x>KxugXo!5(0gT%cl|vHqP`-L9W4_aH~po- zd0Ri}B8_LixHSAB=Bh#V!S&E+GIKQ^$02y68{jpY^E&qWElA_YCop{Bw6y@4=GA=) zidyA4C_Zn-78b^%fI%zAJ4eEw#$}JW?b_YI4Fm%kU8b{8;F}4AIn9)`33&4kO8H_| zqIA}(pR(6uCvHXGn#uOI|JS3Eg9Nbv9p^$)dxii`U~hH{1K*1fOc}-DlYuhaCltVw zF_g^Vh6(h*s&ZCFl7f)C+nUP^Aiu;mo?`K%0Il|MpOo)c1PCKthVWWo-5 z-bWIb3DQK+LjzIE2wL8mz*j*styaS;0Tbusv@+yk!F?7pGHk=?)S{`Bk#kmnWD0%i zTr!-gQ_a=AI{K!`>6a@k%woD3i!xk~NHeBq0UB2!sRSo68BI?aJP$#Wz<2ei@pbuB zaDpusmbAf|KRo#kV4RiYAv_WiZHTknyLt1QhX;E%Z{E@Ivysl=gbbY@oF2qLL%O4e zp4j1uZaCHGlIjI~w>j~pMLal0@t12rHRVylI^0dMkPlTCFSOvLQq{DvHKH@D&LwqR z#ZGj{gToaLhfgMmr;T8@eWcz|-862EirL1DZ(ewU`j})`Zz}!!^8Ej)t2+c^{ zh(^HNfyG~5obWC3p%YPRLDK`FN2t5y?7 z*QbGG$xac`5x5e_ua%FNQVD}09~VQKLp0A8Cv(-FwHpyu^&?59XBq?lZJ`(KDI&*3 zV}44|ep4<%0V)sNFtXRd5*i(2=fknUi5plDw3%ZGM!YprblUHIyD(Aiws%ZEWO{+u zzUL251P#7V6x9=m`gW)IG}#85!_op}jaU+X7I9$PX_P#Vd#e~%^)%?dyY99JR(r%; zyur|LTP<`Rc`$Q6Z4ZU|t%1HyS8?1iepT2Si75tk!vjJl59Ey@3Xc)oriF6st>Skr z+;tCe8(UY2UWA0V0~Ig4D$|~XS!?rTMz>I2%uHpjkT(}3g2|1ws^{*@Dyo!JBfceq zLGB_xqGIA-#o|N(B`*%dWEPw6#aHq?=@&<*EX$=@$a<;gKhr7~{|_h;IJe~}ecHVB z0X#puu8ru1Wh;2AIFy^<3DZMfH?DFO{MoI0#4M-5 zmii)!8Kdd(;Cx{ZoM97-KFt1ebH!eeAHamJHj(DZ23@%V@JW3NyIL$0pVuDosF$As z>1D>>$v_6UC^gT&R+BH2J{E_>VRrR91pqC)U6Kn_!Lu6CSEdjAo&yKFjy`IvIQ1QR z7juFLNJ}$oo6JSxB8!$!eyUq zyfTmzf1VA(pb!@V#C6~tLX&%&dd>w%e!H)4!Y|+rt&JDwAdCG^Se0Gyo87gJZ?&f8 zb+9Kpi@Qz&h=6?N!>3Xb$f&#mb-B9qhut{u7+tN=UlyvH)C0iA`7?^Fmf@W0*aX+$ zyRV=?b^EgE)IY5`FpOjzRe)njYAG(UW~)^yP3z&oVEL?nHu#y>l>I!OZo>P!5U`pZ z-ay)LqRYJ*f^}V@112Q8!rQUyFm^QueRgg~J4H#}fWYYTt9nDT?Sb?9X)1nmywwKOp41XM596d$QGy~62h9XR#o zBl@Y+6!oe5hF5ucz39W{q5g}5MxM~VtU5#qb<6?^0`P#l1MKyl0?!=~tRMJWU{~r! zys743iZ_8qr>($peZ<<5h?@+Ifp%18O3B4XsS)-NI)LodkLEZ!o1^||-$Y6JO(>N_ z#A%usJASyYNLy|VV&!vYZ*po$MzslG^Px27?&fhw;C&Lcw|EmXv{xz9oi|Yk%|1Bl z(NyK#d)cmBZfv_Wu@A+j$T>jJZ`Uuk0@G-)X9@T`MsCHzqQUeQP)Kn}y(=8_-0tC= zDxBh|m%$rXJMmSEeDIeeGJD00nai@8vu#Mwf*w__cX~TX)4(^tp+6{@`f@1lJ94wq zP6>rHlp&yW<71d}ty{36xK@_tbrkV{!`ZRi{Q4OHd;W4CdLtLxhck%LGyk65}V=cE5de&1z=S2{rn%kP7U zE1x{T<&=9joMvhx5mj8mrdpl66p4hj2NI|~BLQ2-`)UbI2NZjXOMG9JKI9YUN^JHg zz*%$3i+B&K?`kK^CeqbO(1i|jj0Zi@0nz~ZEK1VuP~dEU9gq{%x8aL-1l)y-86%7% zBLNKdJUK8(F;;(SmJpJAPV+ljW#F;~hDJ$V7_RG+JCJmV#}_Ub>wktk#rWrl$!ubp zo4P!9ro;JcJiMV5%qGZ((1XywKuiE>iA~P@H>_hv@3L&F4ixlVc#Isl(Lvz_R-m!+x1k!e{hn>W+KU0i67a4fVeNd)$z)Kj;P>FY;Mn}aHh&Q&H4d2 zydkh=)~g}63Pi41HoQUrB9=z0+pZqd)E9HsB z@*7^lm}4FWR~=O_RiF1@R zAU!+?y5GY!G(UmSFzXsaa0k27f>r3$>=Hoxhu~r!Mi=1YR$tuxxMlpZ>?>tTKgQ3~ z+yO5WSE41UUL5y+0*e8-6G4jI6Z*&PcM03DfiCC<0QJ$mY5xd>QCBS47q~bOBMfX0 zr+bUzzm8s}+Y6BUN_&ma8nCD^vC@Iqn3gwRFSc~UUMAZpmVSOt-|EDvK>lS~87-49 zPlCMbfJ2^)Z)SJ|9Yd_7DG<`LD#OR5aaKHED$0gqdi6&^VKJ^3~kn z7=mYV+G)61)D})K>ZP$&dvQX1M+6%Elk|Tv1M5>|-LR`GmT;>}*3ux;vT~Fw^QpyA zU3EC~nfZ3ACkKj?X?*m$1G1hJVWAqfLEiF^kBxgL^4Kmm&#AHZZ{etd_BzlnJM&H@fjqU&s6L<8-$l!#y4!NXS0)ig=d{aU>|G<5>9$n*CVKn zV4;RnC)MFIzJpVunyLF|nf{jCQeKwO(cO$0uV-tUQ^yErvcko}D548!m>rK_3?I-6%@0 zCI{y#rADQ%uM8&8O+bc6IyJgyWAC9!0Yio80*D4a1(MSDIRCt&l@WrTVQAw3$KriO zF~+(P#`(VC1@+p<4Xi;CE%ehEFE?RygiJG<$T{fZx{>CO0Yka4f4g(`%Vyw`uu3X>9ir*1!}~gLw+UZ_`{te2ZNzkU2QcyY4g zbhF>-@pq7K4w?ssd_SVEB)iM0piBsS*@{Kz;u~R#} z{DyHjN4oq*O@sx}!*hE!wKXH{6--|RG}b~tyY(vAhv9Hds1}8tuaylF4u)dD|0V zTXJN#e$blapa;n(S~6klnH?-9N1eg3`?*PB|nGYR6p>53rfvZV!=!kf+) zOW`oF98sQbH{-Z*m6*|~s6&P_v20I4sgrQcrUm{SVK1C*J z&t_zo@$S6N$obe`YUf)rtU%BaG`h{z5fZBC|A0YWq*iBRe2s*FhfyPO6=_EK{_AZz z**bfvo$dGg7MtY4u$Tyt$;|XCA;vyz(JC|=bxSndEwmQ;VYn58qe6gEg zI!Hmi6{%yYlcu~c?j^1gZ?OSY5{Wocj%@TW^~8`Av-e)DS&t%yxHPk@3#SE(=JLjY&s zAI5Z1VV#QcCYrcb#fCC8ePX|4Nr<&t%9zyDOk zn;u%%=Gcs3aMpW)rckiC`g~!xGM@v^6dG|Qj0%otoTU_NgayKU9T~?>%g4f3oYF`X@Bmy{4XP#hn|C=HusZ@blk-2@#@*B&lEpGm>jnOiBLi*X|;Af=q=W z;Q@)Jt2R6JS$^?xcXNyA$9RDJT?~h`;R$6aq37!P`l+-aH72UZix9fha6i#4I)KKGnk5LdM|l zwM~T(w9AEMAvdfiWaXr2s(9J^Zv_0pWegHAS#ZBMgZHx&;bvgDt|#6cxerY@V@x{K z4hDx^>@&Q*LJY4l2I63vQ{k5W9u2d4!{59=C0cg=Z32?cd`LGMm3ii;MycUk3F>o?7-41xMK7zZT zOy!O(>3~R0T@p;Mu+uX!rGu}l8@r?cNfg47m9_0~3duMwo$;(^A6c>m5DYnEaI941 z!1Q&$DxvO;9^8MhCwaoF)^I<-maCu};T?3W)d6{a?gV|&?2u8!5^Xsj42&SyjD{b zQ+HrlMJorokFy5gF_VJG_$OEoCJ0z^u9kPd0b!kIdZtF0&Le{g*i`E&Bq1G#HWO;K zqEd0N?2|ET#pit9e8Qc!NuH@<(}Nw&FThsB}^v54zdOt zG>3u)@b_Pg1z)3+YFo&HR;T~T1_#>s;g=wQdXV_r*mcm+^60xe#P|$sZtxQqbB~Pr zH~#7E{l7a89(}!c$0#?#Q_3_B;5E^s6>%YjQuYzTFu-;e5o0!(^OHAOooXBq#oRtQ zvU=SO=c-DR*V)VaoNoWe^LPmP5?wph>)=a$Le*Nq+1cQUNsY_fCLq@D3TOujab4iG zb*7QJuXrD=KsNibiHVoD4cBo6wYfD`LPgy8CVT+Y2jrt>$f61b5+mPnWxH!Vf)i}J zz&yF?jM^<^sK#?NaO9H;ne*q4$#ujm#V?IUdEky`8D@fJ(>(Ele6Lsn(hSNzV5~?v zHA`+Knv(Txp6;55h7q z3c^+gDK7G>9?cMvzmJoinsQIAB~L$ONzSSe%@R+C&$}JtdG%mhy@tMaBXkKA zmdMF=NDL`DAf^hpVv>i7v*suqc|=uf&@jHdL_NWyc`AYpp+ zUR3q%U~Qd!!RrdJ$a6U$KpelQ-$U}s`66@>Hj6?<*?e&LQa}`Qwa)mjX1M|mYarJG zL|OM2Lc+H4dcg1@13V3yLnPv2{js!%X(aSe} z(9vPaAP4};uXyI451F+P`b;CS`s*;h*Pj=pmWQ_Okp z9bq31rye&>kE$DE)V}?1fYB--6^#0V-H81QyH6`(O4CU|SrY7+mq$`(aMCAqM^E)w z>YVTn)_6LFcVTYEP6qDHx#o#DA)10u(;@&(J7j-Ybc!!HsX|W8UH#`6N_u53U*y?T z;i5*Sodv2vS%5TTGq2S9k~``_4}S-5Ag{pBWiDy@R+?E(B@}vEMToNqrHhcU8mAn)~S;y&cZ=AEUMnSvU`g@8pZu{P$FQ-LBLf}I>FI$?{qzp5wvwGh^r zfxy+6^aNpMwbrhM`a0^6HB@eq2Db4<*Jl~8)eNfaN^KLX2L5SQB&{?+DI64G0lkf#&8-Kix{*FVP`Tj_%RKQ#>k3#OG(yZ?6bq-Xf8^)4 zahoY$xKXw8aJg&pZhOTOTMC&$O>y}#e4>WOA478iD^2CL>~ub#2P`jX(T}>ZUaHx_ ztj`=J#^H$TJ1v}p?<<^x4;t+@6hxsB=yf%=ZP1#+;6|8W^#}+BzaAIf(GuA3mJ9F^ zeHD_XKU$0vZ?q6AT*#F4Hf4ztcLF6snZuikpJB`fQYlreAd!IXa?(gTx%2nhZ)~na zPf}e$S6v?z_Z1|ya64j{x#O#Au%wP_XyUW$@x)dwh*Bmt*yC^KMvbE6VN`RT8?hH-uHhoXcg zOx;@*wZo!Ls7n@kWFnp4g?y2F%11r>$1%EX?uPspDre?(vo*j`2WgM_FJAkq&@skh zMW~hL!eJjfpx&8(3~IH!_r=>P^k`8M20!N?HEOtF45zCBm+cp8?jKZ-bK~Qjrvh zpy*O;X%2xujp*@M*6avm%jCALa-UfV40&HH>Dn*mdZhC_$()4z5~%c{oAB;YD5OD{y6@ zzU7Fae__jNe}Sw%a?bLYFTThIvYYO@DxYxH&NpH3!F^jSRF8vRGlM_1=-T94TpoH_=hvpzP!chvC-%>Simtq1vOWNM zgI_O`&0+{Gd@yu$xranSS6Lq;gNrkA+lZIX4bnCr@~7vwZX8n*U`&SphEhy)}qpXAaj z85;)cxvpa6m<>s7C|~YKmkKfxkwOl@`|736(1&Bxj$i_TBe=Ht9DM>SHRUkXrsRQ* zO|R(FRP_1$0?jm60A8F=$P08h8BCe3_SMLa_h_}JYJ^Pn7g7N6hm;n;jg1>3~Nb%!uv);+V>QIM5)*l|*%6MpO_n zJD7m2V>>ztVmF}iJ+_P;$m!bO=hZKrSr}j{u^AE1^pw5>O$E zM1+`dK;G_=H5eZ*Pb5q}#IXe;PaSDOI&^%!dUGond!6HQ?V@X6wQy^G(VhFU`(qqf zrbCD?|Ae5KO6VXlHtzh<-~Xwy`&PKlh}S)5o}4s4uJPnZYCdW5(}aW@vB?JZ83KFJ zdJgE~ND7oR5hJmou^{8(9)#2Gl&6H7(0G5xZIH5wPLzP#dsGNR+?}c1F91@fMJ-Vs zr4_!<)26m{GiGduqSvuc^YJDaSf1g280IFiz4WpxiD~S^zq*Lsp)ERda+pst5$m zNtF}wDT9tIA?pQ#qNJo^X&_72j94uskVb?S%LJ_=qjZEbM8~+<0+KL^i916}N=6jd zZPt72GZ%ILHAIKkr{bEHHX1IiYqZQWqFBxY0H(4zgV+J}@FE;~8^%XHMZFs4qzSwr^Zokg66FW_!W zw)rj^u(4Sw<(1ESoO=)|=~%dE@i-LuQgM;ulb;okK+aKT!MBQQx{IJD_i&WdQwO;K z(vKJ26UZwNk7t#Be+>AlSAPNm8i!wL350Kynm*BCL5-^brAaAX-7bTx;}NntpA8KA zHG=x~dT%Dqi~NQmSL%y^4ySbzOFbEd6*R^h39x0KsV8<*wYD{pNzfdzIGma*K!tLn zN62Iq`YJqGvJnHBIykK6-%M!UqNFi@bR$i?=)gaulG;6^I57USk&{19l_~^mlQL+x z*t)UfOum3@Iv!rK+( z15M$09F3zJ0D-GDiVU;8Ss^`fFcd8T%J$~ttvV$4njnFDIJTeyn?WDUcgRr8!PzMi zLtef-7a`hhpQZ{(69I-b=IM|+fWIz_!Qg*9Knf>gJ5Pzdg!&ZippCQQ+YIS2aaLgT*n@0q;yw~!PA`9|IG zCUwbcg80znPzlQ|?U@i61OpbB%UrHlFY9Zav*UXo4v3;!Om~OJXF}M~Kdc zHyvb{Sid>^Yo9ky|Kaof=et{t<#tupMRek#wNH(&)FpPX`#-rMaR_4H@x81icBFOCF)rM^Zb5I^+}s&S3Js zVyq<0y4b zR|e~@F0<6`wYh_?7etv?)>O!ahIlF^GG}OC9$&M>&iLj2GHYOi&qj=`XWTN|KU6wd|`VbUG=%p7aa;IClUOYCx`G{sudk}>e5t#pl`?Xv-Ho8I@1 z_y;hchpittcg9D>2lmjvar(jZ5=H1u^ZqTHm2^`+?-2zn1{nWi!-Y2I8bT^N0ueQL zMQu)PC#{RJ=Jt=K;xl!0h8L$(3-M{VLFrK3{+qi#%p?w%`8BZaeN@jhAK8M_bPjO<=3C^Je?wl5LY*Z>9| zoHc=|q)e=F;KomZCHuGmM?7UrghGX;OQkan-=H`h{VCG?;tu{EYn$TUH0J-kVuiSOdq***@uIv z>h#O>Qnpt=G_Zj7_IEaS>|d@~*qa{F)r9F9!S&-xV#*q7u~{FO@|5QW)NaOcOJg2?FB8@o9mqHXxy{UhVyEd92J9gV`X@rz?f&KD z@#OVz%A!Nz(O7WdmQ$MxKTl+^P*YPlf-M>25~yz zwtjJT#ay1}JQr~j#rliG{WN10y~i%o;>cq36#UTGl~GK*L*@meG<24(t<7{SuS;mG zkC1j0NnF*Bb@ok=h~LQdA8xb2T0+GRG}4FlQ`jOUg*BIwtFf%TXVgDU zi|p6FI}iG)PY-QOzYk=stqCI=lQC3S(D6t#^NZc2^RIh5Pn!@DQas;BVtwGn2Y2lG z-R5$VdTB<9H7N06PZBcd#1mX6Dq}6ciHJM!;HGK$0qHo!IR37$xx&kx@YWup)r%kf z4eupLv<6!rp5C=0UiN9K&op1ji({d=wL`708&&QjlNeqa$biDpE(KDHy~6M^@EfLrlG=u0b@@>u!H*2`*Bh{ zgB||an*4cV8Kx9mA_0bu((T!`@kYSz)&F}8nYJIMzQ zZ~L$sZm_{qI!Kg>y+|hMQ&CA@Kh-edxysA1FSV$j3OYUufC5ZPLR(*BHfS>sYR@oLL3^#JKf}6iC`%5!o!ulAr&ky;aNp|5^ zl9+@ceFeJq-B~NAP%MZii=Xu`u4XTLO}kO^Wu;+`z(4N))G(NK{erQKE8Ju#AJqL3 zZO1sbEG9wN-fNxxoyiM-_~`xZUR$L|QlB;RQ-Y$(JN81{yQe&kL~Ly<7;U9!%MH;_ zt^V-Q+MSPJIxC{u#zy&xH^DdoO%xePJ@;UJVT&s`m-TkBp(`XP?7MuM3~H*~_jD0(4brW3N`cEt+6BefI!(=gFZ4_QN3Y zOX&BLGx#_?=-lmp`8nIoJ-&;wk{FF=>j^9@(C31I3{J0*5`fN3$0%k&tYaq~O$YyY zdy6BZz4wFV3P0d*iN*W;kUAC!EDt*O?_!|Zw->H1kbff2+IT?y!7R>147Lt^P`op* z(Cq(2^PgEAiVJbY_fSVEoMKlx_wYad_r4(zJ#Xud4chV>Bbg^52}T8s;#UXLhpWS5 z0q>NsdeOgxhw2kv^f_lz|$LNK6&isbf+sA%UtG)@4l>~l>=pQE>yLOuf1h+}} z)}@wUkK-AX0W`iBlLi%WweSRs9h=h=y2v7l9HVxBhkugP#ctGuR)Q2~9uwdb^@P9v?RP&Sf0P~iPUj&_{WfmC70c5woCT9B4~5rb>>?a= za4;zxkAi1exF(5fcnl%d?Nd$c%EFyQ#mCUL4mKf&ECW;c@zIp;{Iqge#3^FA0yk43b3=lfDW*nmBlgA28$P09ijfTL_Ch59oy>FUA$b zm7ew$<%Sy#z)%cNcKHw`!Aa*%0T6qzuNR@^c?3T(7^j(d0+a{@abTcGdx<0`VALSv z4m=Rt=FVtXhfl^P9Mi%36Hzu)u zUfbyyzPaRlkNEh zsHuHrUg_)&$)k!=duOvo0!Qh+uO#FW=O6)bcJysw;!-Yn{Vi=Seto{`s;N}`jq z;hU!g+oR)my6d{yg~A@)G_#!7c(hpIM!(7Tx+A~7fgxi6h$cTk%8=Uso#ea?v)_nKgeV+@S-DZX_Nb^|aHgUcW7gk*G zq0fyR;=QgB1f){?2PA&@?1G=npgb@cSNZfvCD_vzo(;w!e$#$b|ZcB<#U*Ox4$WWHppgNu<~e0h%_xbOxvOM0_6 z_xVPm;i@{cr=Rkv$%d=S-EWUIE`@q|f_<)sUwy{5dZ+_@YEM7cQ|Th{^3CO{E`Jqp zzY@51DJo)rf0qHLgDxA6% znD!i=px*fR9LpZMYox&-c3-7LWw;)y&4@`5BG#`dy42>e^>w~wdkr};{3I6 zZr^BQLO2*+`nv*rvi4O-ins{+%VG|flU4a#O10pxL1K1;T|0KE8Td@kkk}pq$j1)= zoGE_#a3_T32eb*4Q>(Q~VqPU_BXXMRF1-5u{f{eOe)-@i06WxP!S3*j5cJ^mJ=s=q8r2YRukKV(!ZukBJ?xi78Y4SXpfXX!uPTf{T^#$8g@y;)dz0b2;ytdw#WYErR(~5ok;LG2W zSiibCvFd7^*x!eu*dL(5JVLZZkSz6Rjr3ZjXOJikZS0qKQVzn5xC3IA%1U}ac5y2y zvPE37<{;Su@Jljhe;f?oAq1r`ra@-i$)#jbGWqO`5UnuL1B%JoP%rR zs%*%XR%it?>M-%Dq|RPc#8s=xS8NWh5x0!A?FFQmkioy422yMPW0fGttt@I z4_-iY;nx8Z)p!6RzfkU=ZuHV6f2+N8BStfzdmJHxmUs<6M|^u{h^RX}hNi&ma>!he zAYYL;f)do$VWBe;MmOj)C4oGgxJ+Kg1Y=rNaPucCKrD{>SP?R3WZ1caNFCkdE~pSk z%2n`OVNwTV&H(=G0nZ0`wNJ(;qtmNten#>Hm?ZcN#qEF(VgnNdsF?H4N$1ba&s!EK z!-msE-0Xl?i#!alwvfI z)GC^#ktCKp9M{J&X+^S78s;IBO4a&KJkQKg?5Nr`3=hqHn^2ZIN4sl#S6|icznxBA zLkrP7L>3g&F#hP;p;Esbt~lWn3hmZr>LHcMU>zYm#96D;1u-*l1HwhkZoGEVzk4Qe z<3DXLz4v2T2eLP?H}KYW2~zJMWJ6&vLrODVFZ9Ux(X*`M#Z#DqNj$|vOtYxadtl## z58?WVb#z`;v|s5&8_XJNdlxgxE_-(V!r|O39o8HA6GWLUQyYT&Sq6}Zq_Wyau*1k& z)w}eT@`Es4NBHsh;m@2(7wXz{6u1dK9QO|)@G41wdyLqpX5f-3Q|rjsDW-CPa>de5 zSx2^Bgb)kHHs81~$7>h@nDo$$?Rid_+x5K}FrKjHkCGdR=3_JH-R`64%iJW283SD< zwvuQS17-ZFr5VZc1Ys;;BuFAhC?rIXmB>|}XgDc^J41E;p&+>q0nx6+Ks-w*Fr^Hd zU@Q02+wSq`6_(J988C0~w0sH)5^8Mbi?;$8L8Ah{mhvRgI{cHpw z9?=s6#r#HpF!3bT-2i_{vp7SLtXg&EB06eA# zO$tNn{C%z`tKYM|^(7QfwB=d+8AO0cJOkYc1KN3MHeoBU)6qwGB^xB^>A_WD+>j_Ru^Yo3e=#+7KYaO{xMlm4WWT>PnyoW2qC( zkDOY>3;Z5i79;cpSE~_gn~PeYBRRt!LdGHP1SazVxxR$nB_0Vdt~>!syUrkm#VL4g z+)C8km!6q*(|f$AtrARp1=?SR+3L<33CT?}LZ2VtA~xxUYAu zPZOs$H0#-dm9$uc5@5g zX@U(?>3z%_0+#?~CqBNda@QQlcdJvx@a&*3rB;7_hP5Y-8^BQ`oB7QxTBQ!XBqtqU zT3-E?*4?QuqnMDCOox+nb-gKbu~u|V z@DhQ9h-(88zq7Ho7yBCbGE2u@P7ov>DGH^n|7*b;@;O%{2~^(HPXrTT}w?M6!c+$lBr`4>8B)D{&@ zZl*FaXr(m$Od8F#o~sMM0O6fd{X>_x zEtHT|r_bpFii2G#CzWy#LMyBhx<>F5`br^u-}VWu$L2Vhv;Kq)%KQi5Y^RIDe=q%P zl9<~rmrzZCzLPd=P65o9PO4~16~_N?g_@KAx`T^1&YJJH$%K)vx7Hf0tqqfQO^;5w zWi^zU5yC*q??XjiGccr)+;=WMS)_KTc3vCPobMV&H1kD$JZpaaXx1)`Wu2LG2^qg7 z5arZ8E&~slmjbRE!($)?44d`kE8CCvMFndNPEAY)YgRmL)3y^@xr6uI!8y@*dgvz& zhT4It_;~P^X=7parSQkp$j~~`rpZeOB>WW?PS9B+L5P=Y9w|@&^YU_z`z*~z{eJ(> zOCCt+FG^Mz!lz2>hoV4=o9hgx8mbjgHymapI#l^>uynW*uDW)i_C6JI_v?C97u8;6 zwcLV}-`8B98A>UPktwoggK<$cr*A#<2H3$>X*gqY5l5P0ZiqQej{FhvIgB`>1rm5R zM_wM~Oxy_+S_**S04X2Xgj~}vN?^{Ct$_V2Tw+88)Q(d%c@C8W*l+y{-mMCR*SAVx zq+X0@3QX)LA^GM#IdY??0p4CJA z=aWye5E28KOE8rRHNPf=)!H|M%(eE0z;S#ccXV}Jh1TiQKmYZ6^LQZnwsNWtVMG&-Qk5a}A=!2+EcHjY@B z`y-faD_I4470u@o{w)C$W!ac+Mrj2Q5|mF}lb5r!a^dT)V{#B@&b>c4vm`80O&(h{ zhB9LF!CuG#cQ~bw2qv2Nex_bhDHp?aoOv-S!1c;V72`_$kbg?5svQr$UKujA##KY5 zlX*J02nY0lwZHB1j8RY_8GWs@vKOK=0G^M0$#9u!kk&42%i#p#XR?iz-5CZP!`kt~ z$xpLbFyG47YXq1ScSB8T`=m;cBQ2AkvK21;dH^#v_YLQ`x$`6d2|+H=KnHxn4^{fO z!F#)RuL8><-NcR05V%Tw0agWWv6?m0!r+!BXIL2NCa{Pirj3UIPYthckCHiX|Di{p zJ9Ii-6FP^CNWXPZiWixRS|NRJ-nNWIqOy>ukSk6wb%O-@UPQ_XIeHXJY2v2}8Tl|S))glsA`Xac+ziu1)789r0IUh&H;EQ3AxnE<#z+snC%-aO zx~q6A^b>wCjr8wyJif9|rD2()(T`hXrxd5D^sExa0j^L~KIMnMR_c|ZIUydRPR zt)`f$dc5Y#d(nQ;-MwfAR&J^ZF-BSb!8emyq91OYrk6`2p&^@9-S!e|GVO;tOZ`{1 z6Xh5+=9|W-AC2<^#?G&`OkaW;aiUJpm%!q?X-&12?7r zLi*6L|pTVVQy1A{fVneT#qLp)ND%w1>8`-&@KvonM@hM)<(50l)&OA4r_ zJEZPi#4E%-=#`*oP)ZphUGaP!pR(ZtQYVB_#5>CQUl7P3#SYx$hzna`R&~k$0A`pe zZRY{EgEHtK-e&Xi++M2UIYjN zJe9#>P!yy(Jv6(EYKm>*F+L!wQ+t*Af&pxLx#R~YaD$#z+dkx@ddG)nSJP^2y|EA`;V%Im3P3$9B zetB_lg#dAQM}LLGaPlu!1TlRa3;h=9(L6D#-|Xo64^Jdg@k~|6_?6T2$byxv5m||s zIr!$L&Ll?lg*r04LO|w8>WODPP9QE=yr3Iwkj#@{O$Fi}xRKnCH*y(w|qhUF`{Bv&nWfqRXJ8#E?oFti7rhI@H*}g8mz) zzw;A_8+}xAJNlW~EcZZ3a@`MGtM)(iI~#O*>dD`UQwQVM`OifRepr(xO4}=#kI=`U z$zVGLz)$eF#@&|aOr`uZc+r(g5iSpvSonv6N}a(IvSEg~LSh|Y&fOP_9Joe%`%2!7 zCe!H%O13cz^C39(>QLKQl+sE|?0Gp_V#^j<5_n)~HMky?djf_h>ZC8|+m`+%kAQ$GN z!!Fd{C?y~VH>pnP;lvQF#}35HPyPF*010^sh#X0j!m zv|{e`75cLsD)Ek22_gV)$sPbt?PbS2$~=qCK|iuSfI~1TC=%Mn_r*te+4`ADz%?+{ z5de5LoF2iYG0sJ{DlR+tXJsWJn}zEnUcv00DFDCc7ylWKcpSW`Xe3-NV>+T&OJWMA zU5M@=O4L`ra;c6~MFGZSUqddf=Fpi{4?&Up7O^J6|7y@Aiz z{oC~H``--E^j*nIE2Ul)gw#;7BqbCNE;}t-MDLCvVUZPhpVB@zxpK-&EwFH>4XeS4?|k^5zFL zg8>%-1>np|9A0_-sC;c1u6@Nt+T6!YOX;1nE+L&f&HF4Op zW$d$H_t1?|1RHejA2+pQJ|Df04hzFk)7RCuM#?&3oS}fABPER7H=$VxcMp>K;F#rL z!TRB}IS^KpBl?rU<;(v0;7t!nsO;aPaSvIVP@nM4Ur`OlX7LHp^N3te|MjJ*0qw~A zizD-Fc!IE4AC2$W6<_{hZ1Uqp*!;^vZ04^8NNO7(g8ls0VbkWmO7#83(fC7TrBk9P zVXA&x1e2Dw$M~OX5A$}f-29{iTCjobj8`k5F=-u&$4Mv_=YuY5u{4W_+IcnCzYX6$ zqme=sQe$I}Ox(wJI0Mk8Wmc6SF_4(p*H$YNvkAnw*CHSq&f_57RCyQKhtZtMoy(cx z)8F%$t3Um$C_fEadJOW{sY|6F{m~G^=bOR4Y`#eQO&GiN;#Mk&frN`!WxHvt7#uU}b zdA$juXs7EMseCuQT*EO=UuQ!jFAjz7p3+Sm*P2BY7pX4rAxaH*_PrQz?kPS^^?=LH zy{k~+roMhzH%`wn;sTUMlM>(YthpF)i{F+*UJ*|Z$O7Eqm-2&4)U`Iba4_MNr+KwS zW*K@uudy3WR|95h?le?Y%5DEJuW$O)j^1KI?9yn(ADTYM;xUfG6i`jC4mfTUl3`s! z1!Mof=Z%3FG4fJ*mCV1TY8XbI8OB^xZMbxKL3BpV>MEBPlhBL&HS~G8e`B8)-LqGx zm**aHaTC9nBo#b_qW0x3`q&&EO%U=qnfCO^2t@zH?FYgn6z-=u8er?A@6|g|M3;lF zonL%LE&h{dpCPD~gkq0R&R+5H!^huu(^{APJw!OrGZ@3zT>=M%6p*k}DrG1PG;WZp z(@Ac?>)yXGsLR@AiYiChpUjVe@V4mGq*VjL=7fOV1OmYKDRq1hKG7VFc5Q3jQil#7 zc>ZN1v8QkVv!_lKT||k$GsXYShGsA5s=WV{w=7!^tT;Jli;<19I=EeHn4|1dr3;|hi(ZwT4`m)N3g zV~G3~8OoR&p(edkB8g6@F<8A9NDSn}htcYj&OI&)HhPtF06@$R;JVI(8OZ>MW=j1P z=LxdJ1lGC?7UXZFRvev=l77fm$>$?7iNQHLeyl)g&TtKWdk&>4QTO+6p=Z{Acz2Jp3BJ*%+E!PA@rFeR&BLu zaF~PLEnsHt-^qwxK+yQ{&kz2#_P4dQk>G6pkoE`1&!6*TNp=$aP}yz-5^j&L?oqrbq*Y4ODx` zMU0ZECs2vAwm1Y}&^ku5t$-zzgR>?7^-=9f=?~Gq&Q>$2X{CcQguC}jd5(47$E?EZ z(v2Ek6qcD1HOEDZYtwCAS+G&`604yjW_t9@4}Dui<70kImuu*Zj2*n_Vrx@K*+|?I zWec&;>Z;(W&NwUI7_Tea+mPj+2G8=eoLXkvQ?(_{`_`MiJ9lD)2#4OoszJem&pevv~m-;}eYEyp+ zzN7=Hj8G_E@(8Kvq7hP~G=d#A7OPbb;wl@9g3F_n%@+++wo7A~$oOCGB2UUpML#&F z5}4A%u38f44v%I#>7TIp3a#^W{Y52LNCH1hnX|?2H<2c&Lm|P=e}3!N4zK2u^Zhvo zqF`zM)b2Y@3xy>HD!+c{k!|=MxA5b)5X$&BY|d8JC+-dUCb9_bV^ivZT-D>W<~n zlQ+X1c+cGxTzFULvGAaNcscS##H-Z

    {^?s7J0^&MU?0}qr zXJ3s+1C=E*FA}?|8(xv#-|Fnpq3;Mj_{b`U%M9E&tg;2_2{6Uhn&qEc%L(6aQ7erxG?6k(;64SG&YPKmGLI>08OY@_Hl(+{7FnEF zSUZRfeZ}$T9+uuhX@SzP*Ws3)*|tf6SY|j+w`1Nv-P8}^*>!|wSOk*RJD>I6q?;s_ zh>QSM+&I&uL1>;$&TuWIfd#n!yl=kG_%ceoVowrrECI*nFJbe;Efq;6@D%!&p#L&T(`VP~h(MZD8Y|CWMH;wsAl9__8f;-Z^4>cg2dn zHf|8VZv-JevRh5=M89v`i7Jp3op@Q1M5T;PVWiWrIo#N3nL5%vwAx3+!0?ip4{Q2f zh95f@0M%?@k#YUvZe)ZN88|-Ezex*&R27q4FL^ikSERFa{H@Ko?^igw!8{u9nh?3?Py?`RC>e784^)IsuD z>myGk{M@ECJ+?fB!)+$p@h(&m7i#O1!POa(0Z?AT(9{bd9|<&_NbLx%5B45*C$=A5 z=kzJzQ|s^98b^33I+RCv@12b$fO#Bm#5wse5^t$P+G9w(@svgx-;1_&f|`@5qpM3c z%)W0HekAHGJ|Z3J+4WztDZX_0fbeIQRs%<%s$>M<3_mB+1{FUBjX_EN@y?wYhFhNj_Mz*RVz^ zI0m-&|G1*^6+`am-!!3H;Z70`yve7)5KRY))-p$27T+15dB;I;1h{W{gCXSKZM6E$}3pr={^R88v|c(=Oe&~ znta+!5^EJhcJ|Fgl^oZ3nDZUypfQpdxLzfW%#9|NW{b!!IHx=ME9Iah&FD!ZpXFPO zn|LgLC;mz~)y9X3aXynH4v>wjDcxcymG$oWoXk)baQA^#)#NZ?Yfd*$BOyAPp$0!A+6K3`|uWl%rTv1F`{?7|3iNnzH_yzgH59CNx%uEifqX)LA1b8%z~E zT6SX$6qp1Oa-t@`oXHFiG3XFdHck+;+7r01J5aMIuadt)%Va?;_AV(L?fsQ-g>igq zAVDS>D-ZR^1Q*91eRGZ3n+@sOp;p;m&N|qwbBU*ly#UC-W6*&8z$GoSmc*Wca;FqxULCf~tZY}E zVELxUfrH$+*1SF_-L^}}@jF(K#1hZK@xbM4F%2A#=kkD*|>S?@;KS_k*SX42tmttzq;&M zr_{caa6BzXdr-Lv&rVkMqegtO!-87NwxYpApT(ToiL+=_QfBeELYCl;(uk1`fLbeN zNb;HvnOBrb3=)bGpOukqsP=}~r+BaBKv#&1<)w%niM#OA*F#*CL_m5xQQO28ecX~O zF5(JMGNhO%52AH0z0Nh5pY z+Y$%-on~JV0PPKD)UYa6>_Ed*M=xG9j&JWv2<%BS3>9jzhK8aVNYAXKfYQs;HxMd5 z7~RcL0|BTeTId2|hbpoKsxT-g42fbqLAl3<$$>-No?m?A09Jep(eA{w)=ijD<_64!<1YRDE&D?O(HMFvTDh_ZeW1uyl z9WvDo{%?U<0ksTTYYj`B)?PIu6tgwdIGTlA3z*>TsMHOE-pxw^g_SXmT4qK0AM70k zpdVnsq5LhE{p?-0B0n}c39p1U)m7QgaMn_txQjdf3J>1&BQB0BQm~4Je+PZR#fqyY zVNH&I&Q>fl+lth!E8g`J>00*dSTT?Rv_;q$+PZN`zqADqI}x^Z#`Gsu{E(6<8B44qDZEh zCH7dG1Oh*-jvDe`(~u=U z=a+dj)*x_e5E^kCQ|Ag0@lP)h0tFHmbd5DLVL`^{a`~HmL{*<^#FCcpTC#Bwg{apL zhazM9fvt&8D7TD!>Hgl=to|N$?>ejoAc0%8wAM?&MuJ@mG&VHIICA)5>{+>l&OTTl zuOq9!@Q*wpZ2!aU-#Ud(y}R7KWLNlzHts!BRJpe-l-pc*1U-kTitJqyC|TJ@=89G1PwvyMVtsfQ z?z4eWfHXRQ?BgyN=C(!$UTBKg3R3QD1ZQl-Cer}dbw{1-GdhctvvDn(#genNY8cLqF+215kU@`o}qt7KY z)rEQu-qb+FdtPbv=LT^Cizc&llmPiEl_Ap21od=IAtB73fcIOpK-S%|IXs1cD_6@t zL7vm5>B$#V&%^2rD^` zPDU~x2wxb#fUFOt$=Lvh&DtOOch(T$(dCi!cmf|1JCbxtd<5vF1mIY>l^H1-Few2> z;K^b{(s%I~*bx^H%`FvGaR>b3L&j7r5mB*tL)>UbUmH-da2MDu-L^SaEYY{eMU>$b zWFXWCLQ_(Wn#ky`)P?meZ6hG+khOW>R}V#kv|ZTr6y|U)%l0{fUlpI*S2HFgy3^^w zh;T&ZI`nJcqHZfSt(=`K(Us8%oc$~|2|+>&r)_X>kK`GwAOq2&@9RJkt z=jVh+6g4nV9vu~u#`xT@zU7PfRT_}}>6_K&=d~bMZ+-rmVqh5>t8HMzWpAQ9UFy&F zUY}&)aY%<=rpv*ehWkpq=LQoGVb6j^K=H#x!ma6yKdrKo zjvbuYU>#}wWvatx6v)I{*tJI+p^gGCo=jzTY$*=d!YKv$rGi87696KjWX7Zr645QP z<*>{kxe~uUp@qBf8Guy9EMgMn(OU$^>8o8xTyJ~q)OchF6#M9h#xbkFk*>#d78Nxj zR(8f4GyV&$JY)|9@8fW=qaI$XiOe7hsJ>`8!NGuuPQJmCs@;H;xYR1onwLx;yYa); ztno}!S(LL0j6as)PPY}XFy77D%!fkVi*Cjp0=YPx2Ec`QrSrL25>pkDeXnNePAloe zq(cYXR5ShhvShcsyc^MWdvnEtjp!GWx22|EZcH`B=?R#K@)8x6Swr6^S@`h;HH+!~ zggXW6VG1`DUyRgL&!CQt>6y}kzq1Em9 zt-&f+IVSuDQo%%Ch5WXAcLo1vN#D3jw>a|jt=lMaJLZ6EcMx4i#(`JEznD_F*WG)G z{I;)A4$n4j^(RCn+$_ImR5Ltnd)@!#gW!3Rs{Xe5$=WHzD(Enfatmi^Z|&b#{@m+- za(m^^|7-0w6o}&0S|`iZS2#hxhbo+I&Anuj%@eZCnq2(*=PvWkUUcE4uK-ir+t%K! zg7?@Ia9)Aoc7N;-$AtIz+1VAs`(sy=;btWDa>o~HhHlg3U72^ke;1XeVBWgEZTH99 zeWbpWG80hU3_XMl`y0!NzY|8Z31kt%3zsn+{)&ReZ=Ob9^0Shy&yu+Gk=YVQ4%~g@ zeL0?tS4Ssswqnxex_WJ(_udk{#5oQ!OXo1` zHhCKAoyRpWFdYr$oo_miZn3!6U$ zm@{1b1%~4o{n)0p9Z}Bc7vl(h?hj7!dH0X_CtVeJQTqDhg@pWZNB1qxO@xho$ZQ5Y zEzwbWr`vYZ3#yf>&w(j04(L8XNA9Rg)InH)%Zz$P3m%bayx2TDf|>%_&g*fUmt^;| zqHQ0t@D{R>7S1t9PZeDtZxpv@F^f;Wh7J2I7-jcsvdi>Zah`nqFL15+gC>fNQDMc@ zv((9pRN~n{-4)qTgE`qhfVM?0#@v2L#{FtU$4PdM5Aj4`5leWQK(ux67BXSS+Q`7ZgZSC7LIj62OSN%&RyOqD09IVaj z72)c1&8DZ~h#x^<;==%^ZCtU1OP(l(uj&?$1S{%?5w9bdj&E7GZU^@PjC_wF3twFc=a zr-KE_VAU68J?U4MT9l%r#S6oRvH6RArX|Up6iZMpfOA45!1#o0m8{D&^Qp&9_fLFT zU4E?onz1)7r=Lr^SFTNg{AVtelmnGK~oxFUHQ`T<58<9k- z*L^4vV8u>weA=FU;06f?nD8nEbu3DOl@ep|4wi#SkqYbH=SAAAD@C;OsfwD5t0_@U;@@AaL{cpanELnu-WrB$DYZVkaXN&Tm*;1ndpZP5eSJ+lWZB5VA>kSE zTV4Vz$8UKFAk1v>HrMNJ494`qVIV8C1s13Zy~-fzAz&>tFTdz0mv{8itp@t*}l!zY;s!mZoWurzGw-A5Vfj~^DR>j52r0-xoV*t&mUbo zrPOg6&tjD~QHBf&Y-v|Zq-Af`j{Q|y7uUMPCyVA+?YuVT|89N=|$EC*Dp5bf6y01EN@Lq=6@i|b`xEWDYggR5$<&G zSTTjMxf(zz!IX)x@<69gp9PD#LPLZ(Y{=|_Cekqb2Q=Ef?)2~!@`wx=QHVu;^K6Q` ziqH=tODP-=Y3EVss2N&x?o6*P;7o6KM2v*08#WTPB||y#vKM#L!u5@pY)>_STej>; zCj%JaQKA6W8F+0mDtgj|GcIvn099a$3^-l@fmT}9aNRq+!!Qb(7rf{>3H0ypvbr^&YEQ603w3cYTI z#ljOBc?7s^g|Q)Y`iBiiH7=!LGb5SWnyzk4y&Gs%W)U{e+Boa7X!cmiKG9eog`ZK; znc3_#5L&$meRBr}G9aI(TnuKttgdElR30Mweo?eUFPs|xkY4$Q>Mn2EkKgmI1ojQq zSmW9^z-9N6?sv)5kXzjn4o;wk+2txMa$&fH7cNs}Fpd=TbPf;O*~Ey*U{Ig?bQOYI1NRC;8&8li0WPSMt5c*L zp>A+;QLm3AlMd}-R6~(c0gL6uDEb9Z2sOb~Agqpb>%|^9!A5wST$p?Yz?sFRAa45# z_XjkXn3gJf6s$+|m_QB=?Iqk8E=QMVLzq5=5znUp8&zO1Eh9TANTq*qHG8Qwaw@h# zYC#2_%0m(*xD@$#+*r!OOl$JnfFAR?goCJ4i(Tn?xPUbu{wj71~+_T+k}XwCQ#We z*B2Tt>}Xd8`{nwww$<)%oV>wlX>4e8i zQsH7Rft72!xCt?G8PHyPJ~<@ALY(ag#trD`-@?Q{weUfJpv|P%5nFHJUiC~bC+HPT z`(6tJwM6Zug(|azrJF1RwsKfi%ENA#%?$Ci7ufAZVd)Lrp27H@q4Lz3J|`uGpuNBI zeB;r<*3liZr<=Pw+nbpaik@&3Md!WwOipS79XCT1ODjFM!di%b?jriD{7&U_%0AKYosM%K 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⋙y)afrMHDowxkonmcPo%7K|{Y0ahf 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%0DPT|yAAY?MK(<-! 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 !5|`Bi$2R%)%z1U&M_> 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

    $G1F_Y`Mp`+~ZrGNw(bMTki2K_xP53Tst{( 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

    v#AUWy%_faf{O&tEyh6`{`l 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

    I8@4%%a6Wyl~TNFFCo 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

    Ztp$*aQ7O1f4y~WdvB$G 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 XxZne{RC3t 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 z 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%0A;ikM(uURFzYY8KLq16K-e3yZsgz8{N9q;#XC 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

    O!!(WVyr*ZUoLxLq-Wu&_ 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

    Ngj;l^8ZHvME7#dD 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%0AZ+@}#)eej3s&&kI(MquJ_$Pj47f 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

    <$d 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

    %8L7R!ik+Lc4{C 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

    wAaz!XiU7SafNKR&p(wf(mp z8x^}H1JRH|oFM{yaLWhIw{tu}D=b4?d#~;QS5#s`eaE{fFL7ynwgQjHehTLCG|pP^ zYRWC}(TF{%hd%;s5Lm`K95`~hT-N^i@-gprFpLs>rL zfU)w0h&qLrVK%T!G+{KvC3IZ=y`I4(KxsHx)75n0uA@UO8HP?kdJ5F(8Ud$2rU zPKz@vYO~)6=Cs8P@?<9SY><8Y2$b12hC=vDBf3@*dR!8YL!zS*YnQfd=p8tzfY{i( z!!69ovtbDY3a~iGWUebg3JzuBEGGzi+!7(^oJ>IHltD%q+%EI!$9|{E*flEtFcrqg z2>>KOu|!Ehd2H8fa6Ig)Y6halsGdlRRmLu)Pu4D+9Bm{K1Mm;%PF9i?$do8Yt`f%N z9Sz}=a!9yGAQvk=PzWH!dXJ}t8Qg?aDfH5U+6W7}ufQ21GYK;9*#ZwkVi{Xx_$Z*W zHF8_vR9G)&Bu9@q>NUn~IYH-rpPrbA+W0euktZB?l`|C5rG*0kpHz8#h7FVEu3clq z{WUYmO3H&ON#~LpL{H*QdBje@2le6*wy}D9A#NcnWMghH7;KB7-vw=M(>Wg?>6Ppx zjm+xWSm$xQ7d_Da2PaUb1Gzpi!Ne_Gt8jTkED-ISD)U=6K{Q@NRqk z=KDKFR)O-&v7jbNEp;!Qb@&zs%se+HHJ`=G5jyM;kGYeU7xd_plx`GVjb8>0RmFP^ zLEZEyH?6nkhJ&1;Ow8%cgZTjt;i#++)3Z*#=uo-;1e9@dOo%L#q_T018R*SBOyZbU zz!Bmh=x>Jge?}oko`Bzq+c8W_BGZD{aXyVJ9oZCzYgR^TaTeVO3_o{}mTBdvoijK- z8XC=sp(255gC>8$M5hiY2VB%WqnFI z?)1VMx_26dqRICC)OzpcoxYbz_H!C@$G(q91vwr)F5rWy&J3WN+&qHCSu7-({+q;$ z#||B(57LmSt)1i1D4rumseC#(Kz4R|4Ukmb>Z4Pbz?CVA8r-eQ{Z>T{&=%%p-%+e0 zNfXV^_RYWF95ERx-F5kvZFFoRYDd|sbMW>NH(==Vv|GB3!C1O^h@4di(uguawSU74y{EMPf(bX%w{aR?&5-EXdl}H zNMlON*uJ@v?Qqi7cL=sbtcavsoLx8gAx=Zx^R3-QE*Mf%;qKl7xD=CB175Ua1#J2^ zkAx+&tPC7E`g5_q@PnP+NpT^iEo&onl1eP;w|0Nf9oAN5u9IMG254Sl7tynvGlmP} zs~)zEm#!X?8J;9XSE;?dJgR5USVtDBGu`ZxIL zR>2!oKng;yAc%r00F}S!tI$aj2u{jjD z#Uo>#7?fi@4J;Rpfdz3QCA+bh)1@J7FIRZBCu3OsxOy%E@KmnuOW70 z-g|9g*pIJrv2d8Q3H-(VA#{wKf__N2xd45)?qR6$?RW zB$g;%L5#Ccn?G;c9x>zSY-7>Cakch=amz(@%Bzb@L7Y8d2>_67H!9C&CrjH7VV|uw z1l?l1?Eb_Pn#4?P1J#7E8jB!^y&Vq%{o%>?#8UUX07_9DKQSw6!%D_%KyP5VX$z$d z5S)H;(piNejN=n?fqdiP25RGnnbt~KpTkyz+cn;mMkCsBx#MMc{0;^7dR!S#52hy& zg}vkHe8D6e{LX97^ohOWcs9qaXa~nC37=Hd=#k?w92cAt!Pqq z9LvebH1yfh2~fopwoUAzD=I|L!Y_(~=qC5gbB%pY(*OGUDnq^MB+EK-8a!KL%#V1bC36S)FyWF}xV0vrv1FA{x8^djYnE_y*NJ5kGN29Ybr4$HG& zcP0=Cz|!vYt{pExWEs&e9f1pJ;DH<3)&b_k&hpWG4!<#LBUndroW@0JDQOkFy#Rx} z<=R9!GGL8=#a$Bt`<>>+m)IZ!Uhh2pK*kzJ5&VO^91;6R;2(rIz)uN$F|noX%BR!!D8)p;UEObOKyBK)3Di}9gMeu=S3sBy-%?yS{ikfvTqE*?CKDcjmUTI~?TF&y_2vlIupNhR z(|f>qEmBg$P(JvDE^@>Jy_OeTfzxpK%-28v_Z$E5*)85sLD%QnaIzL%uR$KHk*U{) zYti)@C}M3q`U~!^n4if=P(R;5*eUdMM{53^bQn1f6vmyxG#o1(Dlke@L~O)>O)t>Y z>99}$W)$>tZB1C007HZc)5mbkW`XQV;UzIx;w+~23Q7*-2J5f?m$neTzWwy+I{sVF zi(fY4+s2e71@wdFzGj2O3$8$R4s2{-PmJ;etOE5|7G|fmBT5;%S`XrF7KN9P;%`bZ zjsdahN{~yRmLkGu1!b2g@=0<1Gdx8jIOWZCYl=>r^YZx6YJjjv`xSOw5~5<{+cYDP z`xQJ^Z|UB+jKM+zQ7_o*IwpM>jTl9h(RF-JTIV$8&XSoIN0I_dvKEg_AeIzn5s71Op=+#f1q2EU~nHXDq4>8lxGfP zcpqSFMPY){L8?`ml2|zwmsR5zdj0xp zfA8tj`O~L6&#vKnpL9Gpzj^)EyMONe7v4Yn6i@M}&tC)4_}9-q#qlzfM8)-I*Zzr* zub&OBUH$X=Sj1wT5t7GnY|)<76_wWUfGe>+Us54s%=n|wPsNk?O+JA1YVd0Ms?UYP z_nZW-LDC6TiFQ|HPNj-#tHovzDO4}W()OE3_#Qk$H3i?!6#2{!r>6`(^7A8{YHVa_ z{yJ%ojgaX030^FH_Uzu*qjl!i{dm4f*zBr+E^4U?l%xW%9Idnz z@r#L|P=E&L=!e;f1fS-P@38_xmI=JJrO*J^T4{gN=L=$u#!jpdvd%%fi0ddWL1TO& z&6Oz1*=7ewOz_y(7wE;oX(?k={n{bPZ*DIY&M+l;jrNFFc06Q)TFkS}=DH;zA{0J` z2no=|dNEAg$%JS{?dEdN^0i`apxvj`i9y( zAf&$#vSqgfLpaG4ZDW)qSE(Xuqv%8+ z-_N}mxQNfMK;`z!?u_TP0#g?Bzs^0EHGTIAX-W|7HhvlHnqy#K&x+nVoY(JC7Y53r z+J7nPf_-4$(7V{GVK3sGKvARI@Uh18woge&IP%wO66{$cL}&|tK;XpM^rs!=A;((n zLK4*Fq?iwj`LG9dAx)>Zba9xCkIHrf?v1e8H9-mChVx)G+*W8Uk^{jwT7y`8^S18$ z%`swvwP}WL#4X}sA#UyJM)Q)KjZbhd91n*a9Aj1KFnqT-J^3Pa$#?6=d{j4YR%ZaF zQd$;xDRpMsXtDdbgDasWN+I&m85Ffg3bELalsr*VMn~GTiB;4ppN)i;TdS+e49^b7 z)Ay7SbEu4zf2@!0P0y4&5qmXI09as<)5C>M&442|h;pZ@wi8&2X@P)9n}*OG79>JN zn;SV9?;~Yp?7^EsN5%g_1NwQ6*wyHUski8A^{`X~|1ZXNmJ0nt#?QtOTQE3GGFekE zUc9h)X_`e0FlbKSx*)q_p;152`@Pe*&(+=Y@u8vTT7!xNRKR{yFSY*ZGxUzvzUWW$ z7OqO#Hfk+B&`Gw!k!)^AoY{*|6Kkch=m~87$8&d362I^#9*tj8lW@)GUdn*$zM}|D z0{cke*>2FDGL(U*SZz>YNEtec=n=2H;fPE#Xw^=U=Kw)Dq*TXjI7^FXFuRFse*#S& zlh_|0A}-kibFlqEV9lUraa`Z}S6ULm0WiObI`qq@8|hr#$d6G2EjR=KngdmY#Tlh- z;o&I}3pQh@KQ=?*45LHcxQZQE7l#T~B);voCbmC+i{M<34P`?(jG!Hi?W2D0PiTP6 z<@47tzIm7cg%pn5PZ`SHmNrv~JIh9<3A+e{p%ctzYJUV*mT{8#cyt&B!1$!ObH^-w z$1;z=+g#!f(!KE^ZlgJm1wr(h2#X9uLczQ!2!-be4TU(Jg3U5RiM8*Qigg66&a|oK z+(c*Q_z=EKnczN*U{P@Fz^U5}TE_2T))=#irp?N-b0d-PAaR~n4HsT2jHquF zAn94QYR+-Ds=ky1tAN(FY305iV@(RACO#%z*r`;sD<@rs3$%-AhbrbYY@L8g%s-kS zpxU`->l4q?oYOhfjagIULyf`72DQx|Ck!~jj4c8NN;xNRuq4eZtcpEvehwx$NXPX$ z=8Z#|jTnw?j~Lm)+lDyOlX>U7qM+ry9;Gsm!9tXwwluKa% zU#iK5s}QB^_=!0(*mNFDusDxFS@PlF2VOx8V3F2cyKHpyz9m;xk^*~p4 zzypd&gZXXVW-m+i;}k#*7LlH+8qaZkbkB-g%saRCjlOx)`I6wm1o?6p(g`u%v884P zyqzx6cTh&s$-1x2ZX9OFz~I-P=WA90wv2)*=h8u%PrY!)i17M`Pn!~yh7{#Z|Mh5$^tchshlMXzzlyHq8AiDD z55wt`f)gS$?*}@v@z@8$E_zj54InHHhRyW`;X_(-D37QSK4J3@E0oFw@?T4 z)j(LL)97xcVEn+~g5KznB7Fr1C>uUK`o@v;6}ALxnQlAR*SeHSAfYEYJ)0285*+$H3VB@#pzn%hi?^LNr~Hld0dc*RddS z4%&o$g^d+ct)WC2LLm|kf0X)U4O?-gj;K&m$NgA}Nrki+F338;^A3AI;r{}|+fJyM zA`SAJ3rRdxUncVO3S^PKSJd5jbWhE6XuIwK;q;?j2AHxawOZKLXj>gHOZSbvZz)US zG*C)Et+0d(K{?-P0P>*3bQQSko-h}rl*RM2{ep_wmlz@S|J?*W4SeSZCm z>wmdae||1A8?2f!2LaKX@)G(_h=>GTEfK60EP2{@ZYqeQLK5m%x{rK_Ptp^XVv zU@0RW?N%S0_Ln4EsCt(`BR4#v1s4NGDM9lCCyQ$)fUMv1PS!iv8D zAOR1LiLD7>y0Cx2;Pld*EAgr%LZC&YW10eFqMW3FwIg+E7Uf6ob!OE7$@dj6n|+ne zX#Q=)>iV}QUoEJ_GppX82uU?zghS>>xTPEt#)s3+B%aw0!~UwUlX!QyU>bv11P}v^{31kZEgLlFGz!%}>|aBJ$cbTqov* z6-H#q3B5b4^gaH}Z>v(cITXw2&G7Wq$;g#etwA8elxCJYt!h%vXjv%AmQ=yU0Z9gE z5`%H9BI5%ds|g&Q2=b8gip{zlHm7Llp{U?5$=KdRJYhy9Q!|<&bqi^N*gm-}DUrdB zCT{afLC@WlUzm0_Iwl`E`mUTPuW zQwfZ14Ti8Ev=_!!HC&+Kvl0!+I+OS^2Cf_`sgpe9&*~xX;zSW{e#`WNJ~meZ`DnY@ z_q|BPfnS8HP3EMN*16lL%35a0aC%_ipq(LL18D|ea6$ZM(?%nj15g1_E)!z6K5XwJiI_ixG>mfiGn)! zA`jUZl>nf0KrC3dg}6Jg`YEg)C0I3n1~*cqN1!*zn*%9Z$S248)%#3ec;0>(55z&@ zC?49m<)UFU;eOIs;SbjJ4&%$!ZyNt8*siXvCYga<56;jf_huIB@ z3wXx1lO?HrnD>|S)I<_IZR=Jz9u-ayT&+2{DOjlB*xs991jyvXAr$dMnBV3YzyJ~U zOsUIoH85Rd z59h!&ZWN-G`68K_n`xW-q4zM@%UX@C4q(&cu7K@u@klx=Bj&&kNt_2VA`1_qOHl!W zgXmI-4!*&-kKJzdh14GP5?=oRfP49gTC;q5<9g4vTX`fdo+VGmJn{?Wsbo#ic(d(2 z$uF_lSRrJX?q%rvXO;=6QRqFBP4EB;3*k(y>`!jRWo;j(^Zf&%h3Qv1LGg5Uu!`Xs z?Wydhl6^*TjBE0i&6Gi?ih!)E+6NedLXaYHHVxa) zn(E#E^76%>5IFa(q*tqbnozI}MDP6*d?NvWDGnV8x>VprNiF5&5WT863@%OqPfbxf zkdR?~lK;oM*RSLhd_~24GDx7TTZf9^=g9v+CcfYgi_(&xBNhvfW^44AevYUyTkwnh z8XWj=4Mgil(+aeePI87IijxWXeoRj#`D-XTgD8T%eYrvtOu%eD-37D5=f<6il!N~k zn|N5qGQQgHBG^5btF<-jzYppflNdQO`tue?V|bgLjmFb;Y}tBiIBuZzGwePt0k31@oPJ`0IkrOYnImR@6s_$ zruJUG{_**%KPI)GAQPF4TM#&$sq7z2GS&o%B*6}>4e6^ul#rFON;`1u`2U_*ga*bV z+(101!R8u6B*Je8(3aR-a2eZX5|eN1K%R>(<$%bTuaqCs+Vjwj5J%c+qnuQab@1oh znHbUA+SuBvKK7}_0XAkGCxI!jX~1Iu6zkAv^GyJ@(0)L7F`aR2Z_@y5%^VRGBxvGP zI>cy-o9iM=D|sa7EIkLEZ+@VVNESwXvr3a&{f16L_KYWBi{0ADABp{tbl&8|^M+E; zun(T?F)-)*IkFwl5&ayI7l^kJHUkzgW>t5ADN!8=)bS*!o>@+re7 zezZTT-bbbbBnyjctQ)pnBa2_)W=Uc}XzIv9m66Gydsah7sMvzOhL$ffG}$F%2*%(G zian^6XoC&9LenN>dU($^YLjkv8v&Y-*N)WlEDZjKjTAb7d=esO zG4aB4A-5NTLLghA=pGP}N$z@j@i}sreAxdcJL!BQUTz3?#g*ayLc0NH@VK^r;BXEU zomdG+MlltTG?2ER&x`R5JrX{6IW+dvvPSwdDA6?-6=pU+>5#MfN$3B$dml14&_{R^ z-ptLjm8p-J<>HB(g_#j}Vdkr`sh2PNFma`bPg8gyS;Yn>3w1;({C6$ZGO0X$yC;`ByPoH4uN0sQS zYx~$rqsh5>QhR*LoaqahMeRr9zOvQappkeA)SZXz%yeX0v=GMNC&-PJPu5>N-`#ul zZjYu(?J*}J>fy0En~`#~s=t%*FK`6O)};zB@Yhc=>~zr-*MGO7SGx{LG2+fdawDQN zHMhmwg*$g5>kJ;P=tsFQ4f#jWMVi4d%iPI&r2V@d<*nSgBmXw>j2hp zt?gD?HL76a9r-7zsv&MdJMvFujcGpY?$D2f0CLg=J{%Q ztyRzBc8s{mwj{6j;y&-;N_)R|Airh&8+9>AE4ISeE!??de%Zzetn}~P88pmz19ZBA zjC&~WYFXEmQLjfSVKVWNjCQjT*-HUzAwRN!?Qf#h-fHws)YulU$|F34PM$_DUqAif z#oi%oDGr~#{^8ZrC_cKR{*F_cdwOn8JvqO;+@>`k9=oJAI@VK;b>a1v>`^=Aikk=f ztpnYzyx!hvC#}Y1d>p%$tyuQ%(kzmO)NU_9^Kv-6?sfJn?xh>sy@wqW!gjldPVOdx^NU&a|^?YBzZ`Rqc!0f@41qcO|)dc@S?cJ`KPiH{+{^sH&0eWR+*; z9z5>!-(x4R^1I&38@M*-D7)vC@!h0nh__Ua5SIoyA@T{##VAht;8gVCW*PlYB z8b_n?C;XkKor?>5zZ>WBs_Fz7s9J-V57PJmux-2D&FOHehe)BG>*H?FaRb@x&_|Qdt)RYCP^~e99C1kTOoe5;0dyYvofT zo`c+4*=)$+e!6pKWg@Q~Q~rcm&r(c?K6cXiTK#lw)`+_)CWw>mJeqHJck0;7`X~){ zc+{Z%JS}WQBcW{=`D-}_qG~9#?E>5EOv0WfSp3CB3v-;KZDAi;7zU>Tc(bxm94lS{ zBr5NGJZ5Zi5|83>d>VgOrY&qpYiA=_ZCzY! z#BJKp4T0XDs6+I+dC6o)r`~R0z9?O312b?IVjMt(0Ny{rtvZ5c0_*A3SKEmB$VJp) ztAU9{(C80_AjY}U4t1a<2|~^qgf#>pg(cZA?Z-o2Xve%)Qj)I^ro!~|)0B4%MSQ+4 zuN8Q0?=up_a;9L*QAfaJFEivs!i2m>+BT2WwomTG^k~CzlDh;}zg_-b`K~$=#FB8; zJC5)XX00t;X?d#H@YYUdQ0>~LIfo70RK=};2nKrtfN91{z^k=Q+-A@M+O`#=RWIdK z6QFChS64d^yW5T4e&+!6M{BinuswwUw%sS%f_>gM5;L95!(qL~Hh?}K)fS6qF_`JzL{ z`8`;Eegto+>mI$r{ujI;Gi`o1n>*-cGr^J2L+PcFc_r@Fn}P&1?b1il2R>qSaPC@| zM}-R#+sD(tls%T0vJSHlM9^&K-Wv(;G{L{hJ*;>gVN1LQyb(7-avz)f-SW*<3Kka? z6I5!Ft^i<7y=CqNfGBQ5`(bCh(b{hxfZlD}+t9jnsFhwV#{B-OG2LSc$K^5Z+yRS$ z0l;NsjTJ&3+xAUn<-s;LmXAi)r;W9=Q*t)dk@;!nX-ij34>8}C-RPz*T>0(xewS9- zJy877t{A*TU<;lj;I}UJB~Ku?dp4fnyor2ic&FH57+0v4Y<`Cw+$@ob3TlJ~QCg=a zS1=E*7^Sn75t%v%)D+fsodiG6N1)Kd6C=19)=2JtPd7|QE#^`;V_5jlenc|;|izEDOfNB`;2#8INQJ?^(Q$GbxcF?sGce&eB#>E|M zWDCdAhzE6C%oCjLNxF|e1^d%)IX}!UZjj8$@fSTlQ9SM8&Jf%rdIn3@Y9um?_{dOD zfcX9GBMjG1JHU=iuu&OGR>q(?S;voMtVkVv+3DkZFX`dJ_V58W7`KO@Vk6ExOu5ds zQ+trSSOCD={F1zdp2BYk#oZ96GO|E1rcSrYBq(};T#+d3hjlIf9cX1KF}07v+V3In z>uC4K=9_mDDsPH`Inpe-yHSmn{Zen3Y<){NwZvK!ZfYA`xw)+h5XR|=fd#mg1mw2IYirvLB6Ii02PvpjgGT5wFnmf! z_#m|F2Zo68gm2Xc(0u@1-mOxSA2(#OJ;fcGfOhTGPvtqB;<^m*M+3BJxBj8A^C9Wc zKOOu?_79RizFl18_=yTReL12pefsSK*oE|!oD{IH_ zZcPL4lBQ(7&Bj5)3TS5UXit(5M#&c4Dcg7D<@GyF?gr$hHy6FZJVZE?zmM0{?=OsGTbjD?RaeI%KZv4ng{ab+o0?F$5$F3M20!~|aoU3*ulR#zLK z8V=ZIRM&!wO{;s=tq6Hkw!;V0^8TWhAdnZeCE8gj13OKxHYw=Oz}Z`Nz*5L^l_?7B zV0N|+$vvdNetP#&Pj7!8>j1y9y4ro%Go%|yak~fG$9L{z*!p9L zrS*tfAsJ4NUAr(dqL>O6z5%^Fhu8@$EAm1OhaPa#eO!n21Om?^0Yv3-Ra8p|;jIV5 zC7WDU7%bVkM<=_KUUw(!oh!Wy#bS_*0wiExa{31+syGe6b*GfmAD z>={lJ`Bdl~x9i>gqXQgQw*kBWq|$yJ;4NUxTcpJoDuMJSqyh?q zYD|sfE>G^1+{iUM*f5BWlJ`NHgi$k>VY(UQ_MNJ?rxCYww> z*~-ZlZ&Hb$kR#A}L7+FAoS8sg^>a;-o@`vMMp5Guc193MxS4y+1hPT^rPsuMv(?>$ zcd{3ogB|KMQA=AjSv})1F9Tl5aF$zF@E~??vosR#W7};FBF_$-^`l{ zUrBljgM`PX3=;TTI*gvG7F+Zb-RyfH1W8zd7ac3CZX|BgdYCG)BfzKBO`qgQmO0Px zj-eO8&wkPe#n(5dg!A$)n@^#TRGsMvfG5hi=m9}<)fbW%_PHpLA@T^ncT2NN-^muM zMXp5-xgD8_nF1b8cw!xhwav1waZpQXAH7E_D;TAu8Lp5*Y+Zqo6+pMr0j?ipxGH%7 zX$z68N?zh2M7Q86d-Wqici>||`V(-txL}q#J|Xly0=o;eck-}pK=>FO%gMoZeR$_i zw?2-KQ2kiMg;_jqpeMr;j4e7GdFOA>%_r+sbYKo$C}!nN2~nEMVYyNTPDPef%pY-$ zl)fLcU4|7#U<2g7xQI6KaeCB*8I)%@R(NRvEq@at-^?btd!PA%a4tsdp^L-qB-~vD zrB`5RJl-zSk%PWKf*8b!LuL|synyc(OSk9{At+Yl+%r3XN;uXQ9czzdtRQnG$z;ol zMtTZn=~6)9CtHW#tIktCV(SZsX^%uD4aVpwz_b__gpj0`PE&RG+Cj67!YB6?aP%j38&>6Ku;+6I%FaFX?p_ z9_^3$4c2&`2c&|Lt?`~9(T++6;OVyOTsMx)CgV~ar2|jx_dneEWC7>UGCj1JbdYwACTR%XNL5~wk^0qx^1O9 z;(8Rt)!hr`1;c9f|9zgJR_fJUf zW7n&I!Tav*F)vC>^@em)R)_PF#UFkE3kl%IsYpyE1|FsCVkh5MC1n zAG`v-7bu&!vY#NJl2NCwkXQO-j>z{D)SkHy&yX@;c6Up60+unl6a3}dd-?_TF#6^B zX!e~Je+r5>zt!^3LAe{?%$5HDgkk&nrBJ>*L^vg*io=W_ho9XzPr?swpj{}pw|Dnv z2kGwqoPK!|wqPR(*p>LiFQMxBh8YY|;Ns*R0Uebv4@H6dGj#pn>C!fqZrpl1-!Aj3su8`cor?1$O zgictOL2No#w8XNX#HU1OF^X43xeLqe%=EndmlB5|L{h{fd41 z0B*6q3n~uethY@1igqyZSouZ80lN)U8jG@fmklL{NWL^8CjDJM>mdF%1Z$uIKg*4N zn$iN#cIF8$bmugAtmrr1OP}mNJ-E1d0zk-1c$%iPB`0VMDe*^pP-GKuzMFm|87sZ# zXX)Pl?!h)}RG;CDpY8awOEP@IkSF-ZpQ#m;`dP+E>6n@qB^z(mAePK(;TXJ3%e z>5DhTim1^*DNH+%3c8$Z&iiELd4cX-2`qG{1|w!5BMNGO9uV1tz8sh)IJCw05Gc;0 z2OJUN5d?+^@yG!sLOg;%*A|ilmgev%0(sOSF<@y9j|{L>;>UD9xPEaIGLjKVLhNgJ z-NoOy<|Q!^iYdu6*r?p>4;9#7IiwaEAH<(hUY~ou@#iu^JxisfSL>JbbCGX;j3ON) zenN!76GGrm2zNgrjD7CCs|0jFI72Csf#`QLNBnvjKOrLE2~im3J{GkAvG9b5g(pOv zENMo)g9<6sxP+1AN000Cgs22yo{)i#0SHe3G~}hXF&N%w8>SJd`AD{eWQ$d{e6v^H zJv%l)3P^3Mt|)T%s&z9mDfioE

    ?a41Vr6`U@rP|+Q? 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�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 literal 0 HcmV?d00001 diff --git a/node_modules/video.js/dist/video-js.css b/node_modules/video.js/dist/video-js.css index c527ce2..6c57fef 100644 --- a/node_modules/video.js/dist/video-js.css +++ b/node_modules/video.js/dist/video-js.css @@ -30,11 +30,11 @@ .vjs-icon-play-circle:before { content: '\f102'; } -.vjs-icon-pause, .video-js.vjs-playing .vjs-play-control { +.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-playing .vjs-play-control:before { + .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 { @@ -86,11 +86,11 @@ .vjs-icon-square:before { content: '\f10a'; } -.vjs-icon-spinner, .vjs-loading-spinner { +.vjs-icon-spinner { font-family: VideoJS; font-weight: normal; font-style: normal; } - .vjs-icon-spinner:before, .vjs-loading-spinner:before { + .vjs-icon-spinner:before { content: '\f10b'; } .vjs-icon-subtitles, .video-js .vjs-subtitles-button { @@ -128,11 +128,11 @@ .vjs-icon-cog:before { content: '\f110'; } -.vjs-icon-circle, .video-js .vjs-play-progress, .video-js .vjs-volume-level { +.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-play-progress:before, .video-js .vjs-volume-level:before { + .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 { @@ -171,6 +171,7 @@ /* Start with 10px for base font size so other dimensions can be em based and easily calculable. */ font-size: 10px; + line-height: 1; /* Provide some basic defaults for fonts */ font-weight: normal; font-style: normal; @@ -192,18 +193,31 @@ .video-js *, .video-js *:before, .video-js *:after { box-sizing: inherit; } +/* List style reset */ +.video-js ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + /* Important to specify each */ + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; } + /* Fill the width of the containing element and use padding to create the desired aspect ratio. Default to 16x9 unless another ratio is given. */ -.video-js.vjs-fluid, .video-js.vjs-16-9 { +/* Not including a default AR in vjs-fluid because it would override + the user set AR injected into the header. */ +.video-js.vjs-fluid, .video-js.vjs-16-9, .video-js.vjs-4-3 { width: 100%; max-width: 100%; - height: 0; + height: 0; } + +.video-js.vjs-16-9 { padding-top: 56.25%; } .video-js.vjs-4-3 { - width: 100%; - max-width: 100%; - height: 0; padding-top: 75%; } .video-js.vjs-fill { @@ -270,7 +284,7 @@ about what's required to play video. */ margin: 0px auto; } .vjs-no-js a, .vjs-no-js a:visited { - color: #F4A460; } + color: #66A8CC; } .video-js .vjs-big-play-button { font-size: 3em; @@ -285,10 +299,10 @@ about what's required to play video. */ padding: 0; cursor: pointer; opacity: 1; - border: 2px solid #fff; + border: 0.06666em solid #fff; /* Need a slightly gray bg so it can be seen on black backgrounds */ - background-color: #000; - background-color: rgba(0, 0, 0, 0.8); + 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; @@ -297,39 +311,158 @@ about what's required to play video. */ -o-transition: all 0.4s; transition: all 0.4s; } -.video-js.vjs-big-play-centered .vjs-big-play-button { +.vjs-big-play-centered .vjs-big-play-button { top: 50%; left: 50%; margin-top: -0.75em; margin-left: -1.5em; } -.video-js.vjs-controls-disabled .vjs-big-play-button, .video-js.vjs-has-started .vjs-big-play-button, .video-js.vjs-using-native-controls .vjs-big-play-button { - display: none; } - .video-js:hover .vjs-big-play-button, .video-js .vjs-big-play-button:focus { outline: 0; border-color: #fff; - background-color: #595959; - background-color: rgba(89, 89, 89, 0.75); + 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-error .vjs-big-play-button { +.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: #fff; + 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; } +.vjs-menu-button { + cursor: pointer; } + +.vjs-menu .vjs-menu-content { + display: block; + padding: 0; + margin: 0; + overflow: auto; } + +/* prevent menus from opening while scrubbing (FF, IE) */ +.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; + /* (Width of vjs-menu - width of button) / 2 */ + height: 0em; + margin-bottom: 1.5em; + border-top-color: rgba(43, 51, 63, 0.7); + /* Same as ul background */ } + +/* Button Pop-up Menu */ +.vjs-menu-button-popup .vjs-menu ul { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + position: absolute; + width: 100%; + bottom: 1.5em; + /* Same bottom as vjs-menu border-top */ + max-height: 15em; } + +.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: 2.2222222em; + 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%; @@ -339,9 +472,9 @@ about what's required to play video. */ right: 0; height: 3em; background-color: #2B333F; - background-color: rgba(43, 51, 63, 0.5); } + background-color: rgba(43, 51, 63, 0.7); } -.video-js.vjs-has-started .vjs-control-bar { +.vjs-has-started .vjs-control-bar { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -353,7 +486,7 @@ about what's required to play video. */ -o-transition: visibility 0.1s, opacity 0.1s; transition: visibility 0.1s, opacity 0.1s; } -.video-js.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { +.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { visibility: hidden; opacity: 0; -webkit-transition: visibility 1s, opacity 1s; @@ -361,10 +494,11 @@ about what's required to play video. */ -o-transition: visibility 1s, opacity 1s; transition: visibility 1s, opacity 1s; } -.video-js.video-js.video-js.vjs-controls-disabled .vjs-control-bar, .video-js.video-js.video-js.vjs-using-native-controls .vjs-control-bar, .video-js.video-js.video-js.vjs-error .vjs-control-bar { - display: none; } +.vjs-controls-disabled .vjs-control-bar, .vjs-using-native-controls .vjs-control-bar, .vjs-error .vjs-control-bar { + /* !important is ok in this context. */ + display: none !important; } -.video-js.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { +.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { opacity: 1; visibility: visible; } @@ -374,11 +508,11 @@ fonts to show/hide properly. - Found in XP IE8 from http://modern.ie. Does not show up in "IE8 mode" in IE9 */ @media \0screen { - .video-js.vjs-user-inactive.vjs-playing .vjs-control-bar :before { + .vjs-user-inactive.vjs-playing .vjs-control-bar :before { content: ""; } } /* IE 8 + 9 Support */ -.video-js.vjs-has-started.vjs-no-flex .vjs-control-bar { +.vjs-has-started.vjs-no-flex .vjs-control-bar { display: table; } .video-js .vjs-control { @@ -449,6 +583,9 @@ fonts to show/hide properly. -ms-flex-align: center; align-items: center; } +.vjs-live .vjs-progress-control { + display: none; } + /* Box containing play and load progresses. Also acts as seek scrubber. */ .video-js .vjs-progress-holder { -webkit-box-flex: auto; @@ -467,7 +604,7 @@ fonts to show/hide properly. font-size: 1.6666666667em; } /* Also show the current time tooltip */ -.video-js .vjs-progress-control:hover .vjs-play-progress:after { +.video-js .vjs-progress-control:hover .vjs-mouse-display:after, .video-js .vjs-progress-control:hover .vjs-play-progress:after { display: block; /* 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 @@ -487,17 +624,18 @@ fonts to show/hide properly. 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.3333333333em; right: -0.5em; - font-size: 0.9em; - height: 1em; - line-height: 1em; } + font-size: 0.9em; } -.video-js .vjs-play-progress:after { +.video-js .vjs-mouse-display:after, .video-js .vjs-play-progress:after { /* By default this is hidden and only shown when hovering over the progress control */ display: none; position: absolute; @@ -513,27 +651,64 @@ fonts to show/hide properly. -moz-border-radius: 0.3em; border-radius: 0.3em; } +.video-js .vjs-play-progress:before, .video-js .vjs-play-progress:after { + z-index: 1; } + .video-js .vjs-load-progress { - background: #646464; - /* IE8- Fallback */ - background: rgba(255, 255, 255, 0.2); } + /* For IE8 we'll lighten the color */ + background: ligthen(#73859f, 25%); + /* Otherwise we'll rely on stacked opacities */ + background: rgba(115, 133, 159, 0.5); } /* there are child elements of the load progress bar that represent the specific time ranges that have been buffered */ .video-js .vjs-load-progress div { - background: rgba(89, 89, 89, 0.1); } + /* For IE8 we'll lighten the color */ + background: ligthen(#73859f, 50%); + /* Otherwise we'll rely on stacked opacities */ + background: rgba(115, 133, 159, 0.75); } .video-js.vjs-no-flex .vjs-progress-control { width: auto; } +.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; } + +.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: #595959; - background-color: rgba(89, 89, 89, 0.9); } + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); } .video-js .vjs-slider:focus { text-shadow: 0em 0em 1em white; @@ -568,11 +743,11 @@ specific time ranges that have been buffered */ .video-js .vjs-volume-bar { margin: 1.35em; } -.video-js .vjs-volume-bar.vjs-slider-horizontal { +.vjs-volume-bar.vjs-slider-horizontal { width: 5em; height: 0.3em; } -.video-js .vjs-volume-bar.vjs-slider-vertical { +.vjs-volume-bar.vjs-slider-vertical { width: 0.3em; height: 5em; } @@ -585,23 +760,23 @@ specific time ranges that have been buffered */ position: absolute; font-size: 0.9em; } -.video-js .vjs-slider-vertical .vjs-volume-level { +.vjs-slider-vertical .vjs-volume-level { width: 0.3em; } - .video-js .vjs-slider-vertical .vjs-volume-level:before { + .vjs-slider-vertical .vjs-volume-level:before { top: -0.5em; left: -0.3em; } -.video-js .vjs-slider-horizontal .vjs-volume-level { +.vjs-slider-horizontal .vjs-volume-level { height: 0.3em; } - .video-js .vjs-slider-horizontal .vjs-volume-level:before { + .vjs-slider-horizontal .vjs-volume-level:before { top: -0.3em; right: -0.5em; } /* Assumes volume starts at 1.0. */ -.video-js .vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { +.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { height: 100%; } -.video-js .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { +.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { width: 100%; } /* The volume menu button is like menu buttons (captions/subtitles) but works @@ -609,146 +784,36 @@ a little differently. It needs to be possible to tab to the volume slider without hitting space bar on the menu button. To do this we're not using display:none to hide the slider menu by default, and instead setting the width and height to zero. */ -.video-js .vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu { +.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu { display: block; width: 0; height: 0; border-top-color: transparent; } -.video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical .vjs-menu { +.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu { left: 0.5em; } -.video-js .vjs-volume-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu { +.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu { left: -2em; } -.video-js .vjs-menu-button.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu .vjs-menu-content { +.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content { height: 0; width: 0; overflow-x: hidden; overflow-y: hidden; } -.video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical:hover .vjs-menu .vjs-menu-content, .video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical .vjs-menu.vjs-lock-showing .vjs-menu-content { +.vjs-volume-menu-button-vertical:hover .vjs-menu-content, .vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content { height: 8em; width: 2.9em; } -.video-js .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:hover .vjs-menu .vjs-menu-content, .video-js .vjs-volume-menu-button.vjs-volume-menu-button-horizontal .vjs-menu.vjs-lock-showing .vjs-menu-content { +.vjs-volume-menu-button-horizontal:hover .vjs-menu-content, .vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content { height: 2.9em; width: 8em; } -.video-js .vjs-mute-control, .video-js .vjs-volume-control { - display: none; } - -.video-js .vjs-menu-button { - cursor: pointer; } - -.video-js .vjs-menu .vjs-menu-content { - display: block; - padding: 0; - margin: 0; - overflow: auto; } - -/* prevent menus from opening while scrubbing (FF, IE) */ -.video-js.vjs-scrubbing .vjs-menu-button:hover .vjs-menu { - display: none; } - -.video-js .vjs-menu ul li { - list-style: none; - margin: 0; - padding: 0.2em 0; - line-height: 1.4em; - font-size: 1.2em; - text-align: center; - text-transform: lowercase; } - -.video-js .vjs-menu ul li.vjs-selected { - background-color: #000; } - -.video-js .vjs-menu ul li:focus, .video-js .vjs-menu ul li:hover, .video-js .vjs-menu ul li.vjs-selected:focus, .video-js .vjs-menu ul li.vjs-selected:hover { - outline: 0; - color: #000; - background-color: #fff; - background-color: rgba(255, 255, 255, 0.75); } - -.video-js .vjs-menu ul 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; } - -.video-js .vjs-menu-button-popup .vjs-menu { - display: none; - position: absolute; - bottom: 0; - left: -3em; - /* (Width of vjs-menu - width of button) / 2 */ - width: 0em; - height: 0em; - margin-bottom: 1.5em; - border-top-color: rgba(7, 40, 50, 0.5); - /* Same as ul background */ } - -/* Button Pop-up Menu */ -.video-js .vjs-menu-button-popup .vjs-menu-content { - background-color: #000; - background-color: rgba(0, 0, 0, 0.7); } - -.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-content { - position: absolute; - width: 10em; - bottom: 1.5em; - /* Same bottom as vjs-menu border-top */ - max-height: 15em; } - -.video-js .vjs-menu-button.vjs-menu-button-popup:hover .vjs-menu, .video-js .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.vjs-menu-button-inline:before { - width: 2.222222222em; } - -.video-js .vjs-menu-button-inline .vjs-menu { - opacity: 0; - height: 100%; - width: auto; - position: absolute; - left: 2.2222222em; - top: 0; - padding: 0; - margin: 0; - -webkit-transition: all 0.2s; - -moz-transition: all 0.2s; - -o-transition: all 0.2s; - transition: all 0.2s; } - -.video-js.vjs-no-flex .vjs-menu-button-inline .vjs-menu { - position: relative; - width: 0; } - -.video-js.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu { - width: auto; } - -.video-js .vjs-menu-button-inline .vjs-menu .vjs-menu-content { - width: auto; - height: 100%; - margin: 0; - overflow: hidden; } - -.video-js .vjs-menu-button-inline:hover { - width: 10em; } - -.video-js .vjs-menu-button.vjs-menu-button-inline:hover .vjs-menu, .video-js .vjs-menu-button-inline .vjs-menu.vjs-lock-showing { - display: block; - opacity: 1; } +.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content { + /* An inline volume should never have a menu background color. + This protects it from external changes to background colors. */ + background-color: transparent !important; } .vjs-poster { display: inline-block; @@ -766,6 +831,7 @@ width and height to zero. */ left: 0; height: 100%; } +/* Used for IE8 fallback */ .vjs-poster img { display: block; vertical-align: middle; @@ -775,30 +841,44 @@ width and height to zero. */ width: 100%; } /* Hide the poster after the video has started playing */ -.video-js.vjs-has-started .vjs-poster { +.vjs-has-started .vjs-poster { display: none; } /* Don't hide the poster if we're playing audio */ -.video-js.vjs-audio.vjs-has-started .vjs-poster { +.vjs-audio.vjs-has-started .vjs-poster { display: block; } /* Hide the poster when controls are disabled because it's clickable and the native poster can take over */ -.video-js.vjs-controls-disabled .vjs-poster { +.vjs-controls-disabled .vjs-poster { display: none; } /* Hide the poster when native controls are used otherwise it covers them */ -.video-js.vjs-using-native-controls .vjs-poster { - display: none; } - -.video-js.vjs-live .vjs-time-control, .video-js.vjs-live .vjs-time-divider, .video-js.vjs-live .vjs-progress-control { +.vjs-using-native-controls .vjs-poster { display: none; } .video-js .vjs-live-control { - display: none; + 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; @@ -808,17 +888,23 @@ and the native poster can take over */ font-size: 1em; line-height: 3em; } -/* We need the extra specificity that referencing .vjs-no-flex provides. */ -.video-js .vjs-current-time, .video-js.vjs-no-flex .vjs-current-time { +.vjs-live .vjs-time-control { display: none; } -.video-js .vjs-duration, .video-js.vjs-no-flex .vjs-duration { +/* We need the extra specificity that referencing .vjs-no-flex provides. */ +.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; @@ -827,7 +913,7 @@ and the native poster can take over */ -ms-flex: none; flex: none; } -.video-js .vjs-text-track-display { +.vjs-text-track-display { position: absolute; bottom: 3em; left: 0; @@ -848,11 +934,11 @@ and the native poster can take over */ background-color: #000; background-color: rgba(0, 0, 0, 0.5); } -.video-js .vjs-subtitles { +.vjs-subtitles { color: #fff; /* Subtitles are white */ } -.video-js .vjs-captions { +.vjs-captions { color: #fc6; /* Captions are yellow */ } @@ -869,7 +955,7 @@ and the native poster can take over */ flex: none; } /* Switch to the exit icon when the player is in fullscreen */ -.video-js .vjs-playback-rate .vjs-playback-rate-value { +.vjs-playback-rate .vjs-playback-rate-value { font-size: 1.5em; line-height: 2; position: absolute; @@ -879,13 +965,9 @@ and the native poster can take over */ height: 100%; text-align: center; } -.video-js .vjs-playback-rate .vjs-menu { - left: 0em; } - -.video-js .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content { +.vjs-playback-rate .vjs-menu { width: 4em; - left: 0; - list-style: none; } + left: 0em; } .vjs-error-display { display: none; } @@ -902,7 +984,7 @@ and the native poster can take over */ content: 'X'; font-family: Arial, Helvetica, sans-serif; font-size: 4em; - color: #595959; + color: #fff; /* In order to center the play icon vertically we need to set the line height to the same as the button height */ line-height: 1; @@ -928,82 +1010,101 @@ and the native poster can take over */ background-color: rgba(0, 0, 0, 0.5); } .vjs-error-display a, .vjs-error-display a:visited { - color: #F4A460; } + color: #66A8CC; } .vjs-loading-spinner { display: none; position: absolute; top: 50%; left: 50%; - font-size: 4em; - line-height: 1; - width: 1em; - height: 1em; - margin-left: -0.5em; - margin-top: -0.5em; - opacity: 0.75; } + margin: -25px 0 0 -25px; + opacity: 0.85; + /* Need to fix centered page layouts */ + 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; } -/* Show the spinner when waiting for data and seeking to a new time */ -.vjs-waiting .vjs-loading-spinner, .vjs-seeking .vjs-loading-spinner { - display: block; - /* only animate when showing because it can be processor heavy */ - -webkit-animation: spin 1.5s infinite linear; - -moz-animation: spin 1.5s infinite linear; - -o-animation: spin 1.5s infinite linear; - animation: spin 1.5s infinite linear; } +.vjs-seeking .vjs-loading-spinner, .vjs-waiting .vjs-loading-spinner { + display: block; } -/* Errors are unrecoverable without user interaction so hide the spinner */ -.vjs-error .vjs-loading-spinner { - display: none; - /* ensure animation doesn't continue while hidden */ - -webkit-animation: none; - -moz-animation: none; - -o-animation: none; - animation: none; } - -.video-js .vjs-loading-spinner:before { +.vjs-loading-spinner:before, .vjs-loading-spinner:after { + content: ""; position: absolute; - top: 0; - left: 0; - width: 1em; - height: 1em; - text-align: center; - text-shadow: 0em 0em 0.1em #000; } + margin: -6px; + box-sizing: inherit; + width: inherit; + height: inherit; + border-radius: inherit; + /* Keep 100% opacity so they don't show through each other */ + opacity: 1; + border: inherit; + border-color: transparent; + border-top-color: white; } -@-moz-keyframes spin { +/* only animate when showing because it can be processor heavy */ +.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% { - -moz-transform: rotate(0deg); } + border-top-color: #73859f; } + + 20% { + border-top-color: #73859f; } + + 35% { + border-top-color: white; } + + 60% { + border-top-color: #73859f; } 100% { - -moz-transform: rotate(359deg); } } + border-top-color: #73859f; } } -@-webkit-keyframes spin { +@-webkit-keyframes vjs-spinner-fade { 0% { - -webkit-transform: rotate(0deg); } + border-top-color: #73859f; } + + 20% { + border-top-color: #73859f; } + + 35% { + border-top-color: white; } + + 60% { + border-top-color: #73859f; } 100% { - -webkit-transform: rotate(359deg); } } + border-top-color: #73859f; } } -@-o-keyframes spin { - 0% { - -o-transform: rotate(0deg); } +.vjs-chapters-button .vjs-menu { + left: -10em; + /* (Width of vjs-menu - width of vjs-control) / 2 */ + width: 0; } - 100% { - -o-transform: rotate(359deg); } } - -@keyframes spin { - 0% { - transform: rotate(0deg); } - - 100% { - transform: rotate(359deg); } } - -.video-js .vjs-chapters-button.vjs-menu-button .vjs-menu { - left: 2em; } - -.video-js .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content { - width: 24em; - left: -12em; } +.vjs-chapters-button .vjs-menu ul { + width: 24em; } .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer { -webkit-box-flex: auto; @@ -1025,13 +1126,12 @@ and the native poster can take over */ .vjs-caption-settings { position: relative; top: 1em; - background-color: #000; - opacity: 0.75; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.75); color: #fff; margin: 0 auto; padding: 0.5em; height: 15em; - font-family: Arial, Helvetica, sans-serif; font-size: 12px; width: 40em; } diff --git a/node_modules/video.js/dist/video-js.min.css b/node_modules/video.js/dist/video-js.min.css index 3601860..ecb40fd 100644 --- a/node_modules/video.js/dist/video-js.min.css +++ b/node_modules/video.js/dist/video-js.min.css @@ -1 +1 @@ -.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}@font-face{font-family:VideoJS;src:url(font/VideoJS.eot?) 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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) 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-playing .vjs-play-control{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pause:before,.video-js.vjs-playing .vjs-play-control: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,.vjs-loading-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before,.vjs-loading-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-play-progress,.video-js .vjs-volume-level{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle: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-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before{content:'\f114'}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;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.vjs-fluid,.video-js.vjs-16-9{width:100%;max-width:100%;height:0;padding-top:56.25%}.video-js.vjs-4-3{width:100%;max-width:100%;height:0;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-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:#F4A460}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.5em;width:3em;display:block;z-index:2;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:2px solid #fff;background-color:#000;background-color:rgba(0,0,0,.8);-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}.video-js.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.75em;margin-left:-1.5em}.video-js.vjs-controls-disabled .vjs-big-play-button,.video-js.vjs-has-started .vjs-big-play-button,.video-js.vjs-using-native-controls .vjs-big-play-button{display:none}.video-js:hover .vjs-big-play-button,.video-js .vjs-big-play-button:focus{outline:0;border-color:#fff;background-color:#595959;background-color:rgba(89,89,89,.75);-webkit-transition:all 0s;-moz-transition:all 0s;-o-transition:all 0s;transition:all 0s}.vjs-error .vjs-big-play-button{display:none}.video-js button{background:0 0;border:0;color:#fff;display:inline-block;overflow:visible;font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none}.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,.5)}.video-js.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}.video-js.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{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.video-js.video-js.vjs-controls-disabled .vjs-control-bar,.video-js.video-js.video-js.vjs-using-native-controls .vjs-control-bar,.video-js.video-js.video-js.vjs-error .vjs-control-bar{display:none}.video-js.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}@media \0screen{.video-js.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.video-js.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}.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.6666666667em}.video-js .vjs-progress-control:hover .vjs-play-progress:after{display:block;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-load-progress div{position:absolute;display:block;height:.3em;margin:0;padding:0;width:0;left:0;top:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{position:absolute;top:-.3333333333em;right:-.5em;font-size:.9em;height:1em;line-height:1em}.video-js .vjs-play-progress:after{display:none;position:absolute;top:-2.4em;right:-1.5em;font-size:.9em;color:#000;content:attr(data-current-time);padding:.2em .5em;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-load-progress{background:#646464;background:rgba(255,255,255,.2)}.video-js .vjs-load-progress div{background:rgba(89,89,89,.1)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-slider{outline:0;position:relative;cursor:pointer;padding:0;margin:0 .45em;background-color:#595959;background-color:rgba(89,89,89,.9)}.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}.video-js .vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.video-js .vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em}.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}.video-js .vjs-slider-vertical .vjs-volume-level{width:.3em}.video-js .vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em}.video-js .vjs-slider-horizontal .vjs-volume-level{height:.3em}.video-js .vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.video-js .vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.video-js .vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu{display:block;width:0;height:0;border-top-color:transparent}.video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical .vjs-menu{left:.5em}.video-js .vjs-volume-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu{left:-2em}.video-js .vjs-menu-button.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu .vjs-menu-content{height:0;width:0;overflow-x:hidden;overflow-y:hidden}.video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical:hover .vjs-menu .vjs-menu-content,.video-js .vjs-volume-menu-button.vjs-volume-menu-button-vertical .vjs-menu.vjs-lock-showing .vjs-menu-content{height:8em;width:2.9em}.video-js .vjs-volume-menu-button.vjs-volume-menu-button-horizontal:hover .vjs-menu .vjs-menu-content,.video-js .vjs-volume-menu-button.vjs-volume-menu-button-horizontal .vjs-menu.vjs-lock-showing .vjs-menu-content{height:2.9em;width:8em}.video-js .vjs-mute-control,.video-js .vjs-volume-control{display:none}.video-js .vjs-menu-button{cursor:pointer}.video-js .vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto}.video-js.vjs-scrubbing .vjs-menu-button:hover .vjs-menu{display:none}.video-js .vjs-menu ul li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.video-js .vjs-menu ul li.vjs-selected{background-color:#000}.video-js .vjs-menu ul li:focus,.video-js .vjs-menu ul li:hover,.video-js .vjs-menu ul li.vjs-selected:focus,.video-js .vjs-menu ul li.vjs-selected:hover{outline:0;color:#000;background-color:#fff;background-color:rgba(255,255,255,.75)}.video-js .vjs-menu ul 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}.video-js .vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;left:-3em;width:0;height:0;margin-bottom:1.5em;border-top-color:rgba(7,40,50,.5)}.video-js .vjs-menu-button-popup .vjs-menu-content{background-color:#000;background-color:rgba(0,0,0,.7)}.video-js .vjs-menu-button-popup .vjs-menu .vjs-menu-content{position:absolute;width:10em;bottom:1.5em;max-height:15em}.video-js .vjs-menu-button.vjs-menu-button-popup:hover .vjs-menu,.video-js .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.vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:2.2222222em;top:0;padding:0;margin:0;-webkit-transition:all .2s;-moz-transition:all .2s;-o-transition:all .2s;transition:all .2s}.video-js.vjs-no-flex .vjs-menu-button-inline .vjs-menu{position:relative;width:0}.video-js.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.video-js .vjs-menu-button-inline .vjs-menu .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-menu-button-inline:hover{width:10em}.video-js .vjs-menu-button.vjs-menu-button-inline:hover .vjs-menu,.video-js .vjs-menu-button-inline .vjs-menu.vjs-lock-showing{display:block;opacity:1}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;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%}.video-js.vjs-has-started .vjs-poster{display:none}.video-js.vjs-audio.vjs-has-started .vjs-poster{display:block}.video-js.vjs-controls-disabled .vjs-poster{display:none}.video-js.vjs-using-native-controls .vjs-poster{display:none}.video-js.vjs-live .vjs-time-control,.video-js.vjs-live .vjs-time-divider,.video-js.vjs-live .vjs-progress-control{display:none}.video-js .vjs-live-control{display:none;font-size:1em;line-height:3em}.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}.video-js .vjs-current-time,.video-js.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.video-js.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.video-js .vjs-play-control{cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .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)}.video-js .vjs-subtitles{color:#fff}.video-js .vjs-captions{color:#fc6}.vjs-tt-cue{display:block}.video-js .vjs-fullscreen-control{width:3.8em;cursor:pointer;-webkit-box-flex:none;-moz-box-flex:none;-webkit-flex:none;-ms-flex:none;flex:none}.video-js .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}.video-js .vjs-playback-rate .vjs-menu{left:0}.video-js .vjs-playback-rate.vjs-menu-button .vjs-menu .vjs-menu-content{width:4em;left:0;list-style:none}.vjs-error-display{display:none}.vjs-error .vjs-error-display{display:block;position:absolute;left:0;top:0;width:100%;height:100%}.vjs-error .vjs-error-display:before{content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;color:#595959;line-height:1;text-shadow:.05em .05em .1em #000;text-align:center;vertical-align:middle;position:absolute;left:0;top:50%;margin-top:-.5em;width:100%}.vjs-error-display div{position:absolute;bottom:1em;right:0;left:0;font-size:1.4em;text-align:center;padding:3px;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-error-display a,.vjs-error-display a:visited{color:#F4A460}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;font-size:4em;line-height:1;width:1em;height:1em;margin-left:-.5em;margin-top:-.5em;opacity:.75}.vjs-waiting .vjs-loading-spinner,.vjs-seeking .vjs-loading-spinner{display:block;-webkit-animation:spin 1.5s infinite linear;-moz-animation:spin 1.5s infinite linear;-o-animation:spin 1.5s infinite linear;animation:spin 1.5s infinite linear}.vjs-error .vjs-loading-spinner{display:none;-webkit-animation:none;-moz-animation:none;-o-animation:none;animation:none}.video-js .vjs-loading-spinner:before{position:absolute;top:0;left:0;width:1em;height:1em;text-align:center;text-shadow:0 0 .1em #000}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.video-js .vjs-chapters-button.vjs-menu-button .vjs-menu{left:2em}.video-js .vjs-chapters-button.vjs-menu-button .vjs-menu .vjs-menu-content{width:24em;left:-12em}.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-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.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-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-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-volume-menu-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-captions-button,.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-captions-button,.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-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-fullscreen-control{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.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-subtitles-button{display:none}.vjs-caption-settings{position:relative;top:1em;background-color:#000;opacity:.75;color:#fff;margin:0 auto;padding:.5em;height:15em;font-family:Arial,Helvetica,sans-serif;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;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}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.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 input[type=button]{width:40px;height:40px} +.video-js .vjs-big-play-button:before,.video-js .vjs-control:before{position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}@font-face{font-family:VideoJS;src:url(font/VideoJS.eot?) 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,AAEAAAAKAIAAAwAgT1MvMkC6TWMAAAEoAAAAVmNtYXDiJhC2AAAB1AAAAUpnbHlmI2i9NgAAA0wAAAf8aGVhZARKlDsAAADQAAAANmhoZWEELwIWAAAArAAAACRobXR4KgAAAAAAAYAAAABUbG9jYRAUEmYAAAMgAAAALG1heHABJgBkAAABCAAAACBuYW1l1cf1oAAAC0gAAAIKcG9zdCVzSbMAAA1UAAABJQABAAACAAAAAC4CAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAFQABAAAAAQAAmyhx5F8PPPUACwIAAAAAANGWKbQAAAAA0ZYptAAAAAACAAHWAAAACAACAAAAAAAAAAEAAAAVAFgABwAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQIAAZAABQAIAUQBZgAAAEcBRAFmAAAA9QAZAIQAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA8QHxFAIAAAAALgIAAAAAAAABAAAAAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADxFP//AAAAAPEB//8AAA8AAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAPgBQAJIAogC+AOwBEgE4AWABpgHaAjICWgKQAvYDEAM+A3oD/gABAAAAAAGWAZYAAgAAExE3q+oBlf7WlQADAAAAAAHWAdYAAgAOABoAAD8BJzcOAQceARc+ATcuAQMuASc+ATceARcOAdWAgCtbeAICeFtbeAICeFtIYQICYUhIYQICYaBgYHUCeFtbeAICeFtbeP6CAmFISGECAmFISGEAAgAAAAABgAGWAAMABwAANzMRIzMRMxGAVVWrVWsBKv7WASoABAAAAAABwAHAAAYAEgAiACUAAAE0JicVFzY3FAcXNjcuAScVHgElBxcjFTMXNRcGBxU2Nxc3AwcXAWAdGDQBNQsgFQEBU0EvOv7HG2VlVWtbFhosIiwbwC0tAQAdLQwvNQcHHhohKTBGZRAsD0yMG2WAa5BbEQgsChwrGwFQLS0AAAAAAQAAAAABVgGrAAUAABMVMxcRB5VWamoBQIBrAVZrAAACAAAAAAGLAasABgAMAAABLgEnFT4BJRUzFxEHAYsBHRgYHf7hVWtrAQAdLQysDC1dgGsBVmsAAAMAAAAAAcABvAAFAAwAGQAAExUzFxEHFzQmJxU+AScVHgEUBgcVPgE3LgFAVWtryx0YGB01Lzo6L0FTAQFTAUCAawFWa0AdLQysDC3YLA9MaEwPLBBlRkZlAAAABAAAAAABlgGWAAUACwARABcAADcjFTM1IyczNTM1IwEjFTM1IycVMxUzNZUqakAqKkBqAQBAaipAQCrVaiqWQCr/ACpqwCpAagAAAAQAAAAAAZYBlgAFAAsAEQAXAAA3MxUzNSM3IxUzNSMTMzUzNSM3NSMVMzVrQCpqQEBqKoAqQGoqKmqrQGqAKmr+1kAqgEBqKgAAAAACAAAAAAGrAasADwATAAABIQ4BBxEeARchPgE3ES4BAyERIQGA/wASGAEBGBIBABIYAQEYEv8AAQABqwEYEv8AEhgBARgSAQASGP7WAQAAAAYAAAAAAdYB1gAHAAwAEwAbACAAKAAAEzcmIyIGBxclLgEnBxcjFz4BNTQFJw4BFRQXMwceARc3MwcWMzI2NyfJZRYYJ0QcTgEFEEIuTtOgbBoe/uFTGh4EoJsQQi5OI1MWGCdEHE4BILAFGReHIi9HEYcVux1JKhYWkB1JKhYVFS9HEYeQBRkXhwAABQAAAAAB1gGrAA8AEwAXABsAHwAAASEOARURFBYXIT4BNRE0JgUzFSMXIzUzFyM1MzUjNTMBq/6qEhgYEgFWEhgY/phWVtbW1oBWVtbWAasBGBL/ABIYAQEYEgEAEhiqK1UrKysqKwADAAAAAAHAAasADwAnAD8AAAEhDgEVERQWFyE+ATURNCYHIzUjFTM1MxUOASsBIiY9ATQ2OwEyFh8BIzUjFTM1MxUUBisBIiYnNT4BOwEyFhUBlf7WEhkZEgEqEhkZvCArKyABDAlACQwMCUAJDAGVICsrIAwJQAkMAQEMCUAJDAGrARgS/wASGAEBGBIBABIYlQtACxYJDAwJVgkMDAkWC0ALFgkMDAlWCQwMCQAAAAYAAAAAAcABawADAAcACwAPABMAFwAANzM1IxUzNSM1MzUjFyE1IRUhNSE1FSE1QCsrKysrK1UBK/7VASv+1QEr6yqAK4ArgCqAK6srKwAAAQAAAAABwAHWACIAACUGByc2NCc3FjI2NCYiBgcUFwcmIgYUFjI3FwYVFBYyNjQmAYAZEZgCApYSNSQkNiQBApYSNSQkNRKYAiQ0JCSpARBZBxAHWBEkNyQkHAcHWBAkNiQQWAcHGyMjNSMAAgAAAAAB0gHWADcAQAAAJTY0Jzc2LwEmDwEmLwEmKwEiDwEGBycmDwEGHwEGFBcHBh8BFj8BFh8BFjsBMj8BNjcXFj8BNicHLgE0NjIWFAYBnwEBLQYEKgUINhAUCAIIVggCCBQQNQkEKwQGLQEBLQYEKwQJNRAUCAIIVggCCBQQNQkEKwQGzCAqKkAqKusKFgojBghKBwMVDQg4CQk4CA0VAwdKCAYjChYKIwYISgcDFQ0IOAkJOAgNFQMHSggGEwEqQCoqQCoAAAAAAQAAAAAB1gHWAAsAABMeARc+ATcuAScOASsCeFtbeAICeFtbeAEAW3gCAnhbW3gCAngAAAIAAAAAAdYB1gALABcAAAEOAQceARc+ATcuAQMuASc+ATceARcOAQEAW3gCAnhbW3gCAnhbSGECAmFISGECAmEB1QJ4W1t4AgJ4W1t4/oICYUhIYQICYUhIYQAAAwAAAAAB1gHWAAsAFwAgAAABDgEHHgEXPgE3LgEDLgEnPgE3HgEXDgEnDgEiJjQ2MhYBAFt4AgJ4W1t4AgJ4W0hhAgJhSEhhAgJhCAEkNiQkNiQB1QJ4W1t4AgJ4W1t4/oICYUhIYQICYUhIYakbJCQ2JCQAAAAABwAAAAACAAFgAA0AFgAoADoATABUAFcAADc1Nh4CBw4BBwYjJzA3MjY3NiYHFRYXFjY3PgE1NCYnIxYXHgEXFAYXFjY3PgE1LgEnIxQXHgEVFAYXFjY3PgE1LgEnIxQXHgEVFAYFMz8BFTM1IxcVI+MmOyoaAgQxJRQZGzAYHgMCIB0BbQkKBAoMFg0JAQMKDwESHAoJBAoNARUOCAQKDxIcCgkECg0BFQ4IBAoPEv4lRRJAMTsMKIPaAQQdNiQoNwQBATkYFh0hAWgCNwIPCBErGSQ0EgYEEjAcITYVAg8IESsZJDQSBgQSMBwhNhUCDwgRKxkkNBIGBBIwHCE2FxwBHd9ORwAAAAAQAMYAAQAAAAAAAQAHAAAAAQAAAAAAAgAHAAcAAQAAAAAAAwAHAA4AAQAAAAAABAAHABUAAQAAAAAABQALABwAAQAAAAAABgAHACcAAQAAAAAACgArAC4AAQAAAAAACwATAFkAAwABBAkAAQAOAGwAAwABBAkAAgAOAHoAAwABBAkAAwAOAIgAAwABBAkABAAOAJYAAwABBAkABQAWAKQAAwABBAkABgAOALoAAwABBAkACgBWAMgAAwABBAkACwAmAR5WaWRlb0pTUmVndWxhclZpZGVvSlNWaWRlb0pTVmVyc2lvbiAxLjBWaWRlb0pTR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AVgBpAGQAZQBvAEoAUwBSAGUAZwB1AGwAYQByAFYAaQBkAGUAbwBKAFMAVgBpAGQAZQBvAEoAUwBWAGUAcgBzAGkAbwBuACAAMQAuADAAVgBpAGQAZQBvAEoAUwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUEcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZRFhdWRpby1kZXNjcmlwdGlvbgAAAAAA) 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-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-audio-description:before{content:'\f114'}.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-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;z-index:2;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}.vjs-menu-button{cursor:pointer}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;overflow:auto}.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 ul{background-color:#2B333F;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.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:2.2222222em;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: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}.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}@media \0screen{.vjs-user-inactive.vjs-playing .vjs-control-bar :before{content:""}}.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}.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.6666666667em}.video-js .vjs-progress-control:hover .vjs-mouse-display:after,.video-js .vjs-progress-control:hover .vjs-play-progress:after{display:block;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-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:-.3333333333em;right:-.5em;font-size:.9em}.video-js .vjs-mouse-display:after,.video-js .vjs-play-progress:after{display:none;position:absolute;top:-2.4em;right:-1.5em;font-size:.9em;color:#000;content:attr(data-current-time);padding:.2em .5em;background-color:#fff;background-color:rgba(255,255,255,.8);-webkit-border-radius:.3em;-moz-border-radius:.3em;border-radius:.3em}.video-js .vjs-play-progress:before,.video-js .vjs-play-progress:after{z-index:1}.video-js .vjs-load-progress{background:ligthen(#73859f,25%);background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:ligthen(#73859f,50%);background:rgba(115,133,159,.75)}.video-js.vjs-no-flex .vjs-progress-control{width:auto}.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}.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}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em}.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}.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 .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 .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;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}.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-js .vjs-fullscreen-control{width:3.8em;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-display{display:none}.vjs-error .vjs-error-display{display:block;position:absolute;left:0;top:0;width:100%;height:100%}.vjs-error .vjs-error-display:before{content:'X';font-family:Arial,Helvetica,sans-serif;font-size:4em;color:#fff;line-height:1;text-shadow:.05em .05em .1em #000;text-align:center;vertical-align:middle;position:absolute;left:0;top:50%;margin-top:-.5em;width:100%}.vjs-error-display div{position:absolute;bottom:1em;right:0;left:0;font-size:1.4em;text-align:center;padding:3px;background-color:#000;background-color:rgba(0,0,0,.5)}.vjs-error-display a,.vjs-error-display a:visited{color:#66A8CC}.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{left:-10em;width:0}.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-captions-button,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control,.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-mute-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control,.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-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-volume-menu-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-captions-button,.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-captions-button,.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-chapters-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-button,.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-fullscreen-control{display:none}.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time,.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button,.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-subtitles-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:15em;font-size:12px;width:40em}.vjs-caption-settings .vjs-tracksettings{top:0;bottom:2em;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}.vjs-caption-settings .vjs-tracksetting label{display:block;width:100px;margin-bottom:5px}.vjs-caption-settings .vjs-tracksetting span{display:inline;margin-left:5px}.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 input[type=button]{width:40px;height:40px} \ No newline at end of file diff --git a/node_modules/video.js/dist/video.js b/node_modules/video.js/dist/video.js index 6d70be5..2b14e79 100644 --- a/node_modules/video.js/dist/video.js +++ b/node_modules/video.js/dist/video.js @@ -1,6 +1,6 @@ /** * @license - * Video.js 5.0.0-rc.72 + * Video.js 5.0.0 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * @@ -47,6 +47,215 @@ if (typeof window !== "undefined") { },{}],3:[function(_dereq_,module,exports){ },{}],4:[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":20}],5:[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":4,"../lang/isObject":33}],6:[function(_dereq_,module,exports){ /** Used as the `TypeError` message for "Functions" methods. */ var FUNC_ERROR_TEXT = 'Expected a function'; @@ -106,7 +315,71 @@ function restParam(func, start) { module.exports = restParam; -},{}],5:[function(_dereq_,module,exports){ +},{}],7:[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":33,"./debounce":5}],8:[function(_dereq_,module,exports){ /** * Copies the values of `source` to `array`. * @@ -128,7 +401,7 @@ function arrayCopy(source, array) { module.exports = arrayCopy; -},{}],6:[function(_dereq_,module,exports){ +},{}],9:[function(_dereq_,module,exports){ /** * A specialized version of `_.forEach` for arrays without support for callback * shorthands and `this` binding. @@ -152,7 +425,7 @@ function arrayEach(array, iteratee) { module.exports = arrayEach; -},{}],7:[function(_dereq_,module,exports){ +},{}],10:[function(_dereq_,module,exports){ /** * Copies properties of `source` to `object`. * @@ -177,7 +450,7 @@ function baseCopy(source, props, object) { module.exports = baseCopy; -},{}],8:[function(_dereq_,module,exports){ +},{}],11:[function(_dereq_,module,exports){ var createBaseFor = _dereq_('./createBaseFor'); /** @@ -196,7 +469,7 @@ var baseFor = createBaseFor(); module.exports = baseFor; -},{"./createBaseFor":15}],9:[function(_dereq_,module,exports){ +},{"./createBaseFor":18}],12:[function(_dereq_,module,exports){ var baseFor = _dereq_('./baseFor'), keysIn = _dereq_('../object/keysIn'); @@ -215,7 +488,7 @@ function baseForIn(object, iteratee) { module.exports = baseForIn; -},{"../object/keysIn":36,"./baseFor":8}],10:[function(_dereq_,module,exports){ +},{"../object/keysIn":39,"./baseFor":11}],13:[function(_dereq_,module,exports){ var arrayEach = _dereq_('./arrayEach'), baseMergeDeep = _dereq_('./baseMergeDeep'), isArray = _dereq_('../lang/isArray'), @@ -273,7 +546,7 @@ function baseMerge(object, source, customizer, stackA, stackB) { module.exports = baseMerge; -},{"../lang/isArray":27,"../lang/isObject":30,"../lang/isTypedArray":33,"../object/keys":35,"./arrayEach":6,"./baseMergeDeep":11,"./isArrayLike":18,"./isObjectLike":23}],11:[function(_dereq_,module,exports){ +},{"../lang/isArray":30,"../lang/isObject":33,"../lang/isTypedArray":36,"../object/keys":38,"./arrayEach":9,"./baseMergeDeep":14,"./isArrayLike":21,"./isObjectLike":26}],14:[function(_dereq_,module,exports){ var arrayCopy = _dereq_('./arrayCopy'), isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), @@ -342,7 +615,7 @@ function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stack module.exports = baseMergeDeep; -},{"../lang/isArguments":26,"../lang/isArray":27,"../lang/isPlainObject":31,"../lang/isTypedArray":33,"../lang/toPlainObject":34,"./arrayCopy":5,"./isArrayLike":18}],12:[function(_dereq_,module,exports){ +},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isPlainObject":34,"../lang/isTypedArray":36,"../lang/toPlainObject":37,"./arrayCopy":8,"./isArrayLike":21}],15:[function(_dereq_,module,exports){ var toObject = _dereq_('./toObject'); /** @@ -360,7 +633,7 @@ function baseProperty(key) { module.exports = baseProperty; -},{"./toObject":25}],13:[function(_dereq_,module,exports){ +},{"./toObject":28}],16:[function(_dereq_,module,exports){ var identity = _dereq_('../utility/identity'); /** @@ -401,7 +674,7 @@ function bindCallback(func, thisArg, argCount) { module.exports = bindCallback; -},{"../utility/identity":39}],14:[function(_dereq_,module,exports){ +},{"../utility/identity":42}],17:[function(_dereq_,module,exports){ var bindCallback = _dereq_('./bindCallback'), isIterateeCall = _dereq_('./isIterateeCall'), restParam = _dereq_('../function/restParam'); @@ -444,7 +717,7 @@ function createAssigner(assigner) { module.exports = createAssigner; -},{"../function/restParam":4,"./bindCallback":13,"./isIterateeCall":21}],15:[function(_dereq_,module,exports){ +},{"../function/restParam":6,"./bindCallback":16,"./isIterateeCall":24}],18:[function(_dereq_,module,exports){ var toObject = _dereq_('./toObject'); /** @@ -473,7 +746,7 @@ function createBaseFor(fromRight) { module.exports = createBaseFor; -},{"./toObject":25}],16:[function(_dereq_,module,exports){ +},{"./toObject":28}],19:[function(_dereq_,module,exports){ var baseProperty = _dereq_('./baseProperty'); /** @@ -490,7 +763,7 @@ var getLength = baseProperty('length'); module.exports = getLength; -},{"./baseProperty":12}],17:[function(_dereq_,module,exports){ +},{"./baseProperty":15}],20:[function(_dereq_,module,exports){ var isNative = _dereq_('../lang/isNative'); /** @@ -508,7 +781,7 @@ function getNative(object, key) { module.exports = getNative; -},{"../lang/isNative":29}],18:[function(_dereq_,module,exports){ +},{"../lang/isNative":32}],21:[function(_dereq_,module,exports){ var getLength = _dereq_('./getLength'), isLength = _dereq_('./isLength'); @@ -525,7 +798,7 @@ function isArrayLike(value) { module.exports = isArrayLike; -},{"./getLength":16,"./isLength":22}],19:[function(_dereq_,module,exports){ +},{"./getLength":19,"./isLength":25}],22:[function(_dereq_,module,exports){ /** * Checks if `value` is a host object in IE < 9. * @@ -548,7 +821,7 @@ var isHostObject = (function() { module.exports = isHostObject; -},{}],20:[function(_dereq_,module,exports){ +},{}],23:[function(_dereq_,module,exports){ /** Used to detect unsigned integer values. */ var reIsUint = /^\d+$/; @@ -574,7 +847,7 @@ function isIndex(value, length) { module.exports = isIndex; -},{}],21:[function(_dereq_,module,exports){ +},{}],24:[function(_dereq_,module,exports){ var isArrayLike = _dereq_('./isArrayLike'), isIndex = _dereq_('./isIndex'), isObject = _dereq_('../lang/isObject'); @@ -604,7 +877,7 @@ function isIterateeCall(value, index, object) { module.exports = isIterateeCall; -},{"../lang/isObject":30,"./isArrayLike":18,"./isIndex":20}],22:[function(_dereq_,module,exports){ +},{"../lang/isObject":33,"./isArrayLike":21,"./isIndex":23}],25:[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. @@ -626,7 +899,7 @@ function isLength(value) { module.exports = isLength; -},{}],23:[function(_dereq_,module,exports){ +},{}],26:[function(_dereq_,module,exports){ /** * Checks if `value` is object-like. * @@ -640,7 +913,7 @@ function isObjectLike(value) { module.exports = isObjectLike; -},{}],24:[function(_dereq_,module,exports){ +},{}],27:[function(_dereq_,module,exports){ var isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), isIndex = _dereq_('./isIndex'), @@ -684,7 +957,7 @@ function shimKeys(object) { module.exports = shimKeys; -},{"../lang/isArguments":26,"../lang/isArray":27,"../lang/isString":32,"../object/keysIn":36,"./isIndex":20,"./isLength":22}],25:[function(_dereq_,module,exports){ +},{"../lang/isArguments":29,"../lang/isArray":30,"../lang/isString":35,"../object/keysIn":39,"./isIndex":23,"./isLength":25}],28:[function(_dereq_,module,exports){ var isObject = _dereq_('../lang/isObject'), isString = _dereq_('../lang/isString'), support = _dereq_('../support'); @@ -712,7 +985,7 @@ function toObject(value) { module.exports = toObject; -},{"../lang/isObject":30,"../lang/isString":32,"../support":38}],26:[function(_dereq_,module,exports){ +},{"../lang/isObject":33,"../lang/isString":35,"../support":41}],29:[function(_dereq_,module,exports){ var isArrayLike = _dereq_('../internal/isArrayLike'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -748,7 +1021,7 @@ function isArguments(value) { module.exports = isArguments; -},{"../internal/isArrayLike":18,"../internal/isObjectLike":23}],27:[function(_dereq_,module,exports){ +},{"../internal/isArrayLike":21,"../internal/isObjectLike":26}],30:[function(_dereq_,module,exports){ var getNative = _dereq_('../internal/getNative'), isLength = _dereq_('../internal/isLength'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -790,7 +1063,7 @@ var isArray = nativeIsArray || function(value) { module.exports = isArray; -},{"../internal/getNative":17,"../internal/isLength":22,"../internal/isObjectLike":23}],28:[function(_dereq_,module,exports){ +},{"../internal/getNative":20,"../internal/isLength":25,"../internal/isObjectLike":26}],31:[function(_dereq_,module,exports){ var isObject = _dereq_('./isObject'); /** `Object#toString` result references. */ @@ -830,7 +1103,7 @@ function isFunction(value) { module.exports = isFunction; -},{"./isObject":30}],29:[function(_dereq_,module,exports){ +},{"./isObject":33}],32:[function(_dereq_,module,exports){ var isFunction = _dereq_('./isFunction'), isHostObject = _dereq_('../internal/isHostObject'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -881,7 +1154,7 @@ function isNative(value) { module.exports = isNative; -},{"../internal/isHostObject":19,"../internal/isObjectLike":23,"./isFunction":28}],30:[function(_dereq_,module,exports){ +},{"../internal/isHostObject":22,"../internal/isObjectLike":26,"./isFunction":31}],33:[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('')`) @@ -911,7 +1184,7 @@ function isObject(value) { module.exports = isObject; -},{}],31:[function(_dereq_,module,exports){ +},{}],34:[function(_dereq_,module,exports){ var baseForIn = _dereq_('../internal/baseForIn'), isArguments = _dereq_('./isArguments'), isHostObject = _dereq_('../internal/isHostObject'), @@ -993,7 +1266,7 @@ function isPlainObject(value) { module.exports = isPlainObject; -},{"../internal/baseForIn":9,"../internal/isHostObject":19,"../internal/isObjectLike":23,"../support":38,"./isArguments":26}],32:[function(_dereq_,module,exports){ +},{"../internal/baseForIn":12,"../internal/isHostObject":22,"../internal/isObjectLike":26,"../support":41,"./isArguments":29}],35:[function(_dereq_,module,exports){ var isObjectLike = _dereq_('../internal/isObjectLike'); /** `Object#toString` result references. */ @@ -1030,7 +1303,7 @@ function isString(value) { module.exports = isString; -},{"../internal/isObjectLike":23}],33:[function(_dereq_,module,exports){ +},{"../internal/isObjectLike":26}],36:[function(_dereq_,module,exports){ var isLength = _dereq_('../internal/isLength'), isObjectLike = _dereq_('../internal/isObjectLike'); @@ -1106,7 +1379,7 @@ function isTypedArray(value) { module.exports = isTypedArray; -},{"../internal/isLength":22,"../internal/isObjectLike":23}],34:[function(_dereq_,module,exports){ +},{"../internal/isLength":25,"../internal/isObjectLike":26}],37:[function(_dereq_,module,exports){ var baseCopy = _dereq_('../internal/baseCopy'), keysIn = _dereq_('../object/keysIn'); @@ -1139,7 +1412,7 @@ function toPlainObject(value) { module.exports = toPlainObject; -},{"../internal/baseCopy":7,"../object/keysIn":36}],35:[function(_dereq_,module,exports){ +},{"../internal/baseCopy":10,"../object/keysIn":39}],38:[function(_dereq_,module,exports){ var getNative = _dereq_('../internal/getNative'), isArrayLike = _dereq_('../internal/isArrayLike'), isObject = _dereq_('../lang/isObject'), @@ -1187,7 +1460,7 @@ var keys = !nativeKeys ? shimKeys : function(object) { module.exports = keys; -},{"../internal/getNative":17,"../internal/isArrayLike":18,"../internal/shimKeys":24,"../lang/isObject":30,"../support":38}],36:[function(_dereq_,module,exports){ +},{"../internal/getNative":20,"../internal/isArrayLike":21,"../internal/shimKeys":27,"../lang/isObject":33,"../support":41}],39:[function(_dereq_,module,exports){ var arrayEach = _dereq_('../internal/arrayEach'), isArguments = _dereq_('../lang/isArguments'), isArray = _dereq_('../lang/isArray'), @@ -1325,7 +1598,7 @@ function keysIn(object) { module.exports = keysIn; -},{"../internal/arrayEach":6,"../internal/isIndex":20,"../internal/isLength":22,"../lang/isArguments":26,"../lang/isArray":27,"../lang/isFunction":28,"../lang/isObject":30,"../lang/isString":32,"../support":38}],37:[function(_dereq_,module,exports){ +},{"../internal/arrayEach":9,"../internal/isIndex":23,"../internal/isLength":25,"../lang/isArguments":29,"../lang/isArray":30,"../lang/isFunction":31,"../lang/isObject":33,"../lang/isString":35,"../support":41}],40:[function(_dereq_,module,exports){ var baseMerge = _dereq_('../internal/baseMerge'), createAssigner = _dereq_('../internal/createAssigner'); @@ -1381,7 +1654,7 @@ var merge = createAssigner(baseMerge); module.exports = merge; -},{"../internal/baseMerge":10,"../internal/createAssigner":14}],38:[function(_dereq_,module,exports){ +},{"../internal/baseMerge":13,"../internal/createAssigner":17}],41:[function(_dereq_,module,exports){ /** Used for native method references. */ var arrayProto = Array.prototype, errorProto = Error.prototype, @@ -1479,7 +1752,7 @@ var support = {}; module.exports = support; -},{}],39:[function(_dereq_,module,exports){ +},{}],42:[function(_dereq_,module,exports){ /** * This method returns the first argument provided to it. * @@ -1501,7 +1774,7 @@ function identity(value) { module.exports = identity; -},{}],40:[function(_dereq_,module,exports){ +},{}],43:[function(_dereq_,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es6-shim @@ -1563,7 +1836,7 @@ defineProperties(assignShim, { module.exports = assignShim; -},{"define-properties":41,"object-keys":43}],41:[function(_dereq_,module,exports){ +},{"define-properties":44,"object-keys":46}],44:[function(_dereq_,module,exports){ 'use strict'; var keys = _dereq_('object-keys'); @@ -1621,7 +1894,7 @@ defineProperties.supportsDescriptors = !!supportsDescriptors; module.exports = defineProperties; -},{"foreach":42,"object-keys":43}],42:[function(_dereq_,module,exports){ +},{"foreach":45,"object-keys":46}],45:[function(_dereq_,module,exports){ var hasOwn = Object.prototype.hasOwnProperty; var toString = Object.prototype.toString; @@ -1645,7 +1918,7 @@ module.exports = function forEach (obj, fn, ctx) { }; -},{}],43:[function(_dereq_,module,exports){ +},{}],46:[function(_dereq_,module,exports){ 'use strict'; // modified from https://github.com/es-shims/es5-shim @@ -1769,7 +2042,7 @@ keysShim.shim = function shimObjectKeys() { module.exports = keysShim; -},{"./isArguments":44}],44:[function(_dereq_,module,exports){ +},{"./isArguments":47}],47:[function(_dereq_,module,exports){ 'use strict'; var toStr = Object.prototype.toString; @@ -1788,7 +2061,7 @@ module.exports = function isArguments(value) { return isArgs; }; -},{}],45:[function(_dereq_,module,exports){ +},{}],48:[function(_dereq_,module,exports){ module.exports = SafeParseTuple function SafeParseTuple(obj, reviver) { @@ -1804,7 +2077,347 @@ function SafeParseTuple(obj, reviver) { return [error, json] } -},{}],46:[function(_dereq_,module,exports){ +},{}],49:[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 +} +},{}],50:[function(_dereq_,module,exports){ +"use strict"; +var window = _dereq_("global/window") +var once = _dereq_("once") +var parseHeaders = _dereq_("parse-headers") + + + +module.exports = createXHR +createXHR.XMLHttpRequest = window.XMLHttpRequest || noop +createXHR.XDomainRequest = "withCredentials" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest + + +function isEmpty(obj){ + for(var i in obj){ + if(obj.hasOwnProperty(i)) return false + } + return true +} + +function createXHR(options, 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) + + } + + if (typeof options === "string") { + options = { uri: options } + } + + options = options || {} + if(typeof callback === "undefined"){ + throw new Error("callback argument missing") + } + callback = once(callback) + + 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 + 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":2,"once":51,"parse-headers":55}],51:[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) + } +} + +},{}],52:[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":53}],53:[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)) +}; + +},{}],54:[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*$/, ''); +}; + +},{}],55:[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":52,"trim":54}],56:[function(_dereq_,module,exports){ /** * @file big-play-button.js */ @@ -1875,7 +2488,7 @@ _componentJs2['default'].registerComponent('BigPlayButton', BigPlayButton); exports['default'] = BigPlayButton; module.exports = exports['default']; -},{"./button.js":47,"./component.js":48}],47:[function(_dereq_,module,exports){ +},{"./button.js":57,"./component.js":58}],57:[function(_dereq_,module,exports){ /** * @file button.js */ @@ -1952,17 +2565,21 @@ var Button = (function (_Component) { 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]; - // Add standard Aria and Tabindex info props = _objectAssign2['default']({ className: this.buildCSSClass(), - 'role': 'button', - 'type': 'button', // Necessary since the default button type is "submit" - 'aria-live': 'polite', // let the screen reader user know that the text of the button may change tabIndex: 0 }, props); - var el = _Component.prototype.createEl.call(this, tag, props); + // Add standard Aria info + attributes = _objectAssign2['default']({ + role: 'button', + type: 'button', // Necessary since the default button type is "submit" + 'aria-live': 'polite' // let the screen reader user know that the text of the button may change + }, attributes); + + var el = _Component.prototype.createEl.call(this, tag, props, attributes); this.controlTextEl_ = Dom.createEl('span', { className: 'vjs-control-text' @@ -2031,7 +2648,7 @@ var Button = (function (_Component) { // Check for space bar (32) or enter (13) keys if (event.which === 32 || event.which === 13) { event.preventDefault(); - this.handleClick(); + this.handleClick(event); } }; @@ -2052,7 +2669,7 @@ _component2['default'].registerComponent('Button', Button); exports['default'] = Button; module.exports = exports['default']; -},{"./component":48,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"global/document":1,"object.assign":40}],48:[function(_dereq_,module,exports){ +},{"./component":58,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"global/document":1,"object.assign":43}],58:[function(_dereq_,module,exports){ /** * @file component.js * @@ -2239,19 +2856,17 @@ var Component = (function () { * Deep merge of options objects * Whenever a property is an object on both options objects * the two properties will be merged using mergeOptions. - * This is used for merging options for child components. We - * want it to be easy to override individual options on a child - * component without having to rewrite all the other default options. + * * ```js * Parent.prototype.options_ = { - * children: { + * optionSet: { * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' }, * 'childTwo': {}, * 'childThree': {} * } * } * newOptions = { - * children: { + * optionSet: { * 'childOne': { 'foo': 'baz', 'abc': '123' } * 'childTwo': null, * 'childFour': {} @@ -2263,7 +2878,7 @@ var Component = (function () { * RESULT * ```js * { - * children: { + * optionSet: { * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' }, * 'childTwo': null, // Disabled. Won't be initialized. * 'childThree': {}, @@ -2306,13 +2921,14 @@ var Component = (function () { * Create the component's DOM element * * @param {String=} tagName Element's node type. e.g. 'div' - * @param {Object=} attributes An object of element attributes that should be set on the element + * @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, attributes) { - return Dom.createEl(tagName, attributes); + Component.prototype.createEl = function createEl(tagName, properties, attributes) { + return Dom.createEl(tagName, properties, attributes); }; Component.prototype.localize = function localize(string) { @@ -2425,16 +3041,14 @@ var Component = (function () { * * var myButton = myComponent.addChild('MyButton'); * // ->
    myButton
    - * // -> myButton === myComonent.children()[0]; + * // -> 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', - * children: { - * buttonChildExample: { - * buttonChildOption: true - * } + * buttonChildExample: { + * buttonChildOption: true * } * }); * ``` @@ -2554,24 +3168,29 @@ var Component = (function () { * ```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 = { + * MyComponent.prototype.options_ = { + * children: [ + * 'myChildComponent' + * ], * myChildComponent: { * myChildOption: true * } - * } - * ``` + * }; + * * // Or when creating the component - * ```js * var myComp = new MyComponent(player, { - * children: { - * myChildComponent: { - * myChildOption: true - * } + * children: [ + * 'myChildComponent' + * ], + * myChildComponent: { + * myChildOption: true * } * }); * ``` - * The children option can also be an Array of child names or + * 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: [ @@ -2579,6 +3198,10 @@ var Component = (function () { * { * name: 'button', * someOtherOption: true + * }, + * { + * name: 'button', + * someOtherOption: false * } * ] * }); @@ -2912,13 +3535,13 @@ var Component = (function () { 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); - - // Reset Ready Queue - this.readyQueue_ = []; } // Allow for using event listeners also @@ -3410,7 +4033,7 @@ var Component = (function () { Component.extend = function extend(props) { props = props || {}; - _utilsLogJs2['default'].warn('Component.extend({}) has been deprecated, use videojs.extends(Component, {}) instead'); + _utilsLogJs2['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 @@ -3455,7 +4078,7 @@ Component.registerComponent('Component', Component); exports['default'] = Component; module.exports = exports['default']; -},{"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/to-title-case.js":116,"global/window":2,"object.assign":40}],49:[function(_dereq_,module,exports){ +},{"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/to-title-case.js":127,"global/window":2,"object.assign":43}],59:[function(_dereq_,module,exports){ /** * @file control-bar.js */ @@ -3573,14 +4196,14 @@ var ControlBar = (function (_Component) { ControlBar.prototype.options_ = { loadEvent: 'play', - children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'muteToggle', 'volumeControl', 'chaptersButton', 'subtitlesButton', 'captionsButton', 'fullscreenToggle'] + children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'subtitlesButton', 'captionsButton', 'fullscreenToggle'] }; _componentJs2['default'].registerComponent('ControlBar', ControlBar); exports['default'] = ControlBar; module.exports = exports['default']; -},{"../component.js":48,"./fullscreen-toggle.js":50,"./live-display.js":51,"./mute-toggle.js":52,"./play-toggle.js":53,"./playback-rate-menu/playback-rate-menu-button.js":54,"./progress-control/progress-control.js":58,"./spacer-controls/custom-control-spacer.js":60,"./text-track-controls/captions-button.js":63,"./text-track-controls/chapters-button.js":64,"./text-track-controls/subtitles-button.js":67,"./time-controls/current-time-display.js":70,"./time-controls/duration-display.js":71,"./time-controls/remaining-time-display.js":72,"./time-controls/time-divider.js":73,"./volume-control/volume-control.js":75,"./volume-menu-button.js":77}],50:[function(_dereq_,module,exports){ +},{"../component.js":58,"./fullscreen-toggle.js":60,"./live-display.js":61,"./mute-toggle.js":62,"./play-toggle.js":63,"./playback-rate-menu/playback-rate-menu-button.js":64,"./progress-control/progress-control.js":69,"./spacer-controls/custom-control-spacer.js":71,"./text-track-controls/captions-button.js":74,"./text-track-controls/chapters-button.js":75,"./text-track-controls/subtitles-button.js":78,"./time-controls/current-time-display.js":81,"./time-controls/duration-display.js":82,"./time-controls/remaining-time-display.js":83,"./time-controls/time-divider.js":84,"./volume-control/volume-control.js":86,"./volume-menu-button.js":88}],60:[function(_dereq_,module,exports){ /** * @file fullscreen-toggle.js */ @@ -3654,7 +4277,7 @@ _componentJs2['default'].registerComponent('FullscreenToggle', FullscreenToggle) exports['default'] = FullscreenToggle; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48}],51:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58}],61:[function(_dereq_,module,exports){ /** * @file live-display.js */ @@ -3689,10 +4312,13 @@ var Dom = _interopRequireWildcard(_utilsDomJs); var LiveDisplay = (function (_Component) { _inherits(LiveDisplay, _Component); - function LiveDisplay() { + function LiveDisplay(player, options) { _classCallCheck(this, LiveDisplay); - _Component.apply(this, arguments); + _Component.call(this, player, options); + + this.updateShowing(); + this.on(this.player(), 'durationchange', this.updateShowing); } /** @@ -3709,15 +4335,23 @@ var LiveDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-live-display', - innerHTML: '' + this.localize('Stream Type') + '' + this.localize('LIVE'), + innerHTML: '' + this.localize('Stream Type') + '' + 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']); @@ -3725,7 +4359,7 @@ _component2['default'].registerComponent('LiveDisplay', LiveDisplay); exports['default'] = LiveDisplay; module.exports = exports['default']; -},{"../component":48,"../utils/dom.js":107}],52:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/dom.js":118}],62:[function(_dereq_,module,exports){ /** * @file mute-toggle.js */ @@ -3773,14 +4407,14 @@ var MuteToggle = (function (_Button) { 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) { + if (player.tech_ && player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } this.on(player, 'loadstart', function () { this.update(); // We need to update the button to account for a default muted state. - if (player.tech['featuresVolumeControl'] === false) { + if (player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } else { this.removeClass('vjs-hidden'); @@ -3852,7 +4486,7 @@ _component2['default'].registerComponent('MuteToggle', MuteToggle); exports['default'] = MuteToggle; module.exports = exports['default']; -},{"../button":47,"../component":48,"../utils/dom.js":107}],53:[function(_dereq_,module,exports){ +},{"../button":57,"../component":58,"../utils/dom.js":118}],63:[function(_dereq_,module,exports){ /** * @file play-toggle.js */ @@ -3953,7 +4587,7 @@ _componentJs2['default'].registerComponent('PlayToggle', PlayToggle); exports['default'] = PlayToggle; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48}],54:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58}],64:[function(_dereq_,module,exports){ /** * @file playback-rate-menu-button.js */ @@ -4116,7 +4750,7 @@ var PlaybackRateMenuButton = (function (_MenuButton) { */ PlaybackRateMenuButton.prototype.playbackRateSupported = function playbackRateSupported() { - return this.player().tech && this.player().tech['featuresPlaybackRate'] && this.playbackRates() && this.playbackRates().length > 0; + return this.player().tech_ && this.player().tech_['featuresPlaybackRate'] && this.playbackRates() && this.playbackRates().length > 0; }; /** @@ -4154,7 +4788,7 @@ _componentJs2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRat exports['default'] = PlaybackRateMenuButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../menu/menu.js":86,"../../utils/dom.js":107,"./playback-rate-menu-item.js":55}],55:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-button.js":95,"../../menu/menu.js":97,"../../utils/dom.js":118,"./playback-rate-menu-item.js":65}],65:[function(_dereq_,module,exports){ /** * @file playback-rate-menu-item.js */ @@ -4235,7 +4869,7 @@ _componentJs2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateM exports['default'] = PlaybackRateMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85}],56:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96}],66:[function(_dereq_,module,exports){ /** * @file load-progress-bar.js */ @@ -4341,7 +4975,109 @@ _componentJs2['default'].registerComponent('LoadProgressBar', LoadProgressBar); exports['default'] = LoadProgressBar; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107}],57:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118}],67:[function(_dereq_,module,exports){ +/** + * @file mouse-time-display.js + */ +'use strict'; + +exports.__esModule = true; + +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 _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; } + +var _componentJs = _dereq_('../../component.js'); + +var _componentJs2 = _interopRequireDefault(_componentJs); + +var _utilsDomJs = _dereq_('../../utils/dom.js'); + +var Dom = _interopRequireWildcard(_utilsDomJs); + +var _utilsFnJs = _dereq_('../../utils/fn.js'); + +var Fn = _interopRequireWildcard(_utilsFnJs); + +var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); + +var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); + +var _lodashCompatFunctionThrottle = _dereq_('lodash-compat/function/throttle'); + +var _lodashCompatFunctionThrottle2 = _interopRequireDefault(_lodashCompatFunctionThrottle); + +/** + * 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) { + var _this = this; + + _classCallCheck(this, MouseTimeDisplay); + + _Component.call(this, player, options); + + this.update(0, 0); + + player.on('ready', function () { + _this.on(player.controlBar.progressControl.el(), 'mousemove', _lodashCompatFunctionThrottle2['default'](Fn.bind(_this, _this.handleMouseMove), 25)); + }); + } + + /** + * 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 = _utilsFormatTimeJs2['default'](newTime, this.player_.duration()); + + this.el().style.left = position + 'px'; + this.el().setAttribute('data-current-time', time); + }; + + MouseTimeDisplay.prototype.calculateDistance = function calculateDistance(event) { + return Dom.getPointerPosition(this.el().parentNode, event).x; + }; + + return MouseTimeDisplay; +})(_componentJs2['default']); + +_componentJs2['default'].registerComponent('MouseTimeDisplay', MouseTimeDisplay); +exports['default'] = MouseTimeDisplay; +module.exports = exports['default']; + +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/format-time.js":121,"lodash-compat/function/throttle":7}],68:[function(_dereq_,module,exports){ /** * @file play-progress-bar.js */ @@ -4385,6 +5121,7 @@ var PlayProgressBar = (function (_Component) { _classCallCheck(this, PlayProgressBar); _Component.call(this, player, options); + this.updateDataAttr(); this.on(player, 'timeupdate', this.updateDataAttr); player.ready(Fn.bind(this, this.updateDataAttr)); } @@ -4398,7 +5135,7 @@ var PlayProgressBar = (function (_Component) { PlayProgressBar.prototype.createEl = function createEl() { return _Component.prototype.createEl.call(this, 'div', { - className: 'vjs-play-progress', + className: 'vjs-play-progress vjs-slider-bar', innerHTML: '' + this.localize('Progress') + ': 0%' }); }; @@ -4415,7 +5152,7 @@ _componentJs2['default'].registerComponent('PlayProgressBar', PlayProgressBar); exports['default'] = PlayProgressBar; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/fn.js":109,"../../utils/format-time.js":110}],58:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/fn.js":120,"../../utils/format-time.js":121}],69:[function(_dereq_,module,exports){ /** * @file progress-control.js */ @@ -4437,6 +5174,10 @@ var _seekBarJs = _dereq_('./seek-bar.js'); var _seekBarJs2 = _interopRequireDefault(_seekBarJs); +var _mouseTimeDisplayJs = _dereq_('./mouse-time-display.js'); + +var _mouseTimeDisplayJs2 = _interopRequireDefault(_mouseTimeDisplayJs); + /** * The Progress Control component contains the seek bar, load progress, * and play progress @@ -4473,16 +5214,14 @@ var ProgressControl = (function (_Component) { })(_componentJs2['default']); ProgressControl.prototype.options_ = { - children: { - 'seekBar': {} - } + children: ['seekBar'] }; _componentJs2['default'].registerComponent('ProgressControl', ProgressControl); exports['default'] = ProgressControl; module.exports = exports['default']; -},{"../../component.js":48,"./seek-bar.js":59}],59:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./mouse-time-display.js":67,"./seek-bar.js":70}],70:[function(_dereq_,module,exports){ /** * @file seek-bar.js */ @@ -4522,6 +5261,10 @@ var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); +var _objectAssign = _dereq_('object.assign'); + +var _objectAssign2 = _interopRequireDefault(_objectAssign); + /** * Seek Bar and holder for the progress bars * @@ -4551,7 +5294,8 @@ var SeekBar = (function (_Slider) { SeekBar.prototype.createEl = function createEl() { return _Slider.prototype.createEl.call(this, 'div', { - className: 'vjs-progress-holder', + className: 'vjs-progress-holder' + }, { 'aria-label': 'video progress bar' }); }; @@ -4653,10 +5397,7 @@ var SeekBar = (function (_Slider) { })(_sliderSliderJs2['default']); SeekBar.prototype.options_ = { - children: { - 'loadProgressBar': {}, - 'playProgressBar': {} - }, + children: ['loadProgressBar', 'mouseTimeDisplay', 'playProgressBar'], 'barName': 'playProgressBar' }; @@ -4666,7 +5407,7 @@ _componentJs2['default'].registerComponent('SeekBar', SeekBar); exports['default'] = SeekBar; module.exports = exports['default']; -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"../../utils/format-time.js":110,"./load-progress-bar.js":56,"./play-progress-bar.js":57}],60:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"../../utils/format-time.js":121,"./load-progress-bar.js":66,"./play-progress-bar.js":68,"object.assign":43}],71:[function(_dereq_,module,exports){ /** * @file custom-control-spacer.js */ @@ -4723,9 +5464,14 @@ var CustomControlSpacer = (function (_Spacer) { */ CustomControlSpacer.prototype.createEl = function createEl() { - return _Spacer.prototype.createEl.call(this, { + 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 = ' '; + return el; }; return CustomControlSpacer; @@ -4735,7 +5481,7 @@ _componentJs2['default'].registerComponent('CustomControlSpacer', CustomControlS exports['default'] = CustomControlSpacer; module.exports = exports['default']; -},{"../../component.js":48,"./spacer.js":61}],61:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./spacer.js":72}],72:[function(_dereq_,module,exports){ /** * @file spacer.js */ @@ -4784,12 +5530,11 @@ var Spacer = (function (_Component) { /** * Create the component's DOM element * - * @param {Object} props An object of properties * @return {Element} * @method createEl */ - Spacer.prototype.createEl = function createEl(props) { + Spacer.prototype.createEl = function createEl() { return _Component.prototype.createEl.call(this, 'div', { className: this.buildCSSClass() }); @@ -4803,7 +5548,7 @@ _componentJs2['default'].registerComponent('Spacer', Spacer); exports['default'] = Spacer; module.exports = exports['default']; -},{"../../component.js":48}],62:[function(_dereq_,module,exports){ +},{"../../component.js":58}],73:[function(_dereq_,module,exports){ /** * @file caption-settings-menu-item.js */ @@ -4869,7 +5614,7 @@ _componentJs2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSet exports['default'] = CaptionSettingsMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-menu-item.js":69}],63:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-menu-item.js":80}],74:[function(_dereq_,module,exports){ /** * @file captions-button.js */ @@ -4937,7 +5682,7 @@ var CaptionsButton = (function (_TextTrackButton) { _TextTrackButton.prototype.update.call(this); // if native, then threshold is 1 because no settings button - if (this.player().tech && this.player().tech['featuresNativeTextTracks']) { + if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) { threshold = 1; } @@ -4958,7 +5703,7 @@ var CaptionsButton = (function (_TextTrackButton) { CaptionsButton.prototype.createItems = function createItems() { var items = []; - if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) { + if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) { items.push(new _captionSettingsMenuItemJs2['default'](this.player_, { 'kind': this.kind_ })); } @@ -4975,7 +5720,7 @@ _componentJs2['default'].registerComponent('CaptionsButton', CaptionsButton); exports['default'] = CaptionsButton; module.exports = exports['default']; -},{"../../component.js":48,"./caption-settings-menu-item.js":62,"./text-track-button.js":68}],64:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./caption-settings-menu-item.js":73,"./text-track-button.js":79}],75:[function(_dereq_,module,exports){ /** * @file chapters-button.js */ @@ -5164,7 +5909,7 @@ _componentJs2['default'].registerComponent('ChaptersButton', ChaptersButton); exports['default'] = ChaptersButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu.js":86,"../../utils/dom.js":107,"../../utils/fn.js":109,"../../utils/to-title-case.js":116,"./chapters-track-menu-item.js":65,"./text-track-button.js":68,"./text-track-menu-item.js":69,"global/window":2}],65:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu.js":97,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/to-title-case.js":127,"./chapters-track-menu-item.js":76,"./text-track-button.js":79,"./text-track-menu-item.js":80,"global/window":2}],76:[function(_dereq_,module,exports){ /** * @file chapters-track-menu-item.js */ @@ -5254,7 +5999,7 @@ _componentJs2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrac exports['default'] = ChaptersTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109}],66:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96,"../../utils/fn.js":120}],77:[function(_dereq_,module,exports){ /** * @file off-text-track-menu-item.js */ @@ -5334,7 +6079,7 @@ _componentJs2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackM exports['default'] = OffTextTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-menu-item.js":69}],67:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-menu-item.js":80}],78:[function(_dereq_,module,exports){ /** * @file subtitles-button.js */ @@ -5397,7 +6142,7 @@ _componentJs2['default'].registerComponent('SubtitlesButton', SubtitlesButton); exports['default'] = SubtitlesButton; module.exports = exports['default']; -},{"../../component.js":48,"./text-track-button.js":68}],68:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./text-track-button.js":79}],79:[function(_dereq_,module,exports){ /** * @file text-track-button.js */ @@ -5505,7 +6250,7 @@ _componentJs2['default'].registerComponent('TextTrackButton', TextTrackButton); exports['default'] = TextTrackButton; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../utils/fn.js":109,"./off-text-track-menu-item.js":66,"./text-track-menu-item.js":69}],69:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-button.js":95,"../../utils/fn.js":120,"./off-text-track-menu-item.js":77,"./text-track-menu-item.js":80}],80:[function(_dereq_,module,exports){ /** * @file text-track-menu-item.js */ @@ -5654,7 +6399,7 @@ _componentJs2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuIte exports['default'] = TextTrackMenuItem; module.exports = exports['default']; -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109,"global/document":1,"global/window":2}],70:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../menu/menu-item.js":96,"../../utils/fn.js":120,"global/document":1,"global/window":2}],81:[function(_dereq_,module,exports){ /** * @file current-time-display.js */ @@ -5716,8 +6461,11 @@ var CurrentTimeDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-current-time-display', - innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the current time for screen reader users + innerHTML: 'Current Time ' + '0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5745,7 +6493,7 @@ _componentJs2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisp exports['default'] = CurrentTimeDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],71:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],82:[function(_dereq_,module,exports){ /** * @file duration-display.js */ @@ -5813,8 +6561,11 @@ var DurationDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-duration-display', - innerHTML: '' + this.localize('Duration Time') + ' 0:00', // label the duration time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the duration time for screen reader users + innerHTML: '' + this.localize('Duration Time') + ' 0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5843,7 +6594,7 @@ _componentJs2['default'].registerComponent('DurationDisplay', DurationDisplay); exports['default'] = DurationDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],72:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],83:[function(_dereq_,module,exports){ /** * @file remaining-time-display.js */ @@ -5905,8 +6656,11 @@ var RemainingTimeDisplay = (function (_Component) { this.contentEl_ = Dom.createEl('div', { className: 'vjs-remaining-time-display', - innerHTML: '' + this.localize('Remaining Time') + ' -0:00', // label the remaining time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes + // label the remaining time for screen reader users + innerHTML: '' + this.localize('Remaining Time') + ' -0:00' + }, { + // tell screen readers not to automatically read the time as it changes + 'aria-live': 'off' }); el.appendChild(this.contentEl_); @@ -5938,7 +6692,7 @@ _componentJs2['default'].registerComponent('RemainingTimeDisplay', RemainingTime exports['default'] = RemainingTimeDisplay; module.exports = exports['default']; -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],73:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],84:[function(_dereq_,module,exports){ /** * @file time-divider.js */ @@ -5996,7 +6750,7 @@ _componentJs2['default'].registerComponent('TimeDivider', TimeDivider); exports['default'] = TimeDivider; module.exports = exports['default']; -},{"../../component.js":48}],74:[function(_dereq_,module,exports){ +},{"../../component.js":58}],85:[function(_dereq_,module,exports){ /** * @file volume-bar.js */ @@ -6059,7 +6813,8 @@ var VolumeBar = (function (_Slider) { VolumeBar.prototype.createEl = function createEl() { return _Slider.prototype.createEl.call(this, 'div', { - className: 'vjs-volume-bar', + className: 'vjs-volume-bar vjs-slider-bar' + }, { 'aria-label': 'volume level' }); }; @@ -6130,9 +6885,7 @@ var VolumeBar = (function (_Slider) { })(_sliderSliderJs2['default']); VolumeBar.prototype.options_ = { - children: { - 'volumeLevel': {} - }, + children: ['volumeLevel'], 'barName': 'volumeLevel' }; @@ -6142,7 +6895,7 @@ _componentJs2['default'].registerComponent('VolumeBar', VolumeBar); exports['default'] = VolumeBar; module.exports = exports['default']; -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"./volume-level.js":76}],75:[function(_dereq_,module,exports){ +},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"./volume-level.js":87}],86:[function(_dereq_,module,exports){ /** * @file volume-control.js */ @@ -6184,11 +6937,11 @@ var VolumeControl = (function (_Component) { _Component.call(this, player, options); // hide volume controls when they're not supported by the current tech - if (player.tech && player.tech['featuresVolumeControl'] === false) { + if (player.tech_ && player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } this.on(player, 'loadstart', function () { - if (player.tech['featuresVolumeControl'] === false) { + if (player.tech_['featuresVolumeControl'] === false) { this.addClass('vjs-hidden'); } else { this.removeClass('vjs-hidden'); @@ -6213,16 +6966,14 @@ var VolumeControl = (function (_Component) { })(_componentJs2['default']); VolumeControl.prototype.options_ = { - children: { - 'volumeBar': {} - } + children: ['volumeBar'] }; _componentJs2['default'].registerComponent('VolumeControl', VolumeControl); exports['default'] = VolumeControl; module.exports = exports['default']; -},{"../../component.js":48,"./volume-bar.js":74}],76:[function(_dereq_,module,exports){ +},{"../../component.js":58,"./volume-bar.js":85}],87:[function(_dereq_,module,exports){ /** * @file volume-level.js */ @@ -6279,7 +7030,7 @@ _componentJs2['default'].registerComponent('VolumeLevel', VolumeLevel); exports['default'] = VolumeLevel; module.exports = exports['default']; -},{"../../component.js":48}],77:[function(_dereq_,module,exports){ +},{"../../component.js":58}],88:[function(_dereq_,module,exports){ /** * @file volume-menu-button.js */ @@ -6334,10 +7085,15 @@ var VolumeMenuButton = (function (_MenuButton) { _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 an inline volumeMenuButton is used, we should default to using + // a horizontal slider for obvious reasons. if (options.inline) { options.vertical = false; } else { @@ -6345,8 +7101,8 @@ var VolumeMenuButton = (function (_MenuButton) { } } - // The vertical option needs to be set on the volumeBar as well, since that will - // need to be passed along to the VolumeBar constructor + // 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; @@ -6357,17 +7113,24 @@ var VolumeMenuButton = (function (_MenuButton) { this.on(player, 'loadstart', this.volumeUpdate); // 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 () { - if (player.tech['featuresVolumeControl'] === false) { + 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.addClass('vjs-menu-button'); } /** @@ -6400,15 +7163,11 @@ var VolumeMenuButton = (function (_MenuButton) { contentElType: 'div' }); - var vc = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar); + var vb = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar); - vc.on('focus', function () { - menu.lockShowing(); - }); - vc.on('blur', function () { - menu.unlockShowing(); - }); - menu.addChild(vc); + menu.addChild(vb); + + this.volumeBar = vb; return menu; }; @@ -6433,7 +7192,7 @@ _componentJs2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton) exports['default'] = VolumeMenuButton; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"../menu/menu-button.js":84,"../menu/menu.js":86,"./mute-toggle.js":52,"./volume-control/volume-bar.js":74}],78:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"../menu/menu-button.js":95,"../menu/menu.js":97,"./mute-toggle.js":62,"./volume-control/volume-bar.js":85}],89:[function(_dereq_,module,exports){ /** * @file error-display.js */ @@ -6515,7 +7274,7 @@ _component2['default'].registerComponent('ErrorDisplay', ErrorDisplay); exports['default'] = ErrorDisplay; module.exports = exports['default']; -},{"./component":48,"./utils/dom.js":107}],79:[function(_dereq_,module,exports){ +},{"./component":58,"./utils/dom.js":118}],90:[function(_dereq_,module,exports){ /** * @file event-target.js */ @@ -6574,7 +7333,7 @@ EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger; exports['default'] = EventTarget; module.exports = exports['default']; -},{"./utils/events.js":108}],80:[function(_dereq_,module,exports){ +},{"./utils/events.js":119}],91:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -6586,7 +7345,7 @@ var _utilsLog = _dereq_('./utils/log'); var _utilsLog2 = _interopRequireDefault(_utilsLog); /* - * @file extends.js + * @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 @@ -6619,7 +7378,7 @@ var _inherits = function _inherits(subClass, superClass) { * var Button = videojs.getComponent('Button'); * ``` * ```js - * var MyButton = videojs.extends(Button, { + * var MyButton = videojs.extend(Button, { * constructor: function(player, options) { * Button.call(this, player, options); * }, @@ -6629,7 +7388,7 @@ var _inherits = function _inherits(subClass, superClass) { * }); * ``` */ -var extendsFn = function extendsFn(superClass) { +var extendFn = function extendFn(superClass) { var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; var subClass = function subClass() { @@ -6662,10 +7421,10 @@ var extendsFn = function extendsFn(superClass) { return subClass; }; -exports['default'] = extendsFn; +exports['default'] = extendFn; module.exports = exports['default']; -},{"./utils/log":112}],81:[function(_dereq_,module,exports){ +},{"./utils/log":123}],92:[function(_dereq_,module,exports){ /** * @file fullscreen-api.js */ @@ -6722,7 +7481,7 @@ if (browserApi) { exports['default'] = FullscreenApi; module.exports = exports['default']; -},{"global/document":1}],82:[function(_dereq_,module,exports){ +},{"global/document":1}],93:[function(_dereq_,module,exports){ /** * @file loading-spinner.js */ @@ -6777,7 +7536,7 @@ _component2['default'].registerComponent('LoadingSpinner', LoadingSpinner); exports['default'] = LoadingSpinner; module.exports = exports['default']; -},{"./component":48}],83:[function(_dereq_,module,exports){ +},{"./component":58}],94:[function(_dereq_,module,exports){ /** * @file media-error.js */ @@ -6868,7 +7627,7 @@ for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { exports['default'] = MediaError; module.exports = exports['default']; -},{"object.assign":40}],84:[function(_dereq_,module,exports){ +},{"object.assign":43}],95:[function(_dereq_,module,exports){ /** * @file menu-button.js */ @@ -7142,7 +7901,7 @@ _componentJs2['default'].registerComponent('MenuButton', MenuButton); exports['default'] = MenuButton; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/to-title-case.js":116,"./menu.js":86}],85:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/to-title-case.js":127,"./menu.js":97}],96:[function(_dereq_,module,exports){ /** * @file menu-item.js */ @@ -7196,11 +7955,11 @@ var MenuItem = (function (_Button) { * @method createEl */ - MenuItem.prototype.createEl = function createEl(type, props) { + MenuItem.prototype.createEl = function createEl(type, props, attrs) { return _Button.prototype.createEl.call(this, 'li', _objectAssign2['default']({ className: 'vjs-menu-item', innerHTML: this.localize(this.options_['label']) - }, props)); + }, props), attrs); }; /** @@ -7237,7 +7996,7 @@ _componentJs2['default'].registerComponent('MenuItem', MenuItem); exports['default'] = MenuItem; module.exports = exports['default']; -},{"../button.js":47,"../component.js":48,"object.assign":40}],86:[function(_dereq_,module,exports){ +},{"../button.js":57,"../component.js":58,"object.assign":43}],97:[function(_dereq_,module,exports){ /** * @file menu.js */ @@ -7335,7 +8094,7 @@ _componentJs2['default'].registerComponent('Menu', Menu); exports['default'] = Menu; module.exports = exports['default']; -},{"../component.js":48,"../utils/dom.js":107,"../utils/events.js":108,"../utils/fn.js":109}],87:[function(_dereq_,module,exports){ +},{"../component.js":58,"../utils/dom.js":118,"../utils/events.js":119,"../utils/fn.js":120}],98:[function(_dereq_,module,exports){ /** * @file player.js */ @@ -7634,12 +8393,12 @@ var Player = (function (_Component) { // When the player is first initialized, trigger activity so components // like the control bar show themselves if needed - this.userActive_ = true; + this.userActive(true); this.reportUserActivity(); - this.listenForUserActivity(); + this.listenForUserActivity_(); - this.on('fullscreenchange', this.handleFullscreenChange); - this.on('stageclick', this.handleStageClick); + this.on('fullscreenchange', this.handleFullscreenChange_); + this.on('stageclick', this.handleStageClick_); } /* @@ -7677,8 +8436,8 @@ var Player = (function (_Component) { this.el_.player = null; } - if (this.tech) { - this.tech.dispose(); + if (this.tech_) { + this.tech_.dispose(); } _Component.prototype.dispose.call(this); @@ -7919,14 +8678,15 @@ var Player = (function (_Component) { * * @param {String} techName Name of the playback technology * @param {String} source Video source - * @method loadTech + * @method loadTech_ + * @private */ - Player.prototype.loadTech = function loadTech(techName, source) { + Player.prototype.loadTech_ = function loadTech_(techName, source) { // Pause and remove current playback technology - if (this.tech) { - this.unloadTech(); + if (this.tech_) { + this.unloadTech_(); } // get rid of the HTML5 video tag as soon as we are using another tech @@ -7936,15 +8696,11 @@ var Player = (function (_Component) { this.tag = null; } - this.techName = techName; + this.techName_ = techName; // Turn off API access because we're loading a new tech that might load asynchronously this.isReady_ = false; - var techReady = Fn.bind(this, function () { - this.triggerReady(); - }); - // Grab tech-specific options from player options and add source and parent element to use. var techOptions = _objectAssign2['default']({ 'nativeControlsForTouch': this.options_.nativeControlsForTouch, @@ -7976,50 +8732,52 @@ var Player = (function (_Component) { // Initialize tech instance var techComponent = _componentJs2['default'].getComponent(techName); - this.tech = new techComponent(techOptions); + this.tech_ = new techComponent(techOptions); - _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech); + // player.triggerReady is always async, so don't need this to be async + this.tech_.ready(Fn.bind(this, this.handleTechReady_), true); - this.on(this.tech, 'ready', this.handleTechReady); + _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech_); - // Listen to every HTML5 events and trigger them back on the player for the plugins - 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.onTextTrackChange); - this.on(this.tech, 'loadedmetadata', this.updateStyleEl_); + // 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.usingNativeControls(this.techGet('controls')); + this.usingNativeControls(this.techGet_('controls')); if (this.controls() && !this.usingNativeControls()) { - this.addTechControlsListeners(); + 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()); + 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 @@ -8027,89 +8785,110 @@ var Player = (function (_Component) { this.tag.player = null; this.tag = null; } - - // player.triggerReady is always async, so don't need this to be async - this.tech.ready(techReady, true); }; /** * Unload playback technology * - * @method unloadTech + * @method unloadTech_ + * @private */ - Player.prototype.unloadTech = function unloadTech() { + Player.prototype.unloadTech_ = function unloadTech_() { // Save the current text tracks so that we can reuse the same text tracks with the next tech this.textTracks_ = this.textTracks(); this.textTracksJson_ = _tracksTextTrackListConverterJs2['default'].textTracksToJson(this); this.isReady_ = false; - this.tech.dispose(); + this.tech_.dispose(); - this.tech = false; + this.tech_ = false; }; /** - * Add playback technology listeners - * - * @method addTechControlsListeners + * 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() { + Player.prototype.addTechControlsListeners_ = function addTechControlsListeners_() { // Make sure to remove all the previous listeners in case we are called multiple times. - this.removeTechControlsListeners(); + 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); + 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); + 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); + 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 + * @method removeTechControlsListeners_ + * @private */ - Player.prototype.removeTechControlsListeners = function removeTechControlsListeners() { + 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); + 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 - * @method handleTechReady */ - Player.prototype.handleTechReady = function handleTechReady() { + Player.prototype.handleTechReady_ = function handleTechReady_() { this.triggerReady(); // Keep the same volume as before if (this.cache_.volume) { - this.techCall('setVolume', 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) @@ -8123,10 +8902,11 @@ var Player = (function (_Component) { /** * Fired when the user agent begins looking for media data * - * @event loadstart + * @private + * @method handleTechLoadStart_ */ - Player.prototype.handleTechLoadStart = function handleTechLoadStart() { + Player.prototype.handleTechLoadStart_ = function handleTechLoadStart_() { // TODO: Update to use `emptied` event instead. See #1277. this.removeClass('vjs-ended'); @@ -8152,6 +8932,7 @@ var Player = (function (_Component) { * * @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 */ @@ -8176,10 +8957,11 @@ var Player = (function (_Component) { /** * Fired whenever the media begins or resumes playback * - * @event play + * @private + * @method handleTechPlay_ */ - Player.prototype.handleTechPlay = function handleTechPlay() { + Player.prototype.handleTechPlay_ = function handleTechPlay_() { this.removeClass('vjs-ended'); this.removeClass('vjs-paused'); this.addClass('vjs-playing'); @@ -8194,10 +8976,11 @@ var Player = (function (_Component) { /** * Fired whenever the media begins waiting * - * @event waiting + * @private + * @method handleTechWaiting_ */ - Player.prototype.handleTechWaiting = function handleTechWaiting() { + Player.prototype.handleTechWaiting_ = function handleTechWaiting_() { this.addClass('vjs-waiting'); this.trigger('waiting'); }; @@ -8206,10 +8989,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event canplay + * @private + * @method handleTechCanPlay_ */ - Player.prototype.handleTechCanPlay = function handleTechCanPlay() { + Player.prototype.handleTechCanPlay_ = function handleTechCanPlay_() { this.removeClass('vjs-waiting'); this.trigger('canplay'); }; @@ -8218,10 +9002,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event canplaythrough + * @private + * @method handleTechCanPlayThrough_ */ - Player.prototype.handleTechCanPlayThrough = function handleTechCanPlayThrough() { + Player.prototype.handleTechCanPlayThrough_ = function handleTechCanPlayThrough_() { this.removeClass('vjs-waiting'); this.trigger('canplaythrough'); }; @@ -8230,10 +9015,11 @@ var Player = (function (_Component) { * A handler for events that signal that waiting has ended * which is not consistent between browsers. See #1351 * - * @event playing + * @private + * @method handleTechPlaying_ */ - Player.prototype.handleTechPlaying = function handleTechPlaying() { + Player.prototype.handleTechPlaying_ = function handleTechPlaying_() { this.removeClass('vjs-waiting'); this.trigger('playing'); }; @@ -8241,10 +9027,11 @@ var Player = (function (_Component) { /** * Fired whenever the player is jumping to a new time * - * @event seeking + * @private + * @method handleTechSeeking_ */ - Player.prototype.handleTechSeeking = function handleTechSeeking() { + Player.prototype.handleTechSeeking_ = function handleTechSeeking_() { this.addClass('vjs-seeking'); this.trigger('seeking'); }; @@ -8252,10 +9039,11 @@ var Player = (function (_Component) { /** * Fired when the player has finished jumping to a new time * - * @event seeked + * @private + * @method handleTechSeeked_ */ - Player.prototype.handleTechSeeked = function handleTechSeeked() { + Player.prototype.handleTechSeeked_ = function handleTechSeeked_() { this.removeClass('vjs-seeking'); this.trigger('seeked'); }; @@ -8266,10 +9054,11 @@ var Player = (function (_Component) { * implementation yet, so use sparingly. If you don't have a reason to * prevent playback, use `myPlayer.one('play');` instead. * - * @event firstplay + * @private + * @method handleTechFirstPlay_ */ - Player.prototype.handleTechFirstPlay = function 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) { @@ -8283,10 +9072,11 @@ var Player = (function (_Component) { /** * Fired whenever the media has been paused * - * @event pause + * @private + * @method handleTechPause_ */ - Player.prototype.handleTechPause = function handleTechPause() { + Player.prototype.handleTechPause_ = function handleTechPause_() { this.removeClass('vjs-playing'); this.addClass('vjs-paused'); this.trigger('pause'); @@ -8295,25 +9085,22 @@ var Player = (function (_Component) { /** * Fired while the user agent is downloading media data * - * @event progress + * @private + * @method handleTechProgress_ */ - Player.prototype.handleTechProgress = function handleTechProgress() { + Player.prototype.handleTechProgress_ = function handleTechProgress_() { this.trigger('progress'); - - // Add custom event for when source is finished downloading. - if (this.bufferedPercent() === 1) { - this.trigger('loadedalldata'); - } }; /** * Fired when the end of the media resource is reached (currentTime == duration) * - * @event ended + * @private + * @method handleTechEnded_ */ - Player.prototype.handleTechEnded = function handleTechEnded() { + Player.prototype.handleTechEnded_ = function handleTechEnded_() { this.addClass('vjs-ended'); if (this.options_.loop) { this.currentTime(0); @@ -8328,22 +9115,23 @@ var Player = (function (_Component) { /** * Fired when the duration of the media resource is first known or changed * - * @event durationchange + * @private + * @method handleTechDurationChange_ */ - Player.prototype.handleTechDurationChange = function handleTechDurationChange() { - this.updateDuration(); - this.trigger('durationchange'); + 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 - * @method handleTechClick + * @private + * @method handleTechClick_ */ - Player.prototype.handleTechClick = function handleTechClick(event) { + 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; @@ -8363,30 +9151,33 @@ var Player = (function (_Component) { * Handle a tap on the media element. It will toggle the user * activity state, which hides and shows the controls. * - * @method handleTechTap + * @private + * @method handleTechTap_ */ - Player.prototype.handleTechTap = function handleTechTap() { + Player.prototype.handleTechTap_ = function handleTechTap_() { this.userActive(!this.userActive()); }; /** * Handle touch to start * - * @method handleTechTouchStart + * @private + * @method handleTechTouchStart_ */ - Player.prototype.handleTechTouchStart = function handleTechTouchStart() { + Player.prototype.handleTechTouchStart_ = function handleTechTouchStart_() { this.userWasActive = this.userActive(); }; /** * Handle touch to move * - * @method handleTechTouchMove + * @private + * @method handleTechTouchMove_ */ - Player.prototype.handleTechTouchMove = function handleTechTouchMove() { + Player.prototype.handleTechTouchMove_ = function handleTechTouchMove_() { if (this.userWasActive) { this.reportUserActivity(); } @@ -8395,47 +9186,23 @@ var Player = (function (_Component) { /** * Handle touch to end * - * @method handleTechTouchEnd + * @private + * @method handleTechTouchEnd_ */ - Player.prototype.handleTechTouchEnd = function handleTechTouchEnd(event) { + Player.prototype.handleTechTouchEnd_ = function handleTechTouchEnd_(event) { // Stop the mouse events from also happening event.preventDefault(); }; - /** - * Update the duration of the player using the tech - * - * @private - * @method updateDuration - */ - - Player.prototype.updateDuration = function updateDuration() { - // Allows for caching value instead of asking player each time. - // We need to get the techGet response and check for a value so we don't - // accidentally cause the stack to blow up. - var duration = this.techGet('duration'); - if (duration) { - if (duration < 0) { - duration = Infinity; - } - this.duration(duration); - // Determine if the stream is live and propagate styles down to UI. - if (duration === Infinity) { - this.addClass('vjs-live'); - } else { - this.removeClass('vjs-live'); - } - } - }; - /** * Fired when the player switches in or out of fullscreen mode * - * @event fullscreenchange + * @private + * @method handleFullscreenChange_ */ - Player.prototype.handleFullscreenChange = function handleFullscreenChange() { + Player.prototype.handleFullscreenChange_ = function handleFullscreenChange_() { if (this.isFullscreen()) { this.addClass('vjs-fullscreen'); } else { @@ -8448,20 +9215,21 @@ var Player = (function (_Component) { * use stageclick events triggered from inside the SWF instead * * @private - * @method handleStageClick + * @method handleStageClick_ */ - Player.prototype.handleStageClick = function handleStageClick() { + Player.prototype.handleStageClick_ = function handleStageClick_() { this.reportUserActivity(); }; /** * Handle Tech Fullscreen Change * - * @method handleTechFullscreenChange + * @private + * @method handleTechFullscreenChange_ */ - Player.prototype.handleTechFullscreenChange = function handleTechFullscreenChange(event, data) { + Player.prototype.handleTechFullscreenChange_ = function handleTechFullscreenChange_(event, data) { if (data) { this.isFullscreen(data.isFullscreen); } @@ -8471,111 +9239,122 @@ var Player = (function (_Component) { /** * Fires when an error occurred during the loading of an audio/video * - * @event error + * @private + * @method handleTechError_ */ - Player.prototype.handleTechError = function handleTechError() { - var error = this.tech.error(); + Player.prototype.handleTechError_ = function handleTechError_() { + var error = this.tech_.error(); this.error(error && error.code); }; /** * Fires when the browser is intentionally not getting media data * - * @event suspend + * @private + * @method handleTechSuspend_ */ - Player.prototype.handleTechSuspend = function handleTechSuspend() { + Player.prototype.handleTechSuspend_ = function handleTechSuspend_() { this.trigger('suspend'); }; /** * Fires when the loading of an audio/video is aborted * - * @event abort + * @private + * @method handleTechAbort_ */ - Player.prototype.handleTechAbort = function handleTechAbort() { + Player.prototype.handleTechAbort_ = function handleTechAbort_() { this.trigger('abort'); }; /** * Fires when the current playlist is empty * - * @event emptied + * @private + * @method handleTechEmptied_ */ - Player.prototype.handleTechEmptied = function handleTechEmptied() { + Player.prototype.handleTechEmptied_ = function handleTechEmptied_() { this.trigger('emptied'); }; /** * Fires when the browser is trying to get media data, but data is not available * - * @event stalled + * @private + * @method handleTechStalled_ */ - Player.prototype.handleTechStalled = function handleTechStalled() { + Player.prototype.handleTechStalled_ = function handleTechStalled_() { this.trigger('stalled'); }; /** * Fires when the browser has loaded meta data for the audio/video * - * @event loadedmetadata + * @private + * @method handleTechLoadedMetaData_ */ - Player.prototype.handleTechLoadedMetaData = function handleTechLoadedMetaData() { + Player.prototype.handleTechLoadedMetaData_ = function handleTechLoadedMetaData_() { this.trigger('loadedmetadata'); }; /** * Fires when the browser has loaded the current frame of the audio/video * - * @event loaddata + * @private + * @method handleTechLoadedData_ */ - Player.prototype.handleTechLoadedData = function handleTechLoadedData() { + Player.prototype.handleTechLoadedData_ = function handleTechLoadedData_() { this.trigger('loadeddata'); }; /** * Fires when the current playback position has changed * - * @event timeupdate + * @private + * @method handleTechTimeUpdate_ */ - Player.prototype.handleTechTimeUpdate = function handleTechTimeUpdate() { + Player.prototype.handleTechTimeUpdate_ = function handleTechTimeUpdate_() { this.trigger('timeupdate'); }; /** * Fires when the playing speed of the audio/video is changed * - * @event ratechange + * @private + * @method handleTechRateChange_ */ - Player.prototype.handleTechRateChange = function handleTechRateChange() { + Player.prototype.handleTechRateChange_ = function handleTechRateChange_() { this.trigger('ratechange'); }; /** * Fires when the volume has been changed * - * @event volumechange + * @private + * @method handleTechVolumeChange_ */ - Player.prototype.handleTechVolumeChange = function handleTechVolumeChange() { + Player.prototype.handleTechVolumeChange_ = function handleTechVolumeChange_() { this.trigger('volumechange'); }; /** * Fires when the text track has been changed * - * @event texttrackchange + * @private + * @method handleTechTextTrackChange_ */ - Player.prototype.onTextTrackChange = function onTextTrackChange() { + Player.prototype.handleTechTextTrackChange_ = function handleTechTextTrackChange_() { this.trigger('texttrackchange'); }; @@ -8595,20 +9374,21 @@ var Player = (function (_Component) { * * @param {String=} method Method * @param {Object=} arg Argument - * @method techCall + * @private + * @method techCall_ */ - Player.prototype.techCall = function techCall(method, arg) { + 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 () { + if (this.tech_ && !this.tech_.isReady_) { + this.tech_.ready(function () { this[method](arg); }, true); // Otherwise call method now } else { try { - this.tech[method](arg); + this.tech_[method](arg); } catch (e) { _utilsLogJs2['default'](e); throw e; @@ -8621,26 +9401,27 @@ var Player = (function (_Component) { * * @param {String} method Tech method * @return {Method} - * @method techGet + * @private + * @method techGet_ */ - Player.prototype.techGet = function techGet(method) { - if (this.tech && this.tech.isReady_) { + 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](); + return this.tech_[method](); } catch (e) { // When building additional tech libs, an expected method may not be defined yet - if (this.tech[method] === undefined) { - _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName + ' playback technology.', e); + if (this.tech_[method] === undefined) { + _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName_ + ' playback technology.', e); } else { // When a method isn't available on the object it throws a TypeError if (e.name === 'TypeError') { - _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName + ' playback technology element.', e); - this.tech.isReady_ = false; + _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName_ + ' playback technology element.', e); + this.tech_.isReady_ = false; } else { _utilsLogJs2['default'](e); } @@ -8663,7 +9444,7 @@ var Player = (function (_Component) { */ Player.prototype.play = function play() { - this.techCall('play'); + this.techCall_('play'); return this; }; @@ -8678,7 +9459,7 @@ var Player = (function (_Component) { */ Player.prototype.pause = function pause() { - this.techCall('pause'); + this.techCall_('pause'); return this; }; @@ -8695,7 +9476,7 @@ var Player = (function (_Component) { 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; + return this.techGet_('paused') === false ? false : true; }; /** @@ -8742,7 +9523,7 @@ var Player = (function (_Component) { Player.prototype.currentTime = function currentTime(seconds) { if (seconds !== undefined) { - this.techCall('setCurrentTime', seconds); + this.techCall_('setCurrentTime', seconds); return this; } @@ -8753,7 +9534,7 @@ var Player = (function (_Component) { // 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. - return this.cache_.currentTime = this.techGet('currentTime') || 0; + return this.cache_.currentTime = this.techGet_('currentTime') || 0; }; /** @@ -8771,19 +9552,31 @@ var Player = (function (_Component) { */ Player.prototype.duration = function duration(seconds) { - if (seconds !== undefined) { - - // cache the last set value for optimized scrubbing (esp. Flash) - this.cache_.duration = parseFloat(seconds); - - return this; + if (seconds === undefined) { + return this.cache_.duration || 0; } - if (this.cache_.duration === undefined) { - this.updateDuration(); + seconds = parseFloat(seconds) || 0; + + // Standardize on Inifity for signaling video is live + if (seconds < 0) { + seconds = Infinity; } - return this.cache_.duration || 0; + 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; }; /** @@ -8825,7 +9618,7 @@ var Player = (function (_Component) { */ Player.prototype.buffered = function buffered() { - var buffered = this.techGet('buffered'); + var buffered = this.techGet_('buffered'); if (!buffered || !buffered.length) { buffered = _utilsTimeRangesJs.createTimeRange(0, 0); @@ -8892,13 +9685,13 @@ var Player = (function (_Component) { if (percentAsDecimal !== undefined) { vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1 this.cache_.volume = vol; - this.techCall('setVolume', vol); + this.techCall_('setVolume', vol); return this; } // Default to 1 when returning current volume. - vol = parseFloat(this.techGet('volume')); + vol = parseFloat(this.techGet_('volume')); return isNaN(vol) ? 1 : vol; }; @@ -8919,10 +9712,10 @@ var Player = (function (_Component) { Player.prototype.muted = function muted(_muted) { if (_muted !== undefined) { - this.techCall('setMuted', _muted); + this.techCall_('setMuted', _muted); return this; } - return this.techGet('muted') || false; // Default to false + return this.techGet_('muted') || false; // Default to false }; // Check if current tech can support native fullscreen @@ -8935,7 +9728,7 @@ var Player = (function (_Component) { */ Player.prototype.supportsFullScreen = function supportsFullScreen() { - return this.techGet('supportsFullScreen') || false; + return this.techGet_('supportsFullScreen') || false; }; /** @@ -9006,10 +9799,10 @@ var Player = (function (_Component) { })); this.el_[fsApi.requestFullscreen](); - } else if (this.tech.supportsFullScreen()) { + } 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'); + this.techCall_('enterFullScreen'); } else { // fullscreen isn't supported so we'll just stretch the video element to // fill the viewport @@ -9037,8 +9830,8 @@ var Player = (function (_Component) { // Check for browser element fullscreen support if (fsApi.requestFullscreen) { _globalDocument2['default'][fsApi.exitFullscreen](); - } else if (this.tech.supportsFullScreen()) { - this.techCall('exitFullScreen'); + } else if (this.tech_.supportsFullScreen()) { + this.techCall_('exitFullScreen'); } else { this.exitFullWindow(); this.trigger('fullscreenchange'); @@ -9181,10 +9974,10 @@ var Player = (function (_Component) { Player.prototype.src = function src(source) { if (source === undefined) { - return this.techGet('src'); + return this.techGet_('src'); } - var currentTech = _componentJs2['default'].getComponent(this.techName); + var currentTech = _componentJs2['default'].getComponent(this.techName_); // case: Array of source objects to choose from and pick the best to play if (Array.isArray(source)) { @@ -9215,9 +10008,9 @@ var Player = (function (_Component) { // 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); + this.techCall_('setSource', source); } else { - this.techCall('src', source.src); + this.techCall_('src', source.src); } if (this.options_.preload === 'auto') { @@ -9248,12 +10041,12 @@ var Player = (function (_Component) { var sourceTech = this.selectSource(sources); if (sourceTech) { - if (sourceTech.tech === this.techName) { + 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); + 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 @@ -9275,7 +10068,7 @@ var Player = (function (_Component) { */ Player.prototype.load = function load() { - this.techCall('load'); + this.techCall_('load'); return this; }; @@ -9288,7 +10081,7 @@ var Player = (function (_Component) { */ Player.prototype.currentSrc = function currentSrc() { - return this.techGet('currentSrc') || this.cache_.src || ''; + return this.techGet_('currentSrc') || this.cache_.src || ''; }; /** @@ -9315,11 +10108,11 @@ var Player = (function (_Component) { Player.prototype.preload = function preload(value) { if (value !== undefined) { - this.techCall('setPreload', value); + this.techCall_('setPreload', value); this.options_.preload = value; return this; } - return this.techGet('preload'); + return this.techGet_('preload'); }; /** @@ -9333,11 +10126,11 @@ var Player = (function (_Component) { Player.prototype.autoplay = function autoplay(value) { if (value !== undefined) { - this.techCall('setAutoplay', value); + this.techCall_('setAutoplay', value); this.options_.autoplay = value; return this; } - return this.techGet('autoplay', value); + return this.techGet_('autoplay', value); }; /** @@ -9351,15 +10144,16 @@ var Player = (function (_Component) { Player.prototype.loop = function loop(value) { if (value !== undefined) { - this.techCall('setLoop', value); + this.techCall_('setLoop', value); this.options_['loop'] = value; return this; } - return this.techGet('loop'); + return this.techGet_('loop'); }; /** - * get or set the poster image source url + * Get or set the poster image source url + * * ##### EXAMPLE: * ```js * // get @@ -9389,7 +10183,7 @@ var Player = (function (_Component) { this.poster_ = src; // update the tech's poster - this.techCall('setPoster', src); + this.techCall_('setPoster', src); // alert components that the poster has been set this.trigger('posterchange'); @@ -9397,6 +10191,27 @@ var Player = (function (_Component) { 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. * @@ -9413,7 +10228,7 @@ var Player = (function (_Component) { this.controls_ = bool; if (this.usingNativeControls()) { - this.techCall('setControls', bool); + this.techCall_('setControls', bool); } if (bool) { @@ -9422,7 +10237,7 @@ var Player = (function (_Component) { this.trigger('controlsenabled'); if (!this.usingNativeControls()) { - this.addTechControlsListeners(); + this.addTechControlsListeners_(); } } else { this.removeClass('vjs-controls-enabled'); @@ -9430,7 +10245,7 @@ var Player = (function (_Component) { this.trigger('controlsdisabled'); if (!this.usingNativeControls()) { - this.removeTechControlsListeners(); + this.removeTechControlsListeners_(); } } } @@ -9538,7 +10353,7 @@ var Player = (function (_Component) { */ Player.prototype.ended = function ended() { - return this.techGet('ended'); + return this.techGet_('ended'); }; /** @@ -9549,7 +10364,7 @@ var Player = (function (_Component) { */ Player.prototype.seeking = function seeking() { - return this.techGet('seeking'); + return this.techGet_('seeking'); }; /** @@ -9561,7 +10376,7 @@ var Player = (function (_Component) { */ Player.prototype.seekable = function seekable() { - return this.techGet('seekable'); + return this.techGet_('seekable'); }; /** @@ -9608,8 +10423,8 @@ var Player = (function (_Component) { // // 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) { + if (this.tech_) { + this.tech_.one('mousemove', function (e) { e.stopPropagation(); e.preventDefault(); }); @@ -9628,10 +10443,11 @@ var Player = (function (_Component) { /** * Listen for user activity based on timeout value * - * @method listenForUserActivity + * @private + * @method listenForUserActivity_ */ - Player.prototype.listenForUserActivity = function listenForUserActivity() { + Player.prototype.listenForUserActivity_ = function listenForUserActivity_() { var mouseInProgress = undefined, lastMoveX = undefined, lastMoveY = undefined; @@ -9725,12 +10541,12 @@ var Player = (function (_Component) { Player.prototype.playbackRate = function playbackRate(rate) { if (rate !== undefined) { - this.techCall('setPlaybackRate', rate); + this.techCall_('setPlaybackRate', rate); return this; } - if (this.tech && this.tech['featuresPlaybackRate']) { - return this.techGet('playbackRate'); + if (this.tech_ && this.tech_['featuresPlaybackRate']) { + return this.techGet_('playbackRate'); } else { return 1.0; } @@ -9777,7 +10593,7 @@ var Player = (function (_Component) { */ Player.prototype.networkState = function networkState() { - return this.techGet('networkState'); + return this.techGet_('networkState'); }; /** @@ -9805,7 +10621,7 @@ var Player = (function (_Component) { */ Player.prototype.readyState = function readyState() { - return this.techGet('readyState'); + return this.techGet_('readyState'); }; /* @@ -9825,9 +10641,9 @@ var Player = (function (_Component) { */ Player.prototype.textTracks = function textTracks() { - // cannot use techGet directly because it checks to see whether the tech is ready. + // 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. - return this.tech && this.tech['textTracks'](); + return this.tech_ && this.tech_['textTracks'](); }; /** @@ -9838,7 +10654,7 @@ var Player = (function (_Component) { */ Player.prototype.remoteTextTracks = function remoteTextTracks() { - return this.tech && this.tech['remoteTextTracks'](); + return this.tech_ && this.tech_['remoteTextTracks'](); }; /** @@ -9853,7 +10669,7 @@ var Player = (function (_Component) { */ Player.prototype.addTextTrack = function addTextTrack(kind, label, language) { - return this.tech && this.tech['addTextTrack'](kind, label, language); + return this.tech_ && this.tech_['addTextTrack'](kind, label, language); }; /** @@ -9864,7 +10680,7 @@ var Player = (function (_Component) { */ Player.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) { - return this.tech && this.tech['addRemoteTextTrack'](options); + return this.tech_ && this.tech_['addRemoteTextTrack'](options); }; /** @@ -9875,7 +10691,7 @@ var Player = (function (_Component) { */ Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { - this.tech && this.tech['removeRemoteTextTrack'](track); + this.tech_ && this.tech_['removeRemoteTextTrack'](track); }; /** @@ -9886,7 +10702,7 @@ var Player = (function (_Component) { */ Player.prototype.videoWidth = function videoWidth() { - return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0; + return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0; }; /** @@ -9897,24 +10713,17 @@ var Player = (function (_Component) { */ Player.prototype.videoHeight = function videoHeight() { - return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0; + 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'); }, - // seekable: function(){ return this.techCall('seekable'); }, - // videoTracks: function(){ return this.techCall('videoTracks'); }, - // audioTracks: function(){ return this.techCall('audioTracks'); }, - // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); }, - // mediaGroup: function(){ return this.techCall('mediaGroup'); }, - // controller: function(){ return this.techCall('controller'); }, - // defaultMuted: function(){ return this.techCall('defaultMuted'); } - - // TODO - // currentSrcList: the array of sources including other formats and bitrates - // playList: array of source lists in order of playback + // initialTime: function(){ return this.techCall_('initialTime'); }, + // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); }, + // played: function(){ return this.techCall_('played'); }, + // videoTracks: function(){ return this.techCall_('videoTracks'); }, + // audioTracks: function(){ return this.techCall_('audioTracks'); }, + // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); }, + // defaultMuted: function(){ return this.techCall_('defaultMuted'); } /** * The player's language code @@ -10063,16 +10872,7 @@ Player.prototype.options_ = { // 'playbackRates': [0.5, 1, 1.5, 2], // Included control sets - children: { - mediaLoader: {}, - posterImage: {}, - textTrackDisplay: {}, - loadingSpinner: {}, - bigPlayButton: {}, - controlBar: {}, - errorDisplay: {}, - textTrackSettings: {} - }, + children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'controlBar', 'errorDisplay', 'textTrackSettings'], language: _globalDocument2['default'].getElementsByTagName('html')[0].getAttribute('lang') || navigator.languages && navigator.languages[0] || navigator.userLanguage || navigator.language || 'en', @@ -10088,35 +10888,28 @@ Player.prototype.options_ = { * * @event loadedmetadata */ -Player.prototype.handleLoadedMetaData; +Player.prototype.handleLoadedMetaData_; /** * Fired when the player has downloaded data at the current playback position * * @event loadeddata */ -Player.prototype.handleLoadedData; - -/** - * Fired when the player has finished downloading the source data - * - * @event loadedalldata - */ -Player.prototype.handleLoadedAllData; +Player.prototype.handleLoadedData_; /** * Fired when the user is active, e.g. moves the mouse over the player * * @event useractive */ -Player.prototype.handleUserActive; +Player.prototype.handleUserActive_; /** * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction * * @event userinactive */ -Player.prototype.handleUserInactive; +Player.prototype.handleUserInactive_; /** * Fired when the current playback position has changed * @@ -10125,21 +10918,21 @@ Player.prototype.handleUserInactive; * * @event timeupdate */ -Player.prototype.handleTimeUpdate; +Player.prototype.handleTimeUpdate_; /** * Fired when the volume changes * * @event volumechange */ -Player.prototype.handleVolumeChange; +Player.prototype.handleVolumeChange_; /** * Fired when an error occurs * * @event error */ -Player.prototype.handleError; +Player.prototype.handleError_; Player.prototype.flexNotSupported_ = function () { var elem = _globalDocument2['default'].createElement('i'); @@ -10154,7 +10947,7 @@ exports['default'] = Player; module.exports = exports['default']; // If empty string, make it a parsable json object. -},{"./big-play-button.js":46,"./component.js":48,"./control-bar/control-bar.js":49,"./error-display.js":78,"./fullscreen-api.js":81,"./loading-spinner.js":82,"./media-error.js":83,"./poster-image.js":89,"./tech/html5.js":94,"./tech/loader.js":95,"./tracks/text-track-display.js":98,"./tracks/text-track-list-converter.js":100,"./tracks/text-track-settings.js":102,"./utils/browser.js":104,"./utils/buffer.js":105,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/to-title-case.js":116,"global/document":1,"global/window":2,"object.assign":40,"safe-json-parse/tuple":45}],88:[function(_dereq_,module,exports){ +},{"./big-play-button.js":56,"./component.js":58,"./control-bar/control-bar.js":59,"./error-display.js":89,"./fullscreen-api.js":92,"./loading-spinner.js":93,"./media-error.js":94,"./poster-image.js":100,"./tech/html5.js":105,"./tech/loader.js":106,"./tracks/text-track-display.js":109,"./tracks/text-track-list-converter.js":111,"./tracks/text-track-settings.js":113,"./utils/browser.js":115,"./utils/buffer.js":116,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/to-title-case.js":127,"global/document":1,"global/window":2,"object.assign":43,"safe-json-parse/tuple":48}],99:[function(_dereq_,module,exports){ /** * @file plugins.js */ @@ -10182,7 +10975,7 @@ var plugin = function plugin(name, init) { exports['default'] = plugin; module.exports = exports['default']; -},{"./player.js":87}],89:[function(_dereq_,module,exports){ +},{"./player.js":98}],100:[function(_dereq_,module,exports){ /** * @file poster-image.js */ @@ -10342,7 +11135,7 @@ _componentJs2['default'].registerComponent('PosterImage', PosterImage); exports['default'] = PosterImage; module.exports = exports['default']; -},{"./button.js":47,"./component.js":48,"./utils/browser.js":104,"./utils/dom.js":107,"./utils/fn.js":109}],90:[function(_dereq_,module,exports){ +},{"./button.js":57,"./component.js":58,"./utils/browser.js":115,"./utils/dom.js":118,"./utils/fn.js":120}],101:[function(_dereq_,module,exports){ /** * @file setup.js * @@ -10452,7 +11245,7 @@ exports.autoSetup = autoSetup; exports.autoSetupTimeout = autoSetupTimeout; exports.hasLoaded = hasLoaded; -},{"./utils/events.js":108,"global/document":1,"global/window":2}],91:[function(_dereq_,module,exports){ +},{"./utils/events.js":119,"global/document":1,"global/window":2}],102:[function(_dereq_,module,exports){ /** * @file slider.js */ @@ -10528,18 +11321,23 @@ var Slider = (function (_Component) { 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 = _objectAssign2['default']({ + tabIndex: 0 + }, props); + + attributes = _objectAssign2['default']({ 'role': 'slider', 'aria-valuenow': 0, 'aria-valuemin': 0, 'aria-valuemax': 100, tabIndex: 0 - }, props); + }, attributes); - return _Component.prototype.createEl.call(this, type, props); + return _Component.prototype.createEl.call(this, type, props, attributes); }; /** @@ -10552,7 +11350,9 @@ var Slider = (function (_Component) { Slider.prototype.handleMouseDown = function handleMouseDown(event) { event.preventDefault(); Dom.blockTextSelection(); + this.addClass('vjs-sliding'); + this.trigger('slideractive'); this.on(_globalDocument2['default'], 'mousemove', this.handleMouseMove); this.on(_globalDocument2['default'], 'mouseup', this.handleMouseUp); @@ -10578,7 +11378,9 @@ var Slider = (function (_Component) { Slider.prototype.handleMouseUp = function handleMouseUp() { Dom.unblockTextSelection(); + this.removeClass('vjs-sliding'); + this.trigger('sliderinactive'); this.off(_globalDocument2['default'], 'mousemove', this.handleMouseMove); this.off(_globalDocument2['default'], 'mouseup', this.handleMouseUp); @@ -10632,36 +11434,11 @@ var Slider = (function (_Component) { */ Slider.prototype.calculateDistance = function calculateDistance(event) { - var el = this.el_; - var box = Dom.findElPosition(el); - var boxW = el.offsetWidth; - var boxH = el.offsetHeight; - + var position = Dom.getPointerPosition(this.el_, event); if (this.vertical()) { - var boxY = box.top; - - var pageY = undefined; - if (event.changedTouches) { - pageY = event.changedTouches[0].pageY; - } else { - pageY = event.pageY; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH)); - } else { - var boxX = box.left; - - var pageX = undefined; - if (event.changedTouches) { - pageX = event.changedTouches[0].pageX; - } else { - pageX = event.pageX; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (pageX - boxX) / boxW)); + return position.y; } + return position.x; }; /** @@ -10747,7 +11524,7 @@ _componentJs2['default'].registerComponent('Slider', Slider); exports['default'] = Slider; module.exports = exports['default']; -},{"../component.js":48,"../utils/dom.js":107,"global/document":1,"object.assign":40}],92:[function(_dereq_,module,exports){ +},{"../component.js":58,"../utils/dom.js":118,"global/document":1,"object.assign":43}],103:[function(_dereq_,module,exports){ /** * @file flash-rtmp.js */ @@ -10847,7 +11624,7 @@ function FlashRtmpDecorator(Flash) { exports['default'] = FlashRtmpDecorator; module.exports = exports['default']; -},{}],93:[function(_dereq_,module,exports){ +},{}],104:[function(_dereq_,module,exports){ /** * @file flash.js * VideoJS-SWF - Custom Flash Player with HTML5-ish API @@ -10959,6 +11736,14 @@ var Flash = (function (_Tech) { 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) { + options.swf = '//vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf'; + } + // Generate ID for swf object var objId = options.techId; @@ -11444,7 +12229,7 @@ _component2['default'].registerComponent('Flash', Flash); exports['default'] = Flash; module.exports = exports['default']; -},{"../component":48,"../utils/dom.js":107,"../utils/time-ranges.js":115,"../utils/url.js":117,"./flash-rtmp":92,"./tech":96,"global/window":2,"object.assign":40}],94:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/dom.js":118,"../utils/time-ranges.js":126,"../utils/url.js":128,"./flash-rtmp":103,"./tech":107,"global/window":2,"object.assign":43}],105:[function(_dereq_,module,exports){ /** * @file html5.js * HTML5 Media Controller - Wrapper for HTML5 Media API @@ -11531,6 +12316,8 @@ var Html5 = (function (_Tech) { // 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()) { @@ -11669,6 +12456,97 @@ var Html5 = (function (_Tech) { // 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 _this = 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; + }; + _this.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'); + } + }; + _this.on('loadedmetadata', triggerLoadstart); + + _this.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: undefined + }; + })(); + + if (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; @@ -12590,7 +13468,7 @@ _component2['default'].registerComponent('Html5', Html5); exports['default'] = Html5; module.exports = exports['default']; -},{"../component":48,"../utils/browser.js":104,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/log.js":112,"../utils/merge-options.js":113,"../utils/url.js":117,"./tech.js":96,"global/document":1,"global/window":2,"object.assign":40}],95:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/browser.js":115,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/log.js":123,"../utils/merge-options.js":124,"../utils/url.js":128,"./tech.js":107,"global/document":1,"global/window":2,"object.assign":43}],106:[function(_dereq_,module,exports){ /** * @file loader.js */ @@ -12645,7 +13523,7 @@ var MediaLoader = (function (_Component) { // Check if the browser supports this technology if (tech && tech.isSupported()) { - player.loadTech(techName); + player.loadTech_(techName); break; } } @@ -12665,7 +13543,7 @@ _component2['default'].registerComponent('MediaLoader', MediaLoader); exports['default'] = MediaLoader; module.exports = exports['default']; -},{"../component":48,"../utils/to-title-case.js":116,"global/window":2}],96:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/to-title-case.js":127,"global/window":2}],107:[function(_dereq_,module,exports){ /** * @file tech.js * Media Technology Controller - Base class for media playback @@ -12765,8 +13643,6 @@ var Tech = (function (_Component) { this.manualTimeUpdatesOn(); } - this.initControlsListeners(); - if (options.nativeCaptions === false || options.nativeTextTracks === false) { this.featuresNativeTextTracks = false; } @@ -12788,40 +13664,6 @@ var Tech = (function (_Component) { * @private */ - /** - * 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 - * - * @method initControlsListeners - */ - - Tech.prototype.initControlsListeners = function initControlsListeners() { - // 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. - // Long term we might consider how we would do this for other events like 'canplay' - // that may also have fired. - this.ready(function () { - if (this.networkState && this.networkState() > 0) { - this.trigger('loadstart'); - } - // Allow the tech ready event to handle synchronisity - }, true); - }; - /* Fallbacks for unsupported event types ================================================================================ */ // Manually trigger progress events based on changes to the buffered amount @@ -13380,7 +14222,7 @@ _component2['default'].registerComponent('MediaTechController', Tech); exports['default'] = Tech; module.exports = exports['default']; -},{"../component":48,"../media-error.js":83,"../tracks/text-track":103,"../tracks/text-track-list":101,"../utils/buffer.js":105,"../utils/fn.js":109,"../utils/log.js":112,"../utils/time-ranges.js":115,"global/document":1,"global/window":2}],97:[function(_dereq_,module,exports){ +},{"../component":58,"../media-error.js":94,"../tracks/text-track":114,"../tracks/text-track-list":112,"../utils/buffer.js":116,"../utils/fn.js":120,"../utils/log.js":123,"../utils/time-ranges.js":126,"global/document":1,"global/window":2}],108:[function(_dereq_,module,exports){ /** * @file text-track-cue-list.js */ @@ -13477,7 +14319,7 @@ TextTrackCueList.prototype.getCueById = function (id) { exports['default'] = TextTrackCueList; module.exports = exports['default']; -},{"../utils/browser.js":104,"global/document":1}],98:[function(_dereq_,module,exports){ +},{"../utils/browser.js":115,"global/document":1}],109:[function(_dereq_,module,exports){ /** * @file text-track-display.js */ @@ -13562,7 +14404,7 @@ var TextTrackDisplay = (function (_Component) { // 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']) { + if (player.tech_ && player.tech_['featuresNativeTextTracks']) { this.hide(); return; } @@ -13593,7 +14435,7 @@ var TextTrackDisplay = (function (_Component) { */ TextTrackDisplay.prototype.toggleDisplay = function toggleDisplay() { - if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) { + if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) { this.hide(); } else { this.show(); @@ -13748,7 +14590,7 @@ _component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay); exports['default'] = TextTrackDisplay; module.exports = exports['default']; -},{"../component":48,"../menu/menu-button.js":84,"../menu/menu-item.js":85,"../menu/menu.js":86,"../utils/fn.js":109,"global/document":1,"global/window":2}],99:[function(_dereq_,module,exports){ +},{"../component":58,"../menu/menu-button.js":95,"../menu/menu-item.js":96,"../menu/menu.js":97,"../utils/fn.js":120,"global/document":1,"global/window":2}],110:[function(_dereq_,module,exports){ /** * @file text-track-enums.js * @@ -13781,7 +14623,7 @@ var TextTrackKind = { exports.TextTrackMode = TextTrackMode; exports.TextTrackKind = TextTrackKind; -},{}],100:[function(_dereq_,module,exports){ +},{}],111:[function(_dereq_,module,exports){ /** * Utilities for capturing text track state and re-creating tracks * based on a capture. @@ -13868,7 +14710,7 @@ var jsonToTextTracks = function jsonToTextTracks(json, tech) { exports['default'] = { textTracksToJson: textTracksToJson, jsonToTextTracks: jsonToTextTracks, trackToJson_: trackToJson_ }; module.exports = exports['default']; -},{}],101:[function(_dereq_,module,exports){ +},{}],112:[function(_dereq_,module,exports){ /** * @file text-track-list.js */ @@ -14013,7 +14855,7 @@ TextTrackList.prototype.getTrackById = function (id) { exports['default'] = TextTrackList; module.exports = exports['default']; -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"global/document":1}],102:[function(_dereq_,module,exports){ +},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"global/document":1}],113:[function(_dereq_,module,exports){ /** * @file text-track-settings.js */ @@ -14124,7 +14966,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Get texttrack settings + * Get texttrack settings * Settings are * .vjs-edge-style * .vjs-font-family @@ -14133,9 +14975,9 @@ var TextTrackSettings = (function (_Component) { * .vjs-bg-color * .vjs-bg-opacity * .window-color - * .vjs-window-opacity + * .vjs-window-opacity * - * @return {Object} + * @return {Object} * @method getValues */ @@ -14172,7 +15014,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Set texttrack settings + * Set texttrack settings * Settings are * .vjs-edge-style * .vjs-font-family @@ -14181,7 +15023,7 @@ var TextTrackSettings = (function (_Component) { * .vjs-bg-color * .vjs-bg-opacity * .window-color - * .vjs-window-opacity + * .vjs-window-opacity * * @param {Object} values Object with texttrack setting values * @method setValues @@ -14209,7 +15051,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Restore texttrack settings + * Restore texttrack settings * * @method restoreSettings */ @@ -14230,7 +15072,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Save texttrack settings to local storage + * Save texttrack settings to local storage * * @method saveSettings */ @@ -14251,7 +15093,7 @@ var TextTrackSettings = (function (_Component) { }; /** - * Update display of texttrack settings + * Update display of texttrack settings * * @method updateDisplay */ @@ -14305,7 +15147,7 @@ function captionOptionsMenuTemplate() { exports['default'] = TextTrackSettings; module.exports = exports['default']; -},{"../component":48,"../utils/events.js":108,"../utils/fn.js":109,"../utils/log.js":112,"global/window":2,"safe-json-parse/tuple":45}],103:[function(_dereq_,module,exports){ +},{"../component":58,"../utils/events.js":119,"../utils/fn.js":120,"../utils/log.js":123,"global/window":2,"safe-json-parse/tuple":48}],114:[function(_dereq_,module,exports){ /** * @file text-track.js */ @@ -14353,9 +15195,11 @@ var _globalWindow = _dereq_('global/window'); var _globalWindow2 = _interopRequireDefault(_globalWindow); -var _xhrJs = _dereq_('../xhr.js'); +var _utilsUrlJs = _dereq_('../utils/url.js'); -var _xhrJs2 = _interopRequireDefault(_xhrJs); +var _xhr = _dereq_('xhr'); + +var _xhr2 = _interopRequireDefault(_xhr); /* * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack @@ -14600,7 +15444,16 @@ var parseCues = function parseCues(srcContent, track) { }; var loadTrack = function loadTrack(src, track) { - _xhrJs2['default'](src, Fn.bind(this, function (err, response, responseBody) { + var opts = { + uri: src + }; + + var crossOrigin = _utilsUrlJs.isCrossOrigin(src); + if (crossOrigin) { + opts.cors = crossOrigin; + } + + _xhr2['default'](opts, Fn.bind(this, function (err, response, responseBody) { if (err) { return _utilsLogJs2['default'].error(err, response); } @@ -14647,7 +15500,7 @@ var indexOf = function indexOf(searchElement, fromIndex) { exports['default'] = TextTrack; module.exports = exports['default']; -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"../utils/guid.js":111,"../utils/log.js":112,"../xhr.js":119,"./text-track-cue-list":97,"./text-track-enums":99,"global/document":1,"global/window":2}],104:[function(_dereq_,module,exports){ +},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"../utils/guid.js":122,"../utils/log.js":123,"../utils/url.js":128,"./text-track-cue-list":108,"./text-track-enums":110,"global/document":1,"global/window":2,"xhr":50}],115:[function(_dereq_,module,exports){ /** * @file browser.js */ @@ -14736,7 +15589,7 @@ exports.TOUCH_ENABLED = TOUCH_ENABLED; var BACKGROUND_SIZE_SUPPORTED = ('backgroundSize' in _globalDocument2['default'].createElement('video').style); exports.BACKGROUND_SIZE_SUPPORTED = BACKGROUND_SIZE_SUPPORTED; -},{"global/document":1,"global/window":2}],105:[function(_dereq_,module,exports){ +},{"global/document":1,"global/window":2}],116:[function(_dereq_,module,exports){ /** * @file buffer.js */ @@ -14785,7 +15638,7 @@ function bufferedPercent(buffered, duration) { return bufferedDuration / duration; } -},{"./time-ranges.js":115}],106:[function(_dereq_,module,exports){ +},{"./time-ranges.js":126}],117:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -14856,7 +15709,7 @@ exports['default'] = function (target) { module.exports = exports['default']; -},{"./log.js":112}],107:[function(_dereq_,module,exports){ +},{"./log.js":123}],118:[function(_dereq_,module,exports){ /** * @file dom.js */ @@ -14877,11 +15730,16 @@ exports.getElAttributes = getElAttributes; exports.blockTextSelection = blockTextSelection; exports.unblockTextSelection = unblockTextSelection; exports.findElPosition = findElPosition; +exports.getPointerPosition = getPointerPosition; + +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 ', '.']); 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; } + var _globalDocument = _dereq_('global/document'); var _globalDocument2 = _interopRequireDefault(_globalDocument); @@ -14894,6 +15752,14 @@ var _guidJs = _dereq_('./guid.js'); var Guid = _interopRequireWildcard(_guidJs); +var _logJs = _dereq_('./log.js'); + +var _logJs2 = _interopRequireDefault(_logJs); + +var _tsml = _dereq_('tsml'); + +var _tsml2 = _interopRequireDefault(_tsml); + /** * Shorthand for document.getElementById() * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs. @@ -14923,27 +15789,29 @@ function getEl(id) { 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 = _globalDocument2['default'].createElement(tagName); Object.getOwnPropertyNames(properties).forEach(function (propName) { var val = properties[propName]; - // Not remembering why we were checking for dash - // but using setAttribute means you have to use getAttribute - - // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin. - // The additional check for "role" is because the default method for adding attributes does not - // add the attribute "role". My guess is because it's not a valid attribute in some namespaces, although - // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs. - // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem. + // 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') { + _logJs2['default'].warn(_tsml2['default'](_templateObject, propName, val)); el.setAttribute(propName, val); } else { el[propName] = val; } }); + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + var val = attributes[attrName]; + el.setAttribute(attrName, attributes[attrName]); + }); + return el; } @@ -15241,7 +16109,40 @@ function findElPosition(el) { }; } -},{"./guid.js":111,"global/document":1,"global/window":2}],108:[function(_dereq_,module,exports){ +/** + * 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. + * + * @param {Element} el Element on which to get the pointer position on + * @param {Event} event Event object + * @return {Object=} position This object will have x and y coordinates corresponding to the mouse position + * @metho getPointerPosition + */ + +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; +} + +},{"./guid.js":122,"./log.js":123,"global/document":1,"global/window":2,"tsml":49}],119:[function(_dereq_,module,exports){ /** * @file events.js * @@ -15516,7 +16417,8 @@ function fixEvent(event) { 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 - if (key !== 'layerX' && key !== 'layerY' && key !== '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)) { @@ -15541,6 +16443,7 @@ function fixEvent(event) { old.preventDefault(); } event.returnValue = false; + old.returnValue = false; event.defaultPrevented = true; }; @@ -15552,6 +16455,7 @@ function fixEvent(event) { old.stopPropagation(); } event.cancelBubble = true; + old.cancelBubble = true; event.isPropagationStopped = returnTrue; }; @@ -15646,7 +16550,7 @@ function _handleMultipleEvents(fn, elem, types, callback) { }); } -},{"./dom.js":107,"./guid.js":111,"global/document":1,"global/window":2}],109:[function(_dereq_,module,exports){ +},{"./dom.js":118,"./guid.js":122,"global/document":1,"global/window":2}],120:[function(_dereq_,module,exports){ /** * @file fn.js */ @@ -15690,7 +16594,7 @@ var bind = function bind(context, fn, uid) { }; exports.bind = bind; -},{"./guid.js":111}],110:[function(_dereq_,module,exports){ +},{"./guid.js":122}],121:[function(_dereq_,module,exports){ /** * @file format-time.js * @@ -15740,7 +16644,7 @@ function formatTime(seconds) { exports['default'] = formatTime; module.exports = exports['default']; -},{}],111:[function(_dereq_,module,exports){ +},{}],122:[function(_dereq_,module,exports){ /** * @file guid.js * @@ -15757,7 +16661,7 @@ var _guid = 1; /** * Get the next unique ID * - * @return {String} + * @return {String} * @function newGUID */ @@ -15765,7 +16669,7 @@ function newGUID() { return _guid++; } -},{}],112:[function(_dereq_,module,exports){ +},{}],123:[function(_dereq_,module,exports){ /** * @file log.js */ @@ -15855,7 +16759,7 @@ function _logType(type, args) { exports['default'] = log; module.exports = exports['default']; -},{"global/window":2}],113:[function(_dereq_,module,exports){ +},{"global/window":2}],124:[function(_dereq_,module,exports){ /** * @file merge-options.js */ @@ -15926,7 +16830,7 @@ function mergeOptions() { module.exports = exports['default']; -},{"lodash-compat/object/merge":37}],114:[function(_dereq_,module,exports){ +},{"lodash-compat/object/merge":40}],125:[function(_dereq_,module,exports){ 'use strict'; exports.__esModule = true; @@ -15954,7 +16858,18 @@ var setTextContent = function setTextContent(el, content) { }; exports.setTextContent = setTextContent; -},{"global/document":1}],115:[function(_dereq_,module,exports){ +},{"global/document":1}],126:[function(_dereq_,module,exports){ +'use strict'; + +exports.__esModule = true; +exports.createTimeRanges = createTimeRanges; + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _logJs = _dereq_('./log.js'); + +var _logJs2 = _interopRequireDefault(_logJs); + /** * @file time-ranges.js * @@ -15963,19 +16878,25 @@ exports.setTextContent = setTextContent; * return the start and end times for a range * TimeRanges are returned by the buffered() method * - * @param {Number} start Start time in seconds - * @param {Number} end End time in seconds - * @return {Object} Fake TimeRange object + * @param {(Number|Array)} Start of a single range or an array of ranges + * @param {Number} End of a single range * @private - * @method createTimeRange + * @method createTimeRanges */ -'use strict'; -exports.__esModule = true; -exports.createTimeRange = createTimeRange; +function createTimeRanges(start, end) { + if (Array.isArray(start)) { + return createTimeRangesObj(start); + } else if (start === undefined || end === undefined) { + return createTimeRangesObj(); + } + return createTimeRangesObj([[start, end]]); +} -function createTimeRange(_start, _end) { - if (_start === undefined && _end === undefined) { +exports.createTimeRange = createTimeRanges; + +function createTimeRangesObj(ranges) { + if (ranges === undefined || ranges.length === 0) { return { length: 0, start: function start() { @@ -15987,17 +16908,28 @@ function createTimeRange(_start, _end) { }; } return { - length: 1, - start: function start() { - return _start; - }, - end: function end() { - return _end; - } + length: ranges.length, + start: getRange.bind(null, 'start', 0, ranges), + end: getRange.bind(null, 'end', 1, ranges) }; } -},{}],116:[function(_dereq_,module,exports){ +function getRange(fnName, valueIndex, ranges, rangeIndex) { + if (rangeIndex === undefined) { + _logJs2['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 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 + ').'); + } +} + +},{"./log.js":123}],127:[function(_dereq_,module,exports){ /** * @file to-title-case.js * @@ -16018,7 +16950,7 @@ function toTitleCase(string) { exports["default"] = toTitleCase; module.exports = exports["default"]; -},{}],117:[function(_dereq_,module,exports){ +},{}],128:[function(_dereq_,module,exports){ /** * @file url.js */ @@ -16032,6 +16964,10 @@ var _globalDocument = _dereq_('global/document'); var _globalDocument2 = _interopRequireDefault(_globalDocument); +var _globalWindow = _dereq_('global/window'); + +var _globalWindow2 = _interopRequireDefault(_globalWindow); + /** * Resolve and parse the elements of a URL * @@ -16126,9 +17062,31 @@ var getFileExtension = function getFileExtension(path) { return ''; }; -exports.getFileExtension = getFileExtension; -},{"global/document":1}],118:[function(_dereq_,module,exports){ +exports.getFileExtension = getFileExtension; +/** + * 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 = function isCrossOrigin(url) { + var urlInfo = parseUrl(url); + var winLoc = _globalWindow2['default'].location; + + // 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; +}; +exports.isCrossOrigin = isCrossOrigin; + +},{"global/document":1,"global/window":2}],129:[function(_dereq_,module,exports){ /** * @file video.js */ @@ -16180,6 +17138,10 @@ var _utilsFnJs = _dereq_('./utils/fn.js'); var Fn = _interopRequireWildcard(_utilsFnJs); +var _tracksTextTrackJs = _dereq_('./tracks/text-track.js'); + +var _tracksTextTrackJs2 = _interopRequireDefault(_tracksTextTrackJs); + var _objectAssign = _dereq_('object.assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); @@ -16194,10 +17156,6 @@ var _utilsLogJs = _dereq_('./utils/log.js'); var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); -var _xhrJs = _dereq_('./xhr.js'); - -var _xhrJs2 = _interopRequireDefault(_xhrJs); - var _utilsDomJs = _dereq_('./utils/dom.js'); var Dom = _interopRequireWildcard(_utilsDomJs); @@ -16210,9 +17168,9 @@ var _utilsUrlJs = _dereq_('./utils/url.js'); var Url = _interopRequireWildcard(_utilsUrlJs); -var _extendsJs = _dereq_('./extends.js'); +var _extendJs = _dereq_('./extend.js'); -var _extendsJs2 = _interopRequireDefault(_extendsJs); +var _extendJs2 = _interopRequireDefault(_extendJs); var _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge'); @@ -16222,6 +17180,10 @@ var _utilsCreateDeprecationProxyJs = _dereq_('./utils/create-deprecation-proxy.j var _utilsCreateDeprecationProxyJs2 = _interopRequireDefault(_utilsCreateDeprecationProxyJs); +var _xhr = _dereq_('xhr'); + +var _xhr2 = _interopRequireDefault(_xhr); + // Include the built-in techs var _techHtml5Js = _dereq_('./tech/html5.js'); @@ -16302,10 +17264,13 @@ var videojs = function videojs(id, options, ready) { }; // Add default styles -var style = stylesheet.createStyleElement('vjs-styles-defaults'); -var head = _globalDocument2['default'].querySelector('head'); -head.insertBefore(style, head.firstChild); -stylesheet.setTextContent(style, '\n .video-js {\n width: 300px;\n height: 150px;\n'); +var style = _globalDocument2['default'].querySelector('.vjs-styles-defaults'); +if (!style) { + style = stylesheet.createStyleElement('vjs-styles-defaults'); + var head = _globalDocument2['default'].querySelector('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) @@ -16316,7 +17281,7 @@ setup.autoSetupTimeout(1, videojs); * * @type {String} */ -videojs.VERSION = '5.0.0-rc.72'; +videojs.VERSION = '5.0.0'; /** * The global options object. These are the settings that take effect @@ -16378,8 +17343,8 @@ videojs.getComponent = _component2['default'].getComponent; * ```js * // Get a component to subclass * var VjsButton = videojs.getComponent('Button'); - * // Subclass the component (see 'extends' doc for more info) - * var MySpecialButton = videojs.extends(VjsButton, {}); + * // 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 @@ -16416,7 +17381,7 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; /** * Subclass an existing class - * Mimics ES6 subclassing with the `extends` keyword + * Mimics ES6 subclassing with the `extend` keyword * ```js * // Create a basic javascript 'class' * function MyClass(name){ @@ -16429,7 +17394,7 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; * }; * // Subclass the exisitng class and change the name * // when initializing - * var MySubClass = videojs.extends(MyClass, { + * var MySubClass = videojs.extend(MyClass, { * constructor: function(name) { * // Call the super class constructor for the subclass * MyClass.call(this, name) @@ -16445,9 +17410,9 @@ videojs.TOUCH_ENABLED = browser.TOUCH_ENABLED; * Optionally including a `constructor` function * @return {Function} The newly created subclass * @mixes videojs - * @method extends + * @method extend */ -videojs['extends'] = _extendsJs2['default']; +videojs.extend = _extendJs2['default']; /** * Merge two options objects recursively @@ -16577,12 +17542,12 @@ videojs.log = _utilsLogJs2['default']; /** * Creates an emulated TimeRange object. * - * @param {Number} start Start time in seconds + * @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 = _utilsTimeRangesJs.createTimeRange; +videojs.createTimeRange = videojs.createTimeRanges = _utilsTimeRangesJs.createTimeRanges; /** * Format seconds as a time string, H:MM:SS or M:SS @@ -16596,37 +17561,6 @@ videojs.createTimeRange = _utilsTimeRangesJs.createTimeRange; */ videojs.formatTime = _utilsFormatTimeJs2['default']; -/** - * Simple http request for retrieving external files (e.g. text tracks) - * - * ##### Example - * - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * - * - * API is modeled after the Raynos/xhr. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @returns {Object} The request - */ -videojs.xhr = _xhrJs2['default']; - /** * Resolve and parse the elements of a URL * @@ -16636,6 +17570,15 @@ videojs.xhr = _xhrJs2['default']; */ 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. * @@ -16687,6 +17630,36 @@ videojs.off = Events.off; */ 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 = _tracksTextTrackJs2['default']; + // REMOVING: We probably should add this to the migration plugin // // Expose but deprecate the window[componentName] method for accessing components // Object.getOwnPropertyNames(Component.components).forEach(function(name){ @@ -16724,197 +17697,7 @@ if (typeof define === 'function' && define['amd']) { exports['default'] = videojs; module.exports = exports['default']; -},{"../../src/js/utils/merge-options.js":113,"./component":48,"./event-target":79,"./extends.js":80,"./player":87,"./plugins.js":88,"./setup":90,"./tech/flash.js":93,"./tech/html5.js":94,"./utils/browser.js":104,"./utils/create-deprecation-proxy.js":106,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/format-time.js":110,"./utils/log.js":112,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/url.js":117,"./xhr.js":119,"global/document":1,"lodash-compat/object/merge":37,"object.assign":40}],119:[function(_dereq_,module,exports){ -/** - * @file xhr.js - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsUrlJs = _dereq_('./utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/* - * Simple http request for retrieving external files (e.g. text tracks) - * ##### Example - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * ///////////// - * API is modeled after the Raynos/xhr, which we hope to use after - * getting browserify implemented. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @return {Object} The request - * @method xhr - */ -var xhr = function xhr(options, callback) { - var abortTimeout = undefined; - - // If options is a string it's the url - if (typeof options === 'string') { - options = { - uri: options - }; - } - - // Merge with default options - options = _utilsMergeOptionsJs2['default']({ - method: 'GET', - timeout: 45 * 1000 - }, options); - - callback = callback || function () {}; - - var XHR = _globalWindow2['default'].XMLHttpRequest; - - if (typeof XHR === 'undefined') { - // Shim XMLHttpRequest for older IEs - XHR = function () { - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.6.0'); - } catch (e) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.3.0'); - } catch (f) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP'); - } catch (g) {} - throw new Error('This browser does not support XMLHttpRequest.'); - }; - } - - var request = new XHR(); - // Store a reference to the url on the request instance - request.uri = options.uri; - - var urlInfo = Url.parseUrl(options.uri); - var winLoc = _globalWindow2['default'].location; - - var successHandler = function successHandler() { - _globalWindow2['default'].clearTimeout(abortTimeout); - callback(null, request, request.response || request.responseText); - }; - - var errorHandler = function errorHandler(err) { - _globalWindow2['default'].clearTimeout(abortTimeout); - - if (!err || typeof err === 'string') { - err = new Error(err || 'XHR Failed with a response of: ' + (request && (request.response || request.responseText))); - } - - callback(err, request); - }; - - // Check if url is for another domain/origin - // IE8 doesn't know location.origin, so we won't rely on it here - var crossOrigin = urlInfo.protocol + urlInfo.host !== winLoc.protocol + winLoc.host; - - // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available - // 'withCredentials' is only available in XMLHTTPRequest2 - // Also XDomainRequest has a lot of gotchas, so only use if cross domain - if (crossOrigin && _globalWindow2['default'].XDomainRequest && !('withCredentials' in request)) { - request = new _globalWindow2['default'].XDomainRequest(); - request.onload = successHandler; - request.onerror = errorHandler; - // These blank handlers need to be set to fix ie9 - // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/ - request.onprogress = function () {}; - request.ontimeout = function () {}; - - // XMLHTTPRequest - } else { - (function () { - var fileUrl = urlInfo.protocol === 'file:' || winLoc.protocol === 'file:'; - - request.onreadystatechange = function () { - if (request.readyState === 4) { - if (request.timedout) { - return errorHandler('timeout'); - } - - if (request.status === 200 || fileUrl && request.status === 0) { - successHandler(); - } else { - errorHandler(); - } - } - }; - - if (options.timeout) { - abortTimeout = _globalWindow2['default'].setTimeout(function () { - if (request.readyState !== 4) { - request.timedout = true; - request.abort(); - } - }, options.timeout); - } - })(); - } - - // open the connection - try { - // Third arg is async, or ignored by XDomainRequest - request.open(options.method || 'GET', options.uri, true); - } catch (err) { - return errorHandler(err); - } - - // withCredentials only supported by XMLHttpRequest2 - if (options.withCredentials) { - request.withCredentials = true; - } - - if (options.responseType) { - request.responseType = options.responseType; - } - - // send the request - try { - request.send(); - } catch (err) { - return errorHandler(err); - } - - return request; -}; - -exports['default'] = xhr; -module.exports = exports['default']; - -},{"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/url.js":117,"global/window":2}]},{},[118])(118) +},{"../../src/js/utils/merge-options.js":124,"./component":58,"./event-target":90,"./extend.js":91,"./player":98,"./plugins.js":99,"./setup":101,"./tech/flash.js":104,"./tech/html5.js":105,"./tracks/text-track.js":114,"./utils/browser.js":115,"./utils/create-deprecation-proxy.js":117,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/format-time.js":121,"./utils/log.js":123,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/url.js":128,"global/document":1,"lodash-compat/object/merge":40,"object.assign":43,"xhr":50}]},{},[129])(129) }); diff --git a/node_modules/video.js/dist/video.js.map b/node_modules/video.js/dist/video.js.map index 3347e1f..fbce63a 100644 --- a/node_modules/video.js/dist/video.js.map +++ b/node_modules/video.js/dist/video.js.map @@ -5,7 +5,10 @@ "node_modules/global/document.js", "node_modules/global/window.js", "node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js", + "node_modules/lodash-compat/date/now.js", + "node_modules/lodash-compat/function/debounce.js", "node_modules/lodash-compat/function/restParam.js", + "node_modules/lodash-compat/function/throttle.js", "node_modules/lodash-compat/internal/arrayCopy.js", "node_modules/lodash-compat/internal/arrayEach.js", "node_modules/lodash-compat/internal/baseCopy.js", @@ -47,6 +50,13 @@ "node_modules/object.assign/node_modules/object-keys/index.js", "node_modules/object.assign/node_modules/object-keys/isArguments.js", "node_modules/safe-json-parse/tuple.js", + "node_modules/tsml/tsml.js", + "node_modules/xhr/index.js", + "node_modules/xhr/node_modules/once/once.js", + "node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js", + "node_modules/xhr/node_modules/parse-headers/node_modules/for-each/node_modules/is-function/index.js", + "node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js", + "node_modules/xhr/node_modules/parse-headers/parse-headers.js", "src/js/big-play-button.js", "src/js/button.js", "src/js/component.js", @@ -58,6 +68,7 @@ "src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js", "src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js", "src/js/control-bar/progress-control/load-progress-bar.js", + "src/js/control-bar/progress-control/mouse-time-display.js", "src/js/control-bar/progress-control/play-progress-bar.js", "src/js/control-bar/progress-control/progress-control.js", "src/js/control-bar/progress-control/seek-bar.js", @@ -81,7 +92,7 @@ "src/js/control-bar/volume-menu-button.js", "src/js/error-display.js", "src/js/event-target.js", - "src/js/extends.js", + "src/js/extend.js", "src/js/fullscreen-api.js", "src/js/loading-spinner.js", "src/js/media-error.js", @@ -119,11 +130,10 @@ "src/js/utils/time-ranges.js", "src/js/utils/to-title-case.js", "src/js/utils/url.js", - "src/js/video.js", - "src/js/xhr.js" + "src/js/video.js" ], "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;A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", + "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;wBC3BmB,aAAa;;;;2BACV,gBAAgB;;;;;;;;;;;;;;IAWhC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,MAAM,EAAE,OAAO,EAAE;0BAFzB,aAAa;;AAGf,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", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ @@ -131,7 +141,10 @@ "(function (global){\nvar topLevel = typeof global !== 'undefined' ? global :\n typeof window !== 'undefined' ? window : {}\nvar minDoc = require('min-document');\n\nif (typeof document !== 'undefined') {\n module.exports = document;\n} else {\n var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];\n\n if (!doccy) {\n doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;\n }\n\n module.exports = doccy;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvZG9jdW1lbnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgdG9wTGV2ZWwgPSB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6XG4gICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiB7fVxudmFyIG1pbkRvYyA9IHJlcXVpcmUoJ21pbi1kb2N1bWVudCcpO1xuXG5pZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQ7XG59IGVsc2Uge1xuICAgIHZhciBkb2NjeSA9IHRvcExldmVsWydfX0dMT0JBTF9ET0NVTUVOVF9DQUNIRUA0J107XG5cbiAgICBpZiAoIWRvY2N5KSB7XG4gICAgICAgIGRvY2N5ID0gdG9wTGV2ZWxbJ19fR0xPQkFMX0RPQ1VNRU5UX0NBQ0hFQDQnXSA9IG1pbkRvYztcbiAgICB9XG5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY2N5O1xufVxuIl19", "(function (global){\nif (typeof window !== \"undefined\") {\n module.exports = window;\n} else if (typeof global !== \"undefined\") {\n module.exports = global;\n} else if (typeof self !== \"undefined\"){\n module.exports = self;\n} else {\n module.exports = {};\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHdpbmRvdztcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIil7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzZWxmO1xufSBlbHNlIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xufVxuIl19", null, + "var getNative = require('../internal/getNative');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeNow = getNative(Date, 'now');\n\n/**\n * Gets the number of milliseconds that have elapsed since the Unix epoch\n * (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @category Date\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n return new Date().getTime();\n};\n\nmodule.exports = now;\n", + "var isObject = require('../lang/isObject'),\n now = require('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n}\n\nmodule.exports = debounce;\n", "/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n", + "var debounce = require('./debounce'),\n isObject = require('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n * edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n * 'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (options === false) {\n leading = false;\n } else if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n", "/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n", "/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n", "/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n", @@ -173,79 +186,86 @@ "'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$window: true,\n\t$console: true,\n\t$parent: true,\n\t$self: true,\n\t$frames: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\ttry {\n\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' && !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t} else {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n", "'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n", "module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n", + "function clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}", + "\"use strict\";\nvar window = require(\"global/window\")\nvar once = require(\"once\")\nvar parseHeaders = require(\"parse-headers\")\n\n\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction createXHR(options, callback) {\n function readystatechange() {\n if (xhr.readyState === 4) {\n loadFunc()\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else if (xhr.responseType === \"text\" || !xhr.responseType) {\n body = xhr.responseText || xhr.responseXML\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n callback(err, response, response.body)\n\n }\n\n if (typeof options === \"string\") {\n options = { uri: options }\n }\n\n options = options || {}\n if(typeof callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n callback = once(callback)\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n\n if (\"json\" in options) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n aborted=true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n xhr.send(body)\n\n return xhr\n\n\n}\n\nfunction noop() {}\n", + "module.exports = once\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var called = false\n return function () {\n if (called) return\n called = true\n return fn.apply(this, arguments)\n }\n}\n", + "var isFunction = require('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n if (!isFunction(iterator)) {\n throw new TypeError('iterator must be a function')\n }\n\n if (arguments.length < 3) {\n context = this\n }\n \n if (toString.call(list) === '[object Array]')\n forEachArray(list, iterator, context)\n else if (typeof list === 'string')\n forEachString(list, iterator, context)\n else\n forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n iterator.call(context, array[i], i, array)\n }\n }\n}\n\nfunction forEachString(string, iterator, context) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n iterator.call(context, string.charAt(i), i, string)\n }\n}\n\nfunction forEachObject(object, iterator, context) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n iterator.call(context, object[k], k, object)\n }\n }\n}\n", + "module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n", + "\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n", + "var trim = require('trim')\n , forEach = require('for-each')\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n forEach(\n trim(headers).split('\\n')\n , function (row) {\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n )\n\n return result\n}", "/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n constructor(player, options) {\n super(player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return 'vjs-big-play-button';\n }\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.play();\n }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n", - "/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}) {\n // Add standard Aria and Tabindex info\n props = assign({\n className: this.buildCSSClass(),\n 'role': 'button',\n 'type': 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n tabIndex: 0\n }, props);\n\n let el = super.createEl(tag, props);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick();\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n", - "/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
    \n *
    Button
    \n *
    \n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n * ```js\n * Parent.prototype.options_ = {\n * children: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * children: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * children: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, attributes) {\n return Dom.createEl(tagName, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
    \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
    myButton
    \n * // -> myButton === myComonent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * children: {\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_.children = {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * ```\n * // Or when creating the component\n * ```js\n * var myComp = new MyComponent(player, {\n * children: {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * });\n * ```\n * The children option can also be an Array of child names or\n * child options objects (that also include a 'name' key).\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extends(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n", - "/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'muteToggle',\n 'volumeControl',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n", + "/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}, attributes={}) {\n props = assign({\n className: this.buildCSSClass(),\n tabIndex: 0\n }, props);\n\n // Add standard Aria info\n attributes = assign({\n role: 'button',\n type: 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n }, attributes);\n\n let el = super.createEl(tag, props, attributes);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick(event);\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n", + "/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
    \n *
    Button
    \n *
    \n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n *\n * ```js\n * Parent.prototype.options_ = {\n * optionSet: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} properties An object of properties that should be set\n * @param {Object=} attributes An object of attributes that should be set\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, properties, attributes) {\n return Dom.createEl(tagName, properties, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
    \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
    myButton
    \n * // -> myButton === myComponent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_ = {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * };\n *\n * // Or when creating the component\n * var myComp = new MyComponent(player, {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * });\n * ```\n * The children option can also be an array of\n * child options objects (that also include a 'name' key).\n * This can be used if you have two child components of the\n * same type that need different options.\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * },\n * {\n * name: 'button',\n * someOtherOption: false\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n", + "/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n", "/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n", - "/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n * \n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`,\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n", - "/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n", + "/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.updateShowing();\n this.on(this.player(), 'durationchange', this.updateShowing);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`\n }, {\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateShowing() {\n if (this.player().duration() === Infinity) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n", + "/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n", "/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n }\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n", - "/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech\n && this.player().tech['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n", + "/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech_\n && this.player().tech_['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n", "/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n", "/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n /**\n * Update progress bar\n *\n * @method update\n */\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n", - "/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n", - "/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: {\n 'seekBar': {}\n }\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n", - "/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder',\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: {\n 'loadProgressBar': {},\n 'playProgressBar': {}\n },\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n", - "/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl({\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n", - "/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {Object} props An object of properties \n * @return {Element}\n * @method createEl\n */\n createEl(props) {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n", + "/**\n * @file mouse-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport throttle from 'lodash-compat/function/throttle';\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\nclass MouseTimeDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update(0, 0);\n\n player.on('ready', () => {\n this.on(player.controlBar.progressControl.el(), 'mousemove', throttle(Fn.bind(this, this.handleMouseMove), 25));\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-mouse-display'\n });\n }\n\n handleMouseMove(event) {\n let duration = this.player_.duration();\n let newTime = this.calculateDistance(event) * duration;\n let position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n\n this.update(newTime, position);\n }\n\n update(newTime, position) {\n let time = formatTime(newTime, this.player_.duration());\n\n this.el().style.left = position + 'px';\n this.el().setAttribute('data-current-time', time);\n }\n\n calculateDistance(event) {\n return Dom.getPointerPosition(this.el().parentNode, event).x;\n }\n}\n\nComponent.registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexport default MouseTimeDisplay;\n", + "/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.updateDataAttr();\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress vjs-slider-bar',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n", + "/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\nimport MouseTimeDisplay from './mouse-time-display.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: [\n 'seekBar'\n ]\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n", + "/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport assign from 'object.assign';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder'\n }, {\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: [\n 'loadProgressBar',\n 'mouseTimeDisplay',\n 'playProgressBar'\n ],\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n", + "/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl({\n className: this.buildCSSClass(),\n });\n\n // No-flex/table-cell mode requires there be some content\n // in the cell to fill the remaining space of the table.\n el.innerHTML = ' ';\n return el;\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n", + "/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n", "/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n", - "/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech && this.player().tech['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n", + "/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n", "/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-chapters-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabIndex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n", "/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n", "/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n", "/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-subtitles-button ${super.buildCSSClass()}`;\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n", "/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n", "/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n", - "/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n", - "/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n innerHTML: `${this.localize('Duration Time')} 0:00`, // label the duration time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display \n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n", - "/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n innerHTML: `${this.localize('Remaining Time')} -0:00`, // label the remaining time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n", + "/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n // label the current time for screen reader users\n innerHTML: 'Current Time ' + '0:00',\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n", + "/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n // label the duration time for screen reader users\n innerHTML: `${this.localize('Duration Time')} 0:00`\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display\n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n", + "/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n // label the remaining time for screen reader users\n innerHTML: `${this.localize('Remaining Time')} -0:00`,\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n", "/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
    /
    '\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n", - "/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar',\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: {\n 'volumeLevel': {}\n },\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n", - "/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: {\n 'volumeBar': {}\n }\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n", + "/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar vjs-slider-bar'\n }, {\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: [\n 'volumeLevel'\n ],\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n", + "/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: [\n 'volumeBar'\n ]\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n", "/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n", - "/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using a horizontal\n // slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well, since that will\n // need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n this.addClass('vjs-menu-button');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vc = new VolumeBar(this.player_, this.options_.volumeBar);\n\n vc.on('focus', function() {\n menu.lockShowing();\n });\n vc.on('blur', function() {\n menu.unlockShowing();\n });\n menu.addChild(vc);\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n", + "/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // Default to inline\n if (options.inline === undefined) {\n options.inline = true;\n }\n\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using\n // a horizontal slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well,\n // since that will need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n function updateVisibility() {\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n }\n\n updateVisibility.call(this);\n this.on(player, 'loadstart', updateVisibility);\n\n this.on(this.volumeBar, ['slideractive', 'focus'], function(){\n this.addClass('vjs-slider-active');\n });\n\n this.on(this.volumeBar, ['sliderinactive', 'blur'], function(){\n this.removeClass('vjs-slider-active');\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vb = new VolumeBar(this.player_, this.options_.volumeBar);\n\n menu.addChild(vb);\n\n this.volumeBar = vb;\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n", "/**\n * @file error-display.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n /**\n * Update the error message in localized language\n *\n * @method update\n */\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n", "/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n", - "import log from './utils/log';\n\n/*\n * @file extends.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extends(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendsFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendsFn;\n", + "import log from './utils/log';\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendFn;\n", "/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (let i=0; i 1) {\n this.show();\n }\n }\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n createItems(){}\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n }\n\n /**\n * Focus - Add keyboard functionality to element\n * This function is not needed anymore. Instead, the\n * keyboard functionality is handled by\n * treating the button as triggering a submenu.\n * When the button is pressed, the submenu\n * appears. Pressing the button again makes\n * the submenu disappear.\n *\n * @method handleFocus\n */\n handleFocus() {}\n\n /**\n * Can't turn off list display that we turned\n * on with focus, because list would go away.\n *\n * @method handleBlur\n */\n handleBlur() {}\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n handleClick() {\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n /**\n * Handle key press on menu\n *\n * @param {Object} Key press event\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n", - "/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc \n * @return {Element}\n * @method createEl\n */\n createEl(type, props) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props));\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n", + "/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc\n * @return {Element}\n * @method createEl\n */\n createEl(type, props, attrs) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props), attrs);\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n", "/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n", - "/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive_ = true;\n this.reportUserActivity();\n this.listenForUserActivity();\n\n this.on('fullscreenchange', this.handleFullscreenChange);\n this.on('stageclick', this.handleStageClick);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech) { this.tech.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech\n */\n loadTech(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech) {\n this.unloadTech();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n var techReady = Fn.bind(this, function() {\n this.triggerReady();\n });\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech = new techComponent(techOptions);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech);\n\n this.on(this.tech, 'ready', this.handleTechReady);\n\n // Listen to every HTML5 events and trigger them back on the player for the plugins\n this.on(this.tech, 'loadstart', this.handleTechLoadStart);\n this.on(this.tech, 'waiting', this.handleTechWaiting);\n this.on(this.tech, 'canplay', this.handleTechCanPlay);\n this.on(this.tech, 'canplaythrough', this.handleTechCanPlayThrough);\n this.on(this.tech, 'playing', this.handleTechPlaying);\n this.on(this.tech, 'ended', this.handleTechEnded);\n this.on(this.tech, 'seeking', this.handleTechSeeking);\n this.on(this.tech, 'seeked', this.handleTechSeeked);\n this.on(this.tech, 'play', this.handleTechPlay);\n this.on(this.tech, 'firstplay', this.handleTechFirstPlay);\n this.on(this.tech, 'pause', this.handleTechPause);\n this.on(this.tech, 'progress', this.handleTechProgress);\n this.on(this.tech, 'durationchange', this.handleTechDurationChange);\n this.on(this.tech, 'fullscreenchange', this.handleTechFullscreenChange);\n this.on(this.tech, 'error', this.handleTechError);\n this.on(this.tech, 'suspend', this.handleTechSuspend);\n this.on(this.tech, 'abort', this.handleTechAbort);\n this.on(this.tech, 'emptied', this.handleTechEmptied);\n this.on(this.tech, 'stalled', this.handleTechStalled);\n this.on(this.tech, 'loadedmetadata', this.handleTechLoadedMetaData);\n this.on(this.tech, 'loadeddata', this.handleTechLoadedData);\n this.on(this.tech, 'timeupdate', this.handleTechTimeUpdate);\n this.on(this.tech, 'ratechange', this.handleTechRateChange);\n this.on(this.tech, 'volumechange', this.handleTechVolumeChange);\n this.on(this.tech, 'texttrackchange', this.onTextTrackChange);\n this.on(this.tech, 'loadedmetadata', this.updateStyleEl_);\n\n this.usingNativeControls(this.techGet('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech.ready(techReady, true);\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech\n */\n unloadTech() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech.dispose();\n\n this.tech = false;\n }\n\n /**\n * Add playback technology listeners\n *\n * @method addTechControlsListeners\n */\n addTechControlsListeners() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech, 'mousedown', this.handleTechClick);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech, 'touchstart', this.handleTechTouchStart);\n this.on(this.tech, 'touchmove', this.handleTechTouchMove);\n this.on(this.tech, 'touchend', this.handleTechTouchEnd);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech, 'tap', this.handleTechTap);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners\n */\n removeTechControlsListeners() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech, 'tap', this.handleTechTap);\n this.off(this.tech, 'touchstart', this.handleTechTouchStart);\n this.off(this.tech, 'touchmove', this.handleTechTouchMove);\n this.off(this.tech, 'touchend', this.handleTechTouchEnd);\n this.off(this.tech, 'mousedown', this.handleTechClick);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @private\n * @method handleTechReady\n */\n handleTechReady() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall('setVolume', this.cache_.volume);\n }\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @event loadstart\n */\n handleTechLoadStart() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @event play\n */\n handleTechPlay() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @event waiting\n */\n handleTechWaiting() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplay\n */\n handleTechCanPlay() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplaythrough\n */\n handleTechCanPlayThrough() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event playing\n */\n handleTechPlaying() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @event seeking\n */\n handleTechSeeking() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @event seeked\n */\n handleTechSeeked() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\n handleTechFirstPlay() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @event pause\n */\n handleTechPause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @event progress\n */\n handleTechProgress() {\n this.trigger('progress');\n\n // Add custom event for when source is finished downloading.\n if (this.bufferedPercent() === 1) {\n this.trigger('loadedalldata');\n }\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @event ended\n */\n handleTechEnded() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @event durationchange\n */\n handleTechDurationChange() {\n this.updateDuration();\n this.trigger('durationchange');\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @method handleTechClick\n */\n handleTechClick(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @method handleTechTap\n */\n handleTechTap() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @method handleTechTouchStart\n */\n handleTechTouchStart() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @method handleTechTouchMove\n */\n handleTechTouchMove() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @method handleTechTouchEnd\n */\n handleTechTouchEnd(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Update the duration of the player using the tech\n *\n * @private\n * @method updateDuration\n */\n updateDuration() {\n // Allows for caching value instead of asking player each time.\n // We need to get the techGet response and check for a value so we don't\n // accidentally cause the stack to blow up.\n var duration = this.techGet('duration');\n if (duration) {\n if (duration < 0) {\n duration = Infinity;\n }\n this.duration(duration);\n // Determine if the stream is live and propagate styles down to UI.\n if (duration === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n }\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @event fullscreenchange\n */\n handleFullscreenChange() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick\n */\n handleStageClick() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @method handleTechFullscreenChange\n */\n handleTechFullscreenChange(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @event error\n */\n handleTechError() {\n let error = this.tech.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @event suspend\n */\n handleTechSuspend() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @event abort\n */\n handleTechAbort() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @event emptied\n */\n handleTechEmptied() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @event stalled\n */\n handleTechStalled() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @event loadedmetadata\n */\n handleTechLoadedMetaData() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @event loaddata\n */\n handleTechLoadedData() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @event timeupdate\n */\n handleTechTimeUpdate() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @event ratechange\n */\n handleTechRateChange() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @event volumechange\n */\n handleTechVolumeChange() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @event texttrackchange\n */\n onTextTrackChange() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @method techCall\n */\n techCall(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech && !this.tech.isReady_) {\n this.tech.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @method techGet\n */\n techGet(method) {\n if (this.tech && this.tech.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName} playback technology element.`, e);\n this.tech.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds !== undefined) {\n\n // cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = parseFloat(seconds);\n\n return this;\n }\n\n if (this.cache_.duration === undefined) {\n this.updateDuration();\n }\n\n return this.cache_.duration || 0;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall('setMuted', muted);\n return this;\n }\n return this.techGet('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech.supportsFullScreen()) {\n this.techCall('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech && this.tech['featuresPlaybackRate']) {\n return this.techGet('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech && this.tech['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech && this.tech['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech && this.tech['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech && this.tech['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech && this.tech['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall('initialTime'); },\n // startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n // played: function(){ return this.techCall('played'); },\n // seekable: function(){ return this.techCall('seekable'); },\n // videoTracks: function(){ return this.techCall('videoTracks'); },\n // audioTracks: function(){ return this.techCall('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n // mediaGroup: function(){ return this.techCall('mediaGroup'); },\n // controller: function(){ return this.techCall('controller'); },\n // defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n // TODO\n // currentSrcList: the array of sources including other formats and bitrates\n // playList: array of source lists in order of playback\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i\n * \n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive(true);\n this.reportUserActivity();\n this.listenForUserActivity_();\n\n this.on('fullscreenchange', this.handleFullscreenChange_);\n this.on('stageclick', this.handleStageClick_);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech_) { this.tech_.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech_\n * @private\n */\n loadTech_(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech_) {\n this.unloadTech_();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName_ = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech_ = new techComponent(techOptions);\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n // Listen to all HTML5-defined events and trigger them on the player\n this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n this.on(this.tech_, 'playing', this.handleTechPlaying_);\n this.on(this.tech_, 'ended', this.handleTechEnded_);\n this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n this.on(this.tech_, 'play', this.handleTechPlay_);\n this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n this.on(this.tech_, 'pause', this.handleTechPause_);\n this.on(this.tech_, 'progress', this.handleTechProgress_);\n this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n this.on(this.tech_, 'error', this.handleTechError_);\n this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n this.on(this.tech_, 'abort', this.handleTechAbort_);\n this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n this.on(this.tech_, 'stalled', this.handleTechStalled_);\n this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n this.usingNativeControls(this.techGet_('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners_();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech_.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech_\n * @private\n */\n unloadTech_() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech_.dispose();\n\n this.tech_ = false;\n }\n\n /**\n * Set up click and touch listeners for the playback element\n *\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold\n * on any controls will still keep the user active\n *\n * @private\n * @method addTechControlsListeners_\n */\n addTechControlsListeners_() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners_();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech_, 'tap', this.handleTechTap_);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners_\n * @private\n */\n removeTechControlsListeners_() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech_, 'tap', this.handleTechTap_);\n this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n this.off(this.tech_, 'mousedown', this.handleTechClick_);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @method handleTechReady_\n * @private\n */\n handleTechReady_() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall_('setVolume', this.cache_.volume);\n }\n\n // Look if the tech found a higher resolution poster while loading\n this.handleTechPosterChange_();\n\n // Update the duration if available\n this.handleTechDurationChange_();\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @private\n * @method handleTechLoadStart_\n */\n handleTechLoadStart_() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @private\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @private\n * @method handleTechPlay_\n */\n handleTechPlay_() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @private\n * @method handleTechWaiting_\n */\n handleTechWaiting_() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlay_\n */\n handleTechCanPlay_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlayThrough_\n */\n handleTechCanPlayThrough_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechPlaying_\n */\n handleTechPlaying_() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @private\n * @method handleTechSeeking_\n */\n handleTechSeeking_() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @private\n * @method handleTechSeeked_\n */\n handleTechSeeked_() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @private\n * @method handleTechFirstPlay_\n */\n handleTechFirstPlay_() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @private\n * @method handleTechPause_\n */\n handleTechPause_() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @private\n * @method handleTechProgress_\n */\n handleTechProgress_() {\n this.trigger('progress');\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @private\n * @method handleTechEnded_\n */\n handleTechEnded_() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @private\n * @method handleTechDurationChange_\n */\n handleTechDurationChange_() {\n this.duration(this.techGet_('duration'));\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @private\n * @method handleTechClick_\n */\n handleTechClick_(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @private\n * @method handleTechTap_\n */\n handleTechTap_() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @private\n * @method handleTechTouchStart_\n */\n handleTechTouchStart_() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @private\n * @method handleTechTouchMove_\n */\n handleTechTouchMove_() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @private\n * @method handleTechTouchEnd_\n */\n handleTechTouchEnd_(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @private\n * @method handleFullscreenChange_\n */\n handleFullscreenChange_() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick_\n */\n handleStageClick_() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @private\n * @method handleTechFullscreenChange_\n */\n handleTechFullscreenChange_(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @private\n * @method handleTechError_\n */\n handleTechError_() {\n let error = this.tech_.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @private\n * @method handleTechSuspend_\n */\n handleTechSuspend_() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @private\n * @method handleTechAbort_\n */\n handleTechAbort_() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @private\n * @method handleTechEmptied_\n */\n handleTechEmptied_() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @private\n * @method handleTechStalled_\n */\n handleTechStalled_() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @private\n * @method handleTechLoadedMetaData_\n */\n handleTechLoadedMetaData_() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @private\n * @method handleTechLoadedData_\n */\n handleTechLoadedData_() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @private\n * @method handleTechTimeUpdate_\n */\n handleTechTimeUpdate_() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @private\n * @method handleTechRateChange_\n */\n handleTechRateChange_() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @private\n * @method handleTechVolumeChange_\n */\n handleTechVolumeChange_() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @private\n * @method handleTechTextTrackChange_\n */\n handleTechTextTrackChange_() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @private\n * @method techCall_\n */\n techCall_(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech_ && !this.tech_.isReady_) {\n this.tech_.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech_[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @private\n * @method techGet_\n */\n techGet_(method) {\n if (this.tech_ && this.tech_.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech_[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech_[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n this.tech_.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall_('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall_('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet_('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall_('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds === undefined) {\n return this.cache_.duration || 0;\n }\n\n seconds = parseFloat(seconds) || 0;\n\n // Standardize on Inifity for signaling video is live\n if (seconds < 0) {\n seconds = Infinity;\n }\n\n if (seconds !== this.cache_.duration) {\n // Cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = seconds;\n\n if (seconds === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n\n this.trigger('durationchange');\n }\n\n return this;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet_('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall_('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet_('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall_('setMuted', muted);\n return this;\n }\n return this.techGet_('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet_('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech_.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall_('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech_.supportsFullScreen()) {\n this.techCall_('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall_('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n return this.techGet_('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet_('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet_('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet_ directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech_ && this.tech_['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech_ && this.tech_['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall_('initialTime'); },\n // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n // played: function(){ return this.techCall_('played'); },\n // videoTracks: function(){ return this.techCall_('videoTracks'); },\n // audioTracks: function(){ return this.techCall_('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n", - "/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) { this.el_.src = src; }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){ this.el_.load(); }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n", - "/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i 0) {\n this.trigger('loadstart');\n }\n // Allow the tech ready event to handle synchronisity\n }, true);\n }\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n // Manually trigger progress events based on changes to the buffered amount\n // Many flash players and older HTML5 browsers don't send progress or progress-like events\n /**\n * Turn on progress events\n *\n * @method manualProgressOn\n */\n manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.one('ready', this.trackProgress);\n }\n\n /**\n * Turn off progress events\n *\n * @method manualProgressOff\n */\n manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n }\n\n /**\n * Track progress\n *\n * @method trackProgress\n */\n trackProgress() {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(Fn.bind(this, function(){\n // Don't trigger unless buffered amount is greater than last time\n\n let numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n }\n\n /**\n * Update duration\n *\n * @method onDurationChange\n */\n onDurationChange() {\n this.duration_ = this.duration();\n }\n\n /**\n * Create and get TimeRange object for buffering\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n return createTimeRange(0, 0);\n }\n\n /**\n * Get buffered percent\n *\n * @return {Number}\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration_);\n }\n\n /**\n * Stops tracking progress by clearing progress interval\n *\n * @method stopTrackingProgress\n */\n stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n }\n\n /*! Time Tracking -------------------------------------------------------------- */\n /**\n * Set event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOn\n */\n manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Remove event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOff\n */\n manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Tracks current time\n *\n * @method trackCurrentTime\n */\n trackCurrentTime() {\n if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n this.currentTimeInterval = this.setInterval(function(){\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }\n\n /**\n * Turn off play progress tracking (when paused or dragging)\n *\n * @method stopTrackingCurrentTime\n */\n stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval);\n\n // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }\n\n /**\n * Turn off any manual progress or timeupdate tracking\n *\n * @method dispose\n */\n dispose() {\n // clear out text tracks because we can't reuse them between techs\n let textTracks = this.textTracks();\n\n if (textTracks) {\n let i = textTracks.length;\n while(i--) {\n this.removeRemoteTextTrack(textTracks[i]);\n }\n }\n\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) { this.manualProgressOff(); }\n\n if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n super.dispose();\n }\n\n /**\n * When invoked without an argument, returns a MediaError object\n * representing the current error state of the player or null if\n * there is no error. When invoked with an argument, set the current\n * error state of the player.\n * @param {MediaError=} err Optional an error object\n * @return {MediaError} the current error object or null\n * @method error\n */\n error(err) {\n if (err !== undefined) {\n if (err instanceof MediaError) {\n this.error_ = err;\n } else {\n this.error_ = new MediaError(err);\n }\n this.trigger('error');\n }\n return this.error_;\n }\n\n /**\n * Return the time ranges that have been played through for the\n * current source. This implementation is incomplete. It does not\n * track the played time ranges, only whether the source has played\n * at all or not.\n * @return {TimeRangeObject} a single time range if this video has\n * played or an empty set of ranges if not.\n * @method played\n */\n played() {\n if (this.hasStarted_) {\n return createTimeRange(0, 0);\n }\n return createTimeRange();\n }\n\n /**\n * Set current time\n *\n * @method setCurrentTime\n */\n setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n }\n\n /**\n * Initialize texttrack listeners\n *\n * @method initTextTrackListeners\n */\n initTextTrackListeners() {\n let textTrackListChanges = Fn.bind(this, function() {\n this.trigger('texttrackchange');\n });\n\n let tracks = this.textTracks();\n\n if (!tracks) return;\n\n tracks.addEventListener('removetrack', textTrackListChanges);\n tracks.addEventListener('addtrack', textTrackListChanges);\n\n this.on('dispose', Fn.bind(this, function() {\n tracks.removeEventListener('removetrack', textTrackListChanges);\n tracks.removeEventListener('addtrack', textTrackListChanges);\n }));\n }\n\n /**\n * Emulate texttracks\n *\n * @method emulateTextTracks\n */\n emulateTextTracks() {\n if (!window['WebVTT'] && this.el().parentNode != null) {\n let script = document.createElement('script');\n script.src = this.options_['vtt.js'] || '../node_modules/vtt.js/dist/vtt.js';\n this.el().parentNode.appendChild(script);\n window['WebVTT'] = true;\n }\n\n let tracks = this.textTracks();\n if (!tracks) {\n return;\n }\n\n let textTracksChanges = Fn.bind(this, function() {\n let updateDisplay = () => this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n", + "/**\n * @file flash.js\n * VideoJS-SWF - Custom Flash Player with HTML5-ish API\n * https://github.com/zencoder/video-js-swf\n * Not using setupTriggers. Using global onEvent func to distribute events\n */\n\nimport Tech from './tech';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport { createTimeRange } from '../utils/time-ranges.js';\nimport FlashRtmpDecorator from './flash-rtmp';\nimport Component from '../component';\nimport window from 'global/window';\nimport assign from 'object.assign';\n\nlet navigator = window.navigator;\n/**\n * Flash Media Controller - Wrapper for fallback SWF API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Flash\n */\nclass Flash extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n // Set the source when ready\n if (options.source) {\n this.ready(function(){\n this.setSource(options.source);\n }, true);\n }\n\n // Having issues with Flash reloading on certain page actions (hide/resize/fullscreen) in certain browsers\n // This allows resetting the playhead when we catch the reload\n if (options.startTime) {\n this.ready(function(){\n this.load();\n this.play();\n this.currentTime(options.startTime);\n }, true);\n }\n\n // Add global window functions that the swf expects\n // A 4.x workflow we weren't able to solve for in 5.0\n // because of the need to hard code these functions\n // into the swf for security reasons\n window.videojs = window.videojs || {};\n window.videojs.Flash = window.videojs.Flash || {};\n window.videojs.Flash.onReady = Flash.onReady;\n window.videojs.Flash.onEvent = Flash.onEvent;\n window.videojs.Flash.onError = Flash.onError;\n\n this.on('seeked', function() {\n this.lastSeekTarget_ = undefined;\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let options = this.options_;\n\n // If video.js is hosted locally you should also set the location\n // for the hosted swf, which should be relative to the page (not video.js)\n // Otherwise this adds a CDN url.\n // The CDN also auto-adds a swf URL for that specific version.\n if (!options.swf) {\n options.swf = '//vjs.zencdn.net/swf/__SWF_VERSION__/video-js.swf';\n }\n\n // Generate ID for swf object\n let objId = options.techId;\n\n // Merge default flashvars with ones passed in to init\n let flashVars = assign({\n\n // SWF Callback Functions\n 'readyFunction': 'videojs.Flash.onReady',\n 'eventProxyFunction': 'videojs.Flash.onEvent',\n 'errorEventProxyFunction': 'videojs.Flash.onError',\n\n // Player Settings\n 'autoplay': options.autoplay,\n 'preload': options.preload,\n 'loop': options.loop,\n 'muted': options.muted\n\n }, options.flashVars);\n\n // Merge default parames with ones passed in\n let params = assign({\n 'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance\n 'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading\n }, options.params);\n\n // Merge default attributes with ones passed in\n let attributes = assign({\n 'id': objId,\n 'name': objId, // Both ID and Name needed or swf to identify itself\n 'class': 'vjs-tech'\n }, options.attributes);\n\n this.el_ = Flash.embed(options.swf, flashVars, params, attributes);\n this.el_.tech = this;\n\n return this.el_;\n }\n\n /**\n * Play for flash tech\n *\n * @method play\n */\n play() {\n if (this.ended()) {\n this.setCurrentTime(0);\n }\n this.el_.vjs_play();\n }\n\n /**\n * Pause for flash tech\n *\n * @method pause\n */\n pause() {\n this.el_.vjs_pause();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.currentSrc();\n }\n\n // Setting src through `src` not `setSrc` will be deprecated\n return this.setSrc(src);\n }\n\n /**\n * Set video\n *\n * @param {Object=} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) {\n // Make sure source URL is absolute.\n src = Url.getAbsoluteURL(src);\n this.el_.vjs_src(src);\n\n // Currently the SWF doesn't autoplay if you load a source later.\n // e.g. Load player w/ no source, wait 2s, set src.\n if (this.autoplay()) {\n var tech = this;\n this.setTimeout(function(){ tech.play(); }, 0);\n }\n }\n\n /**\n * Returns true if the tech is currently seeking.\n * @return {boolean} true if seeking\n */\n seeking() {\n return this.lastSeekTarget_ !== undefined;\n }\n\n /**\n * Set current time\n *\n * @param {Number} time Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(time) {\n let seekable = this.seekable();\n if (seekable.length) {\n // clamp to the current seekable range\n time = time > seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n", + "/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n } else {\n this.handleLateInit_(this.el_);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n // If we're loading the playback object after it has started loading\n // or playing the video (often with autoplay on) then the loadstart event\n // has already fired and we need to fire it manually because many things\n // rely on it.\n handleLateInit_(el) {\n if (el.networkState === 0 || el.networkState === 3) {\n // The video element hasn't started loading the source yet\n // or didn't find a source\n return;\n }\n\n if (el.readyState === 0) {\n // NetworkState is set synchronously BUT loadstart is fired at the\n // end of the current stack, usually before setInterval(fn, 0).\n // So at this point we know loadstart may have already fired or is\n // about to fire, and either way the player hasn't seen it yet.\n // We don't want to fire loadstart prematurely here and cause a\n // double loadstart so we'll wait and see if it happens between now\n // and the next loop, and fire it if not.\n // HOWEVER, we also want to make sure it fires before loadedmetadata\n // which could also happen between now and the next loop, so we'll\n // watch for that also.\n let loadstartFired = false;\n let setLoadstartFired = function() {\n loadstartFired = true;\n };\n this.on('loadstart', setLoadstartFired);\n\n let triggerLoadstart = function() {\n // We did miss the original loadstart. Make sure the player\n // sees loadstart before loadedmetadata\n if (!loadstartFired) {\n this.trigger('loadstart');\n }\n };\n this.on('loadedmetadata', triggerLoadstart);\n\n this.ready(function(){\n this.off('loadstart', setLoadstartFired);\n this.off('loadedmetadata', triggerLoadstart);\n\n if (!loadstartFired) {\n // We did miss the original native loadstart. Fire it now.\n this.trigger('loadstart');\n }\n });\n\n return;\n }\n\n // From here on we know that loadstart already fired and we missed it.\n // The other readyState events aren't as much of a problem if we double\n // them, so not going to go to as much trouble as loadstart to prevent\n // that unless we find reason to.\n let eventsToTrigger = ['loadstart'];\n\n // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n eventsToTrigger.push('loadedmetadata');\n\n // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n if (el.readyState >= 2) {\n eventsToTrigger.push('loadeddata');\n }\n\n // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n if (el.readyState >= 3) {\n eventsToTrigger.push('canplay');\n }\n\n // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n if (el.readyState >= 4) {\n eventsToTrigger.push('canplaythrough');\n }\n\n // We still need to give the player time to add event listeners\n this.ready(function(){\n eventsToTrigger.forEach(function(type){\n this.trigger(type);\n }, this);\n });\n }\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) {\n this.el_.src = src;\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){\n this.el_.load();\n }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n", + "/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n", "/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for(; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n};\n\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n", - "/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech && player.tech['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks \n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks \n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks \n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list \n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n // \n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n", + "/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks\n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks\n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks\n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list\n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n //\n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n", "/**\n * @file text-track-enums.js\n *\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n", "/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n return {\n kind: track.kind,\n label: track.label,\n language: track.language,\n id: track.id,\n inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType,\n mode: track.mode,\n cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n }),\n src: track.src\n };\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n let trackEls = tech.el().querySelectorAll('track');\n\n let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n let json = trackToJson_(trackEl.track);\n json.src = trackEl.src;\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n json.forEach(function(track) {\n let addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach((cue) => addedTrack.addCue(cue));\n }\n });\n\n return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n", "/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventTarget.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n", "/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n /**\n * Get texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @return {Object} \n * @method getValues\n */\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n /**\n * Set texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n /**\n * Restore texttrack settings \n *\n * @method restoreSettings\n */\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n /**\n * Save texttrack settings to local storage \n *\n * @method saveSettings\n */\n saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n /**\n * Update display of texttrack settings \n *\n * @method updateDisplay\n */\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    `;\n\n return template;\n}\n\nexport default TextTrackSettings;\n", - "/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport XHR from '../xhr.js';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n XHR(src, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n", + "/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport { isCrossOrigin } from '../utils/url.js';\nimport XHR from 'xhr';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n let opts = {\n uri: src\n };\n\n let crossOrigin = isCrossOrigin(src);\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n XHR(opts, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n", "/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n", "/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let i = 0; i < buffered.length; i++){\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n", "import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n get(obj, key) {\n return obj[key];\n },\n set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n if (typeof Proxy === 'function') {\n let handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(key => {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function() {\n log.warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return new Proxy(target, handler);\n }\n return target;\n};\n", - "/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // Not remembering why we were checking for dash\n // but using setAttribute means you have to use getAttribute\n\n // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin.\n // The additional check for \"role\" is because the default method for adding attributes does not\n // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs.\n // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n", - "/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n", + "/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\nimport log from './log.js';\nimport tsml from 'tsml';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}, attributes={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n log.warn(tsml`Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set ${propName} to ${val}.`);\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let val = attributes[attrName];\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object=} position This object will have x and y coordinates corresponding to the mouse position\n * @metho getPointerPosition\n */\nexport function getPointerPosition(el, event) {\n let position = {};\n let box = findElPosition(el);\n let boxW = el.offsetWidth;\n let boxH = el.offsetHeight;\n\n let boxY = box.top;\n let boxX = box.left;\n let pageY = event.pageY;\n let pageX = event.pageX;\n\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n pageY = event.changedTouches[0].pageY;\n }\n\n position.y = Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n return position;\n}\n", + "/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' &&\n key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n", "/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n", "/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n", "/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n return _guid++;\n}\n", "/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n", "/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n return !!obj\n && typeof obj === 'object'\n && obj.toString() === '[object Object]'\n && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n let args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n merge.apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n", "import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n let style = document.createElement('style');\n style.className = className;\n\n return style;\n};\n\nexport let setTextContent = function(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n", - "/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @private\n * @method createTimeRange\n */\nexport function createTimeRange(start, end){\n if (start === undefined && end === undefined) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: 1,\n start: function() { return start; },\n end: function() { return end; }\n };\n}\n", + "import log from './log.js';\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {(Number|Array)} Start of a single range or an array of ranges\n * @param {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\nexport function createTimeRanges(start, end){\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n return createTimeRangesObj([[start, end]]);\n}\n\nexport { createTimeRanges as createTimeRange };\n\nfunction createTimeRangesObj(ranges){\n if (ranges === undefined || ranges.length === 0) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex){\n if (rangeIndex === undefined) {\n log.warn(`DEPRECATED: Function '${fnName}' on 'TimeRanges' called without an index argument.`);\n rangeIndex = 0;\n }\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex){\n if (index < 0 || index > maxIndex) {\n throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is greater than or equal to the maximum bound (${maxIndex}).`);\n }\n}\n", "/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n", - "/**\n * @file url.js\n */\nimport document from 'global/document';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = `
    `;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n", - "/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\n\nimport assign from 'object.assign';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport xhr from './xhr.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendsFn from './extends.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = stylesheet.createStyleElement('vjs-styles-defaults');\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);\nstylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n`);\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extends' doc for more info)\n * var MySpecialButton = videojs.extends(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extends` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extends(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extends\n */\nvideojs.extends = extendsFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = createTimeRange;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n *\n * ##### Example\n *\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n *\n *\n * API is modeled after the Raynos/xhr.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @returns {Object} The request\n */\nvideojs.xhr = xhr;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n", - "/**\n * @file xhr.js\n */\nimport * as Url from './utils/url.js';\nimport log from './utils/log.js';\nimport mergeOptions from './utils/merge-options.js';\nimport window from 'global/window';\n\n/*\n * Simple http request for retrieving external files (e.g. text tracks)\n * ##### Example\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n * /////////////\n * API is modeled after the Raynos/xhr, which we hope to use after\n * getting browserify implemented.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @return {Object} The request\n * @method xhr\n */\nvar xhr = function(options, callback){\n let abortTimeout;\n\n // If options is a string it's the url\n if (typeof options === 'string') {\n options = {\n uri: options\n };\n }\n\n // Merge with default options\n options = mergeOptions({\n method: 'GET',\n timeout: 45 * 1000\n }, options);\n\n callback = callback || function(){};\n\n let XHR = window.XMLHttpRequest;\n\n if (typeof XHR === 'undefined') {\n // Shim XMLHttpRequest for older IEs\n XHR = function () {\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n throw new Error('This browser does not support XMLHttpRequest.');\n };\n }\n\n let request = new XHR();\n // Store a reference to the url on the request instance\n request.uri = options.uri;\n\n let urlInfo = Url.parseUrl(options.uri);\n let winLoc = window.location;\n\n let successHandler = function(){\n window.clearTimeout(abortTimeout);\n callback(null, request, request.response || request.responseText);\n };\n\n let errorHandler = function(err){\n window.clearTimeout(abortTimeout);\n\n if (!err || typeof err === 'string') {\n err = new Error(err || 'XHR Failed with a response of: '+(request && (request.response || request.responseText)));\n }\n\n callback(err, request);\n };\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n const crossOrigin = (urlInfo.protocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available\n // 'withCredentials' is only available in XMLHTTPRequest2\n // Also XDomainRequest has a lot of gotchas, so only use if cross domain\n if (crossOrigin && window.XDomainRequest && !('withCredentials' in request)) {\n request = new window.XDomainRequest();\n request.onload = successHandler;\n request.onerror = errorHandler;\n // These blank handlers need to be set to fix ie9\n // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/\n request.onprogress = function(){};\n request.ontimeout = function(){};\n\n // XMLHTTPRequest\n } else {\n const fileUrl = (urlInfo.protocol === 'file:' || winLoc.protocol === 'file:');\n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n if (request.timedout) {\n return errorHandler('timeout');\n }\n\n if (request.status === 200 || fileUrl && request.status === 0) {\n successHandler();\n } else {\n errorHandler();\n }\n }\n };\n\n if (options.timeout) {\n abortTimeout = window.setTimeout(function() {\n if (request.readyState !== 4) {\n request.timedout = true;\n request.abort();\n }\n }, options.timeout);\n }\n }\n\n // open the connection\n try {\n // Third arg is async, or ignored by XDomainRequest\n request.open(options.method || 'GET', options.uri, true);\n } catch(err) {\n return errorHandler(err);\n }\n\n // withCredentials only supported by XMLHttpRequest2\n if(options.withCredentials) {\n request.withCredentials = true;\n }\n\n if (options.responseType) {\n request.responseType = options.responseType;\n }\n\n // send the request\n try {\n request.send();\n } catch(err) {\n return errorHandler(err);\n }\n\n return request;\n};\n\nexport default xhr;\n" + "/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = ``;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n let urlInfo = parseUrl(url);\n let winLoc = window.location;\n\n // IE8 protocol relative urls will return ':' for protocol\n let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n return crossOrigin;\n};\n", + "/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\nimport TextTrack from './tracks/text-track.js';\n\nimport assign from 'object.assign';\nimport { createTimeRanges } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendFn from './extend.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\nimport xhr from 'xhr';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = document.querySelector('.vjs-styles-defaults');\nif (!style) {\n style = stylesheet.createStyleElement('vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(style, head.firstChild);\n stylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n `);\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extend' doc for more info)\n * var MySpecialButton = videojs.extend(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extend(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = extendFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number|Array} start Start time in seconds or an array of ranges\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n * videojs.xhr({\n * body: someJSONString,\n * uri: \"/foo\",\n * headers: {\n * \"Content-Type\": \"application/json\"\n * }\n * }, function (err, resp, body) {\n * // check resp.statusCode\n * });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = xhr;\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = TextTrack;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n" ] } \ No newline at end of file diff --git a/node_modules/video.js/dist/video.min.js b/node_modules/video.js/dist/video.min.js index fcf8146..c35ef19 100644 --- a/node_modules/video.js/dist/video.min.js +++ b/node_modules/video.js/dist/video.min.js @@ -1,6 +1,6 @@ /** * @license - * Video.js 5.0.0-rc.72 + * Video.js 5.0.0 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * @@ -9,14 +9,14 @@ * Available under Apache License Version 2.0 * */ -!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;g2?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-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],21:[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":30,"./isArrayLike":18,"./isIndex":20}],22:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],23:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],24:[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=[];++m0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d2?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:42,"object-keys":43}],42:[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)}},{}],43:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=!{toString:null}.propertyIsEnumerable("toString"),h=function(){}.propertyIsEnumerable("prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=function(a){var b=a.constructor;return b&&b.prototype===a},k={$window:!0,$console:!0,$parent:!0,$self:!0,$frames:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0},l=function(){if("undefined"==typeof window)return!1;for(var a in window)if(!k["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{j(window[a])}catch(b){return!0}return!1}(),m=function(a){if("undefined"==typeof window&&!l)return j(a);try{return j(a)}catch(b){return!1}},n=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),j=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!j)throw new TypeError("Object.keys called on a non-object");var n=h&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o0)for(var p=0;p=0&&"[object Function]"===c.call(a.callee)),d}},{}],45:[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},{}],46:[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("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 g=a("./button.js"),h=d(g),i=a("./component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(h["default"]);k.prototype.controlText_="Play Video",j["default"].registerComponent("BigPlayButton",k),c["default"]=k,b.exports=c["default"]},{"./button.js":47,"./component.js":48}],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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=a("./utils/events.js"),m=d(l),n=a("./utils/fn.js"),o=d(n),p=a("global/document"),q=e(p),r=a("object.assign"),s=e(r),t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.emitTapEvents(),this.on("tap",this.handleClick),this.on("click",this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur)}return g(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];c=s["default"]({className:this.buildCSSClass(),role:"button",type:"button","aria-live":"polite",tabIndex:0},c);var d=a.prototype.createEl.call(this,b,c);return this.controlTextEl_=k.createEl("span",{className:"vjs-control-text"}),d.appendChild(this.controlTextEl_),this.controlText(this.controlText_),d},b.prototype.controlText=function(a){return a?(this.controlText_=a,this.controlTextEl_.innerHTML=this.localize(this.controlText_),this):this.controlText_||"Need Text"},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){m.on(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(a){(32===a.which||13===a.which)&&(a.preventDefault(),this.handleClick())},b.prototype.handleBlur=function(){m.off(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b}(i["default"]);i["default"].registerComponent("Button",t),c["default"]=t,b.exports=c["default"]},{"./component":48,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"global/document":1,"object.assign":40}],48:[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("object.assign"),v=e(u),w=a("./utils/merge-options.js"),x=e(w),y=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=x["default"]({},this.options_),c=this.options_=x["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_=x["default"](this.options_,a),this.options_):this.options_},a.prototype.el=function(){return this.el_},a.prototype.createEl=function(a,b){return j.createEl(a,b)},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=void 0,e=void 0;if("string"==typeof b){e=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 f=c.componentClass||t["default"](e);c.name=e;var g=a.getComponent(f);d=new g(this.player_||this,c)}else d=b;return this.children_.push(d),"function"==typeof d.id&&(this.childIndex_[d.id()]=d),e=e||d.name&&d.name(),e&&(this.childNameIndex_[e]=d),"function"==typeof d.el&&d.el()&&this.contentEl().appendChild(d.el()),d},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 a=this,b=this.options_.children;b&&!function(){var c=a.options_,d=function(b,d){void 0!==c[b]&&(d=c[b]),d!==!1&&(d===!0&&(d={}),d.playerOptions=a.options_.playerOptions,a[b]=a.addChild(b,d))};if(Array.isArray(b))for(var e=0;e0&&(a.forEach(function(a){a.call(this)},this),this.readyQueue_=[]),this.trigger("ready")},1)},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.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.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b=v["default"]({},c.touches[0]),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.extends(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}();y.registerComponent("Component",y),c["default"]=y,b.exports=c["default"]},{"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/to-title-case.js":116,"global/window":2,"object.assign":40}],49:[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("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 g=a("../component.js"),h=d(g),i=a("./play-toggle.js"),j=(d(i),a("./time-controls/current-time-display.js")),k=(d(j),a("./time-controls/duration-display.js")),l=(d(k),a("./time-controls/time-divider.js")),m=(d(l),a("./time-controls/remaining-time-display.js")),n=(d(m),a("./live-display.js")),o=(d(n),a("./progress-control/progress-control.js")),p=(d(o),a("./fullscreen-toggle.js")),q=(d(p),a("./volume-control/volume-control.js")),r=(d(q),a("./volume-menu-button.js")),s=(d(r),a("./mute-toggle.js")),t=(d(s),a("./text-track-controls/chapters-button.js")),u=(d(t),a("./text-track-controls/subtitles-button.js")),v=(d(u),a("./text-track-controls/captions-button.js")),w=(d(v),a("./playback-rate-menu/playback-rate-menu-button.js")),x=(d(w),a("./spacer-controls/custom-control-spacer.js")),y=(d(x),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar"})},b}(h["default"]));y.prototype.options_={loadEvent:"play",children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","muteToggle","volumeControl","chaptersButton","subtitlesButton","captionsButton","fullscreenToggle"]},h["default"].registerComponent("ControlBar",y),c["default"]=y,b.exports=c["default"]},{"../component.js":48,"./fullscreen-toggle.js":50,"./live-display.js":51,"./mute-toggle.js":52,"./play-toggle.js":53,"./playback-rate-menu/playback-rate-menu-button.js":54,"./progress-control/progress-control.js":58,"./spacer-controls/custom-control-spacer.js":60,"./text-track-controls/captions-button.js":63, -"./text-track-controls/chapters-button.js":64,"./text-track-controls/subtitles-button.js":67,"./time-controls/current-time-display.js":70,"./time-controls/duration-display.js":71,"./time-controls/remaining-time-display.js":72,"./time-controls/time-divider.js":73,"./volume-control/volume-control.js":75,"./volume-menu-button.js":77}],50:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.isFullscreen()?(this.player_.exitFullscreen(),this.controlText("Fullscreen")):(this.player_.requestFullscreen(),this.controlText("Non-Fullscreen"))},b}(h["default"]);k.prototype.controlText_="Fullscreen",j["default"].registerComponent("FullscreenToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":47,"../component.js":48}],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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-live-display",innerHTML:''+this.localize("Stream Type")+""+this.localize("LIVE"),"aria-live":"off"}),b.appendChild(this.contentEl_),b},b}(i["default"]);i["default"].registerComponent("LiveDisplay",l),c["default"]=l,b.exports=c["default"]},{"../component":48,"../utils/dom.js":107}],52:[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("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=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.update),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){this.update(),c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return g(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",d=this.localize(c);this.controlText()!==d&&this.controlText(d);for(var e=0;4>e;e++)m.removeElClass(this.el_,"vjs-vol-"+e);m.addElClass(this.el_,"vjs-vol-"+b)},b}(i["default"]);n.prototype.controlText_="Mute",k["default"].registerComponent("MuteToggle",n),c["default"]=n,b.exports=c["default"]},{"../button":47,"../component":48,"../utils/dom.js":107}],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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.on(c,"play",this.handlePlay),this.on(c,"pause",this.handlePause)}return f(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}(h["default"]);k.prototype.controlText_="Play",j["default"].registerComponent("PlayToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":47,"../component.js":48}],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("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-button.js"),i=e(h),j=a("../../menu/menu.js"),k=e(j),l=a("./playback-rate-menu-item.js"),m=e(l),n=a("../../component.js"),o=e(n),p=a("../../utils/dom.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateVisibility(),this.updateLabel(),this.on(c,"loadstart",this.updateVisibility),this.on(c,"ratechange",this.updateLabel)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=q.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 k["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new m["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;da){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}(i["default"]);r.prototype.controlText_="Playback Rate",o["default"].registerComponent("PlaybackRateMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu-button.js":84,"../../menu/menu.js":86,"../../utils/dom.js":107,"./playback-rate-menu-item.js":55}],55:[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("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 g=a("../../menu/menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b);var f=d.rate,g=parseFloat(f,10);d.label=f,d.selected=1===g,a.call(this,c,d),this.label=f,this.rate=g,this.on(c,"ratechange",this.update)}return f(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}(h["default"]);k.prototype.contentElType="button",j["default"].registerComponent("PlaybackRateMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu-item.js":85}],56:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"progress",this.update)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:''+this.localize("Loaded")+": 0%"})},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;fa.length;f--)this.el_.removeChild(d[f-1])},b}(i["default"]);i["default"].registerComponent("LoadProgressBar",l),c["default"]=l,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107}],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("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=e(h),j=a("../../utils/fn.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateDataAttr),c.ready(k.bind(this,this.updateDataAttr))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress",innerHTML:''+this.localize("Progress")+": 0%"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",m["default"](a,this.player_.duration()))},b}(i["default"]);i["default"].registerComponent("PlayProgressBar",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/fn.js":109,"../../utils/format-time.js":110}],58:[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("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 g=a("../../component.js"),h=d(g),i=a("./seek-bar.js"),j=(d(i),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:{seekBar:{}}},h["default"].registerComponent("ProgressControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":48,"./seek-bar.js":59}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./load-progress-bar.js"),m=(e(l),a("./play-progress-bar.js")),n=(e(m),a("../../utils/fn.js")),o=d(n),p=a("../../utils/format-time.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateARIAAttributes),c.ready(o.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder","aria-label":"video progress bar"})},b.prototype.updateARIAAttributes=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),this.el_.setAttribute("aria-valuetext",q["default"](a,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}(i["default"]);r.prototype.options_={children:{loadProgressBar:{},playProgressBar:{}},barName:"playProgressBar"},r.prototype.playerEvent="timeupdate",k["default"].registerComponent("SeekBar",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"../../utils/format-time.js":110,"./load-progress-bar.js":56,"./play-progress-bar.js":57}],60:[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("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 g=a("./spacer.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-custom-control-spacer "+a.prototype.buildCSSClass.call(this)},b.prototype.createEl=function(){return a.prototype.createEl.call(this,{className:this.buildCSSClass()})},b}(h["default"]);j["default"].registerComponent("CustomControlSpacer",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./spacer.js":61}],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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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}(h["default"]);h["default"].registerComponent("Spacer",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],62:[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("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 g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" settings","default":!1,mode:"disabled"},a.call(this,c,d),this.addClass("vjs-texttrack-settings")}return f(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show()},b}(h["default"]);j["default"].registerComponent("CaptionSettingsMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-menu-item.js":69}],63:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=a("./caption-settings-menu-item.js"),l=d(k),m=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Captions Menu")}return f(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 l["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(h["default"]);m.prototype.kind_="captions",m.prototype.controlText_="Captions",j["default"].registerComponent("CaptionsButton",m),c["default"]=m,b.exports=c["default"]},{"../../component.js":48,"./caption-settings-menu-item.js":62,"./text-track-button.js":68}],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("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=e(h),j=a("../../component.js"),k=e(j),l=a("./text-track-menu-item.js"),m=e(l),n=a("./chapters-track-menu-item.js"),o=e(n),p=a("../../menu/menu.js"),q=e(p),r=a("../../utils/dom.js"),s=d(r),t=a("../../utils/fn.js"),u=d(t),v=a("../../utils/to-title-case.js"),w=e(v),x=a("global/window"),y=e(x),z=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),this.el_.setAttribute("aria-label","Chapters Menu")}return g(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;cd;d++){var f=a[d];if(f.kind===this.kind_){if(f.cues){b=f;break}f.mode="hidden",y["default"].setTimeout(u.bind(this,function(){this.createMenu()}),100)}}var g=this.menu;if(void 0===g&&(g=new q["default"](this.player_),g.contentEl().appendChild(s.createEl("li",{className:"vjs-menu-title",innerHTML:w["default"](this.kind_),tabIndex:-1}))),b){for(var h=b.cues,i=void 0,d=0,e=h.length;e>d;d++){i=h[d];var j=new o["default"](this.player_,{track:b,cue:i});c.push(j),g.addChild(j)}this.addChild(g)}return this.items.length>0&&this.show(),g},b}(i["default"]);z.prototype.kind_="chapters",z.prototype.controlText_="Chapters",k["default"].registerComponent("ChaptersButton",z),c["default"]=z,b.exports=c["default"]},{"../../component.js":48,"../../menu/menu.js":86,"../../utils/dom.js":107,"../../utils/fn.js":109,"../../utils/to-title-case.js":116,"./chapters-track-menu-item.js":65,"./text-track-button.js":68,"./text-track-menu-item.js":69,"global/window":2}],65:[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("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=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=function(a){function b(c,d){f(this,b);var e=d.track,g=d.cue,h=c.currentTime();d.label=g.text,d.selected=g.startTime<=h&&hc;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(h["default"]);j["default"].registerComponent("OffTextTrackMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-menu-item.js":69}],67:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Subtitles Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(h["default"]);k.prototype.kind_="subtitles",k.prototype.controlText_="Subtitles",j["default"].registerComponent("SubtitlesButton",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":48,"./text-track-button.js":68}],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("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-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./text-track-menu-item.js"),o=e(n),p=a("./off-text-track-menu-item.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=this.player_.textTracks();if(this.items.length<=1&&this.hide(),e){var g=m.bind(this,this.update);e.addEventListener("removetrack",g),e.addEventListener("addtrack",g),this.player_.on("dispose",function(){e.removeEventListener("removetrack",g),e.removeEventListener("addtrack",g)})}}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new q["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;cCurrent Time 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=m["default"](a,this.player_.duration());this.contentEl_.innerHTML=''+b+" "+c},b}(i["default"]);i["default"].registerComponent("CurrentTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent),this.on(c,"loadedmetadata",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-duration-display",innerHTML:''+this.localize("Duration Time")+" 0:00","aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a){var b=this.localize("Duration Time"),c=m["default"](a);this.contentEl_.innerHTML=''+b+" "+c}},b}(i["default"]);i["default"].registerComponent("DurationDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-remaining-time-display",innerHTML:''+this.localize("Remaining Time")+" -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=m["default"](this.player_.remainingTime());this.contentEl_.innerHTML=''+a+" -"+b}},b}(i["default"]);i["default"].registerComponent("RemainingTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],73:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"
    /
    "})},b}(h["default"]);h["default"].registerComponent("TimeDivider",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./volume-level.js"),o=(e(n),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.updateARIAAttributes),c.ready(m.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-bar","aria-label":"volume level"})},b.prototype.handleMouseMove=function(a){this.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(a))},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){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}(i["default"]));o.prototype.options_={children:{volumeLevel:{}},barName:"volumeLevel"},o.prototype.playerEvent="volumechange",k["default"].registerComponent("VolumeBar",o),c["default"]=o,b.exports=c["default"]},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"./volume-level.js":76}],75:[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("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 g=a("../../component.js"),h=d(g),i=a("./volume-bar.js"),j=(d(i),function(a){function b(c,d){e(this,b),a.call(this,c,d),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:{volumeBar:{}}},h["default"].registerComponent("VolumeControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":48,"./volume-bar.js":74}],76:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:''})},b}(h["default"]);h["default"].registerComponent("VolumeLevel",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":48}],77:[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("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 g=a("../button.js"),h=(d(g),a("../component.js")),i=d(h),j=a("../menu/menu.js"),k=d(j),l=a("../menu/menu-button.js"),m=d(l),n=a("./mute-toggle.js"),o=d(n),p=a("./volume-control/volume-bar.js"),q=d(p),r=function(a){function b(c){var d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),void 0===d.vertical&&(d.vertical=d.inline?!1:!0),d.volumeBar=d.volumeBar||{},d.volumeBar.vertical=!!d.vertical,a.call(this,c,d),this.on(c,"volumechange",this.volumeUpdate),this.on(c,"loadstart",this.volumeUpdate),c.tech&&c.tech.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}),this.addClass("vjs-menu-button")}return f(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.createMenu=function(){var a=new k["default"](this.player_,{contentElType:"div"}),b=new q["default"](this.player_,this.options_.volumeBar);return b.on("focus",function(){a.lockShowing()}),b.on("blur",function(){a.unlockShowing()}),a.addChild(b),a},b.prototype.handleClick=function(){o["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b}(m["default"]);r.prototype.volumeUpdate=o["default"].prototype.update,r.prototype.controlText_="Mute",i["default"].registerComponent("VolumeMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"../menu/menu-button.js":84,"../menu/menu.js":86,"./mute-toggle.js":52,"./volume-control/volume-bar.js":74}],78:[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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),this.on(c,"error",this.update)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-error-display"});return this.contentEl_=k.createEl("div"),b.appendChild(this.contentEl_),b},b.prototype.update=function(){this.player().error()&&(this.contentEl_.innerHTML=this.localize(this.player().error().message))},b}(i["default"]);i["default"].registerComponent("ErrorDisplay",l),c["default"]=l,b.exports=c["default"]},{"./component":48,"./utils/dom.js":107}],79:[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.prototype,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){f.one(this,a,b)},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,b.exports=c["default"]},{"./utils/events.js":108}],80:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./utils/log"),f=d(e),g=function(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&&(a.super_=b)},h=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"==typeof b?("function"==typeof b.init&&(f["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),g(c,a);for(var e in d)d.hasOwnProperty(e)&&(c.prototype[e]=d[e]);return c};c["default"]=h,b.exports=c["default"]},{"./utils/log":112}],81:[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;k1&&this.show()},b.prototype.createMenu=function(){var a=new m["default"](this.player_);if(this.options_.title&&a.contentEl().appendChild(o.createEl("li",{className:"vjs-menu-title",innerHTML:s["default"](this.options_.title),tabIndex:-1})),this.items=this.createItems(),this.items)for(var b=0;b0&&this.items[0].el().focus()},b.prototype.unpressButton=function(){this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-pressed",!1)},b}(i["default"]);k["default"].registerComponent("MenuButton",t),c["default"]=t,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/to-title-case.js":116,"./menu.js":86}],85:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=a("object.assign"),l=d(k),m=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.selected(d.selected)}return f(b,a),b.prototype.createEl=function(b,c){return a.prototype.createEl.call(this,"li",l["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},c))},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},b}(h["default"]);j["default"].registerComponent("MenuItem",m),c["default"]=m,b.exports=c["default"]},{"../button.js":47,"../component.js":48,"object.assign":40}],86:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("../utils/fn.js"),m=d(l),n=a("../utils/events.js"),o=d(n),p=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",m.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=k.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_),o.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(i["default"]);i["default"].registerComponent("Menu",p),c["default"]=p,b.exports=c["default"]},{"../component.js":48,"../utils/dom.js":107,"../utils/events.js":108,"../utils/fn.js":109}],87:[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("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=e(h),j=a("global/document"),k=e(j),l=a("global/window"),m=e(l),n=a("./utils/events.js"),o=d(n),p=a("./utils/dom.js"),q=d(p),r=a("./utils/fn.js"),s=d(r),t=a("./utils/guid.js"),u=d(t),v=a("./utils/browser.js"),w=(d(v),a("./utils/log.js")),x=e(w),y=a("./utils/to-title-case.js"),z=e(y),A=a("./utils/time-ranges.js"),B=a("./utils/buffer.js"),C=a("./utils/stylesheet.js"),D=d(C),E=a("./fullscreen-api.js"),F=e(E),G=a("./media-error.js"),H=e(G),I=a("safe-json-parse/tuple"),J=e(I),K=a("object.assign"),L=e(K),M=a("./utils/merge-options.js"),N=e(M),O=a("./tracks/text-track-list-converter.js"),P=e(O),Q=a("./tech/loader.js"),R=(e(Q),a("./poster-image.js")),S=(e(R),a("./tracks/text-track-display.js")),T=(e(S),a("./loading-spinner.js")),U=(e(T),a("./big-play-button.js")),V=(e(U),a("./control-bar/control-bar.js")),W=(e(V),a("./error-display.js")),X=(e(W),a("./tracks/text-track-settings.js")),Y=(e(X),a("./tech/html5.js")),Z=(e(Y),function(a){function b(c,d,e){var g=this;if(f(this,b),c.id=c.id||"vjs_video_"+u.newGUID(),d=L["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,a.call(this,null,d,e),!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?");this.tag=c,this.tagAttributes=c&&q.getElAttributes(c),this.language(this.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),g.languages_=a}():this.languages_=b.prototype.options_.languages,this.cache_={},this.poster_=d.poster||"",this.controls_=!!d.controls,c.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var h=N["default"](this.options_);d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):x["default"].error("Unable to find plugin:",b)},g)}(),this.options_.playerOptions=h,this.initChildren(),this.isAudio("audio"===c.nodeName.toLowerCase()),this.addClass(this.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),b.players[this.id_]=this,this.userActive_=!0,this.reportUserActivity(),this.listenForUserActivity(),this.on("fullscreenchange",this.handleFullscreenChange),this.on("stageclick",this.handleStageClick)}return g(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&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=q.getElAttributes(c);Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),this.styleEl_=D.createStyleElement("vjs-styles-dimensions");var e=k["default"].querySelector(".vjs-styles-defaults"),f=k["default"].querySelector("head");return 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),c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),q.insertElFirst(c,b),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 x["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(){var a=void 0,b=void 0,c=void 0;c=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var d=c.split(":"),e=d[1]/d[0];a=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/e:this.videoWidth()||300,b=void 0!==this.height_?this.height_:a*e;var f=this.id()+"-dimensions";this.addClass(f),D.setTextContent(this.styleEl_,"\n ."+f+" {\n width: "+a+"px;\n height: "+b+"px;\n }\n\n ."+f+".vjs-fluid {\n padding-top: "+100*e+"%;\n }\n ")},b.prototype.loadTech=function(a,b){this.tech&&this.unloadTech(),"Html5"!==a&&this.tag&&(i["default"].getComponent("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName=a,this.isReady_=!1;var c=s.bind(this,function(){this.triggerReady()}),d=L["default"]({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:b,playerId:this.id(),techId:this.id()+"_"+a+"_api",textTracks:this.textTracks_,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&&(d.tag=this.tag),b&&(this.currentType_=b.type,b.src===this.cache_.src&&this.cache_.currentTime>0&&(d.startTime=this.cache_.currentTime),this.cache_.src=b.src);var e=i["default"].getComponent(a);this.tech=new e(d),P["default"].jsonToTextTracks(this.textTracksJson_||[],this.tech),this.on(this.tech,"ready",this.handleTechReady),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.onTextTrackChange),this.on(this.tech,"loadedmetadata",this.updateStyleEl_),this.usingNativeControls(this.techGet("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners(),this.tech.el().parentNode===this.el()||"Html5"===a&&this.tag||q.insertElFirst(this.tech.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null),this.tech.ready(c,!0)},b.prototype.unloadTech=function(){this.textTracks_=this.textTracks(),this.textTracksJson_=P["default"].textTracksToJson(this),this.isReady_=!1,this.tech.dispose(),this.tech=!1},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(){this.triggerReady(),this.cache_.volume&&this.techCall("setVolume",this.cache_.volume),this.tag&&this.options_.autoplay&&this.paused()&&(delete this.tag.poster,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(){this.addClass("vjs-waiting"),this.trigger("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"),1===this.bufferedPercent()&&this.trigger("loadedalldata")},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.updateDuration(),this.trigger("durationchange")},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.updateDuration=function(){var a=this.techGet("duration");a&&(0>a&&(a=1/0),this.duration(a),a===1/0?this.addClass("vjs-live"):this.removeClass("vjs-live"))},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&&a.code)},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.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.onTextTrackChange=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[a](b)}catch(c){throw x["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]?x["default"]("Video.js: "+a+" method not defined for "+this.techName+" playback technology.",b):"TypeError"===b.name?(x["default"]("Video.js: "+a+" unavailable on "+this.techName+" playback technology element.",b),this.tech.isReady_=!1):x["default"](b),b}},b.prototype.play=function(){return this.techCall("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},b.prototype.duration=function(a){return void 0!==a?(this.cache_.duration=parseFloat(a),this):(void 0===this.cache_.duration&&this.updateDuration(),this.cache_.duration||0)},b.prototype.remainingTime=function(){return this.duration()-this.currentTime()},b.prototype.buffered=function c(){var c=this.techGet("buffered");return c&&c.length||(c=A.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return B.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=F["default"];return this.isFullscreen(!0),a.requestFullscreen?(o.on(k["default"],a.fullscreenchange,s.bind(this,function b(){this.isFullscreen(k["default"][a.fullscreenElement]),this.isFullscreen()===!1&&o.off(k["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=F["default"];return this.isFullscreen(!1),a.requestFullscreen?k["default"][a.exitFullscreen]():this.tech.supportsFullScreen()?this.techCall("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=k["default"].documentElement.style.overflow,o.on(k["default"],"keydown",s.bind(this,this.fullWindowOnEscKey)),k["default"].documentElement.style.overflow="hidden",q.addElClass(k["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,o.off(k["default"],"keydown",this.fullWindowOnEscKey),k["default"].documentElement.style.overflow=this.docOrigOverflow,q.removeElClass(k["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.selectSource=function(a){for(var b=0,c=this.options_.techOrder;b0&&(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.textTracks=function(){return this.tech&&this.tech.textTracks()},b.prototype.remoteTextTracks=function(){return this.tech&&this.tech.remoteTextTracks()},b.prototype.addTextTrack=function(a,b,c){return this.tech&&this.tech.addTextTrack(a,b,c)},b.prototype.addRemoteTextTrack=function(a){return this.tech&&this.tech.addRemoteTextTrack(a)},b.prototype.removeRemoteTextTrack=function(a){this.tech&&this.tech.removeRemoteTextTrack(a)},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_=(""+a).toLowerCase(),this)},b.prototype.languages=function(){return N["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=N["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;ci;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(q.getElAttributes(k)):"track"===l&&b.tracks.push(q.getElAttributes(k))}return b},b}(i["default"]));Z.players={};var $=m["default"].navigator;Z.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:{mediaLoader:{},posterImage:{},textTrackDisplay:{},loadingSpinner:{},bigPlayButton:{},controlBar:{},errorDisplay:{},textTrackSettings:{}},language:k["default"].getElementsByTagName("html")[0].getAttribute("lang")||$.languages&&$.languages[0]||$.userLanguage||$.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."},Z.prototype.handleLoadedMetaData,Z.prototype.handleLoadedData,Z.prototype.handleLoadedAllData,Z.prototype.handleUserActive,Z.prototype.handleUserInactive,Z.prototype.handleTimeUpdate,Z.prototype.handleVolumeChange,Z.prototype.handleError,Z.prototype.flexNotSupported_=function(){var a=k["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},i["default"].registerComponent("Player",Z),c["default"]=Z,b.exports=c["default"]},{"./big-play-button.js":46,"./component.js":48,"./control-bar/control-bar.js":49,"./error-display.js":78,"./fullscreen-api.js":81,"./loading-spinner.js":82,"./media-error.js":83,"./poster-image.js":89,"./tech/html5.js":94,"./tech/loader.js":95,"./tracks/text-track-display.js":98,"./tracks/text-track-list-converter.js":100,"./tracks/text-track-settings.js":102,"./utils/browser.js":104,"./utils/buffer.js":105,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/to-title-case.js":116,"global/document":1,"global/window":2,"object.assign":40,"safe-json-parse/tuple":45}],88:[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,b.exports=c["default"]},{"./player.js":87}],89:[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("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=e(h),j=a("./component.js"),k=e(j),l=a("./utils/fn.js"),m=d(l),n=a("./utils/dom.js"),o=d(n),p=a("./utils/browser.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),c.on("posterchange",m.bind(this,this.update))}return g(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=o.createEl("div",{className:"vjs-poster",tabIndex:-1});return q.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=o.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}(i["default"]);k["default"].registerComponent("PosterImage",r),c["default"]=r,b.exports=c["default"]},{"./button.js":47,"./component.js":48,"./utils/browser.js":104,"./utils/dom.js":107,"./utils/fn.js":109}],90:[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}c.__esModule=!0;var f=a("./utils/events.js"),g=e(f),h=a("global/document"),i=d(h),j=a("global/window"),k=d(j),l=!1,m=void 0,n=function(){var a=i["default"].getElementsByTagName("video"),b=i["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 d=0,e=b.length;e>d;d++)c.push(b[d]);if(c&&c.length>0)for(var d=0,e=c.length;e>d;d++){var f=c[d];if(!f||!f.getAttribute){o(1);break}if(void 0===f.player){var g=f.getAttribute("data-setup");if(null!==g){m(f)}}}else l||o(1)},o=function(a,b){m=b,setTimeout(n,a)};"complete"===i["default"].readyState?l=!0:g.one(k["default"],"load",function(){l=!0});var p=function(){return l};c.autoSetup=n,c.autoSetupTimeout=o,c.hasLoaded=p},{"./utils/events.js":108,"global/document":1,"global/window":2}],91:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("global/document"),m=e(l),n=a("object.assign"),o=e(n),p=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.bar=this.getChild(this.options_.barName),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(c,"controlsvisible",this.update),this.on(c,this.playerEvent,this.update)}return g(b,a),b.prototype.createEl=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.className=c.className+" vjs-slider",c=o["default"]({role:"slider","aria-valuenow":0,"aria-valuemin":0,"aria-valuemax":100,tabIndex:0},c),a.prototype.createEl.call(this,b,c)},b.prototype.handleMouseDown=function(a){a.preventDefault(),k.blockTextSelection(),this.addClass("vjs-sliding"),this.on(m["default"],"mousemove",this.handleMouseMove),this.on(m["default"],"mouseup",this.handleMouseUp),this.on(m["default"],"touchmove",this.handleMouseMove),this.on(m["default"],"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){k.unblockTextSelection(),this.removeClass("vjs-sliding"),this.off(m["default"],"mousemove",this.handleMouseMove),this.off(m["default"],"mouseup",this.handleMouseUp),this.off(m["default"],"touchmove",this.handleMouseMove),this.off(m["default"],"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=this.el_,c=k.findElPosition(b),d=b.offsetWidth,e=b.offsetHeight;if(this.vertical()){var f=c.top,g=void 0;return g=a.changedTouches?a.changedTouches[0].pageY:a.pageY,Math.max(0,Math.min(1,(f-g+e)/e))}var h=c.left,i=void 0;return i=a.changedTouches?a.changedTouches[0].pageX:a.pageX,Math.max(0,Math.min(1,(i-h)/d))},b.prototype.handleFocus=function(){this.on(m["default"],"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(m["default"],"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}(i["default"]);i["default"].registerComponent("Slider",p),c["default"]=p,b.exports=c["default"]},{"../component.js":48,"../utils/dom.js":107,"global/document":1,"object.assign":40}],92:[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.indexOf("&"),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.canHandleSource=function(b){return a.isStreamingType(b.type)||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,b.exports=c["default"]},{}],93:[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("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 h(a){var b=a.charAt(0).toUpperCase()+a.slice(1);A["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function i(a){A[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var j=a("./tech"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/time-ranges.js"),q=a("./flash-rtmp"),r=e(q),s=a("../component"),t=e(s),u=a("global/window"),v=e(u),w=a("object.assign"),x=e(w),y=v["default"].navigator,z=function(a){function b(c,d){f(this,b),a.call(this,c,d),c.source&&this.ready(function(){this.setSource(c.source)},!0),c.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),v["default"].videojs=v["default"].videojs||{},v["default"].videojs.Flash=v["default"].videojs.Flash||{},v["default"].videojs.Flash.onReady=b.onReady,v["default"].videojs.Flash.onEvent=b.onEvent,v["default"].videojs.Flash.onError=b.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return g(b,a),b.prototype.createEl=function(){var a=this.options_,c=a.techId,d=x["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),e=x["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),f=x["default"]({id:c,name:c,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,d,e,f),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){if(a=o.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()){var b=this;this.setTimeout(function(){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=10},k["default"].withSourceHandlers(z),z.nativeSourceHandler={},z.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=o.getFileExtension(a);return b?"video/"+b:""}var c;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),c in z.formats?"maybe":""},z.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},z.nativeSourceHandler.dispose=function(){},z.registerSourceHandler(z.nativeSourceHandler),z.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},z.onReady=function(a){var b=m.getEl(a),c=b&&b.tech;c&&c.el()&&z.checkReady(c)},z.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){z.checkReady(a)},50))},z.onEvent=function(a,b){var c=m.getEl(a).tech;c.trigger(b)},z.onError=function(a,b){var c=m.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},z.version=function(){var a="0,0,0";try{a=new v["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{y.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(y.plugins["Shockwave Flash 2.0"]||y.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},z.embed=function(a,b,c,d){var e=z.getEmbedCode(a,b,c,d),f=m.createEl("div",{innerHTML:e}).childNodes[0];return f},z.getEmbedCode=function(a,b,c,d){var e=''}),d=x["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+""},r["default"](z),t["default"].registerComponent("Flash",z),c["default"]=z,b.exports=c["default"]},{"../component":48,"../utils/dom.js":107,"../utils/time-ranges.js":115,"../utils/url.js":117,"./flash-rtmp":92,"./tech":96,"global/window":2,"object.assign":40}],94:[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("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("./tech.js"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("../utils/browser.js"),u=d(t),v=a("global/document"),w=e(v),x=a("global/window"),y=e(x),z=a("object.assign"),A=e(z),B=a("../utils/merge-options.js"),C=e(B),D=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=c.source;if(e&&(this.el_.currentSrc!==e.src||c.tag&&3===c.tag.initNetworkState_)&&this.setSource(e),this.el_.hasChildNodes()){for(var g=this.el_.childNodes,h=g.length,i=[];h--;){var j=g[h],k=j.nodeName.toLowerCase();"track"===k&&(this.featuresNativeTextTracks?this.remoteTextTracks().addTrack_(j.track):i.push(j))}for(var l=0;l=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),m.setElAttributes(a,i)}return a},b.prototype.proxyNativeTextTracks_=function(){var a=this.el().textTracks;a&&a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_))},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.play=function(){this.el_.play()},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){s["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=y["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.currentSrc=function(){return 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=w["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.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c,d;for(this.remoteTextTracks().removeTrack_(b),c=this.el().querySelectorAll("track"),d=c.length;d--;)(b===c[d]||b===c[d].track)&&this.el().removeChild(c[d])},b}(i["default"]);D.TEST_VID=w["default"].createElement("video");var E=w["default"].createElement("track");E.kind="captions",E.srclang="en",E.label="English",D.TEST_VID.appendChild(E),D.isSupported=function(){try{D.TEST_VID.volume=.5}catch(a){return!1}return!!D.TEST_VID.canPlayType},i["default"].withSourceHandlers(D),D.nativeSourceHandler={},D.nativeSourceHandler.canHandleSource=function(a){function b(a){try{return D.TEST_VID.canPlayType(a)}catch(b){return""}}var c;return a.type?b(a.type):a.src?(c=o.getFileExtension(a.src),b("video/"+c)):""},D.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},D.nativeSourceHandler.dispose=function(){},D.registerSourceHandler(D.nativeSourceHandler),D.canControlVolume=function(){var a=D.TEST_VID.volume;return D.TEST_VID.volume=a/2+.1,a!==D.TEST_VID.volume},D.canControlPlaybackRate=function(){var a=D.TEST_VID.playbackRate;return D.TEST_VID.playbackRate=a/2+.1,a!==D.TEST_VID.playbackRate},D.supportsNativeTextTracks=function(){var a;return a=!!D.TEST_VID.textTracks,a&&D.TEST_VID.textTracks.length>0&&(a="number"!=typeof D.TEST_VID.textTracks[0].mode),a&&u.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in D.TEST_VID.textTracks||(a=!1),a},D.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],D.prototype.featuresVolumeControl=D.canControlVolume(),D.prototype.featuresPlaybackRate=D.canControlPlaybackRate(),D.prototype.movingMediaElementInDOM=!u.IS_IOS,D.prototype.featuresFullscreenResize=!0,D.prototype.featuresProgressEvents=!0,D.prototype.featuresNativeTextTracks=D.supportsNativeTextTracks();var F=void 0,G=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,H=/^video\/mp4/i;D.patchCanPlayType=function(){u.ANDROID_VERSION>=4&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&G.test(a)?"maybe":F.call(this,a)}),u.IS_OLD_ANDROID&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&H.test(a)?"maybe":F.call(this,a)})},D.unpatchCanPlayType=function(){var a=D.TEST_VID.constructor.prototype.canPlayType;return D.TEST_VID.constructor.prototype.canPlayType=F,F=null,a},D.patchCanPlayType(),D.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){}}()}},k["default"].registerComponent("Html5",D),c["default"]=D,b.exports=c["default"]},{"../component":48,"../utils/browser.js":104,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/log.js":112,"../utils/merge-options.js":113,"../utils/url.js":117,"./tech.js":96,"global/document":1,"global/window":2,"object.assign":40}],95:[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("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 g=a("../component"),h=d(g),i=a("global/window"),j=(d(i),a("../utils/to-title-case.js")),k=d(j),l=function(a){function b(c,d,f){if(e(this,b),a.call(this,c,d,f),d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var g=0,i=d.playerOptions.techOrder;g0&&this.trigger("loadstart")},!0)},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(o.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 r.createTimeRange(0,0)},b.prototype.bufferedPercent=function(){return s.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(){var b=this.textTracks();if(b)for(var c=b.length;c--;)this.removeRemoteTextTrack(b[c]);this.manualProgress&&this.manualProgressOff(),this.manualTimeUpdates&&this.manualTimeUpdatesOff(),a.prototype.dispose.call(this)},b.prototype.error=function(a){return void 0!==a&&(this.error_=a instanceof u["default"]?a:new u["default"](a),this.trigger("error")),this.error_},b.prototype.played=function(){return this.hasStarted_?r.createTimeRange(0,0):r.createTimeRange()},b.prototype.setCurrentTime=function(){this.manualTimeUpdates&&this.trigger({type:"timeupdate",target:this,manuallyTriggered:!0})},b.prototype.initTextTrackListeners=function(){var a=o.bind(this,function(){this.trigger("texttrackchange")}),b=this.textTracks();b&&(b.addEventListener("removetrack",a),b.addEventListener("addtrack",a),this.on("dispose",o.bind(this,function(){b.removeEventListener("removetrack",a),b.removeEventListener("addtrack",a)})))},b.prototype.emulateTextTracks=function(){if(!w["default"].WebVTT&&null!=this.el().parentNode){var a=y["default"].createElement("script");a.src=this.options_["vtt.js"]||"../node_modules/vtt.js/dist/vtt.js",this.el().parentNode.appendChild(a),w["default"].WebVTT=!0}var b=this.textTracks();if(b){var c=o.bind(this,function(){var a=this,c=function(){return a.trigger("texttrackchange")};c();for(var d=0;db)for(c=b;d>c;c++)e.call(this,c)},j.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},c["default"]=j,b.exports=c["default"]},{"../utils/browser.js":104,"global/document":1}],98:[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("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 h(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function i(a,b,c){try{a.style[b]=c}catch(d){}}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../menu/menu.js"),m=(e(l),a("../menu/menu-item.js")),n=(e(m),a("../menu/menu-button.js")),o=(e(n),a("../utils/fn.js")),p=d(o),q=a("global/document"),r=(e(q),a("global/window")),s=e(r),t="#222",u="#ccc",v={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'},w=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),c.on("loadstart",p.bind(this,this.toggleDisplay)),c.on("texttrackchange",p.bind(this,this.updateDisplay)),c.ready(p.bind(this,function(){if(c.tech&&c.tech.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",p.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;bc;c++)if(b=this[c],b===a){this.tracks_.splice(c,1);break}this.trigger({type:"removetrack",track:b})},n.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},c["default"]=n,b.exports=c["default"]},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"global/document":1}],102:[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("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 h(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function i(a,b){if(b){var c=void 0;for(c=0;c select").selectedIndex=0,this.el().querySelector(".vjs-bg-color > select").selectedIndex=0,this.el().querySelector(".window-color > select").selectedIndex=0,this.el().querySelector(".vjs-text-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-bg-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-window-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-edge-style select").selectedIndex=0,this.el().querySelector(".vjs-font-family select").selectedIndex=0,this.el().querySelector(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),n.on(this.el().querySelector(".vjs-fg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".window-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-text-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-window-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-percent select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-edge-style select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-family select"),"change",p.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:j()})},b.prototype.getValues=function(){var a=this.el(),b=h(a.querySelector(".vjs-edge-style select")),c=h(a.querySelector(".vjs-font-family select")),d=h(a.querySelector(".vjs-fg-color > select")),e=h(a.querySelector(".vjs-text-opacity > select")),f=h(a.querySelector(".vjs-bg-color > select")),g=h(a.querySelector(".vjs-bg-opacity > select")),i=h(a.querySelector(".window-color > select")),j=h(a.querySelector(".vjs-window-opacity > select")),k=v["default"].parseFloat(h(a.querySelector(".vjs-font-percent > select"))),l={backgroundOpacity:g,textOpacity:e,windowOpacity:j,edgeStyle:b,fontFamily:c,color:d,backgroundColor:f,windowColor:i,fontPercent:k};for(var m in l)(""===l[m]||"none"===l[m]||"fontPercent"===m&&1===l[m])&&delete l[m];return l},b.prototype.setValues=function(a){var b=this.el();i(b.querySelector(".vjs-edge-style select"),a.edgeStyle),i(b.querySelector(".vjs-font-family select"),a.fontFamily),i(b.querySelector(".vjs-fg-color > select"),a.color),i(b.querySelector(".vjs-text-opacity > select"),a.textOpacity),i(b.querySelector(".vjs-bg-color > select"),a.backgroundColor),i(b.querySelector(".vjs-bg-opacity > select"),a.backgroundOpacity),i(b.querySelector(".window-color > select"),a.windowColor),i(b.querySelector(".vjs-window-opacity > select"),a.windowOpacity);var c=a.fontPercent;c&&(c=c.toFixed(2)),i(b.querySelector(".vjs-font-percent > select"),c)},b.prototype.restoreSettings=function(){var a=t["default"](v["default"].localStorage.getItem("vjs-text-track-settings")),b=a[0],c=a[1];b&&r["default"].error(b),c&&this.setValues(c)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?v["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):v["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(l["default"]);l["default"].registerComponent("TextTrackSettings",w),c["default"]=w,b.exports=c["default"]},{"../component":48,"../utils/events.js":108,"../utils/fn.js":109,"../utils/log.js":112,"global/window":2,"safe-json-parse/tuple":45}],103:[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}}c.__esModule=!0;var f=a("./text-track-cue-list"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/guid.js"),k=d(j),l=a("../utils/browser.js"),m=d(l),n=a("./text-track-enums"),o=d(n),p=a("../utils/log.js"),q=e(p),r=a("../event-target"),s=e(r),t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("../xhr.js"),y=e(x),z=function D(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!a.tech)throw new Error("A tech was not provided.");var b=this;if(m.IS_IE8){b=u["default"].createElement("custom");for(var c in D.prototype)b[c]=D.prototype[c]}b.tech_=a.tech;var d=o.TextTrackMode[a.mode]||"disabled",e=o.TextTrackKind[a.kind]||"subtitles",f=a.label||"",h=a.language||a.srclang||"",j=a.id||"vjs_text_track_"+k.newGUID();("metadata"===e||"chapters"===e)&&(d="hidden"),b.cues_=[],b.activeCues_=[];var l=new g["default"](b.cues_),n=new g["default"](b.activeCues_),p=!1,q=i.bind(b,function(){this.activeCues,p&&(this.trigger("cuechange"),p=!1)});return"disabled"!==d&&b.tech_.on("timeupdate",q),Object.defineProperty(b,"kind",{get:function(){return e},set:Function.prototype}),Object.defineProperty(b,"label",{get:function(){return f},set:Function.prototype}),Object.defineProperty(b,"language",{get:function(){return h},set:Function.prototype}),Object.defineProperty(b,"id",{get:function(){return j},set:Function.prototype}),Object.defineProperty(b,"mode",{get:function(){return d},set:function(a){o.TextTrackMode[a]&&(d=a,"showing"===d&&this.tech_.on("timeupdate",q),this.trigger("modechange"))}}),Object.defineProperty(b,"cues",{get:function(){return this.loaded_?l:null},set:Function.prototype}),Object.defineProperty(b,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return n;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(p=!1,b.length!==this.activeCues_.length)p=!0;else for(var c=0;cc;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)};var A=function E(a,b){if("function"!=typeof w["default"].WebVTT)return w["default"].setTimeout(function(){E(a,b)},25);var c=new w["default"].WebVTT.Parser(w["default"],w["default"].vttjs,w["default"].WebVTT.StringDecoder());c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){q["default"].error(a)},c.parse(a),c.flush()},B=function(a,b){y["default"](a,i.bind(this,function(a,c,d){return a?q["default"].error(a,c):(b.loaded_=!0,void A(d,b))}))},C=function(a,b){if(null==this)throw new TypeError('"this" is null or not defined');var c=Object(this),d=c.length>>>0;if(0===d)return-1;var e=+b||0;if(Math.abs(e)===1/0&&(e=0),e>=d)return-1;for(var f=Math.max(e>=0?e:d-Math.abs(e),0);d>f;){if(f in c&&c[f]===a)return f;f++}return-1};c["default"]=z,b.exports=c["default"]},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"../utils/guid.js":111,"../utils/log.js":112,"../xhr.js":119,"./text-track-cue-list":97,"./text-track-enums":99,"global/document":1,"global/window":2}],104:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator.userAgent,j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=/iPhone/i.test(i);c.IS_IPHONE=l;var m=/iPad/i.test(i);c.IS_IPAD=m;var n=/iPod/i.test(i);c.IS_IPOD=n;var o=l||m||n;c.IS_IOS=o;var p=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:void 0}();c.IOS_VERSION=p;var q=/Android/i.test(i);c.IS_ANDROID=q;var r=function(){var a,b,c=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);return c?(a=c[1]&&parseFloat(c[1]),b=c[2]&&parseFloat(c[2]),a&&b?parseFloat(c[1]+"."+c[2]):a?a:null):null}();c.ANDROID_VERSION=r;var s=q&&/webkit/i.test(i)&&2.3>r;c.IS_OLD_ANDROID=s;var t=q&&5>r&&537>k;c.IS_NATIVE_ANDROID=t;var u=/Firefox/i.test(i);c.IS_FIREFOX=u;var v=/Chrome/i.test(i);c.IS_CHROME=v;var w=/MSIE\s8\.0/.test(i);c.IS_IE8=w;var x=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch);c.TOUCH_ENABLED=x;var y="backgroundSize"in f["default"].createElement("video").style;c.BACKGROUND_SIZE_SUPPORTED=y},{"global/document":1,"global/window":2}],105:[function(a,b,c){"use strict";function d(a,b){var c,d,f=0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;gb&&(d=b),f+=d-c;return f/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":115}],106:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./log.js"),f=d(e),g={get:function(a,b){return a[b]},set:function(a,b,c){return a[b]=c,!0}};c["default"]=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("function"==typeof Proxy){var c=function(){var c={};return Object.keys(b).forEach(function(a){g.hasOwnProperty(a)&&(c[a]=function(){return f["default"].warn(b[a]),g[a].apply(this,arguments)})}),{v:new Proxy(a,c)}}();if("object"==typeof c)return c.v}return a},b.exports=c["default"]},{"./log.js":112}],107:[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){return 0===a.indexOf("#")&&(a=a.slice(1)),u["default"].getElementById(a)}function g(){var a=arguments.length<=0||void 0===arguments[0]?"div":arguments[0],b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=u["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var d=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?c.setAttribute(a,d):c[a]=d}),c}function h(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function i(a){var b=a[A];return b||(b=a[A]=y.newGUID()),z[b]||(z[b]={}),z[b]}function j(a){var b=a[A];return b?!!Object.getOwnPropertyNames(z[b]).length:!1}function k(a){var b=a[A];if(b){delete z[b];try{delete a[A]}catch(c){a.removeAttribute?a.removeAttribute(A):a[A]=null}}}function l(a,b){return-1!==(" "+a.className+" ").indexOf(" "+b+" ")}function m(a,b){l(a,b)||(a.className=""===a.className?b:a.className+" "+b)}function n(a,b){if(l(a,b)){for(var c=a.className.split(" "),d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1);a.className=c.join(" ")}}function o(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(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=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":4,"../lang/isObject":33}],6:[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);++d2?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-1&&a%1==0&&b>a}var d=/^\d+$/,e=9007199254740991;b.exports=c},{}],24:[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":33,"./isArrayLike":21,"./isIndex":23}],25:[function(a,b){function c(a){return"number"==typeof a&&a>-1&&a%1==0&&d>=a}var d=9007199254740991;b.exports=c},{}],26:[function(a,b){function c(a){return!!a&&"object"==typeof a}b.exports=c},{}],27:[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=[];++m0,r=l.enumErrorProps&&(a===w||a instanceof Error),t=l.enumPrototypes&&g(a);++d2?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:45,"object-keys":46}],45:[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)}},{}],46:[function(a,b){"use strict";var c=Object.prototype.hasOwnProperty,d=Object.prototype.toString,e=Array.prototype.slice,f=a("./isArguments"),g=!{toString:null}.propertyIsEnumerable("toString"),h=function(){}.propertyIsEnumerable("prototype"),i=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],j=function(a){var b=a.constructor;return b&&b.prototype===a},k={$window:!0,$console:!0,$parent:!0,$self:!0,$frames:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0},l=function(){if("undefined"==typeof window)return!1;for(var a in window)if(!k["$"+a]&&c.call(window,a)&&null!==window[a]&&"object"==typeof window[a])try{j(window[a])}catch(b){return!0}return!1}(),m=function(a){if("undefined"==typeof window&&!l)return j(a);try{return j(a)}catch(b){return!1}},n=function(a){var b=null!==a&&"object"==typeof a,e="[object Function]"===d.call(a),j=f(a),k=b&&"[object String]"===d.call(a),l=[];if(!b&&!e&&!j)throw new TypeError("Object.keys called on a non-object");var n=h&&e;if(k&&a.length>0&&!c.call(a,0))for(var o=0;o0)for(var p=0;p=0&&"[object Function]"===c.call(a.callee)),d}},{}],48:[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},{}],49:[function(a,b){function c(a){return a.replace(/\n\r?\s*/g,"")}b.exports=function(a){for(var b="",d=0;d0&&(o=setTimeout(function(){n=!0,l.abort("timeout");var a=new Error("XMLHttpRequest timeout");a.code="ETIMEDOUT",i(a)},a.timeout)),l.setRequestHeader)for(m in s)s.hasOwnProperty(m)&&l.setRequestHeader(m,s[m]);else if(a.headers&&!c(a.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in a&&(l.responseType=a.responseType),"beforeSend"in a&&"function"==typeof a.beforeSend&&a.beforeSend(l),l.send(r),l}function e(){}var f=a("global/window"),g=a("once"),h=a("parse-headers");b.exports=d,d.XMLHttpRequest=f.XMLHttpRequest||e,d.XDomainRequest="withCredentials"in new d.XMLHttpRequest?d.XMLHttpRequest:f.XDomainRequest},{"global/window":2,once:51,"parse-headers":55}],51:[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})})},{}],52:[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":53}],53:[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},{}],54:[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*$/,"")}},{}],55:[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":52,trim:54}],56:[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("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 g=a("./button.js"),h=d(g),i=a("./component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-big-play-button"},b.prototype.handleClick=function(){this.player_.play()},b}(h["default"]);k.prototype.controlText_="Play Video",j["default"].registerComponent("BigPlayButton",k),c["default"]=k,b.exports=c["default"]},{"./button.js":57,"./component.js":58}],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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=a("./utils/events.js"),m=d(l),n=a("./utils/fn.js"),o=d(n),p=a("global/document"),q=e(p),r=a("object.assign"),s=e(r),t=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.emitTapEvents(),this.on("tap",this.handleClick),this.on("click",this.handleClick),this.on("focus",this.handleFocus),this.on("blur",this.handleBlur)}return g(b,a),b.prototype.createEl=function(){var b=arguments.length<=0||void 0===arguments[0]?"button":arguments[0],c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],d=arguments.length<=2||void 0===arguments[2]?{}:arguments[2];c=s["default"]({className:this.buildCSSClass(),tabIndex:0},c),d=s["default"]({role:"button",type:"button","aria-live":"polite"},d);var e=a.prototype.createEl.call(this,b,c,d);return this.controlTextEl_=k.createEl("span",{className:"vjs-control-text"}),e.appendChild(this.controlTextEl_),this.controlText(this.controlText_),e},b.prototype.controlText=function(a){return a?(this.controlText_=a,this.controlTextEl_.innerHTML=this.localize(this.controlText_),this):this.controlText_||"Need Text"},b.prototype.buildCSSClass=function(){return"vjs-control vjs-button "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){},b.prototype.handleFocus=function(){m.on(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b.prototype.handleKeyPress=function(a){(32===a.which||13===a.which)&&(a.preventDefault(),this.handleClick(a))},b.prototype.handleBlur=function(){m.off(q["default"],"keydown",o.bind(this,this.handleKeyPress))},b}(i["default"]);i["default"].registerComponent("Button",t),c["default"]=t,b.exports=c["default"]},{"./component":58,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"global/document":1,"object.assign":43}],58:[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("object.assign"),v=e(u),w=a("./utils/merge-options.js"),x=e(w),y=function(){function a(b,c,d){if(f(this,a),this.player_=!b&&this.play?b=this:b,this.options_=x["default"]({},this.options_),c=this.options_=x["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_=x["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=void 0,e=void 0;if("string"==typeof b){e=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 f=c.componentClass||t["default"](e);c.name=e;var g=a.getComponent(f);d=new g(this.player_||this,c)}else d=b;return this.children_.push(d),"function"==typeof d.id&&(this.childIndex_[d.id()]=d),e=e||d.name&&d.name(),e&&(this.childNameIndex_[e]=d),"function"==typeof d.el&&d.el()&&this.contentEl().appendChild(d.el()),d},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 a=this,b=this.options_.children;b&&!function(){var c=a.options_,d=function(b,d){void 0!==c[b]&&(d=c[b]),d!==!1&&(d===!0&&(d={}),d.playerOptions=a.options_.playerOptions,a[b]=a.addChild(b,d))};if(Array.isArray(b))for(var e=0;e0&&a.forEach(function(a){a.call(this)},this),this.trigger("ready")},1)},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.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.emitTapEvents=function(){var a=0,b=null,c=10,d=200,e=void 0;this.on("touchstart",function(c){1===c.touches.length&&(b=v["default"]({},c.touches[0]),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}();y.registerComponent("Component",y),c["default"]=y,b.exports=c["default"]},{"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/to-title-case.js":127,"global/window":2,"object.assign":43}],59:[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("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 g=a("../component.js"),h=d(g),i=a("./play-toggle.js"),j=(d(i),a("./time-controls/current-time-display.js")),k=(d(j),a("./time-controls/duration-display.js")),l=(d(k),a("./time-controls/time-divider.js")),m=(d(l),a("./time-controls/remaining-time-display.js")),n=(d(m),a("./live-display.js")),o=(d(n),a("./progress-control/progress-control.js")),p=(d(o),a("./fullscreen-toggle.js")),q=(d(p),a("./volume-control/volume-control.js")),r=(d(q),a("./volume-menu-button.js")),s=(d(r),a("./mute-toggle.js")),t=(d(s),a("./text-track-controls/chapters-button.js")),u=(d(t),a("./text-track-controls/subtitles-button.js")),v=(d(u),a("./text-track-controls/captions-button.js")),w=(d(v),a("./playback-rate-menu/playback-rate-menu-button.js")),x=(d(w),a("./spacer-controls/custom-control-spacer.js")),y=(d(x),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-control-bar"})},b}(h["default"]));y.prototype.options_={loadEvent:"play",children:["playToggle","volumeMenuButton","currentTimeDisplay","timeDivider","durationDisplay","progressControl","liveDisplay","remainingTimeDisplay","customControlSpacer","playbackRateMenuButton","chaptersButton","subtitlesButton","captionsButton","fullscreenToggle"]},h["default"].registerComponent("ControlBar",y),c["default"]=y,b.exports=c["default"]},{"../component.js":58,"./fullscreen-toggle.js":60,"./live-display.js":61,"./mute-toggle.js":62,"./play-toggle.js":63,"./playback-rate-menu/playback-rate-menu-button.js":64,"./progress-control/progress-control.js":69,"./spacer-controls/custom-control-spacer.js":71,"./text-track-controls/captions-button.js":74,"./text-track-controls/chapters-button.js":75,"./text-track-controls/subtitles-button.js":78,"./time-controls/current-time-display.js":81,"./time-controls/duration-display.js":82,"./time-controls/remaining-time-display.js":83,"./time-controls/time-divider.js":84,"./volume-control/volume-control.js":86,"./volume-menu-button.js":88}],60:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-fullscreen-control "+a.prototype.buildCSSClass.call(this)},b.prototype.handleClick=function(){this.player_.isFullscreen()?(this.player_.exitFullscreen(),this.controlText("Fullscreen")):(this.player_.requestFullscreen(),this.controlText("Non-Fullscreen"))},b}(h["default"]);k.prototype.controlText_="Fullscreen",j["default"].registerComponent("FullscreenToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":57,"../component.js":58}],61:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateShowing(),this.on(this.player(),"durationchange",this.updateShowing)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-live-control vjs-control"});return this.contentEl_=k.createEl("div",{className:"vjs-live-display",innerHTML:''+this.localize("Stream Type")+""+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}(i["default"]);i["default"].registerComponent("LiveDisplay",l),c["default"]=l,b.exports=c["default"]},{"../component":58,"../utils/dom.js":118}],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("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=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.update),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){this.update(),c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return g(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",d=this.localize(c);this.controlText()!==d&&this.controlText(d);for(var e=0;4>e;e++)m.removeElClass(this.el_,"vjs-vol-"+e);m.addElClass(this.el_,"vjs-vol-"+b)},b}(i["default"]);n.prototype.controlText_="Mute",k["default"].registerComponent("MuteToggle",n),c["default"]=n,b.exports=c["default"]},{"../button":57,"../component":58,"../utils/dom.js":118}],63:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.on(c,"play",this.handlePlay),this.on(c,"pause",this.handlePause)}return f(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}(h["default"]);k.prototype.controlText_="Play",j["default"].registerComponent("PlayToggle",k),c["default"]=k,b.exports=c["default"]},{"../button.js":57,"../component.js":58}],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("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-button.js"),i=e(h),j=a("../../menu/menu.js"),k=e(j),l=a("./playback-rate-menu-item.js"),m=e(l),n=a("../../component.js"),o=e(n),p=a("../../utils/dom.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateVisibility(),this.updateLabel(),this.on(c,"loadstart",this.updateVisibility),this.on(c,"ratechange",this.updateLabel)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this);return this.labelEl_=q.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 k["default"](this.player()),b=this.playbackRates();if(b)for(var c=b.length-1;c>=0;c--)a.addChild(new m["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;da){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}(i["default"]);r.prototype.controlText_="Playback Rate",o["default"].registerComponent("PlaybackRateMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu-button.js":95,"../../menu/menu.js":97,"../../utils/dom.js":118,"./playback-rate-menu-item.js":65}],65:[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("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 g=a("../../menu/menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b);var f=d.rate,g=parseFloat(f,10);d.label=f,d.selected=1===g,a.call(this,c,d),this.label=f,this.rate=g,this.on(c,"ratechange",this.update)}return f(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}(h["default"]);k.prototype.contentElType="button",j["default"].registerComponent("PlaybackRateMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu-item.js":96}],66:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"progress",this.update)}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-load-progress",innerHTML:''+this.localize("Loaded")+": 0%"})},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;fa.length;f--)this.el_.removeChild(d[f-1])},b}(i["default"]);i["default"].registerComponent("LoadProgressBar",l),c["default"]=l,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118}],67:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/fn.js"),m=d(l),n=a("../../utils/format-time.js"),o=e(n),p=a("lodash-compat/function/throttle"),q=e(p),r=function(a){function b(c,d){var e=this;f(this,b),a.call(this,c,d),this.update(0,0),c.on("ready",function(){e.on(c.controlBar.progressControl.el(),"mousemove",q["default"](m.bind(e,e.handleMouseMove),25))})}return g(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-k.findElPosition(this.el().parentNode).left;this.update(c,d)},b.prototype.update=function(a,b){var c=o["default"](a,this.player_.duration());this.el().style.left=b+"px",this.el().setAttribute("data-current-time",c)},b.prototype.calculateDistance=function(a){return k.getPointerPosition(this.el().parentNode,a).x},b}(i["default"]);i["default"].registerComponent("MouseTimeDisplay",r),c["default"]=r,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/format-time.js":121,"lodash-compat/function/throttle":7}],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("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=e(h),j=a("../../utils/fn.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.updateDataAttr(),this.on(c,"timeupdate",this.updateDataAttr),c.ready(k.bind(this,this.updateDataAttr))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-play-progress vjs-slider-bar",innerHTML:''+this.localize("Progress")+": 0%"})},b.prototype.updateDataAttr=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("data-current-time",m["default"](a,this.player_.duration()))},b}(i["default"]);i["default"].registerComponent("PlayProgressBar",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/fn.js":120,"../../utils/format-time.js":121}],69:[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("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 g=a("../../component.js"),h=d(g),i=a("./seek-bar.js"),j=(d(i),a("./mouse-time-display.js")),k=(d(j),function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-control vjs-control"})},b}(h["default"]));k.prototype.options_={children:["seekBar"]},h["default"].registerComponent("ProgressControl",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./mouse-time-display.js":67,"./seek-bar.js":70}],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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("./load-progress-bar.js"),m=(e(l),a("./play-progress-bar.js")),n=(e(m),a("../../utils/fn.js")),o=d(n),p=a("../../utils/format-time.js"),q=e(p),r=a("object.assign"),s=(e(r),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateARIAAttributes),c.ready(o.bind(this,this.updateARIAAttributes))}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-progress-holder"},{"aria-label":"video progress bar"})},b.prototype.updateARIAAttributes=function(){var a=this.player_.scrubbing()?this.player_.getCache().currentTime:this.player_.currentTime();this.el_.setAttribute("aria-valuenow",(100*this.getPercent()).toFixed(2)),this.el_.setAttribute("aria-valuetext",q["default"](a,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}(i["default"]));s.prototype.options_={children:["loadProgressBar","mouseTimeDisplay","playProgressBar"],barName:"playProgressBar"},s.prototype.playerEvent="timeupdate",k["default"].registerComponent("SeekBar",s),c["default"]=s,b.exports=c["default"]},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"../../utils/format-time.js":121,"./load-progress-bar.js":66,"./play-progress-bar.js":68,"object.assign":43}],71:[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("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 g=a("./spacer.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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=" ",b},b}(h["default"]);j["default"].registerComponent("CustomControlSpacer",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./spacer.js":72}],72:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(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}(h["default"]);h["default"].registerComponent("Spacer",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],73:[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("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 g=a("./text-track-menu-item.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d){e(this,b),d.track={kind:d.kind,player:c,label:d.kind+" settings","default":!1,mode:"disabled"},a.call(this,c,d),this.addClass("vjs-texttrack-settings")}return f(b,a),b.prototype.handleClick=function(){this.player().getChild("textTrackSettings").show()},b}(h["default"]);j["default"].registerComponent("CaptionSettingsMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-menu-item.js":80}],74:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=a("./caption-settings-menu-item.js"),l=d(k),m=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Captions Menu")}return f(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 l["default"](this.player_,{kind:this.kind_})),a.prototype.createItems.call(this,b)},b}(h["default"]);m.prototype.kind_="captions",m.prototype.controlText_="Captions",j["default"].registerComponent("CaptionsButton",m),c["default"]=m,b.exports=c["default"]},{"../../component.js":58,"./caption-settings-menu-item.js":73,"./text-track-button.js":79}],75:[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("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=e(h),j=a("../../component.js"),k=e(j),l=a("./text-track-menu-item.js"),m=e(l),n=a("./chapters-track-menu-item.js"),o=e(n),p=a("../../menu/menu.js"),q=e(p),r=a("../../utils/dom.js"),s=d(r),t=a("../../utils/fn.js"),u=d(t),v=a("../../utils/to-title-case.js"),w=e(v),x=a("global/window"),y=e(x),z=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),this.el_.setAttribute("aria-label","Chapters Menu")}return g(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;cd;d++){var f=a[d];if(f.kind===this.kind_){if(f.cues){b=f;break}f.mode="hidden",y["default"].setTimeout(u.bind(this,function(){this.createMenu()}),100)}}var g=this.menu;if(void 0===g&&(g=new q["default"](this.player_),g.contentEl().appendChild(s.createEl("li",{className:"vjs-menu-title",innerHTML:w["default"](this.kind_),tabIndex:-1}))),b){for(var h=b.cues,i=void 0,d=0,e=h.length;e>d;d++){i=h[d];var j=new o["default"](this.player_,{track:b,cue:i});c.push(j),g.addChild(j)}this.addChild(g)}return this.items.length>0&&this.show(),g},b}(i["default"]);z.prototype.kind_="chapters",z.prototype.controlText_="Chapters",k["default"].registerComponent("ChaptersButton",z),c["default"]=z,b.exports=c["default"]},{"../../component.js":58,"../../menu/menu.js":97,"../../utils/dom.js":118,"../../utils/fn.js":120,"../../utils/to-title-case.js":127,"./chapters-track-menu-item.js":76,"./text-track-button.js":79,"./text-track-menu-item.js":80,"global/window":2}],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("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=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=function(a){function b(c,d){f(this,b);var e=d.track,g=d.cue,h=c.currentTime();d.label=g.text,d.selected=g.startTime<=h&&hc;c++){var e=a[c];if(e.kind===this.track.kind&&"showing"===e.mode){b=!1;break}}this.selected(b)},b}(h["default"]);j["default"].registerComponent("OffTextTrackMenuItem",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-menu-item.js":80}],78:[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("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 g=a("./text-track-button.js"),h=d(g),i=a("../../component.js"),j=d(i),k=function(a){function b(c,d,f){e(this,b),a.call(this,c,d,f),this.el_.setAttribute("aria-label","Subtitles Menu")}return f(b,a),b.prototype.buildCSSClass=function(){return"vjs-subtitles-button "+a.prototype.buildCSSClass.call(this)},b}(h["default"]);k.prototype.kind_="subtitles",k.prototype.controlText_="Subtitles",j["default"].registerComponent("SubtitlesButton",k),c["default"]=k,b.exports=c["default"]},{"../../component.js":58,"./text-track-button.js":79}],79:[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("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-button.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./text-track-menu-item.js"),o=e(n),p=a("./off-text-track-menu-item.js"),q=e(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=this.player_.textTracks();if(this.items.length<=1&&this.hide(),e){var g=m.bind(this,this.update);e.addEventListener("removetrack",g),e.addEventListener("addtrack",g),this.player_.on("dispose",function(){e.removeEventListener("removetrack",g),e.removeEventListener("addtrack",g)})}}return g(b,a),b.prototype.createItems=function(){var a=arguments.length<=0||void 0===arguments[0]?[]:arguments[0];a.push(new q["default"](this.player_,{kind:this.kind_}));var b=this.player_.textTracks();if(!b)return a;for(var c=0;cCurrent Time 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=m["default"](a,this.player_.duration());this.contentEl_.innerHTML=''+b+" "+c},b}(i["default"]);i["default"].registerComponent("CurrentTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],82:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent),this.on(c,"loadedmetadata",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-duration-display",innerHTML:''+this.localize("Duration Time")+" 0:00"},{"aria-live":"off"}),b.appendChild(this.contentEl_),b},b.prototype.updateContent=function(){var a=this.player_.duration();if(a){var b=this.localize("Duration Time"),c=m["default"](a);this.contentEl_.innerHTML=''+b+" "+c}},b}(i["default"]);i["default"].registerComponent("DurationDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],83:[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("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=e(h),j=a("../../utils/dom.js"),k=d(j),l=a("../../utils/format-time.js"),m=e(l),n=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"timeupdate",this.updateContent)}return g(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_=k.createEl("div",{className:"vjs-remaining-time-display",innerHTML:''+this.localize("Remaining Time")+" -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=m["default"](this.player_.remainingTime());this.contentEl_.innerHTML=''+a+" -"+b}},b}(i["default"]);i["default"].registerComponent("RemainingTimeDisplay",n),c["default"]=n,b.exports=c["default"]},{"../../component.js":58,"../../utils/dom.js":118,"../../utils/format-time.js":121}],84:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-time-control vjs-time-divider",innerHTML:"
    /
    "})},b}(h["default"]);h["default"].registerComponent("TimeDivider",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],85:[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("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("../../slider/slider.js"),i=e(h),j=a("../../component.js"),k=e(j),l=a("../../utils/fn.js"),m=d(l),n=a("./volume-level.js"),o=(e(n),function(a){function b(c,d){f(this,b),a.call(this,c,d),this.on(c,"volumechange",this.updateARIAAttributes),c.ready(m.bind(this,this.updateARIAAttributes))}return g(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.player_.muted()&&this.player_.muted(!1),this.player_.volume(this.calculateDistance(a))},b.prototype.getPercent=function(){return this.player_.muted()?0:this.player_.volume()},b.prototype.stepForward=function(){this.player_.volume(this.player_.volume()+.1)},b.prototype.stepBack=function(){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}(i["default"]));o.prototype.options_={children:["volumeLevel"],barName:"volumeLevel"},o.prototype.playerEvent="volumechange",k["default"].registerComponent("VolumeBar",o),c["default"]=o,b.exports=c["default"]},{"../../component.js":58,"../../slider/slider.js":102,"../../utils/fn.js":120,"./volume-level.js":87}],86:[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("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 g=a("../../component.js"),h=d(g),i=a("./volume-bar.js"),j=(d(i),function(a){function b(c,d){e(this,b),a.call(this,c,d),c.tech_&&c.tech_.featuresVolumeControl===!1&&this.addClass("vjs-hidden"),this.on(c,"loadstart",function(){c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")})}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-control vjs-control"})},b}(h["default"]));j.prototype.options_={children:["volumeBar"]},h["default"].registerComponent("VolumeControl",j),c["default"]=j,b.exports=c["default"]},{"../../component.js":58,"./volume-bar.js":85}],87:[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("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 g=a("../../component.js"),h=d(g),i=function(a){function b(){e(this,b),a.apply(this,arguments)}return f(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-volume-level",innerHTML:''})},b}(h["default"]);h["default"].registerComponent("VolumeLevel",i),c["default"]=i,b.exports=c["default"]},{"../../component.js":58}],88:[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("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 g=a("../button.js"),h=(d(g),a("../component.js")),i=d(h),j=a("../menu/menu.js"),k=d(j),l=a("../menu/menu-button.js"),m=d(l),n=a("./mute-toggle.js"),o=d(n),p=a("./volume-control/volume-bar.js"),q=d(p),r=function(a){function b(c){function d(){c.tech_&&c.tech_.featuresVolumeControl===!1?this.addClass("vjs-hidden"):this.removeClass("vjs-hidden")}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];e(this,b),void 0===f.inline&&(f.inline=!0),void 0===f.vertical&&(f.vertical=f.inline?!1:!0),f.volumeBar=f.volumeBar||{},f.volumeBar.vertical=!!f.vertical,a.call(this,c,f),this.on(c,"volumechange",this.volumeUpdate),this.on(c,"loadstart",this.volumeUpdate),d.call(this),this.on(c,"loadstart",d),this.on(this.volumeBar,["slideractive","focus"],function(){this.addClass("vjs-slider-active")}),this.on(this.volumeBar,["sliderinactive","blur"],function(){this.removeClass("vjs-slider-active")})}return f(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.createMenu=function(){var a=new k["default"](this.player_,{contentElType:"div"}),b=new q["default"](this.player_,this.options_.volumeBar);return a.addChild(b),this.volumeBar=b,a},b.prototype.handleClick=function(){o["default"].prototype.handleClick.call(this),a.prototype.handleClick.call(this)},b}(m["default"]);r.prototype.volumeUpdate=o["default"].prototype.update,r.prototype.controlText_="Mute",i["default"].registerComponent("VolumeMenuButton",r),c["default"]=r,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"../menu/menu-button.js":95,"../menu/menu.js":97,"./mute-toggle.js":62,"./volume-control/volume-bar.js":85}],89:[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("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=e(h),j=a("./utils/dom.js"),k=d(j),l=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),this.on(c,"error",this.update)}return g(b,a),b.prototype.createEl=function(){var b=a.prototype.createEl.call(this,"div",{className:"vjs-error-display"});return this.contentEl_=k.createEl("div"),b.appendChild(this.contentEl_),b},b.prototype.update=function(){this.player().error()&&(this.contentEl_.innerHTML=this.localize(this.player().error().message))},b}(i["default"]);i["default"].registerComponent("ErrorDisplay",l),c["default"]=l,b.exports=c["default"]},{"./component":58,"./utils/dom.js":118}],90:[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.prototype,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){f.one(this,a,b)},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,b.exports=c["default"]},{"./utils/events.js":119}],91:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./utils/log"),f=d(e),g=function(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&&(a.super_=b)},h=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],c=function(){a.apply(this,arguments)},d={};"object"==typeof b?("function"==typeof b.init&&(f["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),g(c,a);for(var e in d)d.hasOwnProperty(e)&&(c.prototype[e]=d[e]);return c};c["default"]=h,b.exports=c["default"]},{"./utils/log":123}],92:[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;k1&&this.show()},b.prototype.createMenu=function(){var a=new m["default"](this.player_);if(this.options_.title&&a.contentEl().appendChild(o.createEl("li",{className:"vjs-menu-title",innerHTML:s["default"](this.options_.title),tabIndex:-1})),this.items=this.createItems(),this.items)for(var b=0;b0&&this.items[0].el().focus()},b.prototype.unpressButton=function(){this.buttonPressed_=!1,this.menu.unlockShowing(),this.el_.setAttribute("aria-pressed",!1)},b}(i["default"]);k["default"].registerComponent("MenuButton",t),c["default"]=t,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/to-title-case.js":127,"./menu.js":97}],96:[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("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 g=a("../button.js"),h=d(g),i=a("../component.js"),j=d(i),k=a("object.assign"),l=d(k),m=function(a){function b(c,d){e(this,b),a.call(this,c,d),this.selected(d.selected)}return f(b,a),b.prototype.createEl=function(b,c,d){return a.prototype.createEl.call(this,"li",l["default"]({className:"vjs-menu-item",innerHTML:this.localize(this.options_.label)},c),d)},b.prototype.handleClick=function(){this.selected(!0)},b.prototype.selected=function(a){a?(this.addClass("vjs-selected"),this.el_.setAttribute("aria-selected",!0)):(this.removeClass("vjs-selected"),this.el_.setAttribute("aria-selected",!1))},b}(h["default"]);j["default"].registerComponent("MenuItem",m),c["default"]=m,b.exports=c["default"]},{"../button.js":57,"../component.js":58,"object.assign":43}],97:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("../utils/fn.js"),m=d(l),n=a("../utils/events.js"),o=d(n),p=function(a){function b(){f(this,b),a.apply(this,arguments)}return g(b,a),b.prototype.addItem=function(a){this.addChild(a),a.on("click",m.bind(this,function(){this.unlockShowing()}))},b.prototype.createEl=function(){var b=this.options_.contentElType||"ul";this.contentEl_=k.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_),o.on(c,"click",function(a){a.preventDefault(),a.stopImmediatePropagation()}),c},b}(i["default"]);i["default"].registerComponent("Menu",p),c["default"]=p,b.exports=c["default"]},{"../component.js":58,"../utils/dom.js":118,"../utils/events.js":119,"../utils/fn.js":120}],98:[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("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=e(h),j=a("global/document"),k=e(j),l=a("global/window"),m=e(l),n=a("./utils/events.js"),o=d(n),p=a("./utils/dom.js"),q=d(p),r=a("./utils/fn.js"),s=d(r),t=a("./utils/guid.js"),u=d(t),v=a("./utils/browser.js"),w=(d(v), +a("./utils/log.js")),x=e(w),y=a("./utils/to-title-case.js"),z=e(y),A=a("./utils/time-ranges.js"),B=a("./utils/buffer.js"),C=a("./utils/stylesheet.js"),D=d(C),E=a("./fullscreen-api.js"),F=e(E),G=a("./media-error.js"),H=e(G),I=a("safe-json-parse/tuple"),J=e(I),K=a("object.assign"),L=e(K),M=a("./utils/merge-options.js"),N=e(M),O=a("./tracks/text-track-list-converter.js"),P=e(O),Q=a("./tech/loader.js"),R=(e(Q),a("./poster-image.js")),S=(e(R),a("./tracks/text-track-display.js")),T=(e(S),a("./loading-spinner.js")),U=(e(T),a("./big-play-button.js")),V=(e(U),a("./control-bar/control-bar.js")),W=(e(V),a("./error-display.js")),X=(e(W),a("./tracks/text-track-settings.js")),Y=(e(X),a("./tech/html5.js")),Z=(e(Y),function(a){function b(c,d,e){var g=this;if(f(this,b),c.id=c.id||"vjs_video_"+u.newGUID(),d=L["default"](b.getTagSettings(c),d),d.initChildren=!1,d.createEl=!1,d.reportTouchActivity=!1,a.call(this,null,d,e),!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?");this.tag=c,this.tagAttributes=c&&q.getElAttributes(c),this.language(this.options_.language),d.languages?!function(){var a={};Object.getOwnPropertyNames(d.languages).forEach(function(b){a[b.toLowerCase()]=d.languages[b]}),g.languages_=a}():this.languages_=b.prototype.options_.languages,this.cache_={},this.poster_=d.poster||"",this.controls_=!!d.controls,c.controls=!1,this.scrubbing_=!1,this.el_=this.createEl();var h=N["default"](this.options_);d.plugins&&!function(){var a=d.plugins;Object.getOwnPropertyNames(a).forEach(function(b){"function"==typeof this[b]?this[b](a[b]):x["default"].error("Unable to find plugin:",b)},g)}(),this.options_.playerOptions=h,this.initChildren(),this.isAudio("audio"===c.nodeName.toLowerCase()),this.addClass(this.controls()?"vjs-controls-enabled":"vjs-controls-disabled"),this.isAudio()&&this.addClass("vjs-audio"),this.flexNotSupported_()&&this.addClass("vjs-no-flex"),b.players[this.id_]=this,this.userActive(!0),this.reportUserActivity(),this.listenForUserActivity_(),this.on("fullscreenchange",this.handleFullscreenChange_),this.on("stageclick",this.handleStageClick_)}return g(b,a),b.prototype.dispose=function(){this.trigger("dispose"),this.off("dispose"),this.styleEl_&&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=q.getElAttributes(c);Object.getOwnPropertyNames(d).forEach(function(a){"class"===a?b.className=d[a]:b.setAttribute(a,d[a])}),c.id+="_html5_api",c.className="vjs-tech",c.player=b.player=this,this.addClass("vjs-paused"),this.styleEl_=D.createStyleElement("vjs-styles-dimensions");var e=k["default"].querySelector(".vjs-styles-defaults"),f=k["default"].querySelector("head");return 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),c.initNetworkState_=c.networkState,c.parentNode&&c.parentNode.insertBefore(b,c),q.insertElFirst(c,b),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 x["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(){var a=void 0,b=void 0,c=void 0;c=void 0!==this.aspectRatio_&&"auto"!==this.aspectRatio_?this.aspectRatio_:this.videoWidth()?this.videoWidth()+":"+this.videoHeight():"16:9";var d=c.split(":"),e=d[1]/d[0];a=void 0!==this.width_?this.width_:void 0!==this.height_?this.height_/e:this.videoWidth()||300,b=void 0!==this.height_?this.height_:a*e;var f=this.id()+"-dimensions";this.addClass(f),D.setTextContent(this.styleEl_,"\n ."+f+" {\n width: "+a+"px;\n height: "+b+"px;\n }\n\n ."+f+".vjs-fluid {\n padding-top: "+100*e+"%;\n }\n ")},b.prototype.loadTech_=function(a,b){this.tech_&&this.unloadTech_(),"Html5"!==a&&this.tag&&(i["default"].getComponent("Html5").disposeMediaElement(this.tag),this.tag.player=null,this.tag=null),this.techName_=a,this.isReady_=!1;var c=L["default"]({nativeControlsForTouch:this.options_.nativeControlsForTouch,source:b,playerId:this.id(),techId:this.id()+"_"+a+"_api",textTracks:this.textTracks_,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=i["default"].getComponent(a);this.tech_=new d(c),this.tech_.ready(s.bind(this,this.handleTechReady_),!0),P["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.usingNativeControls(this.techGet_("controls")),this.controls()&&!this.usingNativeControls()&&this.addTechControlsListeners_(),this.tech_.el().parentNode===this.el()||"Html5"===a&&this.tag||q.insertElFirst(this.tech_.el(),this.el()),this.tag&&(this.tag.player=null,this.tag=null)},b.prototype.unloadTech_=function(){this.textTracks_=this.textTracks(),this.textTracksJson_=P["default"].textTracksToJson(this),this.isReady_=!1,this.tech_.dispose(),this.tech_=!1},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(){this.triggerReady(),this.cache_.volume&&this.techCall_("setVolume",this.cache_.volume),this.handleTechPosterChange_(),this.handleTechDurationChange_(),this.tag&&this.options_.autoplay&&this.paused()&&(delete this.tag.poster,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(){this.addClass("vjs-waiting"),this.trigger("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&&a.code)},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.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_[a](b)}catch(c){throw x["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]?x["default"]("Video.js: "+a+" method not defined for "+this.techName_+" playback technology.",b):"TypeError"===b.name?(x["default"]("Video.js: "+a+" unavailable on "+this.techName_+" playback technology element.",b),this.tech_.isReady_=!1):x["default"](b),b}},b.prototype.play=function(){return this.techCall_("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},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=A.createTimeRange(0,0)),c},b.prototype.bufferedPercent=function(){return B.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=F["default"];return this.isFullscreen(!0),a.requestFullscreen?(o.on(k["default"],a.fullscreenchange,s.bind(this,function b(){this.isFullscreen(k["default"][a.fullscreenElement]),this.isFullscreen()===!1&&o.off(k["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=F["default"];return this.isFullscreen(!1),a.requestFullscreen?k["default"][a.exitFullscreen]():this.tech_.supportsFullScreen()?this.techCall_("exitFullScreen"):(this.exitFullWindow(),this.trigger("fullscreenchange")),this},b.prototype.enterFullWindow=function(){this.isFullWindow=!0,this.docOrigOverflow=k["default"].documentElement.style.overflow,o.on(k["default"],"keydown",s.bind(this,this.fullWindowOnEscKey)),k["default"].documentElement.style.overflow="hidden",q.addElClass(k["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,o.off(k["default"],"keydown",this.fullWindowOnEscKey),k["default"].documentElement.style.overflow=this.docOrigOverflow,q.removeElClass(k["default"].body,"vjs-full-window"),this.trigger("exitFullWindow")},b.prototype.selectSource=function(a){for(var b=0,c=this.options_.techOrder;b0&&(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.textTracks=function(){return this.tech_&&this.tech_.textTracks()},b.prototype.remoteTextTracks=function(){return this.tech_&&this.tech_.remoteTextTracks()},b.prototype.addTextTrack=function(a,b,c){return this.tech_&&this.tech_.addTextTrack(a,b,c)},b.prototype.addRemoteTextTrack=function(a){return this.tech_&&this.tech_.addRemoteTextTrack(a)},b.prototype.removeRemoteTextTrack=function(a){this.tech_&&this.tech_.removeRemoteTextTrack(a)},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_=(""+a).toLowerCase(),this)},b.prototype.languages=function(){return N["default"](b.prototype.options_.languages,this.languages_)},b.prototype.toJSON=function(){var a=N["default"](this.options_),b=a.tracks;a.tracks=[];for(var c=0;ci;i++){var k=h[i],l=k.nodeName.toLowerCase();"source"===l?b.sources.push(q.getElAttributes(k)):"track"===l&&b.tracks.push(q.getElAttributes(k))}return b},b}(i["default"]));Z.players={};var $=m["default"].navigator;Z.prototype.options_={techOrder:["html5","flash"],html5:{},flash:{},defaultVolume:0,inactivityTimeout:2e3,playbackRates:[],children:["mediaLoader","posterImage","textTrackDisplay","loadingSpinner","bigPlayButton","controlBar","errorDisplay","textTrackSettings"],language:k["default"].getElementsByTagName("html")[0].getAttribute("lang")||$.languages&&$.languages[0]||$.userLanguage||$.language||"en",languages:{},notSupportedMessage:"No compatible source was found for this video."},Z.prototype.handleLoadedMetaData_,Z.prototype.handleLoadedData_,Z.prototype.handleUserActive_,Z.prototype.handleUserInactive_,Z.prototype.handleTimeUpdate_,Z.prototype.handleVolumeChange_,Z.prototype.handleError_,Z.prototype.flexNotSupported_=function(){var a=k["default"].createElement("i");return!("flexBasis"in a.style||"webkitFlexBasis"in a.style||"mozFlexBasis"in a.style||"msFlexBasis"in a.style||"msFlexOrder"in a.style)},i["default"].registerComponent("Player",Z),c["default"]=Z,b.exports=c["default"]},{"./big-play-button.js":56,"./component.js":58,"./control-bar/control-bar.js":59,"./error-display.js":89,"./fullscreen-api.js":92,"./loading-spinner.js":93,"./media-error.js":94,"./poster-image.js":100,"./tech/html5.js":105,"./tech/loader.js":106,"./tracks/text-track-display.js":109,"./tracks/text-track-list-converter.js":111,"./tracks/text-track-settings.js":113,"./utils/browser.js":115,"./utils/buffer.js":116,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/guid.js":122,"./utils/log.js":123,"./utils/merge-options.js":124,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/to-title-case.js":127,"global/document":1,"global/window":2,"object.assign":43,"safe-json-parse/tuple":48}],99:[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,b.exports=c["default"]},{"./player.js":98}],100:[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("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=e(h),j=a("./component.js"),k=e(j),l=a("./utils/fn.js"),m=d(l),n=a("./utils/dom.js"),o=d(n),p=a("./utils/browser.js"),q=d(p),r=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.update(),c.on("posterchange",m.bind(this,this.update))}return g(b,a),b.prototype.dispose=function(){this.player().off("posterchange",this.update),a.prototype.dispose.call(this)},b.prototype.createEl=function(){var a=o.createEl("div",{className:"vjs-poster",tabIndex:-1});return q.BACKGROUND_SIZE_SUPPORTED||(this.fallbackImg_=o.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}(i["default"]);k["default"].registerComponent("PosterImage",r),c["default"]=r,b.exports=c["default"]},{"./button.js":57,"./component.js":58,"./utils/browser.js":115,"./utils/dom.js":118,"./utils/fn.js":120}],101:[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}c.__esModule=!0;var f=a("./utils/events.js"),g=e(f),h=a("global/document"),i=d(h),j=a("global/window"),k=d(j),l=!1,m=void 0,n=function(){var a=i["default"].getElementsByTagName("video"),b=i["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 d=0,e=b.length;e>d;d++)c.push(b[d]);if(c&&c.length>0)for(var d=0,e=c.length;e>d;d++){var f=c[d];if(!f||!f.getAttribute){o(1);break}if(void 0===f.player){var g=f.getAttribute("data-setup");if(null!==g){m(f)}}}else l||o(1)},o=function(a,b){m=b,setTimeout(n,a)};"complete"===i["default"].readyState?l=!0:g.one(k["default"],"load",function(){l=!0});var p=function(){return l};c.autoSetup=n,c.autoSetupTimeout=o,c.hasLoaded=p},{"./utils/events.js":119,"global/document":1,"global/window":2}],102:[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("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=e(h),j=a("../utils/dom.js"),k=d(j),l=a("global/document"),m=e(l),n=a("object.assign"),o=e(n),p=function(a){function b(c,d){f(this,b),a.call(this,c,d),this.bar=this.getChild(this.options_.barName),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(c,"controlsvisible",this.update),this.on(c,this.playerEvent,this.update)}return g(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=o["default"]({tabIndex:0},c),d=o["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){a.preventDefault(),k.blockTextSelection(),this.addClass("vjs-sliding"),this.trigger("slideractive"),this.on(m["default"],"mousemove",this.handleMouseMove),this.on(m["default"],"mouseup",this.handleMouseUp),this.on(m["default"],"touchmove",this.handleMouseMove),this.on(m["default"],"touchend",this.handleMouseUp),this.handleMouseMove(a)},b.prototype.handleMouseMove=function(){},b.prototype.handleMouseUp=function(){k.unblockTextSelection(),this.removeClass("vjs-sliding"),this.trigger("sliderinactive"),this.off(m["default"],"mousemove",this.handleMouseMove),this.off(m["default"],"mouseup",this.handleMouseUp),this.off(m["default"],"touchmove",this.handleMouseMove),this.off(m["default"],"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=k.getPointerPosition(this.el_,a);return this.vertical()?b.y:b.x},b.prototype.handleFocus=function(){this.on(m["default"],"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(m["default"],"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}(i["default"]);i["default"].registerComponent("Slider",p),c["default"]=p,b.exports=c["default"]},{"../component.js":58,"../utils/dom.js":118,"global/document":1,"object.assign":43}],103:[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.indexOf("&"),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.canHandleSource=function(b){return a.isStreamingType(b.type)||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,b.exports=c["default"]},{}],104:[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("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 h(a){var b=a.charAt(0).toUpperCase()+a.slice(1);A["set"+b]=function(b){return this.el_.vjs_setProperty(a,b)}}function i(a){A[a]=function(){return this.el_.vjs_getProperty(a)}}c.__esModule=!0;for(var j=a("./tech"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/time-ranges.js"),q=a("./flash-rtmp"),r=e(q),s=a("../component"),t=e(s),u=a("global/window"),v=e(u),w=a("object.assign"),x=e(w),y=v["default"].navigator,z=function(a){function b(c,d){f(this,b),a.call(this,c,d),c.source&&this.ready(function(){this.setSource(c.source)},!0),c.startTime&&this.ready(function(){this.load(),this.play(),this.currentTime(c.startTime)},!0),v["default"].videojs=v["default"].videojs||{},v["default"].videojs.Flash=v["default"].videojs.Flash||{},v["default"].videojs.Flash.onReady=b.onReady,v["default"].videojs.Flash.onEvent=b.onEvent,v["default"].videojs.Flash.onError=b.onError,this.on("seeked",function(){this.lastSeekTarget_=void 0})}return g(b,a),b.prototype.createEl=function(){var a=this.options_;a.swf||(a.swf="//vjs.zencdn.net/swf/5.0.0-rc1/video-js.swf");var c=a.techId,d=x["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),e=x["default"]({wmode:"opaque",bgcolor:"#000000"},a.params),f=x["default"]({id:c,name:c,"class":"vjs-tech"},a.attributes);return this.el_=b.embed(a.swf,d,e,f),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){if(a=o.getAbsoluteURL(a),this.el_.vjs_src(a),this.autoplay()){var b=this;this.setTimeout(function(){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=10},k["default"].withSourceHandlers(z),z.nativeSourceHandler={},z.nativeSourceHandler.canHandleSource=function(a){function b(a){var b=o.getFileExtension(a);return b?"video/"+b:""}var c;return c=a.type?a.type.replace(/;.*/,"").toLowerCase():b(a.src),c in z.formats?"maybe":""},z.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},z.nativeSourceHandler.dispose=function(){},z.registerSourceHandler(z.nativeSourceHandler),z.formats={"video/flv":"FLV","video/x-flv":"FLV","video/mp4":"MP4","video/m4v":"MP4"},z.onReady=function(a){var b=m.getEl(a),c=b&&b.tech;c&&c.el()&&z.checkReady(c)},z.checkReady=function(a){a.el()&&(a.el().vjs_getProperty?a.triggerReady():this.setTimeout(function(){z.checkReady(a)},50))},z.onEvent=function(a,b){var c=m.getEl(a).tech;c.trigger(b)},z.onError=function(a,b){var c=m.getEl(a).tech;return"srcnotfound"===b?c.error(4):void c.error("FLASH: "+b)},z.version=function(){var a="0,0,0";try{a=new v["default"].ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/\D+/g,",").match(/^,?(.+),?$/)[1]}catch(b){try{y.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(a=(y.plugins["Shockwave Flash 2.0"]||y.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1])}catch(c){}}return a.split(",")},z.embed=function(a,b,c,d){var e=z.getEmbedCode(a,b,c,d),f=m.createEl("div",{innerHTML:e}).childNodes[0];return f},z.getEmbedCode=function(a,b,c,d){var e=''}),d=x["default"]({data:a,width:"100%",height:"100%"},d),Object.getOwnPropertyNames(d).forEach(function(a){h+=a+'="'+d[a]+'" '}),""+e+h+">"+g+""},r["default"](z),t["default"].registerComponent("Flash",z),c["default"]=z,b.exports=c["default"]},{"../component":58,"../utils/dom.js":118,"../utils/time-ranges.js":126,"../utils/url.js":128,"./flash-rtmp":103,"./tech":107,"global/window":2,"object.assign":43}],105:[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("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("./tech.js"),i=e(h),j=a("../component"),k=e(j),l=a("../utils/dom.js"),m=d(l),n=a("../utils/url.js"),o=d(n),p=a("../utils/fn.js"),q=d(p),r=a("../utils/log.js"),s=e(r),t=a("../utils/browser.js"),u=d(t),v=a("global/document"),w=e(v),x=a("global/window"),y=e(x),z=a("object.assign"),A=e(z),B=a("../utils/merge-options.js"),C=e(B),D=function(a){function b(c,d){f(this,b),a.call(this,c,d);var e=c.source;if(e&&(this.el_.currentSrc!==e.src||c.tag&&3===c.tag.initNetworkState_)?this.setSource(e):this.handleLateInit_(this.el_),this.el_.hasChildNodes()){for(var g=this.el_.childNodes,h=g.length,i=[];h--;){var j=g[h],k=j.nodeName.toLowerCase();"track"===k&&(this.featuresNativeTextTracks?this.remoteTextTracks().addTrack_(j.track):i.push(j))}for(var l=0;l=0;g--){var h=f[g],i={};"undefined"!=typeof this.options_[h]&&(i[h]=this.options_[h]),m.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"==typeof 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;a&&a.addEventListener&&(a.addEventListener("change",this.handleTextTrackChange_),a.addEventListener("addtrack",this.handleTextTrackAdd_),a.addEventListener("removetrack",this.handleTextTrackRemove_))},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.play=function(){this.el_.play()},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){s["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=y["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.currentSrc=function(){return 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=w["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.remoteTextTracks().addTrack_(c.track),c},b.prototype.removeRemoteTextTrack=function(b){if(!this.featuresNativeTextTracks)return a.prototype.removeRemoteTextTrack.call(this,b);var c,d;for(this.remoteTextTracks().removeTrack_(b),c=this.el().querySelectorAll("track"),d=c.length;d--;)(b===c[d]||b===c[d].track)&&this.el().removeChild(c[d])},b}(i["default"]);D.TEST_VID=w["default"].createElement("video");var E=w["default"].createElement("track");E.kind="captions",E.srclang="en",E.label="English",D.TEST_VID.appendChild(E),D.isSupported=function(){try{D.TEST_VID.volume=.5}catch(a){return!1}return!!D.TEST_VID.canPlayType},i["default"].withSourceHandlers(D),D.nativeSourceHandler={},D.nativeSourceHandler.canHandleSource=function(a){function b(a){try{return D.TEST_VID.canPlayType(a)}catch(b){return""}}var c;return a.type?b(a.type):a.src?(c=o.getFileExtension(a.src),b("video/"+c)):""},D.nativeSourceHandler.handleSource=function(a,b){b.setSrc(a.src)},D.nativeSourceHandler.dispose=function(){},D.registerSourceHandler(D.nativeSourceHandler),D.canControlVolume=function(){var a=D.TEST_VID.volume;return D.TEST_VID.volume=a/2+.1,a!==D.TEST_VID.volume},D.canControlPlaybackRate=function(){var a=D.TEST_VID.playbackRate;return D.TEST_VID.playbackRate=a/2+.1,a!==D.TEST_VID.playbackRate},D.supportsNativeTextTracks=function(){var a;return a=!!D.TEST_VID.textTracks,a&&D.TEST_VID.textTracks.length>0&&(a="number"!=typeof D.TEST_VID.textTracks[0].mode),a&&u.IS_FIREFOX&&(a=!1),!a||"onremovetrack"in D.TEST_VID.textTracks||(a=!1),a},D.Events=["loadstart","suspend","abort","error","emptied","stalled","loadedmetadata","loadeddata","canplay","canplaythrough","playing","waiting","seeking","seeked","ended","durationchange","timeupdate","progress","play","pause","ratechange","volumechange"],D.prototype.featuresVolumeControl=D.canControlVolume(),D.prototype.featuresPlaybackRate=D.canControlPlaybackRate(),D.prototype.movingMediaElementInDOM=!u.IS_IOS,D.prototype.featuresFullscreenResize=!0,D.prototype.featuresProgressEvents=!0,D.prototype.featuresNativeTextTracks=D.supportsNativeTextTracks();var F=void 0,G=/^application\/(?:x-|vnd\.apple\.)mpegurl/i,H=/^video\/mp4/i;D.patchCanPlayType=function(){u.ANDROID_VERSION>=4&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&G.test(a)?"maybe":F.call(this,a)}),u.IS_OLD_ANDROID&&(F||(F=D.TEST_VID.constructor.prototype.canPlayType),D.TEST_VID.constructor.prototype.canPlayType=function(a){return a&&H.test(a)?"maybe":F.call(this,a)})},D.unpatchCanPlayType=function(){var a=D.TEST_VID.constructor.prototype.canPlayType;return D.TEST_VID.constructor.prototype.canPlayType=F,F=null,a},D.patchCanPlayType(),D.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){}}()}},k["default"].registerComponent("Html5",D),c["default"]=D,b.exports=c["default"]},{"../component":58,"../utils/browser.js":115,"../utils/dom.js":118,"../utils/fn.js":120,"../utils/log.js":123,"../utils/merge-options.js":124,"../utils/url.js":128,"./tech.js":107,"global/document":1,"global/window":2,"object.assign":43}],106:[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("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 g=a("../component"),h=d(g),i=a("global/window"),j=(d(i),a("../utils/to-title-case.js")),k=d(j),l=function(a){function b(c,d,f){if(e(this,b),a.call(this,c,d,f),d.playerOptions.sources&&0!==d.playerOptions.sources.length)c.src(d.playerOptions.sources);else for(var g=0,i=d.playerOptions.techOrder;gb)for(c=b;d>c;c++)e.call(this,c)},j.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},c["default"]=j,b.exports=c["default"]},{"../utils/browser.js":115,"global/document":1}],109:[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("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 h(a,b){return"rgba("+parseInt(a[1]+a[1],16)+","+parseInt(a[2]+a[2],16)+","+parseInt(a[3]+a[3],16)+","+b+")"}function i(a,b,c){try{a.style[b]=c}catch(d){}}c.__esModule=!0;var j=a("../component"),k=e(j),l=a("../menu/menu.js"),m=(e(l),a("../menu/menu-item.js")),n=(e(m),a("../menu/menu-button.js")),o=(e(n),a("../utils/fn.js")),p=d(o),q=a("global/document"),r=(e(q),a("global/window")),s=e(r),t="#222",u="#ccc",v={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'},w=function(a){function b(c,d,e){f(this,b),a.call(this,c,d,e),c.on("loadstart",p.bind(this,this.toggleDisplay)),c.on("texttrackchange",p.bind(this,this.updateDisplay)),c.ready(p.bind(this,function(){if(c.tech_&&c.tech_.featuresNativeTextTracks)return void this.hide();c.on("fullscreenchange",p.bind(this,this.updateDisplay));for(var a=this.options_.playerOptions.tracks||[],b=0;bc;c++)if(b=this[c],b===a){this.tracks_.splice(c,1);break}this.trigger({type:"removetrack",track:b})},n.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},c["default"]=n,b.exports=c["default"]},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"global/document":1}],113:[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("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 h(a){var b=void 0;return a.selectedOptions?b=a.selectedOptions[0]:a.options&&(b=a.options[a.options.selectedIndex]),b.value}function i(a,b){if(b){var c=void 0;for(c=0;c select").selectedIndex=0,this.el().querySelector(".vjs-bg-color > select").selectedIndex=0,this.el().querySelector(".window-color > select").selectedIndex=0,this.el().querySelector(".vjs-text-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-bg-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-window-opacity > select").selectedIndex=0,this.el().querySelector(".vjs-edge-style select").selectedIndex=0,this.el().querySelector(".vjs-font-family select").selectedIndex=0,this.el().querySelector(".vjs-font-percent select").selectedIndex=2,this.updateDisplay()})),n.on(this.el().querySelector(".vjs-fg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".window-color > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-text-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-bg-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-window-opacity > select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-percent select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-edge-style select"),"change",p.bind(this,this.updateDisplay)),n.on(this.el().querySelector(".vjs-font-family select"),"change",p.bind(this,this.updateDisplay)),this.options_.persistTextTrackSettings&&this.restoreSettings()}return g(b,a),b.prototype.createEl=function(){return a.prototype.createEl.call(this,"div",{className:"vjs-caption-settings vjs-modal-overlay",innerHTML:j()})},b.prototype.getValues=function(){var a=this.el(),b=h(a.querySelector(".vjs-edge-style select")),c=h(a.querySelector(".vjs-font-family select")),d=h(a.querySelector(".vjs-fg-color > select")),e=h(a.querySelector(".vjs-text-opacity > select")),f=h(a.querySelector(".vjs-bg-color > select")),g=h(a.querySelector(".vjs-bg-opacity > select")),i=h(a.querySelector(".window-color > select")),j=h(a.querySelector(".vjs-window-opacity > select")),k=v["default"].parseFloat(h(a.querySelector(".vjs-font-percent > select"))),l={backgroundOpacity:g,textOpacity:e,windowOpacity:j,edgeStyle:b,fontFamily:c,color:d,backgroundColor:f,windowColor:i,fontPercent:k};for(var m in l)(""===l[m]||"none"===l[m]||"fontPercent"===m&&1===l[m])&&delete l[m];return l},b.prototype.setValues=function(a){var b=this.el();i(b.querySelector(".vjs-edge-style select"),a.edgeStyle),i(b.querySelector(".vjs-font-family select"),a.fontFamily),i(b.querySelector(".vjs-fg-color > select"),a.color),i(b.querySelector(".vjs-text-opacity > select"),a.textOpacity),i(b.querySelector(".vjs-bg-color > select"),a.backgroundColor),i(b.querySelector(".vjs-bg-opacity > select"),a.backgroundOpacity),i(b.querySelector(".window-color > select"),a.windowColor),i(b.querySelector(".vjs-window-opacity > select"),a.windowOpacity);var c=a.fontPercent;c&&(c=c.toFixed(2)),i(b.querySelector(".vjs-font-percent > select"),c)},b.prototype.restoreSettings=function(){var a=t["default"](v["default"].localStorage.getItem("vjs-text-track-settings")),b=a[0],c=a[1];b&&r["default"].error(b),c&&this.setValues(c)},b.prototype.saveSettings=function(){if(this.options_.persistTextTrackSettings){var a=this.getValues();try{Object.getOwnPropertyNames(a).length>0?v["default"].localStorage.setItem("vjs-text-track-settings",JSON.stringify(a)):v["default"].localStorage.removeItem("vjs-text-track-settings")}catch(b){}}},b.prototype.updateDisplay=function(){var a=this.player_.getChild("textTrackDisplay");a&&a.updateDisplay()},b}(l["default"]);l["default"].registerComponent("TextTrackSettings",w),c["default"]=w,b.exports=c["default"]},{"../component":58,"../utils/events.js":119,"../utils/fn.js":120,"../utils/log.js":123,"global/window":2,"safe-json-parse/tuple":48}],114:[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}}c.__esModule=!0;var f=a("./text-track-cue-list"),g=e(f),h=a("../utils/fn.js"),i=d(h),j=a("../utils/guid.js"),k=d(j),l=a("../utils/browser.js"),m=d(l),n=a("./text-track-enums"),o=d(n),p=a("../utils/log.js"),q=e(p),r=a("../event-target"),s=e(r),t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("../utils/url.js"),y=a("xhr"),z=e(y),A=function E(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];if(!a.tech)throw new Error("A tech was not provided.");var b=this;if(m.IS_IE8){b=u["default"].createElement("custom");for(var c in E.prototype)b[c]=E.prototype[c]}b.tech_=a.tech;var d=o.TextTrackMode[a.mode]||"disabled",e=o.TextTrackKind[a.kind]||"subtitles",f=a.label||"",h=a.language||a.srclang||"",j=a.id||"vjs_text_track_"+k.newGUID();("metadata"===e||"chapters"===e)&&(d="hidden"),b.cues_=[],b.activeCues_=[];var l=new g["default"](b.cues_),n=new g["default"](b.activeCues_),p=!1,q=i.bind(b,function(){this.activeCues,p&&(this.trigger("cuechange"),p=!1)});return"disabled"!==d&&b.tech_.on("timeupdate",q),Object.defineProperty(b,"kind",{get:function(){return e},set:Function.prototype}),Object.defineProperty(b,"label",{get:function(){return f},set:Function.prototype}),Object.defineProperty(b,"language",{get:function(){return h},set:Function.prototype}),Object.defineProperty(b,"id",{get:function(){return j},set:Function.prototype}),Object.defineProperty(b,"mode",{get:function(){return d},set:function(a){o.TextTrackMode[a]&&(d=a,"showing"===d&&this.tech_.on("timeupdate",q),this.trigger("modechange"))}}),Object.defineProperty(b,"cues",{get:function(){return this.loaded_?l:null},set:Function.prototype}),Object.defineProperty(b,"activeCues",{get:function(){if(!this.loaded_)return null;if(0===this.cues.length)return n;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(p=!1,b.length!==this.activeCues_.length)p=!0;else for(var c=0;cc;c++){var e=this.cues_[c];e===a&&(this.cues_.splice(c,1),b=!0)}b&&this.cues.setCues_(this.cues_)};var B=function F(a,b){if("function"!=typeof w["default"].WebVTT)return w["default"].setTimeout(function(){F(a,b)},25);var c=new w["default"].WebVTT.Parser(w["default"],w["default"].vttjs,w["default"].WebVTT.StringDecoder());c.oncue=function(a){b.addCue(a)},c.onparsingerror=function(a){q["default"].error(a)},c.parse(a),c.flush()},C=function(a,b){var c={uri:a},d=x.isCrossOrigin(a);d&&(c.cors=d),z["default"](c,i.bind(this,function(a,c,d){return a?q["default"].error(a,c):(b.loaded_=!0,void B(d,b))}))},D=function(a,b){if(null==this)throw new TypeError('"this" is null or not defined');var c=Object(this),d=c.length>>>0;if(0===d)return-1;var e=+b||0;if(Math.abs(e)===1/0&&(e=0),e>=d)return-1;for(var f=Math.max(e>=0?e:d-Math.abs(e),0);d>f;){if(f in c&&c[f]===a)return f;f++}return-1};c["default"]=A,b.exports=c["default"]},{"../event-target":90,"../utils/browser.js":115,"../utils/fn.js":120,"../utils/guid.js":122,"../utils/log.js":123,"../utils/url.js":128,"./text-track-cue-list":108,"./text-track-enums":110,"global/document":1,"global/window":2,xhr:50}],115:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=h["default"].navigator.userAgent,j=/AppleWebKit\/([\d.]+)/i.exec(i),k=j?parseFloat(j.pop()):null,l=/iPhone/i.test(i);c.IS_IPHONE=l;var m=/iPad/i.test(i);c.IS_IPAD=m;var n=/iPod/i.test(i);c.IS_IPOD=n;var o=l||m||n;c.IS_IOS=o;var p=function(){var a=i.match(/OS (\d+)_/i);return a&&a[1]?a[1]:void 0}();c.IOS_VERSION=p;var q=/Android/i.test(i);c.IS_ANDROID=q;var r=function(){var a,b,c=i.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i);return c?(a=c[1]&&parseFloat(c[1]),b=c[2]&&parseFloat(c[2]),a&&b?parseFloat(c[1]+"."+c[2]):a?a:null):null}();c.ANDROID_VERSION=r;var s=q&&/webkit/i.test(i)&&2.3>r;c.IS_OLD_ANDROID=s;var t=q&&5>r&&537>k;c.IS_NATIVE_ANDROID=t;var u=/Firefox/i.test(i);c.IS_FIREFOX=u;var v=/Chrome/i.test(i);c.IS_CHROME=v;var w=/MSIE\s8\.0/.test(i);c.IS_IE8=w;var x=!!("ontouchstart"in h["default"]||h["default"].DocumentTouch&&f["default"]instanceof h["default"].DocumentTouch);c.TOUCH_ENABLED=x;var y="backgroundSize"in f["default"].createElement("video").style;c.BACKGROUND_SIZE_SUPPORTED=y},{"global/document":1,"global/window":2}],116:[function(a,b,c){"use strict";function d(a,b){var c,d,f=0;if(!b)return 0;a&&a.length||(a=e.createTimeRange(0,0));for(var g=0;gb&&(d=b),f+=d-c;return f/b}c.__esModule=!0,c.bufferedPercent=d;var e=a("./time-ranges.js")},{"./time-ranges.js":126}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("./log.js"),f=d(e),g={get:function(a,b){return a[b]},set:function(a,b,c){return a[b]=c,!0}};c["default"]=function(a){var b=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];if("function"==typeof Proxy){var c=function(){var c={};return Object.keys(b).forEach(function(a){g.hasOwnProperty(a)&&(c[a]=function(){return f["default"].warn(b[a]),g[a].apply(this,arguments)})}),{v:new Proxy(a,c)}}();if("object"==typeof c)return c.v}return a},b.exports=c["default"]},{"./log.js":123}],118:[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 0===a.indexOf("#")&&(a=a.slice(1)),x["default"].getElementById(a)}function h(){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=x["default"].createElement(a);return Object.getOwnPropertyNames(b).forEach(function(a){var c=b[a];-1!==a.indexOf("aria-")||"role"===a||"type"===a?(D["default"].warn(F["default"](v,a,c)),d.setAttribute(a,c)):d[a]=c}),Object.getOwnPropertyNames(c).forEach(function(a){c[a];d.setAttribute(a,c[a])}),d}function i(a,b){b.firstChild?b.insertBefore(a,b.firstChild):b.appendChild(a)}function j(a){var b=a[H];return b||(b=a[H]=B.newGUID()),G[b]||(G[b]={}),G[b]}function k(a){var b=a[H];return b?!!Object.getOwnPropertyNames(G[b]).length:!1}function l(a){var b=a[H];if(b){delete G[b];try{delete a[H]}catch(c){a.removeAttribute?a.removeAttribute(H):a[H]=null}}}function m(a,b){return-1!==(" "+a.className+" ").indexOf(" "+b+" ")}function n(a,b){m(a,b)||(a.className=""===a.className?b:a.className+" "+b)}function o(a,b){if(m(a,b)){for(var c=a.className.split(" "),d=c.length-1;d>=0;d--)c[d]===b&&c.splice(d,1); -})}function p(a){var b,c,d,e,f;if(b={},c=",autoplay,controls,loop,muted,default,",a&&a.attributes&&a.attributes.length>0){d=a.attributes;for(var g=d.length-1;g>=0;g--)e=d[g].name,f=d[g].value,("boolean"==typeof a[e]||-1!==c.indexOf(","+e+","))&&(f=null!==f?!0:!1),b[e]=f}return b}function q(){u["default"].body.focus(),u["default"].onselectstart=function(){return!1}}function r(){u["default"].onselectstart=function(){return!0}}function s(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=u["default"].documentElement,d=u["default"].body,e=c.clientLeft||d.clientLeft||0,f=w["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=w["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}c.__esModule=!0,c.getEl=f,c.createEl=g,c.insertElFirst=h,c.getElData=i,c.hasElData=j,c.removeElData=k,c.hasElClass=l,c.addElClass=m,c.removeElClass=n,c.setElAttributes=o,c.getElAttributes=p,c.blockTextSelection=q,c.unblockTextSelection=r,c.findElPosition=s;var t=a("global/document"),u=e(t),v=a("global/window"),w=e(v),x=a("./guid.js"),y=d(x),z={},A="vdata"+(new Date).getTime()},{"./guid.js":111,"global/document":1,"global/window":2}],108:[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,c){if(Array.isArray(b))return l(f,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=j(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,h=f.length;h>g&&!b.isImmediatePropagationStopped();g++)f[g].call(a,b,c)}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function g(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return l(g,a,b,c);var e=function(b){d.handlers[b]=[],k(a,b)};if(b){var f=d.handlers[b];if(f){if(!c)return void e(b);if(c.guid)for(var h=0;h0||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,b.exports=c["default"]},{}],111:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],112:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){var c=Array.prototype.slice.call(b),d=function(){},e=g["default"].console||{log:d,warn:d,error:d};a?c.unshift(a.toUpperCase()+":"):a="log",h.history.push(c),c.unshift("VIDEOJS:"),e[a].apply?e[a].apply(e,c):e[a](c.join(" "))}c.__esModule=!0;var f=a("global/window"),g=d(f),h=function(){e(null,arguments)};h.history=[],h.error=function(){e("error",arguments)},h.warn=function(){e("warn",arguments)},c["default"]=h,b.exports=c["default"]},{"global/window":2}],113:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"==typeof a&&"[object Object]"===a.toString()&&a.constructor===Object}function f(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(i),h["default"].apply(null,a),a[0]}c.__esModule=!0,c["default"]=f;var g=a("lodash-compat/object/merge"),h=d(g),i=function(a,b){return e(b)?e(a)?void 0:f(b):b};b.exports=c["default"]},{"lodash-compat/object/merge":37}],114:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=function(a){var b=f["default"].createElement("style");return b.className=a,b};c.createStyleElement=g;var h=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b};c.setTextContent=h},{"global/document":1}],115:[function(a,b,c){"use strict";function d(a,b){return void 0===a&&void 0===b?{length:0,start:function(){throw new Error("This TimeRanges object is empty")},end:function(){throw new Error("This TimeRanges object is empty")}}:{length:1,start:function(){return a},end:function(){return b}}}c.__esModule=!0,c.createTimeRange=d},{}],116:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=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='',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;hx',a=b.firstChild.href}return a};c.getAbsoluteURL=h;var i=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.getFileExtension=i},{"global/document":1}],118:[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}}d.__esModule=!0;{var g=b("global/document"),h=f(g),i=b("./setup"),j=e(i),k=b("./utils/stylesheet.js"),l=e(k),m=b("./component"),n=f(m),o=b("./event-target"),p=f(o),q=b("./utils/events.js"),r=e(q),s=b("./player"),t=f(s),u=b("./plugins.js"),v=f(u),w=b("../../src/js/utils/merge-options.js"),x=f(w),y=b("./utils/fn.js"),z=e(y),A=b("object.assign"),B=(f(A),b("./utils/time-ranges.js")),C=b("./utils/format-time.js"),D=f(C),E=b("./utils/log.js"),F=f(E),G=b("./xhr.js"),H=f(G),I=b("./utils/dom.js"),J=e(I),K=b("./utils/browser.js"),L=e(K),M=b("./utils/url.js"),N=e(M),O=b("./extends.js"),P=f(O),Q=b("lodash-compat/object/merge"),R=f(Q),S=b("./utils/create-deprecation-proxy.js"),T=f(S),U=b("./tech/html5.js"),V=(f(U),b("./tech/flash.js"));f(V)}"undefined"==typeof HTMLVideoElement&&(h["default"].createElement("video"),h["default"].createElement("audio"),h["default"].createElement("track"));var W=function Z(a,b,c){var d;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),Z.getPlayers()[a])return b&&F["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&Z.getPlayers()[a].ready(c),Z.getPlayers()[a];d=J.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||new t["default"](d,b,c)},X=l.createStyleElement("vjs-styles-defaults"),Y=h["default"].querySelector("head");Y.insertBefore(X,Y.firstChild),l.setTextContent(X,"\n .video-js {\n width: 300px;\n height: 150px;\n"),j.autoSetupTimeout(1,W),W.VERSION="5.0.0-rc.72",W.options=t["default"].prototype.options_,W.getPlayers=function(){return t["default"].players},W.players=T["default"](t["default"].players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),W.getComponent=n["default"].getComponent,W.registerComponent=n["default"].registerComponent,W.browser=L,W.TOUCH_ENABLED=L.TOUCH_ENABLED,W["extends"]=P["default"],W.mergeOptions=x["default"],W.bind=z.bind,W.plugin=v["default"],W.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),R["default"](W.options.languages,(c={},c[a]=b,c))[a]},W.log=F["default"],W.createTimeRange=B.createTimeRange,W.formatTime=D["default"],W.xhr=H["default"],W.parseUrl=N.parseUrl,W.EventTarget=p["default"],W.on=r.on,W.one=r.one,W.off=r.off,W.trigger=r.trigger,"function"==typeof a&&a.amd?a("videojs",[],function(){return W}):"object"==typeof d&&"object"==typeof c&&(c.exports=W),d["default"]=W,c.exports=d["default"]},{"../../src/js/utils/merge-options.js":113,"./component":48,"./event-target":79,"./extends.js":80,"./player":87,"./plugins.js":88,"./setup":90,"./tech/flash.js":93,"./tech/html5.js":94,"./utils/browser.js":104,"./utils/create-deprecation-proxy.js":106,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/format-time.js":110,"./utils/log.js":112,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/url.js":117,"./xhr.js":119,"global/document":1,"lodash-compat/object/merge":37,"object.assign":40}],119:[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}c.__esModule=!0;var f=a("./utils/url.js"),g=e(f),h=a("./utils/log.js"),i=(d(h),a("./utils/merge-options.js")),j=d(i),k=a("global/window"),l=d(k),m=function(a,b){var c=void 0;"string"==typeof a&&(a={uri:a}),a=j["default"]({method:"GET",timeout:45e3},a),b=b||function(){};var d=l["default"].XMLHttpRequest;"undefined"==typeof d&&(d=function(){try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP.6.0")}catch(a){}try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP.3.0")}catch(b){}try{return new l["default"].ActiveXObject("Msxml2.XMLHTTP")}catch(c){}throw new Error("This browser does not support XMLHttpRequest.")});var e=new d;e.uri=a.uri;var f=g.parseUrl(a.uri),h=l["default"].location,i=function(){l["default"].clearTimeout(c),b(null,e,e.response||e.responseText)},k=function(a){l["default"].clearTimeout(c),a&&"string"!=typeof a||(a=new Error(a||"XHR Failed with a response of: "+(e&&(e.response||e.responseText)))),b(a,e)},m=f.protocol+f.host!==h.protocol+h.host;!m||!l["default"].XDomainRequest||"withCredentials"in e?!function(){var b="file:"===f.protocol||"file:"===h.protocol;e.onreadystatechange=function(){if(4===e.readyState){if(e.timedout)return k("timeout");200===e.status||b&&0===e.status?i():k()}},a.timeout&&(c=l["default"].setTimeout(function(){4!==e.readyState&&(e.timedout=!0,e.abort())},a.timeout))}():(e=new l["default"].XDomainRequest,e.onload=i,e.onerror=k,e.onprogress=function(){},e.ontimeout=function(){});try{e.open(a.method||"GET",a.uri,!0)}catch(n){return k(n)}a.withCredentials&&(e.withCredentials=!0),a.responseType&&(e.responseType=a.responseType);try{e.send()}catch(n){return k(n)}return e};c["default"]=m,b.exports=c["default"]},{"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/url.js":117,"global/window":2}]},{},[118])(118)}),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;ba||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=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;ei&&(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=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&":"&","<":"<",">":">","‎":"‎","‏":"‏"," ":" "},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]; +a.className=c.join(" ")}}function p(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 q(a){var b,c,d,e,f;if(b={},c=",autoplay,controls,loop,muted,default,",a&&a.attributes&&a.attributes.length>0){d=a.attributes;for(var g=d.length-1;g>=0;g--)e=d[g].name,f=d[g].value,("boolean"==typeof a[e]||-1!==c.indexOf(","+e+","))&&(f=null!==f?!0:!1),b[e]=f}return b}function r(){x["default"].body.focus(),x["default"].onselectstart=function(){return!1}}function s(){x["default"].onselectstart=function(){return!0}}function t(a){var b=void 0;if(a.getBoundingClientRect&&a.parentNode&&(b=a.getBoundingClientRect()),!b)return{left:0,top:0};var c=x["default"].documentElement,d=x["default"].body,e=c.clientLeft||d.clientLeft||0,f=z["default"].pageXOffset||d.scrollLeft,g=b.left+f-e,h=c.clientTop||d.clientTop||0,i=z["default"].pageYOffset||d.scrollTop,j=b.top+i-h;return{left:Math.round(g),top:Math.round(j)}}function u(a,b){var c={},d=t(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}c.__esModule=!0,c.getEl=g,c.createEl=h,c.insertElFirst=i,c.getElData=j,c.hasElData=k,c.removeElData=l,c.hasElClass=m,c.addElClass=n,c.removeElClass=o,c.setElAttributes=p,c.getElAttributes=q,c.blockTextSelection=r,c.unblockTextSelection=s,c.findElPosition=t,c.getPointerPosition=u;var v=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 ","."]),w=a("global/document"),x=e(w),y=a("global/window"),z=e(y),A=a("./guid.js"),B=d(A),C=a("./log.js"),D=e(C),E=a("tsml"),F=e(E),G={},H="vdata"+(new Date).getTime()},{"./guid.js":122,"./log.js":123,"global/document":1,"global/window":2,tsml:49}],119:[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,c){if(Array.isArray(b))return l(f,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=j(b);var e=d.handlers[b.type];if(e)for(var f=e.slice(0),g=0,h=f.length;h>g&&!b.isImmediatePropagationStopped();g++)f[g].call(a,b,c)}}),1===d.handlers[b].length&&(a.addEventListener?a.addEventListener(b,d.dispatcher,!1):a.attachEvent&&a.attachEvent("on"+b,d.dispatcher))}function g(a,b,c){if(n.hasElData(a)){var d=n.getElData(a);if(d.handlers){if(Array.isArray(b))return l(g,a,b,c);var e=function(b){d.handlers[b]=[],k(a,b)};if(b){var f=d.handlers[b];if(f){if(!c)return void e(b);if(c.guid)for(var h=0;h0||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,b.exports=c["default"]},{}],122:[function(a,b,c){"use strict";function d(){return e++}c.__esModule=!0,c.newGUID=d;var e=1},{}],123:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){var c=Array.prototype.slice.call(b),d=function(){},e=g["default"].console||{log:d,warn:d,error:d};a?c.unshift(a.toUpperCase()+":"):a="log",h.history.push(c),c.unshift("VIDEOJS:"),e[a].apply?e[a].apply(e,c):e[a](c.join(" "))}c.__esModule=!0;var f=a("global/window"),g=d(f),h=function(){e(null,arguments)};h.history=[],h.error=function(){e("error",arguments)},h.warn=function(){e("warn",arguments)},c["default"]=h,b.exports=c["default"]},{"global/window":2}],124:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a){return!!a&&"object"==typeof a&&"[object Object]"===a.toString()&&a.constructor===Object}function f(){var a=Array.prototype.slice.call(arguments);return a.unshift({}),a.push(i),h["default"].apply(null,a),a[0]}c.__esModule=!0,c["default"]=f;var g=a("lodash-compat/object/merge"),h=d(g),i=function(a,b){return e(b)?e(a)?void 0:f(b):b};b.exports=c["default"]},{"lodash-compat/object/merge":40}],125:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=function(a){var b=f["default"].createElement("style");return b.className=a,b};c.createStyleElement=g;var h=function(a,b){a.styleSheet?a.styleSheet.cssText=b:a.textContent=b};c.setTextContent=h},{"global/document":1}],126:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(a,b){return Array.isArray(a)?f(a):void 0===a||void 0===b?f():f([[a,b]])}function f(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:g.bind(null,"start",0,a),end:g.bind(null,"end",1,a)}}function g(a,b,c,d){return void 0===d&&(j["default"].warn("DEPRECATED: Function '"+a+"' on 'TimeRanges' called without an index argument."),d=0),h(a,d,c.length-1),c[d][b]}function h(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+").")}c.__esModule=!0,c.createTimeRanges=e;var i=a("./log.js"),j=d(i);c.createTimeRange=e},{"./log.js":123}],127:[function(a,b,c){"use strict";function d(a){return a.charAt(0).toUpperCase()+a.slice(1)}c.__esModule=!0,c["default"]=d,b.exports=c["default"]},{}],128:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}c.__esModule=!0;var e=a("global/document"),f=d(e),g=a("global/window"),h=d(g),i=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='',c=e.firstChild,e.setAttribute("style","display:none; position:absolute;"),f["default"].body.appendChild(e));for(var g={},h=0;hx',a=b.firstChild.href}return a};c.getAbsoluteURL=j;var k=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.getFileExtension=k;var l=function(a){var b=i(a),c=h["default"].location,d=":"===b.protocol?c.protocol:b.protocol,e=d+b.host!==c.protocol+c.host;return e};c.isCrossOrigin=l},{"global/document":1,"global/window":2}],129:[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}}d.__esModule=!0;{var g=b("global/document"),h=f(g),i=b("./setup"),j=e(i),k=b("./utils/stylesheet.js"),l=e(k),m=b("./component"),n=f(m),o=b("./event-target"),p=f(o),q=b("./utils/events.js"),r=e(q),s=b("./player"),t=f(s),u=b("./plugins.js"),v=f(u),w=b("../../src/js/utils/merge-options.js"),x=f(w),y=b("./utils/fn.js"),z=e(y),A=b("./tracks/text-track.js"),B=f(A),C=b("object.assign"),D=(f(C),b("./utils/time-ranges.js")),E=b("./utils/format-time.js"),F=f(E),G=b("./utils/log.js"),H=f(G),I=b("./utils/dom.js"),J=e(I),K=b("./utils/browser.js"),L=e(K),M=b("./utils/url.js"),N=e(M),O=b("./extend.js"),P=f(O),Q=b("lodash-compat/object/merge"),R=f(Q),S=b("./utils/create-deprecation-proxy.js"),T=f(S),U=b("xhr"),V=f(U),W=b("./tech/html5.js"),X=(f(W),b("./tech/flash.js"));f(X)}"undefined"==typeof HTMLVideoElement&&(h["default"].createElement("video"),h["default"].createElement("audio"),h["default"].createElement("track"));var Y=function _(a,b,c){var d;if("string"==typeof a){if(0===a.indexOf("#")&&(a=a.slice(1)),_.getPlayers()[a])return b&&H["default"].warn('Player "'+a+'" is already initialised. Options will not be applied.'),c&&_.getPlayers()[a].ready(c),_.getPlayers()[a];d=J.getEl(a)}else d=a;if(!d||!d.nodeName)throw new TypeError("The element or ID supplied is not valid. (videojs)");return d.player||new t["default"](d,b,c)},Z=h["default"].querySelector(".vjs-styles-defaults");if(!Z){Z=l.createStyleElement("vjs-styles-defaults");var $=h["default"].querySelector("head");$.insertBefore(Z,$.firstChild),l.setTextContent(Z,"\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ")}j.autoSetupTimeout(1,Y),Y.VERSION="5.0.0",Y.options=t["default"].prototype.options_,Y.getPlayers=function(){return t["default"].players},Y.players=T["default"](t["default"].players,{get:"Access to videojs.players is deprecated; use videojs.getPlayers instead",set:"Modification of videojs.players is deprecated"}),Y.getComponent=n["default"].getComponent,Y.registerComponent=n["default"].registerComponent,Y.browser=L,Y.TOUCH_ENABLED=L.TOUCH_ENABLED,Y.extend=P["default"],Y.mergeOptions=x["default"],Y.bind=z.bind,Y.plugin=v["default"],Y.addLanguage=function(a,b){var c;return a=(""+a).toLowerCase(),R["default"](Y.options.languages,(c={},c[a]=b,c))[a]},Y.log=H["default"],Y.createTimeRange=Y.createTimeRanges=D.createTimeRanges,Y.formatTime=F["default"],Y.parseUrl=N.parseUrl,Y.isCrossOrigin=N.isCrossOrigin,Y.EventTarget=p["default"],Y.on=r.on,Y.one=r.one,Y.off=r.off,Y.trigger=r.trigger,Y.xhr=V["default"],Y.TextTrack=B["default"],"function"==typeof a&&a.amd?a("videojs",[],function(){return Y}):"object"==typeof d&&"object"==typeof c&&(c.exports=Y),d["default"]=Y,c.exports=d["default"]},{"../../src/js/utils/merge-options.js":124,"./component":58,"./event-target":90,"./extend.js":91,"./player":98,"./plugins.js":99,"./setup":101,"./tech/flash.js":104,"./tech/html5.js":105,"./tracks/text-track.js":114,"./utils/browser.js":115,"./utils/create-deprecation-proxy.js":117,"./utils/dom.js":118,"./utils/events.js":119,"./utils/fn.js":120,"./utils/format-time.js":121,"./utils/log.js":123,"./utils/stylesheet.js":125,"./utils/time-ranges.js":126,"./utils/url.js":128,"global/document":1,"lodash-compat/object/merge":40,"object.assign":43,xhr:50}]},{},[129])(129)}),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;ba||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=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;ei&&(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=0&&100>=b)?(this.set(a,b),!0):!1}};var p={"&":"&","<":"<",">":">","‎":"‎","‏":"‏"," ":" "},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.lefta.left&&this.topa.top},l.prototype.overlapsAny=function(a){for(var b=0;b=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.lefta.right;case"+y":return this.topa.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")){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||{}); -//# sourceMappingURL=video.min.js.map +//# sourceMappingURL=video.min.js.map \ No newline at end of file diff --git a/node_modules/video.js/dist/video.min.js.map b/node_modules/video.js/dist/video.min.js.map index 4806728..8cd4138 100644 --- a/node_modules/video.js/dist/video.min.js.map +++ b/node_modules/video.js/dist/video.min.js.map @@ -1 +1 @@ -{"version":3,"file":"video.min.js","sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object.assign/index.js","node_modules/object.assign/node_modules/define-properties/index.js","node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js","node_modules/object.assign/node_modules/object-keys/index.js","node_modules/object.assign/node_modules/object-keys/isArguments.js","node_modules/safe-json-parse/tuple.js","src/js/big-play-button.js","src/js/button.js","src/js/component.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extends.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/player.js","src/js/plugins.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-enums.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/create-deprecation-proxy.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js","src/js/xhr.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_dereq_","topLevel","minDoc","document","doccy","min-document",2,3,4,"restParam","func","start","TypeError","FUNC_ERROR_TEXT","nativeMax","undefined","args","arguments","index","rest","Array","otherArgs","apply","Math","max",5,"arrayCopy","source","array",6,"arrayEach","iteratee",7,"baseCopy","props","object","key",8,"createBaseFor","baseFor","./createBaseFor",9,"baseForIn","keysIn","../object/keysIn","./baseFor",10,"baseMerge","customizer","stackA","stackB","isObject","isSrcArr","isArrayLike","isArray","isTypedArray","keys","srcValue","isObjectLike","baseMergeDeep","value","result","isCommon","../lang/isArray","../lang/isObject","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",11,"mergeFunc","isPlainObject","isArguments","toPlainObject","push","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",12,"baseProperty","toObject","./toObject",13,"bindCallback","thisArg","argCount","identity","collection","accumulator","other","../utility/identity",14,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",15,"fromRight","keysFunc","iterable",16,"getLength","./baseProperty",17,"getNative","isNative","../lang/isNative",18,"isLength","./getLength","./isLength",19,"isHostObject","Object","toString",20,"isIndex","reIsUint","test","MAX_SAFE_INTEGER",21,"type","./isIndex",22,23,24,"shimKeys","propsLength","allowIndexes","isString","hasOwnProperty","objectProto","prototype","../lang/isString",25,"support","unindexedChars","charAt","../support",26,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",27,"arrayTag","objToString","nativeIsArray","../internal/getNative","../internal/isLength",28,"isFunction","funcTag","./isObject",29,"reIsNative","fnToString","reIsHostCtor","Function","RegExp","replace","../internal/isHostObject","./isFunction",30,31,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",32,"stringTag",33,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",34,"../internal/baseCopy",35,"nativeKeys","enumPrototypes","../internal/shimKeys",36,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",37,"merge","../internal/baseMerge","../internal/createAssigner",38,"arrayProto","splice","x","0","y","spliceObjects",39,40,"canBeObject","obj","hasSymbols","Symbol","defineProperties","propIsEnumerable","assignShim","target","syms","objTarget","getOwnPropertySymbols","shim","assignHasPendingExceptions","assign","preventExtensions","thrower","define-properties","object-keys",41,"foreach","toStr","fn","arePropertyDescriptorsSupported","defineProperty","enumerable","_","supportsDescriptors","name","predicate","configurable","writable","map","predicates","concat",42,"hasOwn","ctx","k",43,"has","slice","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$window","$console","$parent","$self","$frames","$webkitIndexedDB","$webkitStorageInfo","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","keysWorksWithArguments","originalKeys",44,"str","callee",45,"SafeParseTuple","reviver","_componentJs2","_interopRequireDefault","_componentJs","_classCallCheck","BigPlayButton","_Button","player","options","buildCSSClass","__esModule","newObj","default","Constructor","instance","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_component2","_component","_objectAssign","Button","_Component","on","handleBlur","_objectAssign2","role","aria-live","el","controlTextEl_","innerHTML","localize","controlText_","handleFocus","Events","_globalDocument2","Fn","bind","handleKeyPress","event","which","preventDefault","handleClick","_interopRequireWildcard","_globalWindow2","_globalWindow","Dom","_utilsDomJs","Component","player_","id_","id","Guid","newGUID","el_","createEl","childIndex_","childNameIndex_","reportTouchActivity","trigger","bubbles","children_","dispose","removeElData","tagName","attributes","string","languages","language","children","getChildById","addChild","child","componentName","componentClassName","componentClass","_utilsToTitleCaseJs2","ComponentClass","getComponent","component","removeChild","getChild","childFound","options_","parentOptions","_this","handleAdd","opts","playerOptions","_name","first","second","removeOnDispose","_this2","off","cleanRemover","guid","third","nodeName","one","_this3","_arguments","newFunc","ready","sync","isReady_","readyQueue","readyQueue_","hasClass","classToCheck","hasElClass","addElClass","classToAdd","removeClass","classToRemove","removeElClass","show","dimension","num","skipListeners","widthOrHeight","val","style","emitTapEvents","touchStart","touchTimeThreshold","couldBeTap","touches","firstTouch","xdiff","pageX","touchDistance","tapMovementThreshold","noTap","touchTime","Date","getTime","enableTouchActivity","report","reportUserActivity","touchHolding","clearInterval","setInterval","touchEnd","setTimeout","timeout","timeoutId","intervalId","comp","init","subObj","extend","_name2","_spacerControlsCustomControlSpacerJs","ControlBar","className","FullscreenToggle","isFullscreen","controlText","LiveDisplay","MuteToggle","update","tech","addClass","vol","muted","level","toMute","handlePlay","handlePause","PlayToggle","play","pause","_menuMenuJs2","_menuMenuJs","PlaybackRateMenuButton","_MenuButton","updateVisibility","appendChild","labelEl_","menu","setAttribute","playbackRate","currentRate","newRate","playbackRates","playbackRateSupported","updateLabel","PlaybackRateMenuItem","_MenuItem","label","rate","buffered","percentify","time","end","percent","part","width","bufferedEnd","_utilsFormatTimeJs","updateDataAttr","_seekBarJs","ProgressControl","_Slider","updateARIAAttributes","aria-label","scrubbing","getCache","currentTime","getPercent","toFixed","_utilsFormatTimeJs2","duration","SeekBar","newTime","videoWasPlaying","stepForward","stepBack","_sliderSliderJs2","CustomControlSpacer","_Spacer","Spacer","_TextTrackMenuItem","CaptionSettingsMenuItem","_captionSettingsMenuItemJs2","_captionSettingsMenuItemJs","_TextTrackButton","CaptionsButton","threshold","hide","items","kind","kind_","_textTrackMenuItemJs2","_textTrackMenuItemJs","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","ChaptersButton","createItems","tracks","textTracks","createMenu","track","cues","chaptersTrack","contentEl","tabIndex","cue","mi","_utilsFnJs","ChaptersTrackMenuItem","addEventListener","startTime","OffTextTrackMenuItem","selected","handleTracksChange","_offTextTrackMenuItemJs","TextTrackButton","updateHandler","removeEventListener","_offTextTrackMenuItemJs2","_globalDocument","TextTrackMenuItem","onchange","Event","err","dispatchEvent","updateContent","CurrentTimeDisplay","contentEl_","DurationDisplay","RemainingTimeDisplay","formattedTime","remainingTime","localizedText","TimeDivider","_sliderSliderJs","_volumeLevelJs","volume","calculateDistance","VolumeBar","VolumeControl","_volumeBarJs","VolumeLevel","_volumeControlVolumeBarJs","VolumeMenuButton","vertical","inline","volumeBar","volumeUpdate","orientationClass","contentElType","unlockShowing","vc","./utils/dom.js",79,"_utilsEventsJs","EventTarget","allowedEvents_","ael","_utilsLog","_utilsLog2","subClassMethods","methods","FullscreenApi","apiMap","browserApi","LoadingSpinner","MediaError","message","status","errorTypes","_buttonJs2","_buttonJs","_utilsToTitleCaseJs","MenuButton","title","buttonPressed_","unpressButton","focus","MenuItem","_selected","Menu","append","_utilsBrowserJs","_utilsLogJs2","_utilsLogJs","_utilsMergeOptionsJs","_tracksTextTrackListConverterJs","_controlBarControlBarJs","tagAttributes","getElAttributes","languagesToLower","toLowerCase","_utilsMergeOptionsJs2","plugins","getOwnPropertyNames","forEach","playerOptionsCopy","isAudio","controls","Player","styleEl_","parentNode","players","removeAttribute","defaultsStyleEl","querySelector","height","aspectRatio","privDimension","_dimension","parsedVal","parseFloat","updateStyleEl_","fluid","bool","ratio","aspectRatio_","videoWidth","videoHeight","ratioParts","split","width_","height_","ratioMultiplier","loadTech","techName","disposeMediaElement","techReady","triggerReady","techOptions","nativeControlsForTouch","playerId","techId","textTracks_","preload","loop","poster","currentType_","cache_","src","techComponent","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechReady","handleTechLoadStart","handleTechWaiting","handleTechCanPlay","handleTechCanPlayThrough","handleTechPlaying","handleTechEnded","handleTechSeeking","handleTechSeeked","handleTechPlay","handleTechFirstPlay","handleTechPause","handleTechProgress","handleTechDurationChange","handleTechFullscreenChange","handleTechSuspend","handleTechEmptied","handleTechStalled","handleTechLoadedMetaData","handleTechVolumeChange","onTextTrackChange","usingNativeControls","addTechControlsListeners","removeTechControlsListeners","handleTechClick","handleTechTouchMove","handleTechTouchEnd","autoplay","paused","error","hasStarted","_hasStarted","hasStarted_","bufferedPercent","handleTechTap","handleTechTouchStart","userWasActive","userActive","updateDuration","techGet","handleStageClick","data","handleTechError","handleTechAbort","handleTechLoadedData","handleTechTimeUpdate","handleTechRateChange","techCall","method","arg","isScrubbing","scrubbing_","seconds","_utilsBufferJs","percentAsDecimal","fsApi","fullscreenchange","documentFullscreenChange","requestFullscreen","supportsFullScreen","exitFullscreen","isFullWindow","docOrigOverflow","documentElement","overflow","body","exitFullWindow","b","currentTech","sourceList_","load","sourceTech","selectSource","controls_","usingNativeControls_","error_","_mediaErrorJs2","ended","seeking","seekable","userActivity_","userActive_","stopPropagation","listenForUserActivity","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","handleMouseDown","handleMouseUp","clearTimeout","inactivityTimeout","addTextTrack","addRemoteTextTrack","removeRemoteTextTrack","languages_","toJSON","tagOptions","dataSetup","_safeParseTuple","baseOptions","hasChildNodes","childNodes","childName","defaultVolume","posterImage","bigPlayButton","controlBar","_playerJs","PosterImage","fallbackImg_","setSrc","url","_windowLoaded","autoSetup","vids","getElementsByTagName","mediaEls","audios","mediaEl","getAttribute","autoSetupTimeout","vjs","wait","readyState","Slider","bar","barName","playerEvent","handleMouseMove","progress","percentage","box","findElPosition","boxY","top","pageY","changedTouches","min","boxH","boxX","left","boxW","stopImmediatePropagation","vertical_","registerComponent","FlashRtmpDecorator","Flash","streamingFormats","streamToParts","parts","connection","stream","connEnd","indexOf","streamBegin","lastIndexOf","substring","rtmpSourceHandler","attrUpper","attr","toUpperCase","_api","vjs_setProperty","vjs_getProperty","_tech","_utilsUrlJs","_Tech","setSource","objId","eventProxyFunction","errorEventProxyFunction","flashVars","params","wmode","embed","swf","setCurrentTime","vjs_pause","lastSeekTarget_","currentSource_","setPoster","_utilsTimeRangesJs","createTimeRange","ranges","enterFullScreen","_tech2","_readWrite","_readOnly","_createGetter","nativeSourceHandler","canHandleSource","guessMimeType","ext","Url","getFileExtension","video/flv","video/mp4","checkReady","onEvent","swfID","eventName","getEl","version","navigator","description","match","getEmbedCode","flashVarsString","paramsString","attrsString","flashvars","_techJs2","_techJs","Html5","currentSrc","initNetworkState_","nodesLength","nodes","node","featuresNativeTextTracks","remoteTextTracks","addTrack_","removeNodes","handleTextTrackChange_","handleTextTrackChange","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","emulatedTt","tt","handleTextTrackAdd_","clone","cloneNode","createElement","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","overwriteAttrs","setVolume","setMuted","offsetWidth","offsetHeight","video","networkState","HAVE_METADATA","webkitEnterFullScreen","exitFullScreen","webkitExitFullScreen","_src","setPreload","setAutoplay","setControls","setLoop","defaultMuted","played","removeTrack_","TEST_VID","srclang","isSupported","canPlayType","registerSourceHandler","canControlVolume","canControlPlaybackRate","supportsNativeTextTracks","supportsTextTracks","mpegurlRE","patchCanPlayType","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","firstChild","MediaLoader","_tracksTextTrackList","Tech","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","nativeCaptions","nativeTextTracks","initControlsListeners","manualProgress","stopTrackingProgress","progressInterval","numBufferedPercent","onDurationChange","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","currentTimeInterval","manuallyTriggered","initTextTrackListeners","textTrackListChanges","script","textTracksChanges","updateDisplay","_tracksTextTrackList2","createTrackHelper","withSourceHandlers","handler","handlers","sourceHandlers","selectSourceHandler","sh","srcObj","sourceHandler_","disposeSourceHandler","handleSource","../tracks/text-track","../tracks/text-track-list","../utils/buffer.js","../utils/fn.js","../utils/log.js","../utils/time-ranges.js","global/document","global/window",97,"list","IS_IE8","prop","TextTrackCueList","get","length_","setCues_","cues_","oldLength","defineProp","parseInt","color","opacity","darkGray","lightGray","TextTrackDisplay","clearDisplay","updateForTrack","overrides","getValues","_i","cueDiv","displayState","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","fontMap","../component","../menu/menu-button.js","../menu/menu-item.js","../menu/menu.js",99,"TextTrackMode","disabled","hidden","showing","trackToJson_","inBandMetadataTrackDispatchType","textTracksToJson","trackEls","querySelectorAll","trackObjs","TextTrackList","tracks_","_eventTarget2","change","addtrack","removetrack","_event","rtrack","getTrackById","getSelectedOptionValue","selectedOption","selectedOptions","selectedIndex","option","TextTrackSettings","persistTextTrackSettings","saveSettings","restoreSettings","textEdge","fgColor","bgColor","bgOpacity","setValues","values","setSelectedOption","_safeJsonParseTuple2","localStorage","getItem","removeItem","ttDisplay","safe-json-parse/tuple",103,"_textTrackCueList2","_textTrackCueList","TextTrack","tech_","TextTrackEnum","TextTrackKind","mode","activeCues_","activeCues","changed","timeupdateHandler","set","newMode","loaded_","ct","active","addCue","removeCue","removed","parseCues","srcContent","parser","loadTrack","_xhrJs2","response","responseBody","O","len","fromIndex","abs","webkitVersionMap","exec","USER_AGENT","IS_IPHONE","IS_IPAD","IS_IPOD","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_NATIVE_ANDROID","appleWebkitVersion","bufferedDuration","_timeRangesJs","_logJs","_logJs2","messages","Proxy","_ret","warn","defaultBehaviors","getElementById","properties","propName","parent","getElData","elData","elIdAttr","element","classNames","join","knownBooleans","attrs","attrName","attrVal","onselectstart","getBoundingClientRect","docEl","clientLeft","scrollLeft","pageXOffset","blockTextSelection","_guidJs","elem","_handleMultipleEvents","dispatcher","hash","fixEvent","m","handlersCopy","isImmediatePropagationStopped","removeType","ownerDocument","isPropagationStopped","defaultPrevented","targetData","returnTrue","returnFalse","old","srcElement","relatedTarget","fromElement","toElement","returnValue","cancelBubble","doc","clientX","_cleanUpEvents","detachEvent","ret","context","guide","h","floor",111,"_logType","console","noop","log","history","argsArray","isPlain","mergeOptions","destination","lodash-compat/object/merge",114,"createStyleElement","_start","_end","parseUrl","href","addToBody","div","details","protocol","stylesheet","_utilsStylesheetJs","_player2","_player","_srcJsUtilsMergeOptionsJs","_xhrJs","_extendsJs","_lodashCompatObjectMerge","_techHtml5Js","getPlayers","head","insertBefore","addLanguage","./component","./event-target","./extends.js","./player","./plugins.js","./setup","./tech/flash.js","./tech/html5.js","./utils/browser.js","./utils/create-deprecation-proxy.js","./utils/events.js","./utils/fn.js","./utils/format-time.js","./utils/log.js","./utils/stylesheet.js","./utils/time-ranges.js","./utils/url.js","./xhr.js","object.assign",119,"xhr","callback","abortTimeout","uri","XHR","XMLHttpRequest","ActiveXObject","request","urlInfo","winLoc","location","successHandler","errorHandler","crossOrigin","host","XDomainRequest","onreadystatechange","timedout","fileUrl","abort","onload","onerror","open","withCredentials","responseType"],"mappings":"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AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n baseMergeDeep = require('./baseMergeDeep'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isObject = require('../lang/isObject'),\n isObjectLike = require('./isObjectLike'),\n isTypedArray = require('../lang/isTypedArray'),\n keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n props = isSrcArr ? undefined : keys(source);\n\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((result !== undefined || (isSrcArr && !(key in object))) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isPlainObject = require('../lang/isPlainObject'),\n isTypedArray = require('../lang/isTypedArray'),\n toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : toObject(object)[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n isIterateeCall = require('./isIterateeCall'),\n restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n try {\n Object({ 'toString': 0 } + '');\n } catch(e) {\n return function() { return false; };\n }\n return function(value) {\n // IE < 9 presents many host objects as `Object` objects that can coerce\n // to strings despite having improperly defined `toString` methods.\n return typeof value.toString != 'function' && typeof (value + '') == 'string';\n };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n isIndex = require('./isIndex'),\n isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isIndex = require('./isIndex'),\n isLength = require('./isLength'),\n isString = require('../lang/isString'),\n keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n if (support.unindexedChars && isString(value)) {\n var index = -1,\n length = value.length,\n result = Object(value);\n\n while (++index < length) {\n result[index] = value.charAt(index);\n }\n return result;\n }\n return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) &&\n hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 which returns 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n isArguments = require('./isArguments'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n if (support.ownLast) {\n baseForIn(value, function(subValue, key, object) {\n result = hasOwnProperty.call(object, key);\n return false;\n });\n return result !== false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n isArrayLike = require('../internal/isArrayLike'),\n isObject = require('../lang/isObject'),\n shimKeys = require('../internal/shimKeys'),\n support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isFunction = require('../lang/isFunction'),\n isIndex = require('../internal/isIndex'),\n isLength = require('../internal/isLength'),\n isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n objectProto = Object.prototype,\n stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n for (var tag in nonEnumProps) {\n if (hasOwnProperty.call(nonEnumProps, tag)) {\n var props = nonEnumProps[tag];\n props[key] = hasOwnProperty.call(props, key);\n }\n }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n isProto = proto === object,\n result = Array(length),\n skipIndexes = length > 0,\n skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n skipProto = support.enumPrototypes && isFunction(object);\n\n while (++index < length) {\n result[index] = (index + '');\n }\n // lodash skips the `constructor` property when it infers it's iterating\n // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n // attribute of an existing property and the `constructor` property of a\n // prototype defaults to non-enumerable.\n for (var key in object) {\n if (!(skipProto && key == 'prototype') &&\n !(skipErrorProps && (key == 'message' || key == 'name')) &&\n !(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n if (support.nonEnumShadows && object !== objectProto) {\n var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n if (tag == objectTag) {\n proto = objectProto;\n }\n length = shadowProps.length;\n while (length--) {\n key = shadowProps[length];\n var nonEnum = nonEnums[key];\n if (!(isProto && nonEnum) &&\n (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n result.push(key);\n }\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n errorProto = Error.prototype,\n objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `name` or `message` properties of `Error.prototype` are\n * enumerable by default (IE < 9, Safari < 5.1).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n propertyIsEnumerable.call(errorProto, 'name');\n\n /**\n * Detect if `prototype` properties are enumerable by default.\n *\n * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n * (if the prototype or a property on the prototype has been set)\n * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n * property to `true`.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n /**\n * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n *\n * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.nonEnumShadows = !/valueOf/.test(props);\n\n /**\n * Detect if own properties are iterated after inherited properties (IE < 9).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.ownLast = props[0] != 'x';\n\n /**\n * Detect if `Array#shift` and `Array#splice` augment array-like objects\n * correctly.\n *\n * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n * `shift()` and `splice()` functions that fail to remove the last element,\n * `value[0]`, of array-like objects even though the \"length\" property is\n * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n * while `splice()` is buggy regardless of mode in IE < 9.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n /**\n * Detect lack of support for accessing string characters by index.\n *\n * IE < 8 can't access characters by index. IE 8 can only access characters\n * by index on string literals, not string objects.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\nvar defineProperties = require('define-properties');\nvar toObject = Object;\nvar push = Array.prototype.push;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar assignShim = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tif (propIsEnumerable.call(source, syms[i])) {\n\t\t\t\t\tpush.call(props, syms[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tobjTarget[props[i]] = source[props[i]];\n\t\t}\n\t}\n\treturn objTarget;\n};\n\ndefineProperties(assignShim, {\n\tshim: function shimObjectAssign() {\n\t\tvar assignHasPendingExceptions = function () {\n\t\t\tif (!Object.assign || !Object.preventExtensions) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t\t\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\t\t\tvar thrower = Object.preventExtensions({ 1: 2 });\n\t\t\ttry {\n\t\t\t\tObject.assign(thrower, 'xy');\n\t\t\t} catch (e) {\n\t\t\t\treturn thrower[1] === 'y';\n\t\t\t}\n\t\t};\n\t\tdefineProperties(\n\t\t\tObject,\n\t\t\t{ assign: assignShim },\n\t\t\t{ assign: assignHasPendingExceptions }\n\t\t);\n\t\treturn Object.assign || assignShim;\n\t}\n});\n\nmodule.exports = assignShim;\n","'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { value: obj, enumerable: false });\n /* eslint-disable no-unused-vars */\n for (var _ in obj) { return false; }\n /* eslint-enable no-unused-vars */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tvalue: value\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$window: true,\n\t$console: true,\n\t$parent: true,\n\t$self: true,\n\t$frames: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\ttry {\n\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' && !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t} else {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n constructor(player, options) {\n super(player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return 'vjs-big-play-button';\n }\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.play();\n }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}) {\n // Add standard Aria and Tabindex info\n props = assign({\n className: this.buildCSSClass(),\n 'role': 'button',\n 'type': 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite', // let the screen reader user know that the text of the button may change\n tabIndex: 0\n }, props);\n\n let el = super.createEl(tag, props);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick();\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
    \n *
    Button
    \n *
    \n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n * This is used for merging options for child components. We\n * want it to be easy to override individual options on a child\n * component without having to rewrite all the other default options.\n * ```js\n * Parent.prototype.options_ = {\n * children: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * children: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * children: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} attributes An object of element attributes that should be set on the element\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, attributes) {\n return Dom.createEl(tagName, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
    \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
    myButton
    \n * // -> myButton === myComonent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * children: {\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_.children = {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * ```\n * // Or when creating the component\n * ```js\n * var myComp = new MyComponent(player, {\n * children: {\n * myChildComponent: {\n * myChildOption: true\n * }\n * }\n * });\n * ```\n * The children option can also be an Array of child names or\n * child options objects (that also include a 'name' key).\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extends(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'muteToggle',\n 'volumeControl',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n * \n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`,\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n }\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech\n && this.player().tech['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n /**\n * Update progress bar\n *\n * @method update\n */\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: {\n 'seekBar': {}\n }\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder',\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: {\n 'loadProgressBar': {},\n 'playProgressBar': {}\n },\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl({\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {Object} props An object of properties \n * @return {Element}\n * @method createEl\n */\n createEl(props) {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech && this.player().tech['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech && this.player().tech['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-chapters-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabIndex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-subtitles-button ${super.buildCSSClass()}`;\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n innerHTML: `${this.localize('Duration Time')} 0:00`, // label the duration time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display \n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n innerHTML: `${this.localize('Remaining Time')} -0:00`, // label the remaining time for screen reader users\n 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
    /
    '\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar',\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: {\n 'volumeLevel': {}\n },\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: {\n 'volumeBar': {}\n }\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using a horizontal\n // slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well, since that will\n // need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech && player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n this.addClass('vjs-menu-button');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vc = new VolumeBar(this.player_, this.options_.volumeBar);\n\n vc.on('focus', function() {\n menu.lockShowing();\n });\n vc.on('blur', function() {\n menu.unlockShowing();\n });\n menu.addChild(vc);\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n /**\n * Update the error message in localized language\n *\n * @method update\n */\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extends.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extends(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendsFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendsFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (let i=0; i 1) {\n this.show();\n }\n }\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n createItems(){}\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n }\n\n /**\n * Focus - Add keyboard functionality to element\n * This function is not needed anymore. Instead, the\n * keyboard functionality is handled by\n * treating the button as triggering a submenu.\n * When the button is pressed, the submenu\n * appears. Pressing the button again makes\n * the submenu disappear.\n *\n * @method handleFocus\n */\n handleFocus() {}\n\n /**\n * Can't turn off list display that we turned\n * on with focus, because list would go away.\n *\n * @method handleBlur\n */\n handleBlur() {}\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n handleClick() {\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n /**\n * Handle key press on menu\n *\n * @param {Object} Key press event\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc \n * @return {Element}\n * @method createEl\n */\n createEl(type, props) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props));\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive_ = true;\n this.reportUserActivity();\n this.listenForUserActivity();\n\n this.on('fullscreenchange', this.handleFullscreenChange);\n this.on('stageclick', this.handleStageClick);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech) { this.tech.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech\n */\n loadTech(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech) {\n this.unloadTech();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n var techReady = Fn.bind(this, function() {\n this.triggerReady();\n });\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech = new techComponent(techOptions);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech);\n\n this.on(this.tech, 'ready', this.handleTechReady);\n\n // Listen to every HTML5 events and trigger them back on the player for the plugins\n this.on(this.tech, 'loadstart', this.handleTechLoadStart);\n this.on(this.tech, 'waiting', this.handleTechWaiting);\n this.on(this.tech, 'canplay', this.handleTechCanPlay);\n this.on(this.tech, 'canplaythrough', this.handleTechCanPlayThrough);\n this.on(this.tech, 'playing', this.handleTechPlaying);\n this.on(this.tech, 'ended', this.handleTechEnded);\n this.on(this.tech, 'seeking', this.handleTechSeeking);\n this.on(this.tech, 'seeked', this.handleTechSeeked);\n this.on(this.tech, 'play', this.handleTechPlay);\n this.on(this.tech, 'firstplay', this.handleTechFirstPlay);\n this.on(this.tech, 'pause', this.handleTechPause);\n this.on(this.tech, 'progress', this.handleTechProgress);\n this.on(this.tech, 'durationchange', this.handleTechDurationChange);\n this.on(this.tech, 'fullscreenchange', this.handleTechFullscreenChange);\n this.on(this.tech, 'error', this.handleTechError);\n this.on(this.tech, 'suspend', this.handleTechSuspend);\n this.on(this.tech, 'abort', this.handleTechAbort);\n this.on(this.tech, 'emptied', this.handleTechEmptied);\n this.on(this.tech, 'stalled', this.handleTechStalled);\n this.on(this.tech, 'loadedmetadata', this.handleTechLoadedMetaData);\n this.on(this.tech, 'loadeddata', this.handleTechLoadedData);\n this.on(this.tech, 'timeupdate', this.handleTechTimeUpdate);\n this.on(this.tech, 'ratechange', this.handleTechRateChange);\n this.on(this.tech, 'volumechange', this.handleTechVolumeChange);\n this.on(this.tech, 'texttrackchange', this.onTextTrackChange);\n this.on(this.tech, 'loadedmetadata', this.updateStyleEl_);\n\n this.usingNativeControls(this.techGet('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech.ready(techReady, true);\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech\n */\n unloadTech() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech.dispose();\n\n this.tech = false;\n }\n\n /**\n * Add playback technology listeners\n *\n * @method addTechControlsListeners\n */\n addTechControlsListeners() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech, 'mousedown', this.handleTechClick);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech, 'touchstart', this.handleTechTouchStart);\n this.on(this.tech, 'touchmove', this.handleTechTouchMove);\n this.on(this.tech, 'touchend', this.handleTechTouchEnd);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech, 'tap', this.handleTechTap);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners\n */\n removeTechControlsListeners() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech, 'tap', this.handleTechTap);\n this.off(this.tech, 'touchstart', this.handleTechTouchStart);\n this.off(this.tech, 'touchmove', this.handleTechTouchMove);\n this.off(this.tech, 'touchend', this.handleTechTouchEnd);\n this.off(this.tech, 'mousedown', this.handleTechClick);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @private\n * @method handleTechReady\n */\n handleTechReady() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall('setVolume', this.cache_.volume);\n }\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @event loadstart\n */\n handleTechLoadStart() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @event play\n */\n handleTechPlay() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @event waiting\n */\n handleTechWaiting() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplay\n */\n handleTechCanPlay() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event canplaythrough\n */\n handleTechCanPlayThrough() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @event playing\n */\n handleTechPlaying() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @event seeking\n */\n handleTechSeeking() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @event seeked\n */\n handleTechSeeked() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @event firstplay\n */\n handleTechFirstPlay() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @event pause\n */\n handleTechPause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @event progress\n */\n handleTechProgress() {\n this.trigger('progress');\n\n // Add custom event for when source is finished downloading.\n if (this.bufferedPercent() === 1) {\n this.trigger('loadedalldata');\n }\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @event ended\n */\n handleTechEnded() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @event durationchange\n */\n handleTechDurationChange() {\n this.updateDuration();\n this.trigger('durationchange');\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @method handleTechClick\n */\n handleTechClick(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @method handleTechTap\n */\n handleTechTap() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @method handleTechTouchStart\n */\n handleTechTouchStart() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @method handleTechTouchMove\n */\n handleTechTouchMove() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @method handleTechTouchEnd\n */\n handleTechTouchEnd(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Update the duration of the player using the tech\n *\n * @private\n * @method updateDuration\n */\n updateDuration() {\n // Allows for caching value instead of asking player each time.\n // We need to get the techGet response and check for a value so we don't\n // accidentally cause the stack to blow up.\n var duration = this.techGet('duration');\n if (duration) {\n if (duration < 0) {\n duration = Infinity;\n }\n this.duration(duration);\n // Determine if the stream is live and propagate styles down to UI.\n if (duration === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n }\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @event fullscreenchange\n */\n handleFullscreenChange() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick\n */\n handleStageClick() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @method handleTechFullscreenChange\n */\n handleTechFullscreenChange(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @event error\n */\n handleTechError() {\n let error = this.tech.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @event suspend\n */\n handleTechSuspend() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @event abort\n */\n handleTechAbort() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @event emptied\n */\n handleTechEmptied() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @event stalled\n */\n handleTechStalled() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @event loadedmetadata\n */\n handleTechLoadedMetaData() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @event loaddata\n */\n handleTechLoadedData() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @event timeupdate\n */\n handleTechTimeUpdate() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @event ratechange\n */\n handleTechRateChange() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @event volumechange\n */\n handleTechVolumeChange() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @event texttrackchange\n */\n onTextTrackChange() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @method techCall\n */\n techCall(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech && !this.tech.isReady_) {\n this.tech.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @method techGet\n */\n techGet(method) {\n if (this.tech && this.tech.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName} playback technology element.`, e);\n this.tech.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds !== undefined) {\n\n // cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = parseFloat(seconds);\n\n return this;\n }\n\n if (this.cache_.duration === undefined) {\n this.updateDuration();\n }\n\n return this.cache_.duration || 0;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall('setMuted', muted);\n return this;\n }\n return this.techGet('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech.supportsFullScreen()) {\n this.techCall('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech && this.tech['featuresPlaybackRate']) {\n return this.techGet('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech && this.tech['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech && this.tech['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech && this.tech['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech && this.tech['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech && this.tech['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech && this.tech.videoWidth && this.tech.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech && this.tech.videoHeight && this.tech.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall('initialTime'); },\n // startOffsetTime: function(){ return this.techCall('startOffsetTime'); },\n // played: function(){ return this.techCall('played'); },\n // seekable: function(){ return this.techCall('seekable'); },\n // videoTracks: function(){ return this.techCall('videoTracks'); },\n // audioTracks: function(){ return this.techCall('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); },\n // mediaGroup: function(){ return this.techCall('mediaGroup'); },\n // controller: function(){ return this.techCall('controller'); },\n // defaultMuted: function(){ return this.techCall('defaultMuted'); }\n\n // TODO\n // currentSrcList: the array of sources including other formats and bitrates\n // playList: array of source lists in order of playback\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) { this.el_.src = src; }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){ this.el_.load(); }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i 0) {\n this.trigger('loadstart');\n }\n // Allow the tech ready event to handle synchronisity\n }, true);\n }\n\n /* Fallbacks for unsupported event types\n ================================================================================ */\n // Manually trigger progress events based on changes to the buffered amount\n // Many flash players and older HTML5 browsers don't send progress or progress-like events\n /**\n * Turn on progress events\n *\n * @method manualProgressOn\n */\n manualProgressOn() {\n this.on('durationchange', this.onDurationChange);\n\n this.manualProgress = true;\n\n // Trigger progress watching when a source begins loading\n this.one('ready', this.trackProgress);\n }\n\n /**\n * Turn off progress events\n *\n * @method manualProgressOff\n */\n manualProgressOff() {\n this.manualProgress = false;\n this.stopTrackingProgress();\n\n this.off('durationchange', this.onDurationChange);\n }\n\n /**\n * Track progress\n *\n * @method trackProgress\n */\n trackProgress() {\n this.stopTrackingProgress();\n this.progressInterval = this.setInterval(Fn.bind(this, function(){\n // Don't trigger unless buffered amount is greater than last time\n\n let numBufferedPercent = this.bufferedPercent();\n\n if (this.bufferedPercent_ !== numBufferedPercent) {\n this.trigger('progress');\n }\n\n this.bufferedPercent_ = numBufferedPercent;\n\n if (numBufferedPercent === 1) {\n this.stopTrackingProgress();\n }\n }), 500);\n }\n\n /**\n * Update duration\n *\n * @method onDurationChange\n */\n onDurationChange() {\n this.duration_ = this.duration();\n }\n\n /**\n * Create and get TimeRange object for buffering\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n return createTimeRange(0, 0);\n }\n\n /**\n * Get buffered percent\n *\n * @return {Number}\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration_);\n }\n\n /**\n * Stops tracking progress by clearing progress interval\n *\n * @method stopTrackingProgress\n */\n stopTrackingProgress() {\n this.clearInterval(this.progressInterval);\n }\n\n /*! Time Tracking -------------------------------------------------------------- */\n /**\n * Set event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOn\n */\n manualTimeUpdatesOn() {\n this.manualTimeUpdates = true;\n\n this.on('play', this.trackCurrentTime);\n this.on('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Remove event listeners for on play and pause and tracking current time\n *\n * @method manualTimeUpdatesOff\n */\n manualTimeUpdatesOff() {\n this.manualTimeUpdates = false;\n this.stopTrackingCurrentTime();\n this.off('play', this.trackCurrentTime);\n this.off('pause', this.stopTrackingCurrentTime);\n }\n\n /**\n * Tracks current time\n *\n * @method trackCurrentTime\n */\n trackCurrentTime() {\n if (this.currentTimeInterval) { this.stopTrackingCurrentTime(); }\n this.currentTimeInterval = this.setInterval(function(){\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n }\n\n /**\n * Turn off play progress tracking (when paused or dragging)\n *\n * @method stopTrackingCurrentTime\n */\n stopTrackingCurrentTime() {\n this.clearInterval(this.currentTimeInterval);\n\n // #1002 - if the video ends right before the next timeupdate would happen,\n // the progress bar won't make it all the way to the end\n this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true });\n }\n\n /**\n * Turn off any manual progress or timeupdate tracking\n *\n * @method dispose\n */\n dispose() {\n // clear out text tracks because we can't reuse them between techs\n let textTracks = this.textTracks();\n\n if (textTracks) {\n let i = textTracks.length;\n while(i--) {\n this.removeRemoteTextTrack(textTracks[i]);\n }\n }\n\n // Turn off any manual progress or timeupdate tracking\n if (this.manualProgress) { this.manualProgressOff(); }\n\n if (this.manualTimeUpdates) { this.manualTimeUpdatesOff(); }\n\n super.dispose();\n }\n\n /**\n * When invoked without an argument, returns a MediaError object\n * representing the current error state of the player or null if\n * there is no error. When invoked with an argument, set the current\n * error state of the player.\n * @param {MediaError=} err Optional an error object\n * @return {MediaError} the current error object or null\n * @method error\n */\n error(err) {\n if (err !== undefined) {\n if (err instanceof MediaError) {\n this.error_ = err;\n } else {\n this.error_ = new MediaError(err);\n }\n this.trigger('error');\n }\n return this.error_;\n }\n\n /**\n * Return the time ranges that have been played through for the\n * current source. This implementation is incomplete. It does not\n * track the played time ranges, only whether the source has played\n * at all or not.\n * @return {TimeRangeObject} a single time range if this video has\n * played or an empty set of ranges if not.\n * @method played\n */\n played() {\n if (this.hasStarted_) {\n return createTimeRange(0, 0);\n }\n return createTimeRange();\n }\n\n /**\n * Set current time\n *\n * @method setCurrentTime\n */\n setCurrentTime() {\n // improve the accuracy of manual timeupdates\n if (this.manualTimeUpdates) { this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: true }); }\n }\n\n /**\n * Initialize texttrack listeners\n *\n * @method initTextTrackListeners\n */\n initTextTrackListeners() {\n let textTrackListChanges = Fn.bind(this, function() {\n this.trigger('texttrackchange');\n });\n\n let tracks = this.textTracks();\n\n if (!tracks) return;\n\n tracks.addEventListener('removetrack', textTrackListChanges);\n tracks.addEventListener('addtrack', textTrackListChanges);\n\n this.on('dispose', Fn.bind(this, function() {\n tracks.removeEventListener('removetrack', textTrackListChanges);\n tracks.removeEventListener('addtrack', textTrackListChanges);\n }));\n }\n\n /**\n * Emulate texttracks\n *\n * @method emulateTextTracks\n */\n emulateTextTracks() {\n if (!window['WebVTT'] && this.el().parentNode != null) {\n let script = document.createElement('script');\n script.src = this.options_['vtt.js'] || '../node_modules/vtt.js/dist/vtt.js';\n this.el().parentNode.appendChild(script);\n window['WebVTT'] = true;\n }\n\n let tracks = this.textTracks();\n if (!tracks) {\n return;\n }\n\n let textTracksChanges = Fn.bind(this, function() {\n let updateDisplay = () => this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for(; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n};\n\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech && player.tech['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks \n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech && this.player_.tech['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks \n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks \n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list \n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n // \n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * @file text-track-enums.js\n *\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n return {\n kind: track.kind,\n label: track.label,\n language: track.language,\n id: track.id,\n inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType,\n mode: track.mode,\n cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n }),\n src: track.src\n };\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n let trackEls = tech.el().querySelectorAll('track');\n\n let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n let json = trackToJson_(trackEl.track);\n json.src = trackEl.src;\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n json.forEach(function(track) {\n let addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach((cue) => addedTrack.addCue(cue));\n }\n });\n\n return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventTarget.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n /**\n * Get texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @return {Object} \n * @method getValues\n */\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n /**\n * Set texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n /**\n * Restore texttrack settings \n *\n * @method restoreSettings\n */\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n /**\n * Save texttrack settings to local storage \n *\n * @method saveSettings\n */\n saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n /**\n * Update display of texttrack settings \n *\n * @method updateDisplay\n */\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    `;\n\n return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport XHR from '../xhr.js';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n XHR(src, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let i = 0; i < buffered.length; i++){\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n","import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n get(obj, key) {\n return obj[key];\n },\n set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n if (typeof Proxy === 'function') {\n let handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(key => {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function() {\n log.warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return new Proxy(target, handler);\n }\n return target;\n};\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // Not remembering why we were checking for dash\n // but using setAttribute means you have to use getAttribute\n\n // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin.\n // The additional check for \"role\" is because the default method for adding attributes does not\n // add the attribute \"role\". My guess is because it's not a valid attribute in some namespaces, although\n // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs.\n // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n return !!obj\n && typeof obj === 'object'\n && obj.toString() === '[object Object]'\n && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n let args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n merge.apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n let style = document.createElement('style');\n style.className = className;\n\n return style;\n};\n\nexport let setTextContent = function(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n","/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @private\n * @method createTimeRange\n */\nexport function createTimeRange(start, end){\n if (start === undefined && end === undefined) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: 1,\n start: function() { return start; },\n end: function() { return end; }\n };\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = ``;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n","/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\n\nimport assign from 'object.assign';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport xhr from './xhr.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendsFn from './extends.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = stylesheet.createStyleElement('vjs-styles-defaults');\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);\nstylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n`);\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extends' doc for more info)\n * var MySpecialButton = videojs.extends(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extends` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extends(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extends\n */\nvideojs.extends = extendsFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number} start Start time in seconds\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = createTimeRange;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Simple http request for retrieving external files (e.g. text tracks)\n *\n * ##### Example\n *\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n *\n *\n * API is modeled after the Raynos/xhr.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @returns {Object} The request\n */\nvideojs.xhr = xhr;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n","/**\n * @file xhr.js\n */\nimport * as Url from './utils/url.js';\nimport log from './utils/log.js';\nimport mergeOptions from './utils/merge-options.js';\nimport window from 'global/window';\n\n/*\n * Simple http request for retrieving external files (e.g. text tracks)\n * ##### Example\n * // using url string\n * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){});\n *\n * // or options block\n * videojs.xhr({\n * uri: 'http://example.com/myfile.vtt',\n * method: 'GET',\n * responseType: 'text'\n * }, function(error, response, responseBody){\n * if (error) {\n * // log the error\n * } else {\n * // successful, do something with the response\n * }\n * });\n * /////////////\n * API is modeled after the Raynos/xhr, which we hope to use after\n * getting browserify implemented.\n * https://github.com/Raynos/xhr/blob/master/index.js\n *\n * @param {Object|String} options Options block or URL string\n * @param {Function} callback The callback function\n * @return {Object} The request\n * @method xhr\n */\nvar xhr = function(options, callback){\n let abortTimeout;\n\n // If options is a string it's the url\n if (typeof options === 'string') {\n options = {\n uri: options\n };\n }\n\n // Merge with default options\n options = mergeOptions({\n method: 'GET',\n timeout: 45 * 1000\n }, options);\n\n callback = callback || function(){};\n\n let XHR = window.XMLHttpRequest;\n\n if (typeof XHR === 'undefined') {\n // Shim XMLHttpRequest for older IEs\n XHR = function () {\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.6.0'); } catch (e) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP.3.0'); } catch (f) {}\n try { return new window.ActiveXObject('Msxml2.XMLHTTP'); } catch (g) {}\n throw new Error('This browser does not support XMLHttpRequest.');\n };\n }\n\n let request = new XHR();\n // Store a reference to the url on the request instance\n request.uri = options.uri;\n\n let urlInfo = Url.parseUrl(options.uri);\n let winLoc = window.location;\n\n let successHandler = function(){\n window.clearTimeout(abortTimeout);\n callback(null, request, request.response || request.responseText);\n };\n\n let errorHandler = function(err){\n window.clearTimeout(abortTimeout);\n\n if (!err || typeof err === 'string') {\n err = new Error(err || 'XHR Failed with a response of: '+(request && (request.response || request.responseText)));\n }\n\n callback(err, request);\n };\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n const crossOrigin = (urlInfo.protocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available\n // 'withCredentials' is only available in XMLHTTPRequest2\n // Also XDomainRequest has a lot of gotchas, so only use if cross domain\n if (crossOrigin && window.XDomainRequest && !('withCredentials' in request)) {\n request = new window.XDomainRequest();\n request.onload = successHandler;\n request.onerror = errorHandler;\n // These blank handlers need to be set to fix ie9\n // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/\n request.onprogress = function(){};\n request.ontimeout = function(){};\n\n // XMLHTTPRequest\n } else {\n const fileUrl = (urlInfo.protocol === 'file:' || winLoc.protocol === 'file:');\n\n request.onreadystatechange = function() {\n if (request.readyState === 4) {\n if (request.timedout) {\n return errorHandler('timeout');\n }\n\n if (request.status === 200 || fileUrl && request.status === 0) {\n successHandler();\n } else {\n errorHandler();\n }\n }\n };\n\n if (options.timeout) {\n abortTimeout = window.setTimeout(function() {\n if (request.readyState !== 4) {\n request.timedout = true;\n request.abort();\n }\n }, options.timeout);\n }\n }\n\n // open the connection\n try {\n // Third arg is async, or ignored by XDomainRequest\n request.open(options.method || 'GET', options.uri, true);\n } catch(err) {\n return errorHandler(err);\n }\n\n // withCredentials only supported by XMLHttpRequest2\n if(options.withCredentials) {\n request.withCredentials = true;\n }\n\n if (options.responseType) {\n request.responseType = options.responseType;\n }\n\n // send the request\n try {\n request.send();\n } catch(err) {\n return errorHandler(err);\n }\n\n return request;\n};\n\nexport default xhr;\n"]} \ No newline at end of file +{"version":3,"file":"video.min.js","sources":["node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-pack/_prelude.js","node_modules/global/document.js","node_modules/global/window.js","node_modules/grunt-browserify/node_modules/browserify/node_modules/browser-resolve/empty.js","node_modules/lodash-compat/date/now.js","node_modules/lodash-compat/function/debounce.js","node_modules/lodash-compat/function/restParam.js","node_modules/lodash-compat/function/throttle.js","node_modules/lodash-compat/internal/arrayCopy.js","node_modules/lodash-compat/internal/arrayEach.js","node_modules/lodash-compat/internal/baseCopy.js","node_modules/lodash-compat/internal/baseFor.js","node_modules/lodash-compat/internal/baseForIn.js","node_modules/lodash-compat/internal/baseMerge.js","node_modules/lodash-compat/internal/baseMergeDeep.js","node_modules/lodash-compat/internal/baseProperty.js","node_modules/lodash-compat/internal/bindCallback.js","node_modules/lodash-compat/internal/createAssigner.js","node_modules/lodash-compat/internal/createBaseFor.js","node_modules/lodash-compat/internal/getLength.js","node_modules/lodash-compat/internal/getNative.js","node_modules/lodash-compat/internal/isArrayLike.js","node_modules/lodash-compat/internal/isHostObject.js","node_modules/lodash-compat/internal/isIndex.js","node_modules/lodash-compat/internal/isIterateeCall.js","node_modules/lodash-compat/internal/isLength.js","node_modules/lodash-compat/internal/isObjectLike.js","node_modules/lodash-compat/internal/shimKeys.js","node_modules/lodash-compat/internal/toObject.js","node_modules/lodash-compat/lang/isArguments.js","node_modules/lodash-compat/lang/isArray.js","node_modules/lodash-compat/lang/isFunction.js","node_modules/lodash-compat/lang/isNative.js","node_modules/lodash-compat/lang/isObject.js","node_modules/lodash-compat/lang/isPlainObject.js","node_modules/lodash-compat/lang/isString.js","node_modules/lodash-compat/lang/isTypedArray.js","node_modules/lodash-compat/lang/toPlainObject.js","node_modules/lodash-compat/object/keys.js","node_modules/lodash-compat/object/keysIn.js","node_modules/lodash-compat/object/merge.js","node_modules/lodash-compat/support.js","node_modules/lodash-compat/utility/identity.js","node_modules/object.assign/index.js","node_modules/object.assign/node_modules/define-properties/index.js","node_modules/object.assign/node_modules/define-properties/node_modules/foreach/index.js","node_modules/object.assign/node_modules/object-keys/index.js","node_modules/object.assign/node_modules/object-keys/isArguments.js","node_modules/safe-json-parse/tuple.js","node_modules/tsml/tsml.js","node_modules/xhr/index.js","node_modules/xhr/node_modules/once/once.js","node_modules/xhr/node_modules/parse-headers/node_modules/for-each/index.js","node_modules/xhr/node_modules/parse-headers/node_modules/for-each/node_modules/is-function/index.js","node_modules/xhr/node_modules/parse-headers/node_modules/trim/index.js","node_modules/xhr/node_modules/parse-headers/parse-headers.js","src/js/big-play-button.js","src/js/button.js","src/js/component.js","src/js/control-bar/control-bar.js","src/js/control-bar/fullscreen-toggle.js","src/js/control-bar/live-display.js","src/js/control-bar/mute-toggle.js","src/js/control-bar/play-toggle.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-button.js","src/js/control-bar/playback-rate-menu/playback-rate-menu-item.js","src/js/control-bar/progress-control/load-progress-bar.js","src/js/control-bar/progress-control/mouse-time-display.js","src/js/control-bar/progress-control/play-progress-bar.js","src/js/control-bar/progress-control/progress-control.js","src/js/control-bar/progress-control/seek-bar.js","src/js/control-bar/spacer-controls/custom-control-spacer.js","src/js/control-bar/spacer-controls/spacer.js","src/js/control-bar/text-track-controls/caption-settings-menu-item.js","src/js/control-bar/text-track-controls/captions-button.js","src/js/control-bar/text-track-controls/chapters-button.js","src/js/control-bar/text-track-controls/chapters-track-menu-item.js","src/js/control-bar/text-track-controls/off-text-track-menu-item.js","src/js/control-bar/text-track-controls/subtitles-button.js","src/js/control-bar/text-track-controls/text-track-button.js","src/js/control-bar/text-track-controls/text-track-menu-item.js","src/js/control-bar/time-controls/current-time-display.js","src/js/control-bar/time-controls/duration-display.js","src/js/control-bar/time-controls/remaining-time-display.js","src/js/control-bar/time-controls/time-divider.js","src/js/control-bar/volume-control/volume-bar.js","src/js/control-bar/volume-control/volume-control.js","src/js/control-bar/volume-control/volume-level.js","src/js/control-bar/volume-menu-button.js","src/js/error-display.js","src/js/event-target.js","src/js/extend.js","src/js/fullscreen-api.js","src/js/loading-spinner.js","src/js/media-error.js","src/js/menu/menu-button.js","src/js/menu/menu-item.js","src/js/menu/menu.js","src/js/player.js","src/js/plugins.js","src/js/poster-image.js","src/js/setup.js","src/js/slider/slider.js","src/js/tech/flash-rtmp.js","src/js/tech/flash.js","src/js/tech/html5.js","src/js/tech/loader.js","src/js/tech/tech.js","src/js/tracks/text-track-cue-list.js","src/js/tracks/text-track-display.js","src/js/tracks/text-track-enums.js","src/js/tracks/text-track-list-converter.js","src/js/tracks/text-track-list.js","src/js/tracks/text-track-settings.js","src/js/tracks/text-track.js","src/js/utils/browser.js","src/js/utils/buffer.js","src/js/utils/create-deprecation-proxy.js","src/js/utils/dom.js","src/js/utils/events.js","src/js/utils/fn.js","src/js/utils/format-time.js","src/js/utils/guid.js","src/js/utils/log.js","src/js/utils/merge-options.js","src/js/utils/stylesheet.js","src/js/utils/time-ranges.js","src/js/utils/to-title-case.js","src/js/utils/url.js","src/js/video.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","videojs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length",1,"_dereq_","topLevel","minDoc","document","doccy","min-document",2,3,4,"getNative","nativeNow","Date","now","getTime","../internal/getNative",5,"debounce","func","wait","options","cancel","timeoutId","clearTimeout","maxTimeoutId","lastCalled","trailingCall","undefined","complete","isCalled","id","result","apply","thisArg","args","delayed","remaining","stamp","setTimeout","maxDelayed","trailing","debounced","arguments","leading","maxWait","leadingCall","TypeError","FUNC_ERROR_TEXT","isObject","nativeMax","Math","max","../date/now","../lang/isObject",6,"restParam","start","index","rest","Array","otherArgs",7,"throttle","./debounce",8,"arrayCopy","source","array",9,"arrayEach","iteratee",10,"baseCopy","props","object","key",11,"createBaseFor","baseFor","./createBaseFor",12,"baseForIn","keysIn","../object/keysIn","./baseFor",13,"baseMerge","customizer","stackA","stackB","isSrcArr","isArrayLike","isArray","isTypedArray","keys","srcValue","isObjectLike","baseMergeDeep","value","isCommon","../lang/isArray","../lang/isTypedArray","../object/keys","./arrayEach","./baseMergeDeep","./isArrayLike","./isObjectLike",14,"mergeFunc","isPlainObject","isArguments","toPlainObject","push","../lang/isArguments","../lang/isPlainObject","../lang/toPlainObject","./arrayCopy",15,"baseProperty","toObject","./toObject",16,"bindCallback","argCount","identity","collection","accumulator","other","../utility/identity",17,"createAssigner","assigner","sources","guard","isIterateeCall","../function/restParam","./bindCallback","./isIterateeCall",18,"fromRight","keysFunc","iterable",19,"getLength","./baseProperty",20,"isNative","../lang/isNative",21,"isLength","./getLength","./isLength",22,"isHostObject","Object","toString",23,"isIndex","reIsUint","test","MAX_SAFE_INTEGER",24,"type","./isIndex",25,26,27,"shimKeys","propsLength","allowIndexes","isString","hasOwnProperty","objectProto","prototype","../lang/isString",28,"support","unindexedChars","charAt","../support",29,"propertyIsEnumerable","../internal/isArrayLike","../internal/isObjectLike",30,"arrayTag","objToString","nativeIsArray","../internal/isLength",31,"isFunction","funcTag","./isObject",32,"reIsNative","fnToString","reIsHostCtor","Function","RegExp","replace","../internal/isHostObject","./isFunction",33,34,"Ctor","objectTag","constructor","ownLast","subValue","../internal/baseForIn","./isArguments",35,"stringTag",36,"typedArrayTags","argsTag","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","weakMapTag","arrayBufferTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag",37,"../internal/baseCopy",38,"nativeKeys","enumPrototypes","../internal/shimKeys",39,"proto","isProto","skipIndexes","skipErrorProps","enumErrorProps","errorProto","skipProto","nonEnumShadows","tag","stringProto","nonEnums","nonEnumProps","shadowProps","nonEnum","String","toLocaleString","valueOf","../internal/arrayEach","../internal/isIndex","../lang/isFunction",40,"merge","../internal/baseMerge","../internal/createAssigner",41,"arrayProto","splice","x","0","y","spliceObjects",42,43,"canBeObject","obj","hasSymbols","Symbol","defineProperties","propIsEnumerable","assignShim","target","syms","objTarget","getOwnPropertySymbols","shim","assignHasPendingExceptions","assign","preventExtensions","thrower","define-properties","object-keys",44,"foreach","toStr","fn","arePropertyDescriptorsSupported","defineProperty","enumerable","_","supportsDescriptors","name","predicate","configurable","writable","map","predicates","concat",45,"hasOwn","ctx","k",46,"has","slice","isArgs","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","ctor","blacklistedKeys","$window","$console","$parent","$self","$frames","$webkitIndexedDB","$webkitStorageInfo","hasAutomationEqualityBug","equalsConstructorPrototypeIfNotBuggy","keysShim","theKeys","j","skipConstructor","keysWorksWithArguments","originalKeys",47,"str","callee",48,"SafeParseTuple","reviver","error","json","JSON","parse","err",49,"clean","sa",50,"isEmpty","createXHR","callback","readystatechange","xhr","readyState","loadFunc","getBody","body","response","responseType","responseText","responseXML","isJson","errorFunc","evt","timeoutTimer","statusCode","failureResponse","aborted","status","useXDR","method","headers","url","uri","rawRequest","getAllResponseHeaders","parseHeaders","once","cors","XDomainRequest","XMLHttpRequest","data","sync","stringify","onreadystatechange","onload","onerror","onprogress","ontimeout","open","username","password","withCredentials","timeout","abort","setRequestHeader","beforeSend","send","noop","global/window","parse-headers",51,"called",52,"forEach","list","iterator","context","forEachArray","forEachString","forEachObject","len","string","is-function",53,"alert","confirm","prompt",54,"trim","left","right",55,"arg","split","row","indexOf","toLowerCase","_componentJs2","_interopRequireDefault","_componentJs","_classCallCheck","BigPlayButton","_Button","player","buildCSSClass","__esModule","newObj","default","Constructor","instance","_inherits","subClass","superClass","create","setPrototypeOf","__proto__","_component2","_component","_objectAssign","Button","_Component","on","handleBlur","createEl","attributes","_objectAssign2","tabIndex","el","controlTextEl_","innerHTML","localize","controlText_","handleFocus","Events","_globalDocument2","Fn","bind","handleKeyPress","event","which","preventDefault","handleClick","_interopRequireWildcard","_globalWindow2","_globalWindow","Dom","_utilsDomJs","Component","player_","id_","Guid","newGUID","el_","childIndex_","childNameIndex_","reportTouchActivity","trigger","bubbles","children_","dispose","removeElData","tagName","properties","languages","language","children","getChildById","addChild","child","componentName","componentClassName","componentClass","_utilsToTitleCaseJs2","ComponentClass","getComponent","component","removeChild","getChild","childFound","options_","parentOptions","_this","handleAdd","opts","playerOptions","_name","first","second","removeOnDispose","_this2","off","cleanRemover","guid","third","nodeName","one","_this3","_arguments","newFunc","ready","isReady_","triggerReady","readyQueue","readyQueue_","hasClass","classToCheck","hasElClass","addElClass","classToAdd","removeClass","classToRemove","removeElClass","show","dimension","num","skipListeners","widthOrHeight","val","style","emitTapEvents","touchStart","touchTimeThreshold","couldBeTap","touches","firstTouch","xdiff","pageX","touchDistance","tapMovementThreshold","noTap","touchTime","enableTouchActivity","report","reportUserActivity","touchHolding","clearInterval","setInterval","touchEnd","intervalId","comp","init","subObj","extend","_name2","_spacerControlsCustomControlSpacerJs","ControlBar","className","FullscreenToggle","isFullscreen","controlText","updateShowing","LiveDisplay","contentEl_","aria-live","MuteToggle","update","tech_","addClass","vol","muted","level","toMute","handlePlay","handlePause","PlayToggle","play","pause","_menuMenuJs2","_menuMenuJs","PlaybackRateMenuButton","_MenuButton","updateVisibility","appendChild","labelEl_","menu","setAttribute","playbackRate","currentRate","newRate","playbackRates","playbackRateSupported","updateLabel","PlaybackRateMenuItem","_MenuItem","label","rate","buffered","percentify","time","end","percent","part","width","bufferedEnd","_lodashCompatFunctionThrottle2","_lodashCompatFunctionThrottle","MouseTimeDisplay","controlBar","progressControl","handleMouseMove","duration","position","findElPosition","parentNode","newTime","_utilsFormatTimeJs","updateDataAttr","_mouseTimeDisplayJs","ProgressControl","_Slider","updateARIAAttributes","aria-label","scrubbing","getCache","currentTime","getPercent","toFixed","_utilsFormatTimeJs2","SeekBar","videoWasPlaying","stepForward","stepBack","CustomControlSpacer","_Spacer","Spacer","_TextTrackMenuItem","CaptionSettingsMenuItem","_captionSettingsMenuItemJs2","_captionSettingsMenuItemJs","_TextTrackButton","CaptionsButton","threshold","hide","items","kind","kind_","_textTrackMenuItemJs2","_textTrackMenuItemJs","_chaptersTrackMenuItemJs2","_chaptersTrackMenuItemJs","ChaptersButton","createItems","tracks","textTracks","createMenu","track","cues","chaptersTrack","contentEl","cue","mi","_utilsFnJs","ChaptersTrackMenuItem","addEventListener","startTime","OffTextTrackMenuItem","selected","handleTracksChange","_offTextTrackMenuItemJs","TextTrackButton","updateHandler","removeEventListener","_offTextTrackMenuItemJs2","_globalDocument","TextTrackMenuItem","onchange","Event","dispatchEvent","updateContent","DurationDisplay","formattedTime","remainingTime","localizedText","TimeDivider","_sliderSliderJs","_volumeLevelJs","volume","calculateDistance","VolumeBar","VolumeControl","_volumeBarJs","VolumeLevel","_volumeControlVolumeBarJs","VolumeMenuButton","inline","vertical","volumeBar","volumeUpdate","orientationClass","vb","./utils/dom.js",90,"_utilsEventsJs","EventTarget","allowedEvents_","ael","_utilsLog","_utilsLog2","subClassMethods","methods","FullscreenApi","apiMap","browserApi","LoadingSpinner","MediaError","message","errorTypes","_buttonJs2","_buttonJs","_utilsToTitleCaseJs","MenuButton","title","buttonPressed_","unpressButton","focus","MenuItem","_selected","Menu","unlockShowing","contentElType","append","_utilsBrowserJs","_utilsLogJs2","_utilsLogJs","_utilsMergeOptionsJs","_tracksTextTrackListConverterJs","_controlBarControlBarJs","tagAttributes","getElAttributes","languagesToLower","_utilsMergeOptionsJs2","plugins","getOwnPropertyNames","playerOptionsCopy","isAudio","controls","Player","styleEl_","players","removeAttribute","defaultsStyleEl","querySelector","height","aspectRatio","privDimension","_dimension","parsedVal","parseFloat","updateStyleEl_","fluid","bool","ratio","aspectRatio_","videoWidth","videoHeight","ratioParts","width_","height_","ratioMultiplier","loadTech_","techName","disposeMediaElement","techName_","techOptions","nativeControlsForTouch","playerId","techId","textTracks_","preload","loop","poster","src","cache_","techComponent","handleTechReady_","_tracksTextTrackListConverterJs2","jsonToTextTracks","textTracksJson_","handleTechLoadStart_","handleTechWaiting_","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechEnded_","handleTechSeeking_","handleTechSeeked_","handleTechPlay_","handleTechFirstPlay_","handleTechPause_","handleTechProgress_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechError_","handleTechAbort_","handleTechStalled_","handleTechLoadedMetaData_","handleTechLoadedData_","handleTechTextTrackChange_","handleTechPosterChange_","usingNativeControls","addTechControlsListeners_","removeTechControlsListeners_","handleTechClick_","handleTechTouchMove_","handleTechTouchEnd_","hasStarted","_hasStarted","hasStarted_","handleTechTap_","userActive","handleTechTouchStart_","userWasActive","handleStageClick_","handleTechSuspend_","handleTechEmptied_","handleTechTimeUpdate_","handleTechRateChange_","handleTechVolumeChange_","techCall_","techGet_","isScrubbing","scrubbing_","seconds","bufferedPercent","_utilsBufferJs","percentAsDecimal","fsApi","fullscreenchange","documentFullscreenChange","requestFullscreen","supportsFullScreen","exitFullscreen","isFullWindow","docOrigOverflow","documentElement","overflow","exitFullWindow","tech","b","currentTech","sourceList_","currentType_","load","sourceTech","selectSource","controls_","usingNativeControls_","error_","_mediaErrorJs2","ended","seeking","seekable","userActivity_","userActive_","stopPropagation","listenForUserActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","screenX","screenY","handleMouseDown","handleMouseUp","inactivityTimeout","addTextTrack","addRemoteTextTrack","removeRemoteTextTrack","languages_","toJSON","tagOptions","dataSetup","_safeParseTuple","baseOptions","hasChildNodes","childNodes","childName","_playerJs","PosterImage","fallbackImg_","setSrc","_windowLoaded","autoSetup","vids","getElementsByTagName","mediaEls","audios","mediaEl","getAttribute","autoSetupTimeout","vjs","Slider","bar","barName","playerEvent","progress","percentage","stopImmediatePropagation","vertical_","registerComponent","FlashRtmpDecorator","Flash","streamingFormats","streamToParts","parts","connection","stream","connEnd","streamBegin","lastIndexOf","substring","rtmpSourceHandler","attrUpper","attr","toUpperCase","_api","vjs_setProperty","vjs_getProperty","_tech","_utilsUrlJs","_Tech","setSource","swf","objId","eventProxyFunction","errorEventProxyFunction","flashVars","params","wmode","embed","setCurrentTime","vjs_pause","lastSeekTarget_","currentSource_","setPoster","_utilsTimeRangesJs","createTimeRange","ranges","enterFullScreen","_tech2","_readWrite","_readOnly","_createGetter","nativeSourceHandler","canHandleSource","guessMimeType","ext","Url","getFileExtension","video/flv","video/mp4","checkReady","onEvent","swfID","eventName","getEl","version","navigator","description","match","getEmbedCode","flashVarsString","paramsString","attrsString","flashvars","_techJs2","_techJs","Html5","currentSrc","initNetworkState_","handleLateInit_","nodesLength","nodes","node","featuresNativeTextTracks","remoteTextTracks","addTrack_","removeNodes","handleTextTrackChange_","handleTextTrackChange","handleTextTrackRemove_","handleTextTrackRemove","proxyNativeTextTracks_","emulatedTt","tt","handleTextTrackAdd_","clone","cloneNode","createElement","browser","TOUCH_ENABLED","setElAttributes","class","settingsAttrs","overwriteAttrs","_ret","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","paused","setVolume","setMuted","offsetWidth","offsetHeight","video","networkState","HAVE_METADATA","webkitEnterFullScreen","exitFullScreen","webkitExitFullScreen","_src","setPreload","autoplay","setAutoplay","setControls","setLoop","defaultMuted","played","removeTrack_","TEST_VID","srclang","isSupported","canPlayType","registerSourceHandler","canControlVolume","canControlPlaybackRate","supportsNativeTextTracks","supportsTextTracks","mpegurlRE","patchCanPlayType","IS_OLD_ANDROID","mp4RE","unpatchCanPlayType","firstChild","MediaLoader","_tracksTextTrackList","Tech","manualProgressOn","featuresTimeupdateEvents","nativeCaptions","nativeTextTracks","manualProgress","stopTrackingProgress","progressInterval","numBufferedPercent","onDurationChange","duration_","manualTimeUpdates","trackCurrentTime","stopTrackingCurrentTime","currentTimeInterval","manuallyTriggered","initTextTrackListeners","textTrackListChanges","script","textTracksChanges","updateDisplay","_tracksTextTrackList2","createTrackHelper","withSourceHandlers","handler","handlers","sourceHandlers","selectSourceHandler","sh","srcObj","sourceHandler_","disposeSourceHandler","handleSource","../tracks/text-track","../tracks/text-track-list","../utils/buffer.js","../utils/fn.js","../utils/log.js","../utils/time-ranges.js","global/document",108,"IS_IE8","prop","TextTrackCueList","get","length_","setCues_","cues_","oldLength","defineProp","parseInt","color","opacity","darkGray","lightGray","TextTrackDisplay","clearDisplay","updateForTrack","overrides","getValues","_i","cueDiv","displayState","textOpacity","tryUpdateStyle","constructColor","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","bottom","fontFamily","fontVariant","fontMap","../component","../menu/menu-button.js","../menu/menu-item.js","../menu/menu.js",110,"TextTrackMode","disabled","hidden","showing","trackToJson_","inBandMetadataTrackDispatchType","textTracksToJson","trackEls","querySelectorAll","trackObjs","TextTrackList","tracks_","_eventTarget2","change","addtrack","removetrack","_event","rtrack","getTrackById","getSelectedOptionValue","selectedOption","selectedOptions","selectedIndex","option","TextTrackSettings","persistTextTrackSettings","saveSettings","restoreSettings","textEdge","fgColor","bgColor","bgOpacity","setValues","values","setSelectedOption","_safeJsonParseTuple2","localStorage","getItem","removeItem","ttDisplay","safe-json-parse/tuple",114,"_textTrackCueList2","_textTrackCueList","_eventTarget","TextTrack","TextTrackEnum","TextTrackKind","mode","activeCues_","activeCues","changed","timeupdateHandler","set","newMode","loaded_","ct","active","addCue","removeCue","removed","parseCues","srcContent","parser","loadTrack","crossOrigin","isCrossOrigin","_xhr2","responseBody","O","fromIndex","abs","webkitVersionMap","exec","USER_AGENT","IS_IPHONE","IS_IPAD","IS_IPOD","IOS_VERSION","IS_ANDROID","ANDROID_VERSION","major","minor","IS_NATIVE_ANDROID","appleWebkitVersion","bufferedDuration","_timeRangesJs","_logJs","_logJs2","messages","Proxy","warn","defaultBehaviors","_taggedTemplateLiteralLoose","strings","raw","getElementById","propName","_tsml2","_templateObject","parent","getElData","elData","elIdAttr","element","classNames","join","knownBooleans","attrs","attrName","attrVal","onselectstart","getBoundingClientRect","box","top","docEl","clientLeft","scrollLeft","pageXOffset","getPointerPosition","boxH","boxX","pageY","unblockTextSelection","_tsml","elem","_handleMultipleEvents","dispatcher","hash","fixEvent","m","handlersCopy","isImmediatePropagationStopped","removeType","ownerDocument","isPropagationStopped","defaultPrevented","targetData","returnTrue","returnFalse","old","srcElement","relatedTarget","returnValue","cancelBubble","doc","clientX","_cleanUpEvents","detachEvent","ret","guide","h","floor",122,"_logType","console","log","history","argsArray","isPlain","mergeOptions","destination","lodash-compat/object/merge",125,"createStyleElement","createTimeRanges","createTimeRangesObj","getRange","fnName","valueIndex","rangeIndex","parseUrl","href","addToBody","div","details","protocol",129,"stylesheet","_utilsStylesheetJs","_player2","_player","_tracksTextTrackJs","_lodashCompatObjectMerge","_utilsCreateDeprecationProxyJs","_techHtml5Js","getPlayers","setTextContent","addLanguage"],"mappings":"AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CACA,SAAAA,GAAA,GAAA,gBAAAC,UAAA,mBAAAC,QAAAA,OAAAD,QAAAD,QAAA,IAAA,kBAAAG,SAAAA,OAAAC,IAAAD,UAAAH,OAAA,CAAA,GAAAK,EAAAA,GAAA,mBAAAC,QAAAA,OAAA,mBAAAC,QAAAA,OAAA,mBAAAC,MAAAA,KAAAC,KAAAJ,EAAAK,QAAAV,MAAA,WAAA,GAAAG,EAAA,OAAA,SAAAQ,GAAAC,EAAAC,EAAAC,GAAA,QAAAC,GAAAC,EAAAC,GAAA,IAAAJ,EAAAG,GAAA,CAAA,IAAAJ,EAAAI,GAAA,CAAA,GAAAE,GAAA,kBAAAC,UAAAA,OAAA,KAAAF,GAAAC,EAAA,MAAAA,GAAAF,GAAA,EAAA,IAAAI,EAAA,MAAAA,GAAAJ,GAAA,EAAA,IAAAhB,GAAA,GAAAqB,OAAA,uBAAAL,EAAA,IAAA,MAAAhB,GAAAsB,KAAA,mBAAAtB,EAAA,GAAAuB,GAAAV,EAAAG,IAAAf,WAAAW,GAAAI,GAAA,GAAAQ,KAAAD,EAAAtB,QAAA,SAAAU,GAAA,GAAAE,GAAAD,EAAAI,GAAA,GAAAL,EAAA,OAAAI,GAAAF,EAAAA,EAAAF,IAAAY,EAAAA,EAAAtB,QAAAU,EAAAC,EAAAC,EAAAC,GAAA,MAAAD,GAAAG,GAAAf,QAAA,IAAA,GAAAmB,GAAA,kBAAAD,UAAAA,QAAAH,EAAA,EAAAA,EAAAF,EAAAW,OAAAT,IAAAD,EAAAD,EAAAE,GAAA,OAAAD,KAAAW,GAAA,SAAAC,EAAAzB,IACA,SAAAK,GACA,GAAAqB,GAAA,mBAAArB,GAAAA,EACA,mBAAAD,QAAAA,UACAuB,EAAAF,EAAA,eAEA,IAAA,mBAAAG,UACA5B,EAAAD,QAAA6B,cClBA,GAAAC,GAAAH,EAAA,4BAEAG,KACAA,EAAAH,EAAA,6BAAAC,GAGA3B,EAAAD,QAAA8B,KAGAP,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,aAEA0B,eAAA,IAAAC,GAAA,SAAAN,EAAAzB,IACA,SAAAK,GCZAL,EAAAD,mCAAAK,6BCAAC,EACA,mBAAAC,MACAA,UAKAgB,KAAAf,KAAA,mBAAAF,QAAAA,OAAA,mBAAAC,MAAAA,KAAA,mBAAAF,QAAAA,gBAEA4B,GAAA,iBAEAC,GAAA,SAAAR,EAAAzB,GACA,GAAAkC,GAAAT,EAAA,yBAGAU,EAAAD,EAAAE,KAAA,OCVAC,EAAAF,GAAA,WACA,OAAA,GAAAC,OAAAE,UAGAtC,GAAAD,QAAAsC,IAEAE,wBAAA,KAAAC,GAAA,SAAAf,EAAAzB,GAyEA,QAAAyC,GAAAC,EAAAC,EAAAC,GAyBA,QAAAC,KACAC,GACAC,aAAAD,GAEAE,GACAD,aAAAC,GAEAC,EAAA,EACAD,EAAAF,EAAAI,EAAAC,OAGA,QAAAC,GAAAC,EAAAC,GACAA,GACAP,aAAAO,GAEAN,EAAAF,EAAAI,EAAAC,OACAE,IACAJ,EAAAZ,IACAkB,EAAAb,EAAAc,MAAAC,EAAAC,GACAZ,GAAAE,IACAU,EAAAD,EAAAN,SAKA,QAAAQ,KACA,GAAAC,GAAAjB,GAAAN,IAAAwB,EACA,IAAAD,GAAAA,EAAAjB,EACAS,EAAAF,EAAAF,GAEAF,EAAAgB,WAAAH,EAAAC,GAIA,QAAAG,KACAX,EAAAY,EAAAlB,GAGA,QAAAmB,KAMA,GALAP,EAAAQ,UACAL,EAAAxB,IACAoB,EAAAlD,KACA2C,EAAAc,IAAAlB,IAAAqB,GAEAC,KAAA,EACA,GAAAC,GAAAF,IAAArB,MACA,CACAE,GAAAmB,IACAlB,EAAAY,EAEA,IAAAD,GAAAQ,GAAAP,EAAAZ,GACAI,EAAA,GAAAO,GAAAA,EAAAQ,CAEAf,IACAL,IACAA,EAAAD,aAAAC,IAEAC,EAAAY,EACAN,EAAAb,EAAAc,MAAAC,EAAAC,IAEAV,IACAA,EAAAc,WAAAC,EAAAH,ICvKA,MD0KAP,IAAAP,EACAA,EAAAC,aAAAD,GAEAA,GAAAH,IAAAyB,IACAtB,EAAAgB,WAAAH,EAAAhB,IAEA0B,IACAhB,GAAA,EACAE,EAAAb,EAAAc,MAAAC,EAAAC,KCrLAL,GAAAP,GAAAE,IACAU,EAAAD,EAAAN,QAEAI,EDkFA,GAAAG,GACAV,EACAO,EACAM,EACAJ,EACAX,EACAI,EACAD,EAAA,EACAmB,GAAA,EACAJ,GAAA,CAEA,IAAA,kBAAAtB,GACA,KAAA,IAAA4B,WAAAC,EAGA,IADA5B,EAAA,EAAAA,EAAA,GAAAA,GAAA,EACAC,KAAA,EAAA,CACA,GAAAuB,IAAA,CACAH,IAAA,MACAQ,GAAA5B,KACAuB,IAAAvB,EAAAuB,QACAC,EAAA,WAAAxB,IAAA6B,GAAA7B,EAAAwB,SAAA,EAAAzB,GACAqB,EAAA,YAAApB,KAAAA,EAAAoB,SAAAA,ECpGA,OADAC,GAAApB,OAAAA,EACAoB,EDMA,GAAAO,GAAA/C,EAAA,oBACAY,EAAAZ,EAAA,eAGA8C,EAAA,sBAGAE,EAAAC,KAAAC,GCVA3E,GAAAD,QAAA0C,IAEAmC,cAAA,EAAAC,mBAAA,KAAAC,GAAA,SAAArD,EAAAzB,GA6BA,QAAA+E,GAAArC,EAAAsC,GACA,GAAA,kBAAAtC,GACA,KAAA,IAAA4B,WAAAC,EAGA,OADAS,GAAAP,EAAAtB,SAAA6B,EAAAtC,EAAAnB,OAAA,GAAAyD,GAAA,EAAA,GACA,WAMA,IALA,GAAAtB,GAAAQ,UACAe,EAAA,GACA1D,EAAAkD,EAAAf,EAAAnC,OAAAyD,EAAA,GACAE,EAAAC,MAAA5D,KAEA0D,EAAA1D,GACA2D,EAAAD,GAAAvB,EAAAsB,EAAAC,EAEA,QAAAD,GACA,IAAA,GAAA,MAAAtC,GAAApB,KAAAf,KAAA2E,EACA,KAAA,GAAA,MAAAxC,GAAApB,KAAAf,KAAAmD,EAAA,GAAAwB,EACA,KAAA,GAAA,MAAAxC,GAAApB,KAAAf,KAAAmD,EAAA,GAAAA,EAAA,GAAAwB,mBCxDA,KADAD,EAAA,KACAA,EAAAD,GACAI,EAAAH,GAAAvB,EAAAuB,EAGA,OADAG,GAAAJ,GAAAE,EACAxC,EAAAc,MAAAjD,KAAA6E,IDQA,GAAAb,GAAA,sBAGAE,EAAAC,KAAAC,GCPA3E,GAAAD,QAAAgF,OAEAM,GAAA,SAAA5D,EAAAzB,GA8CA,QAAAsF,GAAA5C,EAAAC,EAAAC,GACA,GAAAuB,IAAA,EACAH,GAAA,CAEA,IAAA,kBAAAtB,GACA,KAAA,IAAA4B,WAAAC,ECxDA,OANA3B,MAAA,EACAuB,GAAA,EACAK,EAAA5B,KACAuB,EAAA,WAAAvB,KAAAA,EAAAuB,QAAAA,EACAH,EAAA,YAAApB,KAAAA,EAAAoB,SAAAA,GAEAvB,EAAAC,EAAAC,GAAAwB,QAAAA,EAAAC,SAAAzB,EAAAqB,SAAAA,IDMA,GAAAvB,GAAAhB,EAAA,cACA+C,EAAA/C,EAAA,oBAGA8C,EAAA,qBCPAvE,GAAAD,QAAAuF,IAEAT,mBAAA,GAAAU,aAAA,IAAAC,GAAA,SAAA/D,EAAAzB,GASA,QAAAyF,GAAAC,EAAAC,YCpBApE,EAAAmE,EAAAnE,MAGA,KADAoE,IAAAA,EAAAR,MAAA5D,MACA0D,EAAA1D,GACAoE,EAAAV,GAAAS,EAAAT,EAEA,OAAAU,GAGA3F,EAAAD,QAAA0F,OAEAG,GAAA,SAAAnE,EAAAzB,GAUA,QAAA6F,GAAAF,EAAAG,GCpBA,IDqBA,GAAAb,GAAA,gBCrBAA,EAAA1D,GACAuE,EAAAH,EAAAV,GAAAA,EAAAU,MAAA,IAIA,MAAAA,GAGA3F,EAAAD,QAAA8F,OAEAE,IAAA,SAAAtE,EAAAzB,GAUA,QAAAgG,GAAAN,EAAAO,EAAAC,GACAA,IAAAA,KCpBA,cAFA3E,EAAA0E,EAAA1E,SAEA0D,EAAA1D,GAAA,CACA,GAAA4E,GAAAF,EAAAhB,EACAiB,GAAAC,GAAAT,EAAAS,GAEA,MAAAD,GAGAlG,EAAAD,QAAAiG,OAEAI,IAAA,SAAA3E,EAAAzB,GACA,GAAAqG,GAAA5E,EAAA,mBCLA6E,EAAAD,GAEArG,GAAAD,QAAAuG,IAEAC,kBAAA,KAAAC,IAAA,SAAA/E,EAAAzB,GCNA,QAAAyG,GAAAP,EAAAJ,GACA,MAAAQ,GAAAJ,EAAAJ,EAAAY,GDMA,GAAAJ,GAAA7E,EAAA,aACAiF,EAAAjF,EAAA,mBCJAzB,GAAAD,QAAA0G,IAEAE,mBAAA,GAAAC,YAAA,KAAAC,IAAA,SAAApF,EAAAzB,GAsBA,QAAA8G,GAAAZ,EAAAR,EAAAqB,EAAAC,EAAAC,GACA,IAAAzC,EAAA0B,GACA,MAAAA,EAEA,IAAAgB,GAAAC,EAAAzB,KAAA0B,EAAA1B,IAAA2B,EAAA3B,IACAO,EAAAiB,EAAA/D,OAAAmE,EAAA5B,EChCA,ODkCAG,GAAAI,GAAAP,EAAA,SAAA6B,EAAApB,GAKA,GAJAF,IACAE,EAAAoB,EACAA,EAAA7B,EAAAS,IAEAqB,EAAAD,GACAP,IAAAA,MACAC,IAAAA,MACAQ,EAAAvB,EAAAR,EAAAS,EAAAW,EAAAC,EAAAC,EAAAC,OAEA,CACA,GAAAS,GAAAxB,EAAAC,GACA5C,EAAAwD,EAAAA,EAAAW,EAAAH,EAAApB,EAAAD,EAAAR,GAAAvC,OACAwE,EAAAxE,SAAAI,CAEAoE,KACApE,EAAAgE,GCxDApE,SAAAI,KAAA2D,GAAAf,IAAAD,MACAyB,IAAApE,IAAAA,EAAAA,IAAAmE,EAAAA,IAAAA,KACAxB,EAAAC,GAAA5C,MAIA2C,EDMA,GAAAL,GAAApE,EAAA,eACAgG,EAAAhG,EAAA,mBACA2F,EAAA3F,EAAA,mBACA0F,EAAA1F,EAAA,iBACA+C,EAAA/C,EAAA,oBACA+F,EAAA/F,EAAA,kBACA4F,EAAA5F,EAAA,wBACA6F,EAAA7F,EAAA,iBCVAzB,GAAAD,QAAA+G,IAEAc,kBAAA,GAAA/C,mBAAA,GAAAgD,uBAAA,GAAAC,iBAAA,GAAAC,cAAA,EAAAC,kBAAA,GAAAC,gBAAA,GAAAC,iBAAA,KAAAC,IAAA,SAAA1G,EAAAzB,GAwBA,QAAAyH,GAAAvB,EAAAR,EAAAS,EAAAiC,EAAArB,EAAAC,EAAAC,GAIA,IAHA,GAAA1F,GAAAyF,EAAAzF,OACAgG,EAAA7B,EAAAS,GAEA5E,KACA,GAAAyF,EAAAzF,IAAAgG,EAEA,YADArB,EAAAC,GAAAc,EAAA1F,GAIA,IAAAmG,GAAAxB,EAAAC,GACA5C,EAAAwD,EAAAA,EAAAW,EAAAH,EAAApB,EAAAD,EAAAR,GAAAvC,OACAwE,EAAAxE,SAAAI,CAEAoE,KACApE,EAAAgE,EACAJ,EAAAI,KAAAH,EAAAG,IAAAF,EAAAE,IACAhE,EAAA6D,EAAAM,GACAA,EACAP,EAAAO,GAAAjC,EAAAiC,MAEAW,EAAAd,IAAAe,EAAAf,GACAhE,EAAA+E,EAAAZ,GACAa,EAAAb,GACAW,EAAAX,GAAAA,KAGAC,GAAA,GAKAX,EAAAwB,KAAAjB,aClEAI,EAEAzB,EAAAC,GAAAiC,EAAA7E,EAAAgE,EAAAR,EAAAC,EAAAC,IACA1D,IAAAA,EAAAA,IAAAmE,EAAAA,IAAAA,KACAxB,EAAAC,GAAA5C,GDOA,GAAAkC,GAAAhE,EAAA,eACA6G,EAAA7G,EAAA,uBACA2F,EAAA3F,EAAA,mBACA0F,EAAA1F,EAAA,iBACA4G,EAAA5G,EAAA,yBACA4F,EAAA5F,EAAA,wBACA8G,EAAA9G,EAAA,wBCTAzB,GAAAD,QAAA0H,IAEAgB,sBAAA,GAAAb,kBAAA,GAAAc,wBAAA,GAAAb,uBAAA,GAAAc,wBAAA,GAAAC,cAAA,EAAAX,gBAAA,KAAAY,IAAA,SAAApH,EAAAzB,GCRA,QAAA8I,GAAA3C,GACA,MAAA,UAAAD,GACA,MAAA,OAAAA,EAAA/C,OAAA4F,EAAA7C,GAAAC,IDOA,GAAA4C,GAAAtH,EAAA,aCHAzB,GAAAD,QAAA+I,IAEAE,aAAA,KAAAC,IAAA,SAAAxH,EAAAzB,GAaA,QAAAkJ,GAAAxG,EAAAe,EAAA0F,GACA,GAAA,kBAAAzG,GACA,MAAA0G,EAEA,IAAAjG,SAAAM,EACA,MAAAf,EAEA,QAAAyG,GACA,IAAA,GAAA,MAAA,UAAAzB,GACA,MAAAhF,GAAApB,KAAAmC,EAAAiE,GAEA,KAAA,GAAA,MAAA,UAAAA,EAAAzC,EAAAoE,GACA,MAAA3G,GAAApB,KAAAmC,EAAAiE,EAAAzC,EAAAoE,GAEA,KAAA,GAAA,MAAA,UAAAC,EAAA5B,EAAAzC,EAAAoE,GACA,MAAA3G,GAAApB,KAAAmC,EAAA6F,EAAA5B,EAAAzC,EAAAoE,GCvCA,KAAA,GAAA,MAAA,UAAA3B,EAAA6B,EAAApD,EAAAD,EAAAR,GACA,MAAAhD,GAAApB,KAAAmC,EAAAiE,EAAA6B,EAAApD,EAAAD,EAAAR,IAGA,MAAA,YACA,MAAAhD,GAAAc,MAAAC,EAAAS,YDOA,GAAAkF,GAAA3H,EAAA,sBCHAzB,GAAAD,QAAAmJ,IAEAM,sBAAA,KAAAC,IAAA,SAAAhI,EAAAzB,GAYA,QAAA0J,GAAAC,GACA,MAAA5E,GAAA,SAAAmB,EAAA0D,GACA,GAAA3E,GAAA,GACA1D,EAAA,MAAA2E,EAAA,EAAA0D,EAAArI,OACAwF,EAAAxF,EAAA,EAAAqI,EAAArI,EAAA,GAAA4B,OACA0G,EAAAtI,EAAA,EAAAqI,EAAA,GAAAzG,OACAM,EAAAlC,EAAA,EAAAqI,EAAArI,EAAA,GAAA4B,WAEA,kBAAA4D,IACAA,EAAAmC,EAAAnC,EAAAtD,EAAA,GACAlC,GAAA,IAEAwF,EAAA,kBAAAtD,GAAAA,EAAAN,OACA5B,GAAAwF,EAAA,EAAA,GAEA8C,GAAAC,EAAAF,EAAA,GAAAA,EAAA,GAAAC,KACA9C,EAAA,EAAAxF,EAAA4B,OAAA4D,EACAxF,EAAA,WCxCA,GAAAmE,GAAAkE,EAAA3E,EACAS,IACAiE,EAAAzD,EAAAR,EAAAqB,GAGA,MAAAb,KDOA,GAAAgD,GAAAzH,EAAA,kBACAqI,EAAArI,EAAA,oBACAsD,EAAAtD,EAAA,wBCLAzB,GAAAD,QAAA2J,IAEAK,wBAAA,EAAAC,iBAAA,GAAAC,mBAAA,KAAAC,IAAA,SAAAzI,EAAAzB,GAUA,QAAAqG,GAAA8D,GACA,MAAA,UAAAjE,EAAAJ,EAAAsE,OACA,GAAAC,GAAAtB,EAAA7C,GACAD,EAAAmE,EAAAlE,GACA3E,EAAA0E,EAAA1E,OACA0D,EAAAkF,EAAA5I,EAAA,iBC1BA,GAAA4E,GAAAF,EAAAhB,EACA,IAAAa,EAAAuE,EAAAlE,GAAAA,EAAAkE,MAAA,EACA,MAGA,MAAAnE,IDOA,GAAA6C,GAAAtH,EAAA,aCHAzB,GAAAD,QAAAsG,IAEA2C,aAAA,KAAAsB,IAAA,SAAA7I,EAAAzB,GACA,GAAA8I,GAAArH,EAAA,kBCLA8I,EAAAzB,EAAA,SAEA9I,GAAAD,QAAAwK,IAEAC,iBAAA,KAAAC,IAAA,SAAAhJ,EAAAzB,GCPA,QAAAkC,GAAAgE,EAAAC,GACA,GAAAuB,GAAA,MAAAxB,EAAA/C,OAAA+C,EAAAC,EACA,OAAAuE,GAAAhD,GAAAA,EAAAvE,ODMA,GAAAuH,GAAAjJ,EAAA,mBCHAzB,GAAAD,QAAAmC,IAEAyI,mBAAA,KAAAC,IAAA,SAAAnJ,EAAAzB,GCNA,QAAAmH,GAAAO,GACA,MAAA,OAAAA,GAAAmD,EAAAN,EAAA7C,IDMA,GAAA6C,GAAA9I,EAAA,eACAoJ,EAAApJ,EAAA,aCJAzB,GAAAD,QAAAoH,IAEA2D,cAAA,GAAAC,aAAA,KAAAC,IAAA,SAAAvJ,EAAAzB,GAQA,GAAAiL,GAAA,WACA,IACAC,QAAAC,SAAA,GAAA,aCrBA,MAAA,YAAA,OAAA,GAEA,MAAA,UAAAzD,GAGA,MAAA,kBAAAA,GAAAyD,UAAA,iBAAAzD,EAAA,OAIA1H,GAAAD,QAAAkL,OAEAG,IAAA,SAAA3J,EAAAzB,GCRA,QAAAqL,GAAA3D,EAAAnG,GAGA,MAFAmG,GAAA,gBAAAA,IAAA4D,EAAAC,KAAA7D,IAAAA,EAAA,GACAnG,EAAA,MAAAA,EAAAiK,EAAAjK,EACAmG,EAAA,IAAAA,EAAA,GAAA,GAAAnG,EAAAmG,EDOA,GAAA4D,GAAA,QAMAE,EAAA,gBCVAxL,GAAAD,QAAAsL,OAEAI,IAAA,SAAAhK,EAAAzB,GAcA,QAAA8J,GAAApC,EAAAzC,EAAAiB,GACA,IAAA1B,EAAA0B,GACA,OAAA,gBC3BA,IAAA,UAAAwF,EACAvE,EAAAjB,IAAAmF,EAAApG,EAAAiB,EAAA3E,QACA,UAAAmK,GAAAzG,IAAAiB,GAAA,CACA,GAAAqD,GAAArD,EAAAjB,EACA,OAAAyC,KAAAA,EAAAA,IAAA6B,EAAAA,IAAAA,EAEA,OAAA,EDMA,GAAApC,GAAA1F,EAAA,iBACA4J,EAAA5J,EAAA,aACA+C,EAAA/C,EAAA,mBCLAzB,GAAAD,QAAA+J,IAEAjF,mBAAA,GAAAoD,gBAAA,GAAA0D,YAAA,KAAAC,IAAA,SAAAnK,EAAAzB,GCNA,QAAA6K,GAAAnD,GACA,MAAA,gBAAAA,IAAAA,EAAA,IAAAA,EAAA,GAAA,GAAA8D,GAAA9D,EDUA,GAAA8D,GAAA,gBCPAxL,GAAAD,QAAA8K,OAEAgB,IAAA,SAAApK,EAAAzB,GCNA,QAAAwH,GAAAE,GACA,QAAAA,GAAA,gBAAAA,GAGA1H,EAAAD,QAAAyH,OAEAsE,IAAA,SAAArK,EAAAzB,GAsBA,QAAA+L,GAAA7F,GCjCA,IDkCA,GAAAD,GAAAS,EAAAR,GACA8F,EAAA/F,EAAA1E,OACAA,EAAAyK,GAAA9F,EAAA3E,OAEA0K,IAAA1K,GAAAsJ,EAAAtJ,KACA6F,EAAAlB,IAAAoC,EAAApC,IAAAgG,EAAAhG,IAEAjB,EAAA,GACA1B,OC1CA0B,EAAA+G,GAAA,CACA,GAAA7F,GAAAF,EAAAhB,IACAgH,GAAAZ,EAAAlF,EAAA5E,IAAA4K,EAAA7K,KAAA4E,EAAAC,KACA5C,EAAAiF,KAAArC,GAGA,MAAA5C,GDMA,GAAA+E,GAAA7G,EAAA,uBACA2F,EAAA3F,EAAA,mBACA4J,EAAA5J,EAAA,aACAoJ,EAAApJ,EAAA,cACAyK,EAAAzK,EAAA,oBACAiF,EAAAjF,EAAA,oBAGA2K,EAAAlB,OAAAmB,UAGAF,EAAAC,EAAAD,cCdAnM,GAAAD,QAAAgM,IAEAtD,sBAAA,GAAAb,kBAAA,GAAA0E,mBAAA,GAAA3F,mBAAA,GAAAgF,YAAA,GAAAZ,aAAA,KAAAwB,IAAA,SAAA9K,EAAAzB,GAYA,QAAA+I,GAAArB,GACA,GAAA8E,EAAAC,gBAAAP,EAAAxE,GAAA,CCvBA,IDwBA,GAAAzC,GAAA,GACA1D,EAAAmG,EAAAnG,qBCzBA0D,EAAA1D,GACAgC,EAAA0B,GAAAyC,EAAAgF,OAAAzH,EAEA,OAAA1B,GAEA,MAAAiB,GAAAkD,GAAAA,EAAAwD,OAAAxD,GDMA,GAAAlD,GAAA/C,EAAA,oBACAyK,EAAAzK,EAAA,oBACA+K,EAAA/K,EAAA,aCLAzB,GAAAD,QAAAgJ,IAEAlE,mBAAA,GAAAyH,mBAAA,GAAAK,aAAA,KAAAC,IAAA,SAAAnL,EAAAzB,GCPA,QAAAsI,GAAAZ,GACA,MAAAF,GAAAE,IAAAP,EAAAO,IACAyE,EAAA7K,KAAAoG,EAAA,YAAAmF,EAAAvL,KAAAoG,EAAA,UDMA,GAAAP,GAAA1F,EAAA,2BACA+F,EAAA/F,EAAA,4BAGA2K,EAAAlB,OAAAmB,UAGAF,EAAAC,EAAAD,eAGAU,EAAAT,EAAAS,oBCbA7M,GAAAD,QAAAuI,IAEAwE,0BAAA,GAAAC,2BAAA,KAAAC,IAAA,SAAAvL,EAAAzB,GACA,GAAAkC,GAAAT,EAAA,yBACAoJ,EAAApJ,EAAA,wBACA+F,EAAA/F,EAAA,4BAGAwL,EAAA,iBAGAb,EAAAlB,OAAAmB,UAMAa,EAAAd,EAAAjB,SAGAgC,EAAAjL,EAAAiD,MAAA,WCxBAiC,EAAA+F,GAAA,SAAAzF,GACA,MAAAF,GAAAE,IAAAmD,EAAAnD,EAAAnG,SAAA2L,EAAA5L,KAAAoG,IAAAuF,EAGAjN,GAAAD,QAAAqH,IAEA7E,wBAAA,GAAA6K,uBAAA,GAAAL,2BAAA,KAAAM,IAAA,SAAA5L,EAAAzB,GCTA,QAAAsN,GAAA5F,GAIA,MAAAlD,GAAAkD,IAAAwF,EAAA5L,KAAAoG,IAAA6F,EDMA,GAAA/I,GAAA/C,EAAA,cAGA8L,EAAA,oBAGAnB,EAAAlB,OAAAmB,UAMAa,EAAAd,EAAAjB,QCfAnL,GAAAD,QAAAuN,IAEAE,aAAA,KAAAC,IAAA,SAAAhM,EAAAzB,iBCXA,MAAA,OAAA0H,GACA,EAEA4F,EAAA5F,GACAgG,EAAAnC,KAAAoC,EAAArM,KAAAoG,IAEAF,EAAAE,KAAAuD,EAAAvD,GAAAgG,EAAAE,GAAArC,KAAA7D,GDMA,GAAA4F,GAAA7L,EAAA,gBACAwJ,EAAAxJ,EAAA,4BACA+F,EAAA/F,EAAA,4BAGAmM,EAAA,8BAGAxB,EAAAlB,OAAAmB,UAGAsB,EAAAE,SAAAxB,UAAAlB,SAGAgB,EAAAC,EAAAD,eAGAuB,EAAAI,OAAA,IACAH,EAAArM,KAAA6K,GAAA4B,QAAA,sBAAA,QACAA,QAAA,yDAAA,SAAA,ICtBA/N,GAAAD,QAAA2K,IAEAsD,2BAAA,GAAAjB,2BAAA,GAAAkB,eAAA,KAAAC,IAAA,SAAAzM,EAAAzB,GCTA,QAAAwE,GAAAkD,GAGA,GAAAgE,SAAAhE,EACA,SAAAA,IAAA,UAAAgE,GAAA,YAAAA,GAGA1L,EAAAD,QAAAyE,OAEA2J,IAAA,SAAA1M,EAAAzB,GAoDA,QAAAqI,GAAAX,GACA,GAAA0G,EAGA,KAAA5G,EAAAE,IAAAwF,EAAA5L,KAAAoG,IAAA2G,GAAApD,EAAAvD,IAAAY,EAAAZ,KACAyE,EAAA7K,KAAAoG,EAAA,iBAAA0G,EAAA1G,EAAA4G,YAAA,kBAAAF,MAAAA,YAAAA,KACA,OAAA,CAKA,IAAA7K,EACA,OAAAiJ,GAAA+B,SACA9H,EAAAiB,EAAA,SAAA8G,EAAArI,EAAAD,GAEA,MADA3C,GAAA4I,EAAA7K,KAAA4E,EAAAC,IACA,IAEA5C,KAAA,IC7EAkD,EAAAiB,EAAA,SAAA8G,EAAArI,GACA5C,EAAA4C,IAEAhD,SAAAI,GAAA4I,EAAA7K,KAAAoG,EAAAnE,IDMA,GAAAkD,GAAAhF,EAAA,yBACA6G,EAAA7G,EAAA,iBACAwJ,EAAAxJ,EAAA,4BACA+F,EAAA/F,EAAA,4BACA+K,EAAA/K,EAAA,cAGA4M,EAAA,kBAGAjC,EAAAlB,OAAAmB,UAGAF,EAAAC,EAAAD,eAMAe,EAAAd,EAAAjB,QCtBAnL,GAAAD,QAAAsI,IAEAoG,wBAAA,GAAAT,2BAAA,GAAAjB,2BAAA,GAAAJ,aAAA,GAAA+B,gBAAA,KAAAC,IAAA,SAAAlN,EAAAzB,GCNA,QAAAkM,GAAAxE,GACA,MAAA,gBAAAA,IAAAF,EAAAE,IAAAwF,EAAA5L,KAAAoG,IAAAkH,EDMA,GAAApH,GAAA/F,EAAA,4BAGAmN,EAAA,kBAGAxC,EAAAlB,OAAAmB,UAMAa,EAAAd,EAAAjB,QCfAnL,GAAAD,QAAAmM,IAEAa,2BAAA,KAAA8B,IAAA,SAAApN,EAAAzB,GCNA,QAAAqH,GAAAK,GACA,MAAAF,GAAAE,IAAAmD,EAAAnD,EAAAnG,WAAAuN,EAAA5B,EAAA5L,KAAAoG,IDMA,GAAAmD,GAAApJ,EAAA,wBACA+F,EAAA/F,EAAA,4BAGAsN,EAAA,qBACA9B,EAAA,iBACA+B,EAAA,mBACAC,EAAA,gBACAC,EAAA,iBACA3B,EAAA,oBACA4B,EAAA,eACAC,EAAA,kBACAf,EAAA,kBACAgB,EAAA,kBACAC,EAAA,eACAV,EAAA,kBACAW,EAAA,mBAEAC,EAAA,uBACAC,EAAA,wBACAC,EAAA,wBACAC,EAAA,qBACAC,EAAA,sBACAC,EAAA,sBACAC,EAAA,sBACAC,EAAA,6BACAC,EAAA,uBACAC,EAAA,uBAGAnB,IACAA,GAAAW,GAAAX,EAAAY,GACAZ,EAAAa,GAAAb,EAAAc,GACAd,EAAAe,GAAAf,EAAAgB,GACAhB,EAAAiB,GAAAjB,EAAAkB,GACAlB,EAAAmB,IAAA,EACAnB,EAAAC,GAAAD,EAAA7B,GACA6B,EAAAU,GAAAV,EAAAE,GACAF,EAAAG,GAAAH,EAAAI,GACAJ,EAAAvB,GAAAuB,EAAAK,GACAL,EAAAM,GAAAN,EAAAT,GACAS,EAAAO,GAAAP,EAAAQ,GACAR,EAAAF,GAAAE,EAAAS,IAAA,CAGA,IAAAnD,GAAAlB,OAAAmB,UAMAa,EAAAd,EAAAjB,QCtDAnL,GAAAD,QAAAsH,IAEA+F,uBAAA,GAAAL,2BAAA,KAAAmD,IAAA,SAAAzO,EAAAzB,GCNA,QAAAuI,GAAAb,GACA,MAAA1B,GAAA0B,EAAAhB,EAAAgB,IDMA,GAAA1B,GAAAvE,EAAA,wBACAiF,EAAAjF,EAAA,mBCJAzB,GAAAD,QAAAwI,IAEA4H,uBAAA,GAAAxJ,mBAAA,KAAAyJ,IAAA,SAAA3O,EAAAzB,GACA,GAAAkC,GAAAT,EAAA,yBACA0F,EAAA1F,EAAA,2BACA+C,EAAA/C,EAAA,oBACAsK,EAAAtK,EAAA,wBACA+K,EAAA/K,EAAA,cAGA4O,EAAAnO,EAAAgJ,OAAA,QCnBA5D,EAAA+I,EAAA,SAAAnK,GACA,GAAAkI,GAAA,MAAAlI,EAAA/C,OAAA+C,EAAAoI,WACA,OAAA,kBAAAF,IAAAA,EAAA/B,YAAAnG,IACA,kBAAAA,GAAAsG,EAAA8D,eAAAnJ,EAAAjB,IACA6F,EAAA7F,GAEA1B,EAAA0B,GAAAmK,EAAAnK,OANA6F,CASA/L,GAAAD,QAAAuH,IAEA/E,wBAAA,GAAAuK,0BAAA,GAAAyD,uBAAA,GAAA1L,mBAAA,GAAA8H,aAAA,KAAA6D,IAAA,SAAA/O,EAAAzB,GAgFA,QAAA0G,GAAAR,GACA,GAAA,MAAAA,EACA,QAEA1B,GAAA0B,KACAA,EAAAgF,OAAAhF,GAEA,IAAA3E,GAAA2E,EAAA3E,MAEAA,GAAAA,GAAAsJ,EAAAtJ,KACA6F,EAAAlB,IAAAoC,EAAApC,IAAAgG,EAAAhG,KAAA3E,GAAA,CAWA,KATA,GAAA6M,GAAAlI,EAAAoI,YACArJ,EAAA,GACAwL,EAAAnD,EAAAc,IAAAA,EAAA/B,WAAAD,EACAsE,EAAAD,IAAAvK,EACA3C,EAAA4B,MAAA5D,GACAoP,EAAApP,EAAA,EACAqP,EAAApE,EAAAqE,iBAAA3K,IAAA4K,GAAA5K,YAAA/E,QACA4P,EAAAvE,EAAA8D,gBAAAhD,EAAApH,KAEAjB,EAAA1D,GACAgC,EAAA0B,GAAAA,EAAA,EAMA,KAAA,GAAAkB,KAAAD,GACA6K,GAAA,aAAA5K,GACAyK,IAAA,WAAAzK,GAAA,QAAAA,IACAwK,GAAAtF,EAAAlF,EAAA5E,IACA,eAAA4E,IAAAuK,IAAAvE,EAAA7K,KAAA4E,EAAAC,KACA5C,EAAAiF,KAAArC,EAGA,IAAAqG,EAAAwE,gBAAA9K,IAAAkG,EAAA,CACA,GAAA6E,GAAA/K,IAAAgL,EAAAtC,EAAA1I,IAAA4K,EAAA5B,EAAAhC,EAAA5L,KAAA4E,GACAiL,EAAAC,EAAAH,IAAAG,EAAA/C,EAMA,KAJA4C,GAAA5C,IACAoC,EAAArE,GAEA7K,EAAA8P,EAAA9P,OACAA,KAAA,CACA4E,EAAAkL,EAAA9P,aCxIAmP,IAAAY,IACAA,GAAAnF,EAAA7K,KAAA4E,EAAAC,GAAAD,EAAAC,KAAAsK,EAAAtK,KACA5C,EAAAiF,KAAArC,IAIA,MAAA5C,GDMA,GAAAsC,GAAApE,EAAA,yBACA6G,EAAA7G,EAAA,uBACA2F,EAAA3F,EAAA,mBACA6L,EAAA7L,EAAA,sBACA4J,EAAA5J,EAAA,uBACAoJ,EAAApJ,EAAA,wBACA+C,EAAA/C,EAAA,oBACAyK,EAAAzK,EAAA,oBACA+K,EAAA/K,EAAA,cAGAwL,EAAA,iBACA+B,EAAA,mBACAC,EAAA,gBACAC,EAAA,iBACA3B,EAAA,oBACA6B,EAAA,kBACAf,EAAA,kBACAgB,EAAA,kBACAT,EAAA,kBAGAyC,GACA,cAAA,iBAAA,gBAAA,uBACA,iBAAA,WAAA,WAIAP,EAAA3P,MAAAkL,UACAD,EAAAlB,OAAAmB,UACA6E,EAAAK,OAAAlF,UAGAF,EAAAC,EAAAD,eAMAe,EAAAd,EAAAjB,SAGAiG,IACAA,GAAAnE,GAAAmE,EAAAnC,GAAAmC,EAAAhC,IAAAd,aAAA,EAAAkD,gBAAA,EAAArG,UAAA,EAAAsG,SAAA,GACAL,EAAApC,GAAAoC,EAAAxC,IAAAN,aAAA,EAAAnD,UAAA,EAAAsG,SAAA,GACAL,EAAAlC,GAAAkC,EAAA7D,GAAA6D,EAAA/B,IAAAf,aAAA,EAAAnD,UAAA,GACAiG,EAAA/C,IAAAC,aAAA,GAEAzI,EAAAwL,EAAA,SAAAlL,GACA,IAAA,GAAA8K,KAAAG,GACA,GAAAjF,EAAA7K,KAAA8P,EAAAH,GAAA,CACA,GAAAhL,GAAAmL,EAAAH,EACAhL,GAAAE,GAAAgG,EAAA7K,KAAA2E,EAAAE,MCvDAnG,EAAAD,QAAA2G,IAEAgL,wBAAA,EAAAC,sBAAA,GAAAvE,uBAAA,GAAA3E,sBAAA,GAAAb,kBAAA,GAAAgK,qBAAA,GAAA/M,mBAAA,GAAAyH,mBAAA,GAAAK,aAAA,KAAAkF,IAAA,SAAApQ,EAAAzB,GACA,GAAA8G,GAAArF,EAAA,yBACAiI,EAAAjI,EAAA,8BCNAqQ,EAAApI,EAAA5C,EAEA9G,GAAAD,QAAA+R,IAEAC,wBAAA,GAAAC,6BAAA,KAAAC,IAAA,SAAAxQ,EAAAzB,GAEA,GAAAkS,GAAA/M,MAAAkH,UACAyE,EAAA3P,MAAAkL,UACAD,EAAAlB,OAAAmB,UAGAQ,EAAAT,EAAAS,qBACAsF,EAAAD,EAAAC,OASA3F,MAEA,SAAA4F,GACA,GAAAhE,GAAA,WAAA7N,KAAA6R,EAAAA,GACAlM,GAAAmM,EAAAD,EAAA7Q,OAAA6Q,GACAnM,IAEAmI,GAAA/B,WAAAoF,QAAAW,EAAAE,EAAAF,EACA,KAAA,GAAAjM,KAAA,IAAAiI,GAAAnI,EAAAuC,KAAArC,EASAqG,GAAAqE,eAAAhE,EAAAvL,KAAAwP,EAAA,YACAjE,EAAAvL,KAAAwP,EAAA,QAaAtE,EAAA8D,eAAAzD,EAAAvL,KAAA8M,EAAA,aAWA5B,EAAAwE,gBAAA,UAAAzF,KAAAtF,GAQAuG,EAAA+B,QAAA,KAAAtI,EAAA,GAeAuG,EAAA+F,eAAAJ,EAAA7Q,KAAA4E,EAAA,EAAA,IAAAA,EAAA,ICvFAsG,EAAAC,eAAA,IAAA,GAAAvB,OAAA,KAAA,IAAA,MACA,EAAA,GAEAlL,EAAAD,QAAAyM,OAEAgG,IAAA,SAAA/Q,EAAAzB,GCNA,QAAAoJ,GAAA1B,GACA,MAAAA,GAGA1H,EAAAD,QAAAqJ,OAEAqJ,IAAA,SAAAhR,EAAAzB,GACA,YAGA,IAAAsH,GAAA7F,EAAA,eACAiR,EAAA,SAAAC,GACA,MAAA,mBAAAA,IAAA,OAAAA,GAEAC,EAAA,kBAAAC,SAAA,gBAAAA,UACAC,EAAArR,EAAA,qBACAsH,EAAAmC,OACA1C,EAAArD,MAAAkH,UAAA7D,KACAuK,EAAA7H,OAAAmB,UAAAQ,qBAEAmG,EAAA,SAAAC,GACA,IAAAP,EAAAO,GAAA,KAAA,IAAA3O,WAAA,2BACA,IACAzD,GAAA6E,EAAAxE,EAAA+E,EAAAiN,EADAC,EAAApK,EAAAkK,EAEA,KAAApS,EAAA,EAAAA,EAAAqD,UAAA3C,SAAAV,EAAA,CAGA,GAFA6E,EAAAqD,EAAA7E,UAAArD,IACAoF,EAAAqB,EAAA5B,GACAkN,GAAA1H,OAAAkI,sBAEA,IADAF,EAAAhI,OAAAkI,sBAAA1N,GACAxE,EAAA,EAAAA,EAAAgS,EAAA3R,SAAAL,EACA6R,EAAAzR,KAAAoE,EAAAwN,EAAAhS,KACAsH,EAAAlH,KAAA2E,EAAAiN,EAAAhS,GAIA,KAAAA,EAAA,EAAAA,EAAA+E,EAAA1E,SAAAL,EACAiS,EAAAlN,EAAA/E,IAAAwE,EAAAO,EAAA/E,IAGA,MAAAiS,GAGAL,GAAAE,GACAK,KAAA,WACA,GAAAC,GAAA,WACA,IAAApI,OAAAqI,SAAArI,OAAAsI,kBACA,OAAA,CAIA,IAAAC,GAAAvI,OAAAsI,mBAAAhS,EAAA,GACA,KACA0J,OAAAqI,OAAAE,EAAA,MACA,MAAAhT,GACA,MAAA,MAAAgT,EAAA,ICtDA,OALAX,GACA5H,QACAqI,OAAAP,IACAO,OAAAD,IAEApI,OAAAqI,QAAAP,KAIAhT,EAAAD,QAAAiT,IAEAU,oBAAA,GAAAC,cAAA,KAAAC,IAAA,SAAAnS,EAAAzB,GACA,YAEA,IAAAsH,GAAA7F,EAAA,eACAoS,EAAApS,EAAA,WACAmR,EAAA,kBAAAC,SAAA,gBAAAA,UAEAiB,EAAA5I,OAAAmB,UAAAlB,SAEAmC,EAAA,SAAAyG,GACA,MAAA,kBAAAA,IAAA,sBAAAD,EAAAxS,KAAAyS,IAGAC,EAAA,WACA,GAAArB,KACA,KACAzH,OAAA+I,eAAAtB,EAAA,KAAAjL,MAAAiL,EAAAuB,YAAA,GAEA,KAAA,GAAAC,KAAAxB,GAAA,OAAA,CAEA,OAAAA,GAAAP,IAAAO,EACA,MAAAlS,GACA,OAAA,IAGA2T,EAAAlJ,OAAA+I,gBAAAD,IAEAC,EAAA,SAAA/N,EAAAmO,EAAA3M,EAAA4M,MACAD,IAAAnO,KAAAoH,EAAAgH,IAAAA,OAGAF,EACAlJ,OAAA+I,eAAA/N,EAAAmO,GACAE,cAAA,EACAL,YAAA,EACAM,UAAA,EACA9M,MAAAA,IAGAxB,EAAAmO,GAAA3M,IAIAoL,EAAA,SAAA5M,EAAAuO,GACA,GAAAC,GAAAxQ,UAAA3C,OAAA,EAAA2C,UAAA,MACA+B,EAAAqB,EAAAmN,OCxDAxO,EAAAA,EAAA0O,OAAAzJ,OAAAkI,sBAAAqB,KAEAZ,EAAA5N,EAAA,SAAAoO,GACAJ,EAAA/N,EAAAmO,EAAAI,EAAAJ,GAAAK,EAAAL,MAIAvB,GAAAsB,sBAAAA,EAEApU,EAAAD,QAAA+S,IAEAe,QAAA,GAAAF,cAAA,KAAAiB,IAAA,SAAAnT,EAAAzB,GAEA,GAAA6U,GAAA3J,OAAAmB,UAAAF,eACAhB,EAAAD,OAAAmB,UAAAlB,QAEAnL,GAAAD,QAAA,SAAA4S,EAAAoB,EAAAe,GACA,GAAA,sBAAA3J,EAAA7J,KAAAyS,GACA,KAAA,IAAAzP,WAAA,8BAEA,IAAAjD,GAAAsR,EAAApR,MACA,IAAAF,KAAAA,EACA,IAAA,GAAAH,GAAA,EAAAG,EAAAH,EAAAA,2BCpBA,KAAA,GAAA6T,KAAApC,GACAkC,EAAAvT,KAAAqR,EAAAoC,IACAhB,EAAAzS,KAAAwT,EAAAnC,EAAAoC,GAAAA,EAAApC,SAOAqC,IAAA,SAAAvT,EAAAzB,GACA,YAGA,IAAAiV,GAAA/J,OAAAmB,UAAAF,eACA2H,EAAA5I,OAAAmB,UAAAlB,SACA+J,EAAA/P,MAAAkH,UAAA6I,MACAC,EAAA1T,EAAA,iBACA2T,IAAAjK,SAAA,MAAA0B,qBAAA,YACAwI,EAAA,aAAAxI,qBAAA,aACAyI,GACA,WACA,iBACA,UACA,iBACA,gBACA,uBACA,eAEAC,EAAA,SAAAzU,GACA,GAAA0U,GAAA1U,EAAAwN,WACA,OAAAkH,IAAAA,EAAAnJ,YAAAvL,GAEA2U,GACAC,SAAA,EACAC,UAAA,EACAC,SAAA,EACAC,OAAA,EACAC,SAAA,EACAC,kBAAA,EACAC,oBAAA,GAEAC,EAAA,WAEA,GAAA,mBAAA7V,QAAA,OAAA,CACA,KAAA,GAAA2U,KAAA3U,QACA,IAAAqV,EAAA,IAAAV,IAAAE,EAAA3T,KAAAlB,OAAA2U,IAAA,OAAA3U,OAAA2U,IAAA,gBAAA3U,QAAA2U,GACA,IACAQ,EAAAnV,OAAA2U,IACA,MAAAtU,GACA,OAAA,EAIA,OAAA,KAEAyV,EAAA,SAAApV,GAEA,GAAA,mBAAAV,UAAA6V,EACA,MAAAV,GAAAzU,EAEA,KACA,MAAAyU,GAAAzU,GACA,MAAAL,GACA,OAAA,IAIA0V,EAAA,SAAAjQ,GACA,GAAA1B,GAAA,OAAA0B,GAAA,gBAAAA,GACAoH,EAAA,sBAAAwG,EAAAxS,KAAA4E,GACAoC,EAAA6M,EAAAjP,GACAgG,EAAA1H,GAAA,oBAAAsP,EAAAxS,KAAA4E,GACAkQ,IAEA,KAAA5R,IAAA8I,IAAAhF,EACA,KAAA,IAAAhE,WAAA,qCAGA,IAAAyM,GAAAsE,GAAA/H,CACA,IAAApB,GAAAhG,EAAA3E,OAAA,IAAA0T,EAAA3T,KAAA4E,EAAA,GACA,IAAA,GAAAhF,GAAA,EAAAA,EAAAgF,EAAA3E,SAAAL,EACAkV,EAAA5N,KAAA+I,OAAArQ,GAIA,IAAAoH,GAAApC,EAAA3E,OAAA,EACA,IAAA,GAAA8U,GAAA,EAAAA,EAAAnQ,EAAA3E,SAAA8U,EACAD,EAAA5N,KAAA+I,OAAA8E,QAGA,KAAA,GAAAhC,KAAAnO,GACA6K,GAAA,cAAAsD,IAAAY,EAAA3T,KAAA4E,EAAAmO,IACA+B,EAAA5N,KAAA+I,OAAA8C,GAKA,IAAAe,EAGA,IAAA,GAFAkB,GAAAJ,EAAAhQ,GAEA6O,EAAA,EAAAA,EAAAO,EAAA/T,SAAAwT,EACAuB,GAAA,gBAAAhB,EAAAP,KAAAE,EAAA3T,KAAA4E,EAAAoP,EAAAP,KACAqB,EAAA5N,KAAA8M,EAAAP,GAIA,OAAAqB,GAGAD,GAAA9C,KAAA,WACA,GAAAnI,OAAA5D,KAEA,CACA,GAAAiP,GAAA,WAEA,MAAA,MAAArL,OAAA5D,KAAApD,YAAA,IAAA3C,QACA,EAAA,EACA,KAAAgV,EAAA,CACA,GAAAC,GAAAtL,OAAA5D,IACA4D,QAAA5D,KAAA,SAAApB,GACA,SAAAiP,EAAAjP,aCzHAA,SDgHAgF,QAAA5D,KAAA6O,CC3GA,OAAAjL,QAAA5D,MAAA6O,GAGAnW,EAAAD,QAAAoW,IAEAzH,gBAAA,KAAA+H,IAAA,SAAAhV,EAAAzB,GACA,YAEA,IAAA8T,GAAA5I,OAAAmB,UAAAlB,QAEAnL,GAAAD,QAAA,SAAA2H,GACA,GAAAgP,GAAA5C,EAAAxS,KAAAoG,6BCTA,OARAyN,KACAA,EAAA,mBAAAuB,GACA,OAAAhP,GACA,gBAAAA,IACA,gBAAAA,GAAAnG,QACAmG,EAAAnG,QAAA,GACA,sBAAAuS,EAAAxS,KAAAoG,EAAAiP,SAEAxB,QAGAyB,IAAA,SAAAnV,EAAAzB,GAGA,QAAA6W,GAAAlE,EAAAmE,SCdAC,EAAA,IAEA,KACAC,EAAAC,KAAAC,MAAAvE,EAAAmE,GACA,MAAAK,GACAJ,EAAAI,EAGA,OAAAJ,EAAAC,GDIAhX,EAAAD,QAAA8W,OCDAO,IAAA,SAAA3V,EAAAzB,GACA,QAAAqX,GAAAxW,GACA,MAAAA,GAAAkN,QAAA,YAAA,ICXA/N,EAAAD,QAAA,SAAAuX,GAIA,IAHA,GAAAzW,GAAA,GACAK,EAAA,EAEAA,EAAAgD,UAAA3C,OAAAL,IACAL,GAAAwW,EAAAC,EAAApW,KAAAgD,UAAAhD,EAAA,IAAA,GAEA,OAAAL,SAEA0W,IAAA,SAAA9V,EAAAzB,GACA,YAYA,SAAAwX,GAAA7E,GACA,IAAA,GAAAzR,KAAAyR,GACA,GAAAA,EAAAxG,eAAAjL,GAAA,OAAA,CAEA,QAAA,EAGA,QAAAuW,GAAA7U,EAAA8U,GACA,QAAAC,KACA,IAAAC,EAAAC,YACAC,IAIA,QAAAC,KAEA,GAAAC,GAAA7U,MAQA,IANAyU,EAAAK,SACAD,EAAAJ,EAAAK,SACA,SAAAL,EAAAM,cAAAN,EAAAM,eACAF,EAAAJ,EAAAO,cAAAP,EAAAQ,aAGAC,EACA,IACAL,EAAAf,KAAAC,MAAAc,GACA,MAAAvX,IAGA,MAAAuX,GAYA,QAAAM,GAAAC,GACAxV,aAAAyV,GACAD,YAAApX,SACAoX,EAAA,GAAApX,OAAA,IAAAoX,GAAA,kCAEAA,EAAAE,WAAA,EACAf,EAAAa,EAAAG,GAIA,QAAAZ,KACA,IAAAa,EAAA,CACA,GAAAC,EACA7V,cAAAyV,GAGAI,EAFAhW,EAAAiW,QAAA1V,SAAAyU,EAAAgB,OAEA,IAEA,OAAAhB,EAAAgB,OAAA,IAAAhB,EAAAgB,MAEA,IAAAX,GAAAS,EACAvB,EAAA,IAEA,KAAAyB,GACAX,GACAD,KAAAD,IACAU,WAAAG,EACAE,OAAAA,EACAC,WACAC,IAAAC,EACAC,WAAAtB,GAEAA,EAAAuB,wBACAlB,EAAAc,QAAAK,EAAAxB,EAAAuB,2BAGAhC,EAAA,GAAAhW,OAAA,iCAEAuW,EAAAP,EAAAc,EAAAA,EAAAD,OA/CA,GAAAU,IACAV,KAAA7U,OACA4V,WACAN,WAAA,EACAK,OAAAA,EACAE,IAAAC,EACAC,WAAAtB,EAkDA,IALA,gBAAAhV,KACAA,GAAAqW,IAAArW,IAGAA,EAAAA,MACA,mBAAA8U,GACA,KAAA,IAAAvW,OAAA,4BAEAuW,GAAA2B,EAAA3B,EAEA,IAAAE,GAAAhV,EAAAgV,KAAA,IAEAA,KAEAA,EADAhV,EAAA0W,MAAA1W,EAAAiW,OACA,GAAApB,GAAA8B,eAEA,GAAA9B,GAAA+B,eAIA,IAAArT,GACAwS,EAOAH,EANAS,EAAArB,EAAAoB,IAAApW,EAAAqW,KAAArW,EAAAoW,IACAF,EAAAlB,EAAAkB,OAAAlW,EAAAkW,QAAA,MACAd,EAAApV,EAAAoV,MAAApV,EAAA6W,KACAV,EAAAnB,EAAAmB,QAAAnW,EAAAmW,YACAW,IAAA9W,EAAA8W,KACArB,GAAA,CAsCA,IAnCA,QAAAzV,KACAyV,GAAA,EACAU,EAAA,QAAAA,EAAA,SAAAA,EAAA,OAAA,oBACA,QAAAD,GAAA,SAAAA,IACAC,EAAA,iBAAAA,EAAA,kBAAAA,EAAA,gBAAA,oBACAf,EAAAf,KAAA0C,UAAA/W,EAAAoU,QAIAY,EAAAgC,mBAAAjC,EACAC,EAAAiC,OAAA/B,EACAF,EAAAkC,QAAAxB,EAEAV,EAAAmC,WAAA,aAGAnC,EAAAoC,UAAA1B,EACAV,EAAAqC,KAAAnB,EAAAG,GAAAS,EAAA9W,EAAAsX,SAAAtX,EAAAuX,UAEAT,IACA9B,EAAAwC,kBAAAxX,EAAAwX,kBAKAV,GAAA9W,EAAAyX,QAAA,IACA7B,EAAA1U,WAAA,WACA6U,GAAA,EACAf,EAAA0C,MAAA,UACA,IAAA7Z,GAAA,GAAAU,OAAA,yBACAV,GAAAW,KAAA,YACAkX,EAAA7X,IACAmC,EAAAyX,UAGAzC,EAAA2C,iBACA,IAAApU,IAAA4S,GACAA,EAAA5M,eAAAhG,IACAyR,EAAA2C,iBAAApU,EAAA4S,EAAA5S,QAGA,IAAAvD,EAAAmW,UAAAvB,EAAA5U,EAAAmW,SACA,KAAA,IAAA5X,OAAA,oDChLA,ODmLA,gBAAAyB,KACAgV,EAAAM,aAAAtV,EAAAsV,cAGA,cAAAtV,IACA,kBAAAA,GAAA4X,4BC1LA5C,EAAA6C,KAAAzC,GAEAJ,EAKA,QAAA8C,MDIA,GAAAta,GAAAqB,EAAA,iBACA4X,EAAA5X,EAAA,QACA2X,EAAA3X,EAAA,gBAIAzB,GAAAD,QAAA0X,EACAA,EAAA+B,eAAApZ,EAAAoZ,gBAAAkB,EACAjD,EAAA8B,eAAA,mBAAA,IAAA9B,GAAA+B,eAAA/B,EAAA+B,eAAApZ,EAAAmZ,iBCVAoB,gBAAA,EAAAtB,KAAA,GAAAuB,gBAAA,KAAAC,IAAA,SAAApZ,EAAAzB,GCTA,QAAAqZ,GAAAtF,GACA,GAAA+G,IAAA,CACA,OAAA,YACA,MAAAA,GAAA,QACAA,GAAA,EACA/G,EAAAvQ,MAAAjD,KAAA2D,aDKAlE,EAAAD,QAAAsZ,EAEAA,EAAA5I,MAAA4I,EAAA,WACAnO,OAAA+I,eAAApG,SAAAxB,UAAA,QACA3E,MAAA,WACA,MAAA2R,GAAA9Y,OAEAgU,cAAA,WCRAwG,IAAA,SAAAtZ,EAAAzB,GAQA,QAAAgb,GAAAC,EAAAC,EAAAC,GACA,IAAA7N,EAAA4N,GACA,KAAA,IAAA5W,WAAA,8BAGAJ,WAAA3C,OAAA,IACA4Z,EAAA5a,MAGA,mBAAA4K,EAAA7J,KAAA2Z,GACAG,EAAAH,EAAAC,EAAAC,GACA,gBAAAF,GACAI,EAAAJ,EAAAC,EAAAC,GAEAG,EAAAL,EAAAC,EAAAC,GAGA,QAAAC,GAAAzV,EAAAuV,EAAAC,GACA,IAAA,GAAAja,GAAA,EAAAqa,EAAA5V,EAAApE,OAAAga,EAAAra,EAAAA,IACAiL,EAAA7K,KAAAqE,EAAAzE,IACAga,EAAA5Z,KAAA6Z,EAAAxV,EAAAzE,GAAAA,EAAAyE,GAKA,QAAA0V,GAAAG,EAAAN,EAAAC,GACA,IAAA,GAAAja,GAAA,EAAAqa,EAAAC,EAAAja,OAAAga,EAAAra,EAAAA,8BC1CA,QAAAoa,GAAApV,EAAAgV,EAAAC,GACA,IAAA,GAAApG,KAAA7O,GACAiG,EAAA7K,KAAA4E,EAAA6O,IACAmG,EAAA5Z,KAAA6Z,EAAAjV,EAAA6O,GAAAA,EAAA7O,GDMA,GAAAoH,GAAA7L,EAAA,cAEAzB,GAAAD,QAAAib,CAEA,IAAA7P,GAAAD,OAAAmB,UAAAlB,SACAgB,EAAAjB,OAAAmB,UAAAF,iBCNAsP,cAAA,KAAAC,IAAA,SAAAja,EAAAzB,iBCXA,GAAAwb,GAAArQ,EAAA7J,KAAAyS,EACA,OAAA,sBAAAyH,GACA,kBAAAzH,IAAA,oBAAAyH,GACA,mBAAApb,UAEA2T,IAAA3T,OAAA0D,YACAiQ,IAAA3T,OAAAub,OACA5H,IAAA3T,OAAAwb,SACA7H,IAAA3T,OAAAyb,QDIA7b,EAAAD,QAAAuN,CAEA,IAAAnC,GAAAD,OAAAmB,UAAAlB,cCHA2Q,IAAA,SAAAra,EAAAzB,EAAAD,iBCXA,MAAA2W,GAAA3I,QAAA,aAAA,IDaAhO,EAAAC,EAAAD,QAAAgc,ECVAhc,EAAAic,KAAA,SAAAtF,GACA,MAAAA,GAAA3I,QAAA,OAAA,KAGAhO,EAAAkc,MAAA,SAAAvF,GACA,MAAAA,GAAA3I,QAAA,OAAA,UAGAmO,IAAA,SAAAza,EAAAzB,GACA,GAAA+b,GAAAta,EAAA,QACAuZ,EAAAvZ,EAAA,YACA2F,EAAA,SAAA+U,GACA,MAAA,mBAAAjR,OAAAmB,UAAAlB,SAAA7J,KAAA6a,GAGAnc,GAAAD,QAAA,SAAAgZ,GACA,IAAAA,EACA,QAEA,IAAAxV,YAEAyX,GACAe,EAAAhD,GAAAqD,MAAA,MACA,SAAAC,GACA,GAAApX,GAAAoX,EAAAC,QAAA,KACAnW,EAAA4V,EAAAM,EAAAnH,MAAA,EAAAjQ,IAAAsX,cACA7U,EAAAqU,EAAAM,EAAAnH,MAAAjQ,EAAA,ypBCdMuX,EAAaC,EAAAC,iCAAbC,EAAapc,KAYjBqc,GAECC,EAAAvb,KAAAf,KAAAuc,EAAAla,mBASAyJ,UAAA0Q,cAAA,oUClCkBpK,GAAA,GAAgBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAtBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACSwK,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAA/B+Y,GAAMC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,2BACE,eAARI,EAAElB,EAAAmB,oCAEK,6GAUPnB,EAAAoB,GASRC,EAAQ,SAASC,uKATfxd,KAAMyd,GAAA,OAqBVzd,KAAA0d,kBAXEZ,GAAQS,EAAQC,GAmBdD,EAAAzR,UAAM6R,SAAQ,WACd,GAAAjN,GAAM/M,UAAQ3C,QAAA,GAAA4B,SAAAe,UAAA,GAAA,SAAAA,UAAA,GACd+B,EAAA/B,UAAa3C,QAAQ,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,GACpBia,EAAYja,UAAA3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,EAEf+B,GAAMmY,EAAG,2CAETC,SAAK,GACHpY,GAGFkY,EAAGC,EAAiB,0BAEpB1S,KAAK,+BAELyS,8CAWA,qJAAKG,qEAvDH/d,KAAMge,eAqEVC,UAAaje,KAAAke,SAAAle,KAAAme,cAEZne,sLAyBCud,EAAIzR,UAAWsS,YAAW,WACxBC,EAAKZ,GAACa,EAAiB,WAAA,UAAAC,EAAAC,KAAAxe,KAAAA,KAAAye,0DAU3B,KA3GUC,EAAAC,OA2GA,KAAAD,EAAAC,SACRD,EAAOE,iBACR5e,KAAA6e,YAAAH,+WCxHYI,GAAA1M,GAAA,GAAAA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,aACKtK,GAAA,MAAeA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,WAArBgK,GAAAS,EAAAD,GAAA,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6DACQ,iBAAVgb,EAAI7C,EAAA8C,yBACJC,EAAMH,EAAAI,iEAGC,mKA4CfC,EAAK,0CAMLnf,KAAKof,sBAAM7C,EAAevc,gIAezBA,KAAMqf,IAAI,CAEV,GAAAtc,GAAAwZ,GAAAA,EAAAxZ,IAAAwZ,EAAAxZ,MAAA,WAED/C,MAAKqf,IAAAtc,EAAY,cAAGuc,EAAAC,kCAMlBld,EAAK0b,GACN/d,KAAAwf,IAAAnd,EAAA0b,qBAED/d,KAAKwf,IAAMxf,KAAO2d,8BAIlB3d,KAAIyf,eACFzf,KAAA0f,0EAUErd,EAAQsd,uBAAoB,uEAYhC3f,KAAK4f,SAASzU,KAAO,UAAC0U,SAAA,8DAKd7f,KAAG8f,UAAAnf,GAAAof,oCAOX/f,MAAI8f,UAAa,KACjB9f,KAAKyf,YAAW,KACjBzf,KAAA0f,gBAAA,+EASCT,EAAAe,aAAYhgB,KAAQwf,KACrBxf,KAAAwf,IAAA,4TAsFCL,EAAIrT,UAAW6R,SAAc,SAAEsC,EAAAC,EAAAtC,+BAI9B9R,UAAAoS,SAAA,SAAAjD,wDAEGkF,EAAWngB,KAAGof,QAAWe,WAAQngB,KAAAof,QAAAe,sBAGrC,MAAIlF,aAKL,IAAAmF,GAAAA,EAAAnF,gEAUQA,gKAiDPkE,EAAOrT,UAAKuU,SAAgB,WAC7B,MAAArgB,MAAA8f,WASCX,EAAOrT,UAAKwU,aAAqB,SAACvd,GACnC,MAAA/C,MAAAyf,YAAA1c,qEAuCKoc,EAAArT,UAAayU,SAAA,SAAAC,MACdne,GAAAsB,UAAA3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,YAGD8c,EAAgB7d,UAGf,gBAAA4d,GAAA,KAIGne,0MAOJA,KAKD,IAAAqe,GAAMre,EAAAse,gBAAAC,EAAA,WAAAH,WAOL,IAAII,GAAa1B,EAAc2B,aAAaJ,yCA6B9C,aApBCZ,UAAA7X,KAAA8Y,+EAUFN,qGAUKM,GAWF5B,EAAIrT,UAAKkV,YAAiB,SAAWD,MACjB,gBAAlBA,KACAA,EAAK/gB,KAAUihB,SAAQF,IAG1BA,GAAA/gB,KAAA8f,WAMD,IAAK,GAFJoB,IAAA,EAEIvgB,EAAAX,KAAY8f,UAAU9e,OAAQ,EAAKL,GAAA,EAAAA,IACxC,GAAKX,KAAA8f,UAAgBnf,KAAAogB,EAAiB,MAElC/gB,KAAA8f,UAASlO,OAAYjR,EAAG,SAK7B,GAAAugB,EAAA,2MA4DOb,EAAOrgB,KAAAmhB,SAAcd,wBAKvB,GAAAe,GAAkBC,EAAEF,SAEnBG,EAAA,SAAAxN,EAAAyN,GAIkB3e,SAAfwe,EAAatN,KACfyN,EAAOH,EAAGtN,IAKRyN,KAAC,IAMLA,KAAU,IACVA,MAKEA,EAAAC,cAAYH,EAAYF,SAAAK,cAMtBH,EAAAvN,GAAOuN,EAAMd,SAAAzM,EAAAyN,IAIb,IAAA3c,MAAAiC,QAAOwZ,GACP,IAAA,GAAI1f,GAAG,EAAKA,EAAC0f,EAAArf,OAAAL,IAAA,IACd6f,GAAAH,EAAA1f,YAED4gB,EAAU3e,MAEP,iBAAA4d,IAEHiB,EAAUjB,EACTe,OAENE,EAAAjB,EAAA1M,KACFyN,EAAAf,gLAwDiC,oBAAe5b,MAAMiC,QAAK6a,KAACjE,GAAAzd,KAAAwf,IAAAkC,EAAAnD,EAAAC,KAAAxe,KAAA2hB,KAIzD,WACA,GAAAjP,GAAQgP,oBAKFE,EAAe,iBAAMC,GAAKC,IAAIpP,EAAAvH,EAAWqI,+EAe7CuO,GAASC,KAAOxO,EAAGwO,6BAKhB3D,EAAKZ,GAAA/K,EAAA,UAAAqP,oGAqCV,IAAAL,GAAoB,gBAAFA,IAAE9c,MAAAiC,QAAA6a,2BAElB,SAEAvW,EAAOwW,EAEPnO,EAAO+K,EAAGC,KAAKxe,KAAMiiB,yBAM1BP,EAAAQ,0FA4BG/C,EAAMrT,UAAUqW,IAAA,SAAMT,EAAAC,EAAAM,GACpB,GAAAG,GAAKpiB,KACLqiB,EAAS1e,kGAMX,GAAA+O,GAAQgP,MACTlO,EAAA+K,EAAAC,KAAA4D,EAAAH,GAEMK,EAAK,QAAAA,KACbF,EAAAN,IAAApP,EAAAvH,EAAAmX,8HAyCKnD,EAAIrT,UAACyW,MAAc,SAAgB/O,GACnC,GAAA2F,GAAKxV,UAAY3C,QAAS,GAAA4B,SAAAe,UAAA,IAAA,EAAAA,UAAA,SAE7B6P,KACDxT,KAAWwiB,SACZrJ,4GAoBOgG,EAAErT,UAAU2W,aAAE,gBACfD,UAAQ,6BAIX,GAAIE,GAAS1iB,KAAS2iB,yFAhvBtB3iB,KAAS4f,QAAA,UA4vBX,IA5vBET,EAASrT,UAswBb8W,SAAQ,SAACC,GACP,MAAI5D,GAAA6D,WAAgB9iB,KAAKwf,IAAAqD,qCAYzB,MAnxBE5D,GAAA8D,WAAS/iB,KAkxBbwf,IAAAwD,GACMhjB,MAnxBFmf,EAASrT,UA6xBbmX,YAAI,SAAGC,GAEL,MADAjE,GAAIkE,cAAanjB,KAAAwf,IAAA0D,GACVljB,MA/xBLmf,EAASrT,UAwyBbsX,KAAI,WAEF,MADApjB,MAAKijB,YAAS,cACPjjB,kCA1yBL,mCAASA,yCAAT;AzDlCN,AyDkCeA,kMAAT,MAASA,MAAAqjB,UAi3Bb,SAAUC,EAAAC,8EAkCLzX,UAAMuX,UAAA,SAAAG,EAAAF,EAAAC,GACL,GAAQ3gB,SAAR0gB,yGASU,SAADA,EACZ,UAMAC,oDAeF,IAAAE,GAAAzjB,KAAAwf,IAAAkE,MAAAF,6GAwBCrE,EAAIrT,UAAU6X,cAAC,WAEf,GAAIC,GAAI,cAQJC,EAAkB,IAEnBC,EAAAlhB,MAEH5C,MAAKyd,GAAG,aAAa,SAASiB,GAEA,IAAxBA,EAAMqF,QAAQ/iB,SAEjBgjB,EAAUnG,EAAY,cAAAa,EAAAqF,QAAA,2BAIrBD,GAAc,KAIZ9jB,KAAAyd,GAAA,YAAa,SAAMiB,MAEtBA,EAAAqF,QAAA/iB,OAAA,EACA8iB,GAAA,aAID,GAAAG,GAAAvF,EAAAqF,QAAA,GAAAG,MAAAF,EAAAE,uDAIMC,GAAeC,8BAOrBN,GAAI,2BAKF9jB,KAAAyd,GAAI,cAAY4G,4CAOfP,KAAA,EAAA,CAEF,GAAAQ,IAAA,GAAAziB,OAAAE,UAAA6hB,oDAoCDzE,EAAMrT,UAAGyY,oBAAA,kEAORC,GAAAjG,EAAAC,KAAAxe,KAAAuc,SAAAvc,KAAAuc,SAAAkI,oBAEGC,EAAW9hB,uCAGf4hB,IAIFxkB,KAAO2kB,cAAaD,GAErBA,EAAA1kB,KAAA4kB,YAAAJ,EAAA,gGA3jCGxkB,KAAAyd,GAAS,cAqkCboH,KAYE1F,EAAQrT,UAASvI,WAAa,SAAAiQ,EAAAsG,yFAa9B,qDAAAvX,uFA9lCE,sDAASA,yCA8nCXiR,EAAA+K,EAAOC,KAAAxe,KAAWwT,0EAWlB,sDAAAsR,yFAzoCE,uDAASA,qCAAT,4DAASC,odAqtCTC,GAAAtf,EAAAsf,MAAAtf,EAAAsf,MAAAhlB,KAAA8L,UAAAkZ,MAAAhlB,KAAA8L,UAAAkZ,MAAA,qDAeClZ,UAAAnB,OAAAsS,OAAAjd,KAAA8L,WAGHmZ,EAAOnZ,UAAOiC,YAAAkX,IAvuCZC,OAAS/F,EAAA+F,MA2uCf,KAAS,GAACC,KAAAzf,oBACcyf,iXCnxCD/S,GAAA,MAAkBA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,oHACV,kBAAA4K,IAAyC,OAAzCA,EAAyC,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,2IAIhD9b,EAAA,8FAEKA,EAAA,sFAEAA,EAAA,qDACN,+XAaPA,EAAA,kDAAAgb,EAAAkJ,4BAAVhJ,EAAUpc,KAQdqlB,GAEI7H,EAASva,MAAEjD,KAAA2D,yBAuBf0hB,EAAAvZ,UAAA6R,SAAA,wDAEF2H,UAAA,slDCpDMpkB,EAAA,qBAAAgb,EAAgBC,8BAAhBC,EAAgBpc,KAAAulB,GAUnBjJ,EAAArZ,MAAAjD,KAAA2D,yBASG4hB,EAAazZ,UAAA0Q,cAAoB,WACjC,MAAK,0BAA4BF,EAAExQ,UAAA0Q,cAAAzb,KAAAf,0CASzCA,KAAAof,QAAiBoG,gHAEjBxlB,KAAAylB,YAAA,6PCvCqBrT,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAvBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,2cAST8M,EAAWhe,EAAA,mFAgBblB,KAAI0lB,gBACF1lB,KAAAyd,GAAAzd,KAAWuc,SAAA,iBAAAvc,KAA8B0lB,6BAU3CC,EAAG7Z,UAAiB6R,SAAW,WAC/B,GAAAI,GAASP,EAAC1R,UAAA6R,SAAA5c,KAAAf,KAAA,OACXslB,UAAA,uCAGCtlB,MAAI4lB,WAAc3G,EAAAtB,SAAU,OAC1B2H,UAAW,mBACZrH,UAAM,kCAAAje,KAAAke,SAAA,eAAA,UAAAle,KAAAke,SAAA,UAEN2H,YAAA,sBApCC7lB,KAAW4lB,2BA0CFF,cAAW,kQCnDJtT,GAAc,GAAAA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACfE,GAAiB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAvB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,qGAUCkC,GASV4G,EAAK,SAASxJ,GAGhB,QAAOwJ,GAASvJ,EAAAla,GACd+Z,EAAcpc,KAAA8lB,GAEdxJ,EAAIvb,KAAOf,KAAMuc,EAAAla,QAEhBob,GAAAlB,EAAM,eAAAvc,KAAA+lB,QAGNxJ,EAAAyJ,OAAAzJ,EAAAyJ,MAAA,yBAAA,GACJhmB,KAAAimB,SAAA,4HArBGjmB,KAAUijB,YA6Bd,yBAnBG6C,EAAAxJ,KA8BFxQ,UAAA0Q,cAAA,6EASU1Q,UAAK+S,YAAA,wHAcV,KAAAqH,GAAalmB,KAAGof,QAAK+G,QACzBC,EAAS,EACF,IAAAF,EACNE,EAAA,4DAlEWpmB,KAAAke,SAAAmI,2DAgFD,IAAA1lB,w0BCjFTub,EAAUC,4DAgBZnc,KAAAyd,GAAAlB,EAAA,OAAAvc,KAA2BsmB,YAC5BtmB,KAAAyd,GAAAlB,EAAA,QAAAvc,KAAAumB,2BASGC,EAAK1a,UAAY0Q,cAAG,iBACf,oBAAAF,EAAAxQ,UAAA0Q,cAAAzb,KAAAf,gEA3BLA,KAAAof,QAAUqH,OAuCZzmB,KAAKof,QAASsH,SAvCZF,EAAU1a,UAgDdwa,WAAW,WACTtmB,KAAKijB,YAAY,cACjBjjB,KAAKimB,SAAS,eACdjmB,KAAKylB,YAAY,sBAQNc,YAAU,8TCrERnU,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,uEACJ,KAAAG,YAA8BD,IAAA,KAAA,IAAA7Y,WAAA,wXACzC,wCACD,sBAAT4iB,EAAGzK,EAAA0K,6GAUa1H,GASxB2H,EAAgB,SAAmBC,yFAUnC9mB,KAAIyd,GAAElB,EAAG,YAAAvc,KAAM+mB,oEAThBF,EAAAC,wEA6BA,0FAvCG/I,EAAAiJ,YAAAhnB,KAAsBinB,UAuCzBlJ,GASC8I,EAAW/a,UAAA0Q,cAAc,WACzB,MAAI,qBAA0BsK,EAAGhb,UAAA0Q,cAAAzb,KAAAf,oMAqBlC,OAAAknB,gDAUClnB,KAAI+d,KAAKoJ,aAAQ,gBAAgBnnB,KAAAuc,SAAA6K,mBAShCtb,UAAA+S,YAAA,kBAEFwI,GAAArnB,KAAAuc,SAAA6K,wFAUApnB,KAAAuc,SAAA6K,aAAAE,IASCT,EAAqB/a,UAChByb,cAAc,WAIpB,MAAAvnB,MAAAmhB,SAAA,eAAAnhB,KAAAmhB,SAAAK,eAAAxhB,KAAAmhB,SAAAK,cAAA,eASGqF,EAAiB/a,UAAY0b,sBAAE,iBAC1BxnB,MAAAuc,SAAAyJ,OAAAhmB,KAAAuc,SAAAyJ,MAAA,sBAAAhmB,KAAAunB,iBAAAvnB,KAAAunB,gBAAAvmB,OAAA,wEA7HLhB,KAAAijB,YAAA,cAyIAjjB,KAAKimB,SAAS,iBASLna,UAAA2b,YAAsB,m9BCrJ/BvL,EAAoBC,GAStBuL,EAAM,SAAQC,GAGd,QAAKD,GAAYnL,EAAAla,YAGlB,IAAAulB,GAAAvlB,EAAA,oEAfGrC,KAAA4nB,MAAAA,EAuBF5nB,KAAA6nB,KAAAA,EAED7nB,KAAAyd,GAAAlB,EAAA,aAAAvc,KAAA+lB,sBAQC2B,EAAmB5b,UAAS+S,YAAc,WAC3C8I,EAAA7b,UAAA+S,YAAA9d,KAAAf,4XC5CkBoS,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAA1BR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,+eAUM8M,2CAcjB1B,EAAOzc,KAAAf,KAAAuc,EAAMla,GACXrC,KAAAyd,GAAAlB,EAAW,WAAAvc,KAAmB+lB,sDAf9B,MAAAvI,GAAe1R,UAyBnB6R,SAAM5c,KAAAf,KAAA,OACJslB,UAAY,oBACZrH,UAAY,wCAA2Bje,KAAAke,SAAA,UAAA,sDAWvC,GAAI4J,GAAW9nB,KAAKof,QAAG0I,kEAGvBzH,EAAcrgB,KAAMwf,IAAAa,SAGlB0H,EAAW,SAAYC,EAAAC,eAEvB,OAAW,MAANC,GAAM,EAAA,EAAAA,GAAA,qCAOZ,GAAAvnB,GAAA,EAAAA,EAAAmnB,EAAA9mB,OAAAL,IAAA,6BAGIwnB,EAAQ9H,EAAS1f,EAErBwnB,KACFA,EAAAnoB,KAAAwf,IAAAwH,YAAA/H,EAAAtB,iCAIHwK,EAAAzE,MAAA0E,MAAUL,EAAAE,EAAiBxjB,EAAC4jB,+QCzEPjW,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAA1BR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,cACKyK,EAAAD,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAzB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,yMAaRsL,EAAgBpM,EAAAqM,GAOlBC,EAAmB,SAAAhL,WAGpBgL,GAAAjM,EAAAla,0DAVGka,EAAAkB,GAAA,QAAgB,WAmBlB4D,EAAO5D,GAAAlB,EAAAkM,WAAMC,gBAAQ3K,KAAC,YAAOuK,EAAA,WAAA/J,EAAAC,KAAA6C,EAAAA,EAAAsH,iBAAA,aAX3B7L,GAAK0L,EAAUhL,KAsBlB1R,UAAA6R,SAAA,wDA9BG2H,UAAA,uBAoCFkD,EAAU1c,UAAa6c,gBAAmB,SAAQjK,GACnD,GAAAkK,GAAA5oB,KAAAof,QAAAwJ,yCArCGC,EAAgBnK,EAAAwF,MAuCpBjF,EAAA6J,eAAiB9oB,KAAA+d,KAAAgL,YAAAtN,IAEhBzb,MAAA+lB,OAAAiD,EAAAH,wGAIYA,EAAgB,+bC3DXzW,GAAA,GAAmBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAzBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACSwK,GAAA,KAAAC,YAA4BD,IAAA,KAAA,IAAA7Y,WAAA,ydAU7CmY,EAAe+M,4DAAfjpB,KAAAkpB,iBAgBFlpB,KAAAyd,GAAOlB,EAAA,aAAMvc,KAAAkpB,gBACX3M,EAAAgG,MAAWhE,EAAAC,KAAAxe,KAAAA,KAAAkpB,iCAjBXpd,UAAe6R,SAAA,qGA6BrBM,UAAA,wCAA4Bje,KAAmBke,SAAA,YAAiB,mhBCvCnCtB,GAAA,KAAAC,YAAyBD,IAAA,KAAA,IAAA7Y,WAAA,mdAWjCmY,EAAAiN,4BAAf/M,EAAepc,KAAAopB,GAUf5L,EAASva,MAAEjD,KAAA2D,yDAWjB,MAAA6Z,GAAA1R,UAAU6R,SAAA5c,KAAkBf,KAAA,uUCjCNoS,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACdE,GAAA,KAAAC,YAAwBD,IAAA,KAAA,IAAA7Y,WAAA,6ZAEhC,sBAARkY,EAAEC,EAAAC,OACS,oCACJ,mIAUND,EAAAoB,yCAAP+L,EAAOtoB,KAAAf,KAcXuc,EAAQla,GACNrC,KAAAyd,GAAOlB,EAAA,aAAMvc,KAAQspB,sBACnB/M,EAAAgG,MAAWhE,EAAAC,KAAAxe,KAAAA,KAAAspB,kHAhBXhE,UAAO,wBA6BPiE,aAAiB,oEA7BjB,GAAAvB,GAAOhoB,KAwCXof,QAAAoK,YAAUxpB,KAAAof,QAAGqK,WAAAC,YAAA1pB,KAAAof,QAAAsK,aACX1pB,MAAIwf,IAAA2H,aAAe,iBAAqC,IAAhBnnB,KAAG2pB,cAAqBC,QAAG,IACnE5pB,KAAAwf,IAAO2H,aAAe,iBAAY0C,EAAA,WAAA7B,EAAAhoB,KAAAof,QAAAwJ,cASlCkB,EAAAhe,UAAA6d,WAAM,mEAEN,OAAKzB,IAAQ,EAAS,EAACA,oFArDrBloB,KAAOof,QAAAoK,WAgEX,0MAkBExpB,KAAKof,QAAQsK,YAAUV,iFAlFrBhpB,KAAOof,QAAAoK,WA6FX,GACMxpB,KAAC+pB,iBACN/pB,KAAAof,QAAAqH,UASA3a,UAAAke,YAAA,mEAaHF,EAAQhe,UAAUme,SAAW,2hCC5HvB/oB,EAAA,wBAAAgb,EAAmBC,8BAAnBC,EAAApc,KAAmBkqB,GAUtBC,EAAAlnB,MAAAjD,KAAA2D,yBASCumB,EAASpe,UAAM0Q,cAAQ,WACrB,MAAA,6BAA+B2N,EAAAre,UAAA0Q,cAAAzb,KAAAf,6EAUrCslB,UAAAtlB,KAAAwc,+sBC9BML,GAAMjb,EAAA,wDAANkb,EAQJpc,KAAAoqB,GAEC5M,EAAAva,MAAAjD,KAAA2D,yBASCymB,EAAAte,UAAO0Q,cAAM,WACX,MAAA,cAAgBgB,EAAe1R,UAAA0Q,cAAAzb,KAAAf,2zBClB9Bkc,EAAuBC,KASxB,SAAAkO,GAGF,QAAKC,GAAS/N,EAAyBla,GACxC+Z,EAAApc,KAAAsqB,wFASAD,EAAAtpB,KAAAf,KAAAuc,EAAAla,oaC/BiC,KAAAwa,YAAiCD,IAAA,KAAA,IAAA7Y,WAAA,ieAW/DwmB,EAAcrO,EAAAsO,6CAchBC,EAAA1pB,KAAAf,KAAAuc,EAA8Bla,EAAAkgB,GAC/BviB,KAAAwf,IAAA2H,aAAA,aAAA,+BASCuD,EAAA5e,UAAA0Q,cAAY,8EAUVkO,EAAW5e,UAACia,OAAA,cACb4E,GAAA,CACFF,GAAA3e,UAAAia,OAAAhlB,KAAAf,2HASCA,KAAI4qB,2CAWR,GAAAC,gFAGAA,EAAA5iB,KAAA,GAAAsiB,GAA4B,WAAgBvqB,KAAEof,SAAe0L,KAAC9qB,KAAA+qB,mWCvExC3Y,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACZE,GAAA,KAAAC,YAA2BD,IAAA,KAAA,IAAA7Y,WAAA,6ZAExC,+BACI7C,EAAA,6BAAT8pB,EAAG9O,EAAA+O,KACK/pB,EAAA,iCAARgqB,EAAEhP,EAAAiP,sNA6BVV,EAAA1pB,KAAAf,KAAAuc,EAA8Bla,EAAAkgB,GAC/BviB,KAAAwf,IAAA2H,aAAA,aAAA,+BASCiE,EAAYtf,UAAG0Q,cAAA,8EAWX4O,EAAMtf,UAAKuf,YAAA,WACT,GAAAR,MAEHS,EAAAtrB,KAAAof,QAAAmM,mBAGH,MAAOV,gHAWP,MAAIA,IAUEO,EAAAtf,UAAA0f,WAAO,WAKP,IAAA,GAJEF,GAAKtrB,KAAAof,QAAamM,mBACX3oB,uBAGTjC,EAAA,EAAAG,EAAAwqB,EAAgBtqB,OAAMF,EAAAH,EAAAA,IAAA,CACtB,GAAA8qB,GAAMH,EAAA3qB,QACP,OAAAX,KAAA+qB,MAAA,CACF,GAAAU,EAAAC,KAQC,CACAC,EAAYF,CACV,OATLA,EAAA,KAAA,SAGG1M,EAAS,WAAWxb,WAAAgb,EAAAC,KAAAxe,KAAA,WAClBA,KAAGwrB,eACF,YAQgCxrB,KAAAknB,IAUnC,iBARFA,EAAK,GAAKP,GAAc,WAAU3mB,KAAMof,SACtC8H,EAAG0E,YAAW5E,YAAA/H,EAAAtB,SAAA,iCAEdM,UAAS2C,EAAA,WAAA5gB,KAAA+qB,OACPjN,SAAO,OAIT6N,EAAe,CAIjB,IAAK,aAFHE,EAAKjpB,OAEFjC,EAAQ,EAACG,EAAM4qB,EAAA1qB,OAAAF,EAAAH,EAAAA,IAAA,CACrBkrB,EAAAH,EAAA/qB,EAEG,IAAImrB,GAAC,GAAMZ,GAAY,WAAAlrB,KAAAof,SACrBqM,MAAQE,EACbE,IAAAA,GAGFhB,GAAA5iB,KAAA6jB,KA1GGvL,SAAAuL,gDAiHN9rB,KAAAojB,ydCrIsBhR,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEACtBG,EAAAD,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAzB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA;A3EOd,A2EPcD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,2HAUa+O,GASvBC,EAAuB,SAAIrE,GAG3B,QAAKqE,GAAczP,EAAAla,GACnB+Z,EAAepc,KAAAgsB,EAEhB,IAAAP,GAAAppB,EAAA,uGAQCrC,KAAAyrB,MAAAA,EACAzrB,KAAK6rB,IAAAA,EACLJ,EAAKQ,iBAAgB,YAAW1N,EAAAC,KAAAxe,KAAAA,KAAA+lB,eAfhCjJ,GAAAkP,EAAcrE,GAVZqE,EAAqBlgB,UAiCzB+S,YAAM,WACJ8I,EAAU7b,UAAS+S,YAAA9d,KAAAf,MACnBA,KAAIof,QAAAsK,YAAmB1pB,KAAO6rB,IAACK,8CASpBpgB,UAAAia,OAAqB,42BC7C9B7J,EAAoBC,GASpBgQ,EAAgB,SAAA9B,mBAIlBjO,EAAApc,KAAAmsB,mFAWA9B,EAAkBtpB,KAAMf,KAAGuc,EAAUla,GACrCrC,KAAIosB,UAAQ,SAfVtP,GAAMqP,EAAY9B,GAyBpB8B,EAAcrgB,UAAUugB,mBAAA,kBACzBf,GAAAtrB,KAAAuc,SAAAgP,oDAIH,IAAAE,EAAA,OAAUzrB,KAAAyrB,MAAkB,MAAwB,YAAxBA,EAAA,KAAwB,4wBCvC9CxP,EAAeC,EAAAC,6CAcjBsO,EAAA1pB,KAAAf,KAAAuc,EAA+Bla,EAAAkgB,GAChCviB,KAAAwf,IAAA2H,aAAA,aAAA,2ZC1BmB/U,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEACtBG,EAAAD,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAzB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,+MAYOd,EAAAoQ,KAShB,SAAAxF,GAGC,QAAAyF,GAAOhQ,EAAAla,KACRrC,KAAAusB,GAEDzF,EAAI/lB,KAAaf,KAAMuc,EAAKla,EAE5B,IAAAipB,GAAOtrB,KAAAof,QAAiBmM,YAMzB,IAJKvrB,KAAC6qB,MAAU7pB,QAAU,GACvBhB,KAAA4qB,OAGHU,EAAA,CAvBG,GAAAkB,GAAejO,EAAAC,KA0BnBxe,KAAAA,KAAW+lB,UAACkG,iBAAK,cAAAO,oCAEfxsB,KAAKof,QAAM3B,GAAA,UAAA,kDAEX6N,EAAImB,oBAAsB,WAAaD,oBAMvCD,EAAczgB,UAAMuf,YAAkB,WACpC,GAAAR,GAASlnB,UAAW3C,QAAE,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,EAGtBknB,GAAI5iB,KAAK,GAACykB,GAAwB,WAAA1sB,KAAAof,SAAA0L,KAAA9qB,KAAA+qB,QAE9B,IAAAO,GAAOtrB,KAAEof,QAAKmM,iBAEjBD,EACF,MAAAT,EAGF,KAAA,GAAAlqB,GAAA,EAAAA,EAAA2qB,EAAAtqB,OAAAL,IAAA,iCAIHkqB,EAAA5iB,KAAA,GAAA+iB,GAA4B,WAAAhrB,KAAiBof,0UCjEvBhN,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEACtBG,EAAAD,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAzB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,2BACK,wJAWbd,EAAiByQ,GAOnBC,EAAmB,SAAMjF,mBAIzB,GAAItG,GAAMrhB,IAEVoc,GAAYpc,KAAA4sB,EACV,IAAAnB,GAAIppB,EAAmB,sBAIrBA,GAAO,MAAAopB,EAAmB,OAACA,EAAU,UAAe,YACnD,SAAAA,EAAA,YAAA,YAAAA,EAAA,sHASDpK,EAAM5D,GAAA,UAAW,kDAWjB6N,GAAY1oB,SAAP0oB,EAAOuB,WACV,WACA,GAAAnO,GAAM9b,uCAGR,GAA4B,gBAArBmc,GAAmB,WAAE+N,UAE/BpO,EAAA,GAAAK,GAAA,WAAA+N,MAAA,UACF,MAAAlW,yEA/CG0U,EAAAyB,cAsDJrO,cA9CE5B,GAAQ8P,EAAmBjF,GA0DvBiF,EAAS9gB,UAAA+S,YAAA,SAAAH,MACVoM,GAAA9qB,KAAAyrB,MAAA,gCAKC,IAFA9D,EAAM7b,UAAU+S,YAAU9d,KAAAf,KAAA0e,GAE1B4M,MAEH,GAAA3qB,GAAA,EAAAA,EAAA2qB,EAAAtqB,OAAAL,IAAA,CACF,GAAA8qB,GAAAH,EAAA3qB,gDAQoB,oXChGFyR,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAA1BR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACQwK,GAAA,KAAAC,YAA4BD,IAAA,KAAA,IAAA7Y,WAAA,0dAU7CmY,EAAkB+M,2CAAlBzL,EAAAzc,KAAkBf,KAAAuc,EActBla,GAEIrC,KAAAyd,GAAAlB,EAAW,aAAAvc,KAAAgtB,+BAUVlhB,UAAA6R,SAAA,uDAED2H,UAAC,iDAYH,yKADAvH,EAAAiJ,YAAgBhnB,KAAC4lB,YACb7H,KAQOjS,UAAAkhB,cAAkB,+eC3DZ5a,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAA1BR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACQwK,GAAA,KAAAC,YAA4BD,IAAA,KAAA,IAAA7Y,WAAA,0dAU7CmY,EAAe+M,yBAYlBgE,GAAA1Q,EAAAla,8BASCrC,KAAIyd,GAAElB,EAAG,aAAMvc,KAAAgtB,eACbhtB,KAAAyd,GAAAlB,EAAW,iBAAAvc,KAAAgtB,qBAZblQ,GAAQmQ,EAAQzP,KAsBb1R,UAAA6R,SAAA,uDAED2H,UAAC,6CAYD,2LADFvH,EAAAiJ,YAAchnB,KAAA4lB,YACR7H,GAQVkP,EAAAnhB,UAAUkhB,cAAkB,sBACb5N,QAAAwJ,kYClEMxW,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAA1BR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACQwK,GAAA,KAAAC,YAA4BD,IAAA,KAAA,IAAA7Y,WAAA,0dAU7CmY,EAAoB+M,2CAApBzL,EAAAzc,KAAAf,KAAoBuc,EAcxBla,GAEIrC,KAAAyd,GAAAlB,EAAW,aAAAvc,KAAAgtB,+BAUVlhB,UAAA6R,SAAA,uDAED2H,UAAC,mDAYD,mMADAvH,EAAAiJ,YAAMhnB,KAAa4lB,YACb7H,KAxCNjS,UAAoBkhB,cAAA,6EAmD1BE,EAAUrD,EAAkB,WAAA7pB,KAAAof,QAAwB+N,iCACrClP,UAAA,kCAAoBmP,EAAA,YAAAF,uuBCrD7BjR,EAAWC,EAAAC,8BAAXC,EAAWpc,KAQfqtB,GAEI7P,EAASva,MAAEjD,KAAA2D,4WCpBKyO,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEACtBG,EAAAD,GAAmB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAzB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,yDAGUsQ,gGAUTpR,EAAAqR,yCAATlE,EAAStoB,KAAAf,KAcbuc,EAAQla,GACNrC,KAAAyd,GAAOlB,EAAA,eAAMvc,KAAQspB,sBACnB/M,EAAAgG,MAAWhE,EAAAC,KAAAxe,KAAAA,KAAAspB,kHAhBXhE,UAAS,kCA6BTiE,aAAa,uGAcbvpB,KAAAof,QAASoO,OAAAxtB,KAAAytB,kBAAA/O,mEA3CA,EAwDZ1e,KAAAof,QAAAoO,YASA1hB,UAAAke,YAAA,0DASC0D,EAAI5hB,UAAcme,SAAS,WAC3BjqB,KAAKof,QAAIoO,OAAAxtB,KAAaof,QAAAoO,SAAiB,KAUzCE,EAAS5hB,UAAEwd,qBAAa,uDAG1BtpB,MAASwf,IAAC2H,aAAU,gBAAcqG,yZCpGZpb,GAAA,MAAiBA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,weAmBnCub,GATEzR,EAAa0R,GASC,SAAWpQ,WAGxBmQ,GAAMpR,EAAAla,GACL+Z,EAAKpc,KAAY2tB,KAElB5sB,KAAAf,KAAAuc,EAAAla,4KAfDrC,KAAAijB,YAAa,sBAUbnG,GAAI6Q,EAAanQ,mCA4BvB,MAAAA,GAAA1R,UAAU6R,SAAA5c,KAAkBf,KAAA,6xBCzCtBkc,EAAWC,8BAAXC,EAAWpc,KAQf6tB,GAEIrQ,EAASva,MAAEjD,KAAA2D,+ZClBAiZ,GAAiB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,ujBAaZmY,EAAA4R,+BA2ChB,QAAK/G,KACJxK,EAAAyJ,OAAAzJ,EAAAyJ,MAAA,yBAAA,8BAGDhmB,KAAKijB,YAAY,8EAlCf7G,GAAQpc,KAAQ+tB,GAGjBnrB,SAAAP,EAAA2rB,SACF3rB,EAAA2rB,QAAA,GAImBprB,SAApBP,EAAQ4rB,sBAGR5rB,EAAA2rB,WAGgB,GAMZ3rB,EAAI6rB,UAAU7rB,EAAA6rB,gBACfA,UAAMD,WAAA5rB,EAAA4rB,WAENltB,KAAAf,KAAAuc,EAAAla,GAGHrC,KAAAyd,GAAAlB,EAAgB,eAAYvc,KAAAmuB,cAC5BnuB,KAAKyd,GAAGlB,EAAQ,YAAavc,KAAAmuB,oJAxC3BnuB,KAAAyd,GAAAzd,KAAAkuB,WAyDJ,iBAAa,QAAA,WACXluB,KAAIijB,YAAA,kFAkBF,uGAAA,0BAAoB6D,EAAAhb,UAAA0Q,cAAAzb,KAAAf,MAAA,IAAAouB,wJAmBvB,OA/FGlH,GAAA3G,SAAgB8N,GA8FlBruB,KAAAkuB,UAAAG,EACDnH,eAQYrI,YAAgB,keCrHTzM,GAAA,GAAgBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAtBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,oeAUE8M,4DAgBdlf,KAAI+lB,SACF/lB,KAAAyd,GAAAlB,EAAW,QAAAvc,KAAA+lB,wIAjBX/lB,MAAA4lB,WAAY3G,EA+BhBtB,SAAM,OACJI,EAAAiJ,YAAehnB,KAAG4lB,YAEjB7H,0PC7Ca,GAAAuQ,iBAAA,MAAAC,IAAA,SAAArtB,EAAAzB,EAAAD,GAIlB,yKAEAA,EAAAid,YAAqB,CAInB,IAAA+R,GAAKttB,EAAmB,qBAExBmd,EAAKS,EAAuB0P,GAE9BC,EAAY,YAEZA,GAAY3iB,UAAU4iB,oBAEpB5iB,UAAA2R,GAAA,SAAAtS,EAAAqI,GAGF,GAAAmb,GAAY3uB,KAAAisB,gBACVjsB,MAAAisB,iBAAuB3e,SAAIxB,UAC3BuS,EAAAZ,GAAAzd,KAAAmL,EAAAqI,4BAGAib,EAAQ3iB,UAASmgB,iBAAcwC,EAAA3iB,UAAA2R,GAE/BgR,EAAI3iB,UAAYgW,IAAK,SAAU3W,EAAAqI,GAC7B6K,EAAKyD,IAAG9hB,KAAAmL,EAAAqI,MAEN1H,UAAA2gB,oBAAAgC,EAAA3iB,UAAAgW,IAEJ2M,EAAQ3iB,UAAOqW,IAAS,SAAOhX,EAAAqI,sBAI9B1H,UAAA8T,QAAA,SAAAlB,kBAGD,iBAAAA,QAEFvT,KAAYA,uHC7CiBsjB,EAAA3iB,UAAA8T,+KAU3B,IAAAgP,GAAW1tB,EAAU,eAEpB2tB,EAAA3S,EAAA0S,GASC9R,EAAC,SAAAC,EAAAC,qCAEH,KAAI,IAAAjZ,WAAY,iEAAAiZ,MAGflR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WACDiC,qFA6BG,SAAAiP,GACD,GAAA8R,GAAoBnrB,UAAA3C,QAAgB,GAAiB4B,SAAVe,UAAU,MAAaA,UAAA,GAEjEoZ,EAAA,WACDC,EAAU/Z,MAAAjD,KAAA2D,YAEVorB,yBAG8B,kBAAtBD,GAAU9J,gIAId8J,EAAQ/gB,cAAsBpD,OAAAmB,UAAAiC,cAChCgP,EAAS+R,EAAkB/gB,aAE9BghB,EAAAD,0BAED/R,EAAO+R,OAGM9R,6OCCZ,kCAlCCgS,KAkBAC,wHAIJ,0BAA2B,uBAAa,0BAAA,0BAAA,yBAAA,0BAEtC,0BAAgB,yBAAc,iCAAA,yBAAA,yBAAA,0BAE5B,uBAAM,sBAAA,uBAAA,uBAAA,sBAAA,uBAET,sBAAA,mBAAA,sBAAA,sBAAA,qBAAA,6BAGGC,EAAYtsB,OAGbjC,EAAA,EAAAA,EAAAsuB,EAAAjuB,OAAAL,mCAGYA,4oBCpETub,EAAcmB,iBAAd,QAAA8R,KAQF/S,EAAOpc,KAAAmvB,KAEJlsB,MAAAjD,KAAA2D,wSCZL,SAAIuY,GAA0B9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,sBAE7BkL,GAAiBpc,EAAI,iBAEpB2c,EAAe3B,EAAKoB,GAMpB8R,EAAY,QAAGA,GAAWvuB,GAC3B,gBAAAA,GACDb,KAAAa,KAAAA,+JA6BFuuB,EAAWtjB,UAAUujB,QAAS,GAa5BD,EAAGtjB,UAAAuM,OAAA,KAEH+W,EAAGE,YAAA,mBACH,mIAQAruB,EAAA,iCACDO,EAAA,+jBCzEqB4Q,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEACtBG,EAAWD,GAAA,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,wYAChBwrB,EAAGrT,EAAAsT,OACK,mBAARvT,EAAEC,EAAAC,yHAWED,EAAAuT,GAOZC,EAAQ,SAAgBpT,WAGzBoT,GAAAnT,6GAQCvc,KAAIyd,GAAI,UAAQzd,KAAAye,0DAEhBze,KAAIwf,IAAK2H,aAAM,OAAA,gBAZfrK,GAAQ4S,EAACpT,oEAyBTtc,KAAKghB,YAAchhB,KAAGknB,MAGpBlnB,KAAAknB,KAASA,OACV3G,SAAU2G,wEArCClnB,KAAA6qB,OAgDd7qB,KAAU6qB,MAAA7pB,OAAA,GACRhB,KAAIojB,QAWJsM,EAAK5jB,UAAa0f,WAAc,mDAI9BxrB,KAAKmhB,SAAWwO,OACdzI,EAAA0E,YAAa5E,YAAc/H,EAACtB,SAAA,MAC7B2H,UAAA,iBACFrH,UAAA2C,EAAA,WAAA5gB,KAAAmhB,SAAAwO,wIAqBE7jB,UAAAuf,YAAA,6CAxFD,MAAA/O,GAAUxQ,UAiGd6R,SAAa5c,KAAAf,KAAA,OACXslB,UAAItlB,KAAAwc,2OAlGFkT,EAAU5jB,UA4Id4R,WAAW,qMA8BPgS,EAAI5jB,UAAK2S,eAAe,SAAAC,GAGlB,KAANA,EAAMC,OAAiB,KAADD,EAACC,OACxB3e,KAAA4vB,eACF5vB,KAAA6vB,2FA/KG7vB,KAAU6vB,gBAwLRnR,EAAME,qGAxLR5e,KAAAwf,IAAU2H,aAoMd,gBAAa,GACPnnB,KAAC6qB,OAAA7qB,KAAiB6qB,MAAM7pB,OAAA,GAC5BhB,KAAK6qB,MAAK,GAAA9M,KAAA+R,udCnNKlT,GAAe,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,ocAUpBmY,EAAAoB,4DAARtd,KAAAosB,SAAQ/pB,EAeJ,6DAfJ,MAAQia,GAAAxQ,UA2BZ6R,SAAW5c,KAAAf,KAAA,KAAA6d,EAAG,YACZyH,UAAa,gBACdrH,UAAAje,KAAAke,SAAAle,KAAAmhB,SAAA,eASC4O,EAAIjkB,UAAU+S,YAAA,WACZ7e,KAAAosB,UAAK,qCAUX4D,wWC5DqB5d,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAvBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,cACKyK,EAAAD,GAAgB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAtB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,8CACFf,EAAMC,EAAAC,8DASZqS,EAAIttB,EAAA,wDAAJkb,EAQJpc,KAAOiwB,GAELzS,EAAUva,MAAGjD,KAAS2D,0EAVpBod,EAAItD,GAqBR,QAAQc,EAAAC,KAAAxe,KAAA,WACNA,KAAIkwB,oDAYJ,GAAAC,GAAcnwB,KAASmhB,SAASgP,eAAM,IACpCnwB,MAAA4lB,WAAM3G,EAActB,SAAGwS,GACvB7K,UAAM,iEAGR8K,OAAUpwB,KAAA4lB,WACXN,UAAA,kCAxCOtlB,KAAA4lB,2BA4CS,SAAAlH,iSCrDEtM,GAAA,GAAAA,GAAiBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACnBE,GAAe,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,0YACtBkY,EAAMC,EAAAC,OACG,mBAATmC,EAAGpC,EAAAyQ,OACK,iBAAR5N,EAAE7C,EAAA8C,OACQ,qBAAVX,EAAIS,EAAA0P,yBACJvP,EAAAH,EAAOI,4FAIamR;AjGHhC,qBiGIYC,EAAUpU,EAAAqU,OACI,uCACH,2FAEJ,0HAKKjT,uCACmBkT,oDACdC,qEAGN,6CACE,0GAIPvU,EAAiBwU,8IAyC/B,GAAArP,GAAUrhB,8GAqBRqC,EAAMsb,UAAU,2HAclB,KAAI,IAAQ/c,OAAA,0HAEVZ,MAAA0Q,IAAIA,EAGF1Q,KAAA2wB,cAAAjgB,GAAsBuO,EAAA2R,gBAAiBlgB,yCAK1CrO,EAAA8d,sBAGG,GAAC0Q,kEAGAA,EAAkB/c,EAAAkI,eAAa3Z,EAAA8d,UAAArM,2MAmC/Bgd,EAAA,WAAA9wB,KAAAmhB,SAEJ9e,GAAA0uB,qBAEG,GAACA,GAAS1uB,EAAA0uB,OAEVpmB,QAACqmB,oBAAeD,GAAAtW,QAAA,SAAA3G,kGAUlB9T,KAAAmhB,SAAKK,cAASyP,2BAKfC,QAAA,UAAAxgB,EAAAwR,SAAAlG,6BAIAhc,KAAAmxB,8WAxHQrU,GAXPsU,EAWQ5T,GAkKyB4T,EAAAtlB,UAASiU,QAAc,gBAAEH,QAAA,WACzB5f,KAAA8hB,IAAK,0BAExC9hB,KAAIqxB,SAAYtI,WAAA/H,YAAAhhB,KAAAqxB,UAEhBD,EAAAE,QAAAtxB,KAAAqf,KAAM,KACPrf,KAAA0Q,KAAA1Q,KAAA0Q,IAAA6L,kHAUCiB,EAAU1R,UAASiU,QAAAhf,KAAAf,OAUnBoxB,EAAAtlB,UAAO6R,SAAmB,6EAKvB4T,gBAAM,SACL7gB,EAAA6gB,gBAAgB,6IAmBpB7gB,EAAI3N,IAAA,aACJ2N,EAAI4U,UAAO,kCAKXtlB,KAAKimB,SAAO,yEAMZ,IAAIuL,GAAiBlT,EAAO,WAAamT,cAAA,4DAqBzC,wEAhBCrJ,MAAApoB,KAAAmhB,SAAAiH,OACDpoB,KAAI0xB,OAAA1xB,KAAamhB,SAASuQ,wCAE1B1xB,KAAK2xB,YAAS3xB,KAAAmhB,SAAAwQ,6HAaP5T,GAjQLqT,EAAMtlB,UA2QVsc,MAAM,SAAAjhB,GACJ,MAAOnH,MAAKqjB,UAAU,QAAQlc,mCA5Q5B,MAAMnH,MAAAqjB,UAuRV,SAASlc,wCAaL,GAAAyqB,GAAUC,EAAY,GAEpB,IAAOjvB,SAAPuE,QACDnH,MAAA4xB,IAAA,KAGF,KAAAzqB,EAEDnH,KAAK4xB,GAAiBhvB,WACf,CACR,GAAAkvB,GAAAC,WAAA5qB,sGAUG,MADFnH,MAAIgyB,iBACFhyB,QAUH8L,UAAAmmB,MAAA,SAAAC,sFAlUGlyB,KAAMijB,YA2UV,oDAaE,GAAWrgB,SAAPuvB,0LAWJnyB,KAAIiyB,OAAK,GAETjyB,KAAIgyB,oBASHlmB,UAAMkmB,eAAA,wBAELN,EAAW9uB,OACZ+uB,EAAA/uB,SAGgBA,SAAb5C,KAAAoyB,cAAoC,SAADpyB,KAACoyB,+BAG/BpyB,KAAMqyB,aAEAryB,KAAMqyB,aAAC,IAAAryB,KAAAsyB,cAGP,UAIdC,GAAAZ,EAAA9V,MAAA,gBAKAuM,wBAAMpoB,KAAAwyB,6BAGNxyB,KAAAyyB,QAAAC,yBAiBFhB,wBAAA1xB,KAAAyyB,0PAwBE3mB,UAAA6mB,UAAA,SAAAC,EAAAztB,kCAQc,UAAXytB,GAAc5yB,KAAA0Q,MAChBuL,EAAA,WAAwB6E,aAAO,SAAS+R,oBAAsB7yB,KAAA0Q,KAC9D1Q,KAAA0Q,IAAQ6L,OAAQ,KAChBvc,KAAA0Q,IAAU,MAGV1Q,KAAA8yB,UAAYF,EAGZ5yB,KAAAwiB,UAAc,CAGd,IAAAuQ,GAAelV,EAAS,YACzBmV,uBAAyBhzB,KAAAmhB,SAAgB6R,gCAE1CC,SAAcjzB,KAAA+C,KACZmwB,OAAAlzB,KAAe+C,KAAO,IAAK6vB,EAAA,OAC5BrH,WAAAvrB,KAAAmzB,4CAEDC,QAAYpzB,KAAAmhB,SAAAiS,QACVC,KAAKrzB,KAAAmhB,SAAekS,KACpBlN,MAAInmB,KAAUmhB,SAASgF,MACrBmN,OAAAtzB,KAAYszB,kBACbtzB,KAAAogB,6CAEDpgB,KAAKmhB,SAAUyR,EAAS5W,wEAQrB7W,EAAMouB,MAASvzB,KAAKwzB,OAAMD,KAAKvzB,KAAAwzB,OAAgB9J,YAAS,+DAQ7D,IAAI+J,GAAgBxX,EAAA,WAAuB6E,aAAA8R,EAC3C5yB,MAAKgmB,MAAQ,GAAAyN,GAAkBV,GAG/B/yB,KAAKgmB,MAAGzD,MAAKhE,EAAOC,KAAAxe,KAAUA,KAAK0zB,mBAAmB,GAEtDC,EAAiC,WAAKC,iBAAsB5zB,KAAA6zB,oBAAA7zB,KAAAgmB,OAG5DhmB,KAAKyd,GAAGzd,KAAKgmB,MAAO,YAAAhmB,KAAkB8zB,sBACtC9zB,KAAKyd,GAAGzd,KAAKgmB,MAAO,UAAAhmB,KAAA+zB,oBACpB/zB,KAAKyd,GAAGzd,KAAKgmB,MAAO,UAAShmB,KAAKg0B,oBAClCh0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,iBAAgBhmB,KAAAi0B,2BACpCj0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,UAAShmB,KAAKk0B,oBAClCl0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,QAAShmB,KAAEm0B,kBAC/Bn0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,UAAWhmB,KAAKo0B,oBACpCp0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,SAAAhmB,KAAAq0B,mBACpBr0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,OAAAhmB,KAAYs0B,iBAChCt0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,YAAYhmB,KAAMu0B,sBACtCv0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,QAAAhmB,KAAcw0B,kBAClCx0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,WAAAhmB,KAAgBy0B,qBACpCz0B,KAAKyd,GAAGzd,KAAKgmB,MAAO,iBAAiBhmB,KAAM00B,2BAC3C10B,KAAKyd,GAAGzd,KAAKgmB,MAAO,mBAAkBhmB,KAAK20B,6BAC3C30B,KAAKyd,GAAGzd,KAAKgmB,MAAO,QAAAhmB,KAAc40B,wEAElC50B,KAAKyd,GAAAzd,KAAAgmB,MAAA,QAAwBhmB,KAAC60B,wEAE9B70B,KAAIyd,GAAIzd,KAACgmB,MAAU,UAAUhmB,KAAA80B,oBAC3B90B,KAAAyd,GAAKzd,KAAAgmB,MAAA,iBAA4BhmB,KAAA+0B,gCAClCtX,GAAAzd,KAAAgmB,MAAA,aAAAhmB,KAAAg1B,+MAIDh1B,KAAIyd,GAAIzd,KAACgmB,MAAW,kBAAmBhmB,KAAKi1B,4BAC1Cj1B,KAAGyd,GAACzd,KAAAgmB,MAAc,iBAAiBhmB,KAAKgyB,qBACzCvU,GAAAzd,KAAAgmB,MAAA,eAAAhmB,KAAAk1B,6EAICl1B,KAAKmxB,aAAiBnxB,KAACm1B,uBACvBn1B,KAAKo1B,iJA1gBLp1B,KAAM0Q,IAAA6L,OAohBV,0PA+CEvc,KAAKq1B,+BAMNr1B,KAAAyd,GAAAzd,KAAAgmB,MAAA,YAAAhmB,KAAAs1B,+YAzkBGt1B,KAAM8hB,IAAA9hB,KAAAgmB,MAkmBV,YAAgBhmB,KAAAu1B,sBACdv1B,KAAK8hB,IAAA9hB,KAAAgmB,MAAe,WAAAhmB,KAAAw1B,6EAWpBpE,EAAKtlB,UAAA4nB,iBAA4B,uGAShCwB,mHAvnBOl1B,MAAA0Q,IAgoBV4iB,qBAYIlC,EAAAtlB,UAAagoB,qBAAa,8CAM3Btd,MAAA,6HAuBE1K,UAAA2pB,WAAA,SAAAC,GACD,MAAY9yB,UAAZ8yB,GAEF11B,KAAS21B,cAAiBD,IAC3B11B,KAAA21B,YAAAD,sGA7qBS11B,QAurBHA,KAAA21B,8IAvrBH31B,KAAMy1B,YAusBV,GAEEz1B,KAAK4f,QAAQ,mDAzsBX5f,KAAMimB,SAAA,eAotBRjmB,KAAK4f,QAAA,sDAptBH5f,KAAMijB,YA+tBV,eACEjjB,KAAK4f,QAAA,6DAhuBH5f,KAAMijB,YA2uBV,eACEjjB,KAAK4f,QAAA,mBA5uBHwR,EAAMtlB,UAsvBVooB,mBAAkB,WAChBl0B,KAAKijB,YAAS,eACdjjB,KAAK4f,QAAQ,YAxvBXwR,EAAMtlB,UAiwBVsoB,mBAAiB,WACfp0B,KAAKimB,SAAA,eACLjmB,KAAK4f,QAAQ,4NA8Bb5f,KAAKimB,SAAA,mBACLjmB,KAAK4f,QAAQ,sDAlyBX5f,KAAMijB,YA4yBV,eACEjjB,KAAKimB,SAAQ,cACdjmB,KAAA4f,QAAA,UASCwR,EAAKtlB,UAAS2oB,oBAAa,WAC3Bz0B,KAAI4f,QAAK,iKAkBV5f,KAAA4f,QAAA,UA10BGwR,EAAMtlB,UAm1BV4oB,0BAAgB,uDAYX5oB,UAAAwpB,iBAAA,SAAA5W,4EAsBH0S,EAAKtlB,UAAA8pB,eAAqB,WAC3B51B,KAAA61B,YAAA71B,KAAA61B,eASCzE,EAAItlB,UAAKgqB,sBAAc,WACrB91B,KAAA+1B,cAAK/1B,KAAkB61B,0DAh4BjB71B,KAAA+1B,0CAAN3E,EAAMtlB,UAq5BV0pB,oBAAA,SAAuB9W,GAEnBA,EAAIE,qHAv5BJ5e,KAAMijB,YAo6BV,mBAWEmO,EAAItlB,UAAMkqB,kBAAA,WACRh2B,KAAAykB,+EAh7BAzkB,KAAMwlB,aA27BVtM,EAAAsM,cAEExlB,KAAK4f,QAAM,qBA77BTwR,EAAMtlB,UAs8BV8oB,iBAAkB,WAChB,GAAIpe,GAAQxW,KAACgmB,MAAUxP,OACxBxW,MAAAwW,MAAAA,GAAAA,EAAA3V,OASCuwB,EAAKtlB,UAAQmqB,mBAAS,WACvBj2B,KAAA4f,QAAA,YASCwR,EAAKtlB,UAAQ+oB,iBAAW,WACzB70B,KAAA4f,QAAA,UASCwR,EAAKtlB,UAAQoqB,mBAAW,WACzBl2B,KAAA4f,QAAA,YASCwR,EAAKtlB,UAAQgpB,mBAAkB,WAChC90B,KAAA4f,QAAA,YASCwR,EAAKtlB,UAAQipB,0BAAc,WAC5B/0B,KAAA4f,QAAA,mBASCwR,EAAKtlB,UAAQkpB,sBAAc,WAC5Bh1B,KAAA4f,QAAA,eASCwR,EAAKtlB,UAAQqqB,sBAAc,WAC5Bn2B,KAAA4f,QAAA,eASCwR,EAAKtlB,UAAQsqB,sBAAgB,WAC9Bp2B,KAAA4f,QAAA,eASCwR,EAAKtlB,UAAQuqB,wBAAmB,WACjCr2B,KAAA4f,QAAA,iBASCwR,EAAAtlB,UAAYmpB,2BAAO,WACpBj1B,KAAA4f,QAAA,oDA5iCG,MAAM5f,MAAAwzB,QAkkCJpC,EAAAtlB,UAAAwqB,UAAA,SAAO/d,EAAAqD,WAERoK,QAAAhmB,KAAAgmB,MAAAxD,cACFwD,MAAAzD,MAAA,WACFviB,KAAAuY,GAAAqD,uEAsBM9P,UAAMyqB,SAAA,SAAAhe,sCAMH,UACDvY,MAAAgmB,MAAAzN,WACFrY,QAEF0C,UAAA5C,KAAAgmB,MAAAzN,GACF+X,EAAA,WAAA,aAAA/X,EAAA,2BAAAvY,KAAA8yB,UAAA,wBAAA5yB,GAGF,cAAAA,EAAA4T,gYAmEC,MAAYlR,UAAZ4zB,GACDx2B,KAAAy2B,aAAAD,mJA+BAx2B,KAAAs2B,UAAA,iBAAAI,kEA2BCtF,EAAItlB,UAAO8c,SAAU,SAAiB8N,qBAE/B12B,KAAOwzB,OAAA5K,UAAmB,GAG7B8N,EAAK3E,WAAS2E,IAAY,EAG3B,EAAAA,sCAMJ12B,KAAAwzB,OAAA5K,SAAA8N,4SAtvCGtF,EAAMtlB,UA4zCV6qB,gBAAW,WACT,MAAIC,GAAgBD,gBAAU32B,KAAA8nB,WAAA9nB,KAAA4oB,iIAsC9BwI,EAAGtlB,UAAG0hB,OAAgB,SAAkBqJ,GACxC,GAAA3Q,GAAQtjB,qQAp2CA5C,KAAAu2B,SAs4CV,WAAkB,0QA2DZv2B,MAAAwlB,cAAK,wBAYRnH,EAAMZ,GAAIa,EAAW,WAAkBwY,EAAIC,iBAAAxY,EAAAC,KAAAxe,KAAA,QAAAg3B,0DAIrCh3B,KAAAwlB,kBAAA,4CAILxlB,KAAK4f,QAAQ,uBAGf5f,KAAOwf,IAAIsX,EAACG,sBACbj3B,KAAAgmB,MAAAkR,yHAuBEprB,UAAAqrB,eAAA,oCAEDn3B,MAAAwlB,cAAY,gJAl/CVxlB,KAAM4f,QA0/CV,kEAaE5f,KAAIo3B,cAAW,EAGhBp3B,KAAAq3B,gBAAA/Y,EAAA,WAAAgZ,gBAAA5T,MAAA6T,gIA1gDGtY,EAAM8D,WAkhDVzE,EAAA,WAAkB7G,KAAA,mBAEdzX,KAAA4f,QAAS,+HAcP5f,KAACw3B,mBAWLpG,EAAKtlB,UAAQ0rB,eAAkB,WAChCx3B,KAAAo3B,cAAA,ySAwBK,GAAAxE,GAAWhS,EAAe,WAAS9K,EAAEnV,IACnC82B,EAAIxb,EAAc,WAAA6E,aAAA8R,EAGlB,IAAA6E,sBAQP,IAAA,GAAAh3B,GAAA,EAAAi3B,EAAAruB,EAAA5I,EAAAi3B,EAAA12B,OAAAP,IAAA,+DAPS6vB,GAAS,WAAQ9Z,MAAQ,QAAMoc,EAAW,iFAqDjD9mB,UAAUynB,IAAO,SAAWpuB,iBAE3B,MAAKnF,MAAIu2B,SAAO,UAGjBoB,GAAU1b,EAAkB,WAAQ6E,aAAA9gB,KAAA8yB,UAgDrC,OA7CEluB,OAAIiC,QAAO1B,uBAIJ,gBAAAA,GAELnF,KAAAuzB,KAAKA,IAAApuB,IAGAA,YAAgBwF,sCAMnB3K,KAAA43B,aAAgBzyB,UAEfquB,OAAMD,IAAApuB,EAAAouB,IACLvzB,KAAA63B,aAAe1yB,EAAOgG,MAAO,GAG/BnL,KAAAuiB,MAAS,WAMRoV,EAAA7rB,UAAAF,eAAA,2CAGA5L,KAAMs2B,UAAA,MAAAnxB,EAAAouB,qCAIDvzB,KAAA83B,kDAWR93B,0CAYF,GAAA+3B,GAAe/3B,KAAEg4B,aAAW3uB,EAE3B0uB,8CAMJ/3B,KAAA2yB,UAAAoF,EAAAN,KAAAM,EAAA5yB,sHASCnF,KAAKyiB,6CAYL,MA9tDEziB,MAAMs2B,UA6tDV,QACSt2B,wCA9tDL,MAAMA,MAAAu2B,SAyuDV,eAAWv2B,KAAAwzB,OAAAD,KAAG,uCAzuDV,MAAMvzB,MAAA63B,cAqvDH,oHArvDG73B,KAAAu2B,SAswDV,+HAtwDUv2B,KAAAu2B,SAuxDN,WAAApvB,kIAqCFiqB,EAAKtlB,UAAUwnB,OAAI,SAAAC,uCAQnBA,EAAO,wNAp0DLvzB,KAAM4f,QAk2DV,kBAYQwR,EAAAtlB,UAAKqlB,SAAY,SAAAe,GACjB,MAAKtvB,UAALsvB,GACAA,IAAKA,EAELlyB,KAAKi4B,YAAK/F,IACRlyB,KAAAi4B,UAAK/F,EAERlyB,KAAMm1B,uBACLn1B,KAAKs2B,UAAA,cAAYpE,MAIjBlyB,KAAKijB,YAAK,yBACRjjB,KAAAimB,SAAK,6BACNrG,QAAA,mBAEJ5f,KAAAm1B,uBACDn1B,KAAWo1B,8BAGdp1B,KAAAijB,YAAA,+RA+BOjjB,KAAAk4B,qBAAahG,EACdA,GACClyB,KAAKimB,SAAA,6BAULjmB,KAAK4f,QAAQ,yBAEhB5f,KAAAijB,YAAA,2EA/6DKjjB,KAAAk4B,oDA08DR,MAAOt1B,UAAHgU,EACG5W,KAAMm4B,QAAO,6BAMpBn4B,KAAKijB,YAAQ,iIAj9DXqN,EAAM,WAm+DL9Z,MAAA,SAAGxW,KAAAm4B,OAAAt3B,KAAA,IAAAu3B,EAAA,WAAA9I,WAAAtvB,KAAAm4B,OAAAt3B,MAAA,IAAAb,KAAAm4B,OAAA9I,QAAArvB,KAAAm4B,QAAkCn4B,OAQ9BoxB,EAAAtlB,UAAYusB,MAAS,WAAa,MAAAr4B,MAAAu2B,SAAA,UA3+D1CnF,EAAMtlB,UAo/DVwsB,QAAQ,WAAK,MAAOt4B,MAAKu2B,SAAS,YAShCnF,EAAKtlB,UAAAysB,SAAqB,WAC3B,MAAAv4B,MAAAu2B,SAAA,aA9/DGnF,EAAMtlB,UAugEV2Y,mBAAU,WACRzkB,KAAIw4B,eAAS,KAWR1sB,UAAM+pB,WAAA,SAAA3D,4BAGLA,IAAKlyB,KAAAy4B,8JAYDz4B,KAACw4B,eAAgB,EAUlBx4B,KAAKgmB,OACbhmB,KAAAgmB,MAAA7D,IAAA,YAAA,SAAAjiB,GACMA,EAAKw4B,kBACbx4B,EAAA0e,yHA/iES5e,MAwjEaA,KAAAy4B,aASjBrH,EAAAtlB,UAAS6sB,uBAAa,WACtB,GAAAC,GAAiBh2B,OAClBi2B,EAAAj2B,OACDk2B,EAAAl2B,OAEEm2B,EAAexa,EAAGC,KAAAxe,KAAlBA,KAAAykB,mCAKEvkB,EAAC84B,UAAaH,GAAC34B,EAAA+4B,UAAiBH,mCAOlCI,EAAgB,WAClBH,0BAQFH,EAAmB54B,KAAA4kB,YAAemU,EAAA,mBAIlCA,yEAQA/4B,KAAIyd,GAAA,UAAA0b,wBAKAn5B,KAAAyd,GAAI,QAACsb,gBAQS/4B,MAAK4kB,YAAS,kCAI1B5kB,KAAAw4B,eAAiB,2BAMdh2B,aAAA42B,MAEJtf,GAAA9Z,KAAAmhB,SAAA,iBACFrH,GAAA,ohBA8HJ,MAAA9Z,MAAAgmB,OAAAhmB,KAAAgmB,MAAA,wGAuBCoL,EAAAtlB,UAAYutB,aAAc,SAA0BvO,EAAElD,EAASxH,GAChE,MAAApgB,MAAAgmB,OAAAhmB,KAAAgmB,MAAA,aAAA8E,EAAAlD,EAAAxH,IASCgR,EAAKtlB,UAASwtB,mBAAW,SAAgCj3B,GAC1D,MAAArC,MAAAgmB,OAAAhmB,KAAAgmB,MAAA,mBAAA3jB,IASC+uB,EAAAtlB,UAAYytB,sBAAoB,SAAqC9N,GACtEzrB,KAAAgmB,OAAAhmB,KAAAgmB,MAAA,sBAAAyF,IASC2F,EAAAtlB,UAAYumB,WAAc,WAC3B,MAAAryB,MAAAgmB,OAAAhmB,KAAAgmB,MAAAqM,YAAAryB,KAAAgmB,MAAAqM,cAAA,qNArzESryB,OAu2ERoxB,EAAItlB,UAAUqU,UAAA,WACd,MAAI2Q,GAAwB,WAAAM,EAAAtlB,UAAAqV,SAAAhB,UAAAngB,KAAAw5B,aAU1BpI,EAAAtlB,UAAQ2tB,OAAY,cACrBp3B,GAAAyuB,EAAA,WAAA9wB,KAAAmhB,oBAGF9e,GAAAipB,iGAt3EG,MAg4EGjpB,8DAcHq3B,EAASza,EAAA2R,gBAAAlgB,GACPipB,EAAAD,EAAA,iBAGH,OAAAC,EAAA,6BAKG/iB,EAAIgjB,EAAiB,GACjB1gB,EAAA0gB,EAAe,EAErBhjB,IACE0Z,EAAc,WAAY9Z,MAAAI,GAE1BiH,EAAe,WAAS6b,EAASxgB,QAGtB,WAAS2gB,EAAcH,GAGnChpB,EAAAopB,gBAGH,IAAO,GAFNzZ,GAAA3P,EAAAqpB,WAEMp5B,EAAA,EAAWmV,EAACuK,EAAArf,OAAA8U,EAAAnV,EAAAA,IAAA,CACpB,GAAA6f,GAAAH,EAAA1f,GAv6EGq5B,EAAMxZ,EAAA0B,SAAAlG,gEAg7EQ,UAADge,4GAuBjB5I,GAAAtlB,UAAAqV,mxDCn/EA,IAAA8Y,GAAA/4B,EAAO,2KCTakR,GAAA,GAAgBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,kEAClBG,EAAAD,GAAe,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAArB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,0CACFuS,EAAGrT,EAAAsT,yBACHvT,EAAOC,EAAAC,wFAUb2C,EAAWuR,2CAAX/T,EAAAvb,KAAWf,KAAAuc,EAcRla,GAELrC,KAAA+lB,SACDxJ,EAAAkB,GAAA,eAAAc,EAAAC,KAAAxe,KAAAA,KAAA+lB,uBAjBGmU,EAAWpuB,UAyBfiU,QAAQ,WACN/f,KAAIuc,SAASuF,IAAA,eAAgB9hB,KAAA+lB,QAC3BzJ,EAAAxQ,UAAWiU,QAAYhf,KAAAf,OAUzBk6B,EAAKpuB,UAAQ6R,SAAA,WACX,GAAAI,GAAKkB,EAAAtB,SAAe,OACpB2H,UAAG,aAGLxH,SAAU,IAWV,0EArDEC,EAAAiJ,YAAWhnB,KAkDfm6B,eAGOpc,KASNjS,UAAAia,OAAA,qEASC/lB,KAAI4qB,UAWH9e,UAAAsuB,OAAA,SAAA3hB,GACF,GAAAzY,KAAAm6B,8cC5FgB/nB,GAAA,MAAeA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,8KAElC,IAAIoc,GAAgBttB,EAAM,4BAKtByrB,EAAYzrB,EAAZ,sDAQFm5B,GAAW,EACXp6B,EAAU2C,OAGR03B,EAAS,cAQVC,GAAAjc,EAAA,WAAAkc,qBAAA,0DAGD,IAAID,GAAQA,EAAIv5B,OAAS,iCAEvBy5B,EAAUxyB,KAAIsyB,EAAE55B,oDAKd85B,EAAIxyB,KAAOyyB,EAAI/5B,qDAQX,GAAAg6B,GAAIF,EAAY95B,OAIjBg6B,IAAAA,EAAAC,cAgBLC,EAAmB,EACd,OAdF,GAAMj4B,SAAN+3B,EAAM,OAAA,CACL,GAAAt4B,GAAAs4B,EAAoBC,aAAA,0BAMnB,CAAK36B,EAAe06B,SAY3BN,IACDQ,EAAM,oBAMP56B,EAAI66B,EACFv3B,WAAO+2B,EAAcl4B,GAGL,gBAAT,WAASkV,cAAE,yOCtFClF,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAvBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACMwK,GAAiB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,qeAW1BmY,EAAAoB,GASRyd,EAAK,SAAevd,GAGpB,QAAOud,GAACxe,EAAcla,GACtB+Z,EAAepc,KAAO+6B,GAEtBvd,EAAQzc,KAAOf,KAAOuc,EAAAla,GAGtBrC,KAAKg7B,IAAGh7B,KAAQihB,SAAKjhB,KAAAmhB,SAAkB8Z,mRAlBrCj7B,KAAMyd,GAAAlB,EA6BVvc,KAAAk7B,YAAQl7B,KAAA+lB,sBASJgV,EAAAjvB,UAAA6R,SAAkB,SAAAxS,GAClB,GAAAzF,GAAA/B,UAAkB3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,GAClBia,EAAeja,UAAK3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,EAetB,8CAXA+B,EAAOmY,EAAA,YACRC,SAAA,wGA7CGF,GAuDEJ,EAAA1R,UAAqB6R,SAAA5c,KAAAf,KAAAmL,EAAAzF,EAAAkY,IAUzBmd,EAAKjvB,UAAAotB,gBAAuB,SAAAxa,GAC7BA,EAAAE,4MAlEG5e,KAAMyd,GAAAa,EAyEV,WAAe,YAAAte,KAAA2oB,8FAWboS,EAAKjvB,UAAQ6c,gBAAkB,eAQhC7c,UAAAqtB,cAAA,+MA5FGn5B,KAAM8hB,IAAAxD,EAmGJ,WAAA,YAAGte,KAAA2oB,sEAGP3oB,KAAK+lB,UASLgV,EAAKjvB,UAAKia,OAAO,WAGjB,GAAI/lB,KAAAwf,IAAJ,CAQA,GAAI2b,GAAUn7B,KAAI2pB,uBAIhB,IAAGqR,EAAH,EAGD,gBAAAG,IAAAA,IAAAA,GAAA,EAAAA,GAAAA,WACFA,EAAA,sEASCH,EAAIjd,KAAA2F,MAAW0E,MAAIgT,qFA3IjB,OAAMp7B,MAAAiuB,WAwJDpF,EAAA9W,OAUPgpB,EAAIjvB,UAAWsS,YAAW,sMAe1BM,EAAQE,iBACT5e,KAAAgqB,gBAlLG+Q,EAAMjvB,UA2LV4R,WAAW,WACT1d,KAAK8hB,IAACxD,EAAA,WAA2B,UAAAte,KAAAye,qDA5L/BC,EAAM2c,2BAwMR3c,EAAIE,mDAYJ,MAAYhc,UAAZsvB,EACDlyB,KAAAs7B,YAAA,oCAIHt7B,KAAAs7B,gFCrOErf,GAAM,WAAgBsf,kBAAG,SAAAR,GACvBv7B,EAAA,WAAiBu7B,EACjBt7B,EAAAD,QAAYA,EAAK,kIASf,SAAAg8B,GAAcC,SACdA,GAAAC,6BACA,wEAQFD,EAAIE,cAAW,SAACpI,GAChB,GAAIqI,IACFC,WAAW,GACZC,OACI,GAGH,KAAAvI,EAAI,MAAOqI,EAKb,IAAAG,GAAMxI,EAAUxX,QAAO,KACvBigB,EAAkBp5B,MAclB,cAZAo5B,EAAaD,EAAA,GAGfA,EAAMC,EAAkBzI,EAAA0I,YAAkB,KAAA,EACtB,IAAlBF,mBAKFH,EAAMC,WAAUtI,EAAA2I,UAAmB,EAACH,oCAG3BH,sJAmBPH,EAAAU,kMAuBWR,cAAkBx2B,EAAAouB,iHAhF7B/zB,EAAIid,YAAQ;AtGAhB,wBuGNqBrK,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAvBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,gBACMwK,GAAiB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAvB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,iBA4Tf,GAAKof,GAAYC,EAAGlwB,OAAU,GAACmwB,cAAaD,EAAA1nB,MAAA,EAC1C4nB,GAAA,MAAaH,GAAa,SAAG3Y,GAC7B,MAAAzjB,MAAcwf,IAAAgd,gBAAeH,EAAA5Y,kBAI/B8Y,EAAKF,GAAS,WACZ,MAAAr8B,MAAcwf,IAAAid,gBAAcJ,mBAK9B,KAAK,sBAtU0BK,8BACTxd,8BACHyd,6DAGftf,EAAYnc,EAAA,wEASV2c,EAAK3B,EAAAoB,8BASF,SAAMsf,6BAMTA,EAAI77B,KAACf,KAAMqC,EAAUkgB,GAGnBlgB,EAAK8C,aACJod,MAAM,WACVviB,KAAA68B,UAAAx6B,EAAA8C,aAMD9C,EAAA6pB,WACAlsB,KAAAuiB,MAAA,WACAviB,KAAA83B,OACA93B,KAAAymB,OACAzmB,KAAA0pB,YAAArnB,EAAO6pB,yTAwQV,SA5RIuP,EAAAmB,GA6CDnB,EAAI3vB,UAAQ6R,SAAQ,8BAOlBtb,GAAAy6B,MACAz6B,EAAAy6B,IAAA,8CAIA,IAAAC,GAAS16B,EAAS6wB,6DAOpB8J,mBAAa,wBACXC,wBAAiB,8DAKnB5J,KAAIhxB,EAAagxB,KACflN,MAAM9jB,EAAK8jB,OAEX9jB,EAAS66B,WAGPC,EAAOtf,EAAY,YACvBuf,MAAS,4BAET/6B,EAAW86B,4EAzFTn9B,MAAKwf,IAAAic,EAiGT4B,MAAIh7B,EAAAy6B,IAAAI,EAAGC,EAAAvf,GACL5d,KAAIwf,IAAKiY,KAAOz3B,KAEfA,KAAAwf,iCApGMxf,KAAAq4B,SA8GPr4B,KAAKs9B,eAAgB,wBA9GnB7B,EAAK3vB,UAwHT4a,MAAG,WACD1mB,KAAIwf,IAAG+d,+FAyBNzxB,UAAAsuB,OAAA,SAAA7G,iEAlJC,GAAKkE,GAAAz3B,IA0JPA,MAAOuD,WAAK,WACbk0B,EAAAhR,aASCgV,EAAI3vB,UAAQwsB,QAAQ,WACpB,MAAqB11B,UAAjB5C,KAAQw9B,mBAUb1xB,UAAAwxB,eAAA,SAAAtV,mMA/KG4U,EAAK9wB,UAwLTwxB,eAAWv8B,KAAAf,2CAxLP,MAAKA,MAAAs4B,UAuMEt4B,KAAAw9B,iBAAgB,EAElBx9B,KAAAwf,IAAAid,gBAAA,6EAzMAz8B,KAmNTy9B,eAAIlK,IAEHvzB,KAAAwf,IAAAid,gBAAA,iBASA3wB,UAAAgsB,KAAA,kGAkBG2D,EAAA3vB,UAAO4xB,UAAA,gFAhPFC,EA2PDC,kBAEFD,EAAqBC,gBAAA,EAAAhV,uHA7PlB+U,EA2QTC,gBAAkBC,EAAA,GAAA,GAAAA,EAAA,GAAG,+CA3QjB,OAAK,GAoSTpC,EAAI3vB,UAAYgyB,gBAAe,WAC/B,OAAK,GACNrC,GACDsC,EAAS,YACkBxB,EAAOd,EAAK3vB,UAA6BkyB,EAAA,4IAAAniB,MAAA,KACnEoiB,EAAA,2HAAApiB,MAAA,KAeKlb,EAAA,EAAAA,EAAcq9B,EAAAh9B,OAAUL,IAC5Bu9B,EAAaF,EAAYr9B,WAK3B,KAAA,GAAAA,GAAA,EAAAA,EAAKs9B,EAAAj9B,OAAmBL,mGAqBpB86B,EAAA0C,uBAQA1C,EAAA0C,oBAAqBC,gBAAY,SAAAj5B,GAGjC,QAAOk5B,GAAY9K,GACpB,GAAA+K,GAAAC,EAAAC,iBAAAjL,YAEO,SAAU+K,EAEjB,MAPAnzB,YAUDhG,EAAAgG,4EAWK,qDAYPssB,EAAM2C,OAAOj1B,EAAGouB,MAOhBkI,EAAM0C,oBAAmBpe,QAAQ,uEAM/B0e,YAAY,0BAEVC,YAAM,kBACP,8CAKGjH,EAAA1Z,GAAaA,EAAA0Z,IAIhBA,IAAAA,EAAA1Z,uBAQC0d,EAAAkD,WAAe,SAAClH,GAEbA,EAAI1Z,OAKL0Z,EAAA1Z,KAAU0e,gBAEdhF,EAAKhV,0CAIDgZ,EAAU,WAAShE,IACjB,QAKLmH,QAAA,SAAAC,EAAAC,+DAOH,GAAMrH,GAAOxY,EAAG8f,MAAAF,GAAUpH,6BAIpBA,EAAAjhB,MAAA,UAIFA,MAAO,UAAEI,cAIN,cACDooB,GAAS,OAGb,0IAIA,MAAU9+B,oEAGJ8+B,GAAUC,EAASlO,QAAS,wBAA6BkO,EAAIlO,QAAA,oBAAAmO,YAAA1xB,QAAA,OAAA,KAAA2xB,MAAA,cAAA,IAEnE,MAAWvoB,0BAMX6kB,EAAI4B,MAAA,SAAkBP,EAAAI,EAAAC,EAAAvf,GACtB,GAAI/c,GAAA46B,EAAW2D,aAAMtC,EAAAI,EAAAC,EAAAvf,GAGjBxL,EAAA6M,EAAStB,SAAE,OAAAM,UAAApd,IAAAk5B,WAAA,EAEX,OAAA3nB,2FAKJitB,EAAS,GACPC,EAAY,GACZC,EAAa,SAGZrC,8EAOHC,EAAAtf,EAAa,oBAEX2hB,UAAWH,oDAGXlC,UAGCnM,oBAAYmM,GAAA1iB,QAAA,SAAA7U,kDAIbgY,EAAWC,EAAU,scC7gBHzL,GAAc,GAAAA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACfE,GAAiB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAvB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,wCACHyiB,EAAGvjB,EAAAwjB,OACK,gBAARtiB,EAAElB,EAAAmB,OACE,iDACJkhB,EAAAzf,EAAO6d,kEAGA,uJAWRzgB,EAAAsU,iBAYL,QAAKmP,GAAAt9B,EAAUkgB,KACVviB,KAAA2/B,KAEN5+B,KAAAf,KAAAqC,EAAAkgB,EAED,IAAIpd,GAAS9C,EAAA8C,UAMXA,IAAOnF,KAAWwf,IAAIogB,aAAAz6B,EAAAouB,KAAAlxB,EAAAqO,KAAA,IAAArO,EAAAqO,IAAAmvB,mBACpB7/B,KAAA68B,UAAW13B,GAEXnF,KAAA8/B,gBAAiB9/B,KAAOwf,6DAMpBugB,EAAYC,EAAKh/B,YAGlB++B,KAAA,IACFE,GAAAD,EAAAD,GACF7d,EAAA+d,EAAA/d,SAAAlG,4BAEQhc,KAAGkgC,yBAOPlgC,KAAAmgC,mBAAyBC,UAASH,EAAMxU,OAFvC4U,EAACp4B,KAAAg4B,0DAcPjgC,KAAKkgC,2BACNlgC,KAAAsgC,uBAAA/hB,EAAAC,KAAAxe,KAAAA,KAAAugC,qFAEDvgC,KAAKwgC,uBAAejiB,EAAAC,KAAAxe,KAAAA,KAAAygC,uBACrBzgC,KAAA0gC,qKAmBCf,EAAI7zB,UAAIiU,QAAW,sCAEnB4gB,EAAY3gC,KAAAurB,wCAKZqV,EAAKnU,oBAAoB,SAAUzsB,KAACsgC,wBACpCM,EAAAnU,oBAAa,WAAGzsB,KAAA6gC,qBACjBD,EAAAnU,oBAAA,cAAAzsB,KAAAwgC,qEASCb,GAAM9M,oBAAoB7yB,KAACwf,qCAWvBmgB,EAAA7zB,UAAM6R,SAAA,WACN,GAAAI,GAAK/d,KAAKmhB,SAACzQ,GAKX,KAAAqN,GAAI/d,KAAiC,2BAAI,EAGvC,GAAA+d,EAAA,IACD+iB,GAAA/iB,EAAAgjB,WAAA,kCAEDpB,EAAI9M,oBACF9U,GACEA,EAAE+iB,MACF,GAEFxiB,EAAA,WAAA0iB,cAAA,2FAKFC,GAAaC,eAAelhC,KAAAmhB,SAAU6R,0BAAgB,SAC7CpV,GAAAuT,SAGXlS,EAAIkiB,gBAAYpjB,EAASF,EAAU,WAAaD,GAC9C7a,GAAA/C,KAAAmhB,SAAoB+R,OACrBkO,QAAA,qBAMJC,IAAA,WAAA,UAAA,OAAA,8GAhJGpiB,EAAKkiB,gBAsJTpjB,EAAAujB,GACE,MAAOvjB,kGAiBL,GAAkB,IAAlBA,EAAAzG,WAAqB,CACrB,GAAAiqB,GAAI,cAWFC,IAAA,EACFC,EAAQ,gBAGNpgB,GAAI5D,GAAC,YAAegkB,oBAKlBD,GACDxhC,KAAA4f,QAAA,aAUD,OAPFyB,GAAA5D,GAAA,iBAAAikB,KAAOnf,MAAA,gEACRif,8EAkBC,GAAAG,IAAqB,sCAMtB5jB,EAAAzG,YAAA,wBAKGyG,EAAAzG,YAAiB,KACVrP,KAAA,WAhOJ8V,EAAAzG,YAoOT,GACEqqB,EAAkB15B,KAAC,kBAIjBjI,KAAGuiB,MAAA,WACHof,EAAGlnB,QAAiB,SAAatP,GAClCnL,KAAA4f,QAAAzU,IACFnL,UAIC2/B,EAAI7zB,UAAC40B,uBAAqB,WACxB,GAAAE,GAAM5gC,KAAA+d,KAAQwN,UAEdqV,IAAAA,EAAA3U,mBACA2U,EAAA3U,iBAAc,SAAAjsB,KAAAsgC,wBACdM,EAAC3U,iBAAA,WAAAjsB,KAAA6gC,qBACJD,EAAA3U,iBAAA,cAAAjsB,KAAAwgC,4BAIA10B,UAAAy0B,sBAAA,kCA1PGvgC,MAAKurB,aA4PT3L,SACEzU,KAAK,SACNuH,OAAAkuB,qHAO0B90B,UAAA20B,sBAAA,SAAAvgC,8CAOE4L,UAAA2a,KAAA,4BAQlBkZ,EAAA7zB,UAAY4a,MAAU,WAAG1mB,KAAAwf,IAAAkH,SAQpBiZ,EAAA7zB,UAAY81B,OAAI,WAAc,MAAA5hC,MAAAwf,IAAAoiB,QAS5CjC,EAAI7zB,UAAA4d,YAAA,WACF,MAAK1pB,MAAIwf,IAAAkK,wFAtST4G,EAmTJ,WAAQpwB,EAAA,oEAnTJ,MAAKF,MAAAwf,IA6TToJ,UAAQ,GAQG+W,EAAA7zB,UAAYgc,SAAW,WAAE,MAAA9nB,MAAAwf,IAAAsI,UAQN6X,EAAI7zB,UAAK0hB,OAAS,WAAmB,MAAAxtB,MAAAwf,IAAAgO,QAQzDmS,EAAA7zB,UAAY+1B,UAAU,SAAAhL,GAAE72B,KAAAwf,IAAAgO,OAAAqJ,GAQhB8I,EAAI7zB,UAAUqa,MAAQ,WAAG,MAAAnmB,MAAAwf,IAAA2G,OAQjCwZ,EAAA7zB,UAAYg2B,SAAI,SAAY3b,GAAEnmB,KAAAwf,IAAA2G,MAAAA,GAQ5BwZ,EAAA7zB,UAAYsc,MAAI,WAAe,MAAApoB,MAAAwf,IAAAuiB,aASzCpC,EAAI7zB,UAAO4lB,OAAS,WAClB,MAAI1xB,MAAAwf,IAASwiB,2MAvXR,OAAA,EAwYP,OAAI,0CAUJ,GAAIC,GAAMjiC,KAAMwf,sCAGdxf,KAAKmiB,IAAI,wBAAO,0GAKdniB,KAAK4f,QAAQ,oBAAC4F,cAAA,MAIhByc,EAAML,QAAAK,EAAAC,cAAwBD,EAAAE,+FA9ZzB,IAyaRF,EAAAG,yBAzaGzC,EAAK7zB,UAkbTu2B,eAAG,WACDriC,KAAIwf,IAAG8iB,uFAnbLtiC,MAAKo6B,OAkcTmI,MAWCz2B,UAAAsuB,OAAA,SAAA7G,mBAQcoM,EAAA7zB,UAAYgsB,KAAI,WAAa93B,KAAAwf,IAAAsY,QAQjC6H,EAAA7zB,UAAY8zB,WAAW,WAAE,MAAA5/B,MAAAwf,IAAAogB,YAQnBD,EAAI7zB,UAAKwnB,OAAa,WAAE,MAAAtzB,MAAAwf,IAAA8T,QAQ7BqM,EAAA7zB,UAAY4xB,UAAY,SAAAja,GAAEzjB,KAAAwf,IAAA8T,OAAA7P,GAQpBkc,EAAI7zB,UAAKsnB,QAAc,WAAE,MAAApzB,MAAAwf,IAAA4T,SAQ9BuM,EAAA7zB,UAAY02B,WAAa,SAAA/e,GAAEzjB,KAAAwf,IAAA4T,QAAA3P,GAQrBkc,EAAI7zB,UAAK22B,SAAe,WAAE,MAAAziC,MAAAwf,IAAAijB,UAQhC9C,EAAA7zB,UAAY42B,YAAa,SAAAjf,GAAEzjB,KAAAwf,IAAAijB,SAAAhf,GAQrBkc,EAAI7zB,UAAKqlB,SAAgB,WAAG,MAAAnxB,MAAAwf,IAAA2R,UAQtCwO,EAAA7zB,UAAY62B,YAAS,SAAAlf,GAAEzjB,KAAAwf,IAAA2R,WAAA1N,GAQjBkc,EAAI7zB,UAASunB,KAAO,WAAE,MAAArzB,MAAAwf,IAAA6T,MAQ3BsM,EAAA7zB,UAAY82B,QAAU,SAAAnf,GAAEzjB,KAAAwf,IAAA6T,KAAA5P,GAQtBkc,EAAA7zB,UAAY0K,MAAI,WAAU,MAAAxW,MAAAwf,IAAAhJ,sCArjBlC,MAAKxW,MAAAwf,IA+jBT8Y,SAQUqH,EAAA7zB,UAAYysB,SAAU,WAAE,MAAAv4B,MAAAwf,IAAA+Y,uCAvkB9B,MAAKv4B,MAAAwf,IAilBT6Y,OAQiBsH,EAAA7zB,UAAY+2B,aAAiB,WAAE,MAAA7iC,MAAAwf,IAAAqjB,cAzlB5ClD,EAAK7zB,UAkmBTsb,aAAM,WAAK,MAAOpnB,MAAKwf,IAAI4H,cAQJuY,EAAI7zB,UAAKg3B,OAAY,WAAS,MAAA9iC,MAAAwf,IAAAsjB,2IAoCtCnD,EAAA7zB,UAAYwL,WAAe,WAAE,MAAAtX,MAAAwf,IAAAlI,YAQ5BqoB,EAAA7zB,UAAYumB,WAAe,WAAG,MAAAryB,MAAAwf,IAAA6S,YAS5CsN,EAAA7zB,UAAOwmB,YAAM,WACd,MAAAtyB,MAAAwf,IAAA8S,uKAhqBQtyB,KAAAwf,IA4rBT6Z,aAAAvO,EAAkBlD,EAAAxH,8CAUhBuf,EAAI7zB,UAAQwtB,mBAAU,WACpB,GAAAj3B,GAAMsB,UAAW3C,QAAe,GAAE4B,SAAAe,UAAA,MAAAA,UAAA,EAEpC,KAAI3D,KAA+B,yBACjC,MAAM48B,GAAA9wB,UAAawtB,mBAAuBv4B,KAAAf,KAAQqC,EAGlD,IAAAopB,GAAMnN,EAAqB,WAAW0iB,cAAA,QAwBtC,OAtBE3+B,GAAa,OACfopB,EAAW,KAAGppB,EAAc,MAE1BA,EAAc,QAChBopB,EAAY,MAAGppB,EAAe,iCAGhCopB,EAAU,QAAWppB,EAAQ,UAAAA,EAAA,SAEzBA,EAAC,wCAGNA,EAAA,8DA3tBGrC,KAAKmgC,mBAmuBTC,UAAA3U,EAAqBA,OAEjBA,GAUFkU,EAAA7zB,UAAYytB,sBAAA,SAAA9N,GACV,IAAAzrB,KAAgC,yBAC9B,MAAK48B,GAAK9wB,UAAWytB,sBAAYx4B,KAAAf,KAAAyrB,EAGtC,IAAAH,GAAA3qB,CAgBH,UApwBMw/B,mBAAK4C,aAAAtX,yCAmwBP9qB,EAAA2qB,EAAQtqB,OACFL,MACJ8qB,IAAcH,EAAC3qB,IAAA8qB,IAAAH,EAAA3qB,GAAA8qB,QACfzrB,KAAK+d,KAAGiD,YAAUsK,EAAA3qB,qBAQxBg/B,GAAMqD,SAAW1kB,EAAa,WAAA0iB,cAAA,kDAE5BvV,GAAIX,KAAA,WACFW,EAAAwX,QAAM,OACNrb,MAAU,UACV+X,EAAAqD,SAAOhc,YAAMyE,GAOjBkU,EAAAuD,YAAK,oMAgCD,QAAOC,GAAYh4B,GAGnB,qCAEA,MAAOjL,GACR,MAAA,oFAcI,sEAmBPy/B,EAAMxB,oBAAmBpe,QAAA,aAGvB4f,EAAAyD,sBAAwBzD,EAAQxB,qBAShCwB,EAAI0D,iBAAe,WACnB,GAAA7V,GAAMmS,EAASqD,SAAYxV,MAE3B,OADAmS,GAAAqD,SAAOxV,OAAiBA,EAAM,EAAA,GAC9BA,IAAAmS,EAAAqD,SAAAxV,QAQAmS,EAAI2D,uBAAmB,4GAWvB3D,EAAI4D,yBAAsB,WACxB,GAAAC,SAOFA,KAAA7D,EAAAqD,SAAAzX,uKAQFiY,GACE,gdAqEF7D,EAAM7zB,UAAuB,wBAAA,IAOxBA,UAAA,yBAAA6zB,EAAA4D,0BAGC,IAAAJ,GAAYvgC,OACV6gC,EAAO,8CACR,iBAEDC,iBAAA,sCAIAP,EAAQxD,EAAAqD,SAAgBj1B,YAAAjC,UAAAq3B,eAGzBH,SAAAj1B,YAAAjC,UAAAq3B,YAAA,SAAAh4B,uBAEK,QAEFg4B,EAAepiC,KAAAf,KAAAmL,KAKrB81B,EAAA0C,qBAEIR,EAAAxD,EAAkBqD,SAAGj1B,YAAWjC,UAAAq3B,aAGpCxD,EAAAqD,SAAcj1B,YAAKjC,UAAAq3B,YAAA,SAAAh4B,GACnB,MAAQA,IAACy4B,EAAA54B,KAAAG,GACT,0BAMWw0B,EAAAkE,mBAAO,cAAExjC,GAAAs/B,EAAAqD,SAAAj1B,YAAAjC,UAAAq3B,WAGlB,uDADFA,EAAO,KACF9iC,GAILs/B,EAAA+D,qBAEC7Q,oBAAA,SAAA9U,SAUC,8CAACA,EAAA+b,iBACC/b,EAAAiD,YAAIjD,EAAA+lB,cAKLvS,gBAAI,OAIC,kBAAVxT,GAAA+Z,mdCrjCwBlb,GAAA,KAAAC,YAA2BD,IAAA,KAAA,IAAA7Y,WAAA,mdAqB7CggC,EAAU,SAAMvmB,kCAMZA,EAAAzc,KAAOf,KAASuc,EAACla,EAAUkgB,kNAWlC,IAAAkV,GAAAA,EAAAyL,cAAA,eA1BG,eAUEpmB,GAAIinB,EAAWvmB,+NCpBDpL,GAAA,GAAAA,GAAAA,EAAsBqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEAClBE,GAAA,KAAAC,YAA2BD,IAAA,KAAA,IAAA7Y,WAAA,wXACjC,gBAARqZ,EAAElB,EAAAmB,OACE,mCACgB,iCACoB2mB,kEAG/B,0IAUX9nB,EAAAyQ,GAMNsX,EAAA,SAAAzmB,gBAIA,GAAInb,GAACsB,UAAmB3C,QAAC,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,GACrB4e,EAAI5e,UAAW3C,QAAW,GAAA4B,SAAAe,UAAA,GAAA,aAAAA,UAAA,KAE3B3D,KAAAikC,4BAKHzmB,EAAKzc,KAAWf,KAAG,KAAQqC,EAAUkgB,GAInCviB,KAAA21B,aAAK,OACNlY,GAAA,UAAA,iCAGDzd,KAAKyd,GAAA,YAAK,WACRzd,KAAK21B,aAAA,IAGP31B,KAAImzB,YAAQ9wB,EAAckpB,wCAI1BvrB,KAAKkkC,mBAIAlkC,KAAAmkC,sDAIN9hC,EAAA+hC,kBAAA,GAAA/hC,EAAAgiC,oBAAA;A1GpDH,A0G0aE,sGAhaIrkC,KAAIskC,gBAmER,iFAnEItkC,KAAIskC,gBA+ER,EACEtkC,KAAKukC,8GAYHvkC,KAAAukC,uBACEvkC,KAAAwkC,iBAAKxkC,KAAoB4kB,YAAGrG,EAAAC,KAAAxe,KAAA,WAGjC,GAAAykC,GAAAzkC,KAAA22B,8FAOe,IAvGR8N,GAwGFzkC,KAACukC,+BAULN,EAAAn4B,UAAO44B,iBAAA,WACR1kC,KAAA2kC,UAAA3kC,KAAA4oB,YASCqb,EAAAn4B,UAAOgc,SAAA,WACR,MAAA6V,GAAAC,gBAAA,EAAA,MASA9xB,UAAA6qB,gBAAA,qEASCsN,EAAAn4B,UAAKy4B,qBAAyB,iGA/I5BvkC,KAAI4kC,mBA0JR,EAEE5kC,KAAKyd,GAAA,OAAAzd,KAAA6kC,kBACL7kC,KAAKyd,GAAG,QAASzd,KAAK8kC,sEA7JpB9kC,KAAI4kC,mBAsKR,EACE5kC,KAAI8kC,0BAA4B9kC,KAAA8hB,IAAK,OAAA9hB,KAAA6kC,uBAA4B/iB,IAAA,QAAA9hB,KAAA8kC,2HAYjE9kC,KAAK+kC,oBAAmB/kC,KAAA4kB,YAAoB,qPAwB5Cqf,EAAAn4B,UAASiU,QAAc,cAA+BwL,GAAAvrB,KAAAurB,YAEtD,IAAIA,EAAwD,IAA9B,GAAI5qB,GAAC4qB,EAAAvqB,OAAyBL,wVA7M1D,MAAIX,MAAA21B,mCA8P6BgI,EAAgBC,yDAS/C59B,KAAA4kC,mBACF5kC,KAAK4f,SAAQzU,KAAA,aAAmBuH,OAAA1S,KAAAglC,mBAAA,KAUlCf,EAAAn4B,UAAQm5B,uBAAyB,WAC/B,GAAAC,GAAO3mB,EAAoBC,KAAAxe,KAAA,WAC3BA,KAAA4f,QAAO,kHApRP5f,KAAIyd,GAAA,UA6RRc,EAAAC,KAAAxe,KAAiB,WACfsrB,EAAKmB,oBAAA,cAAoByY,GACvB5Z,EAAImB,oBAAS,WAAAyY,iDAWf,IAAInmB,EAAA,WAAkC,QAAW,MAAX/e,KAAA+d,KAAWgL,WAAA,gHAC/C/oB,KAAI+d,KAAAgL,WAAgB/B,YAAhBme,KAA2B,WAAQ,QAAA,EAEvC,GAAA7Z,GAAAtrB,KAAgBurB,mBAKd,GAAA6Z,GAAmB7mB,EAAAC,KAASxe,KAAE,WAC5B,GAAAqhB,GAAMrhB,KAETqlC,EAAA,WACA,MAAAhkB,GAAAzB,QAAA,uBAKD,KAAA,GAAOjf,GAAA,EAAAA,EAAA2qB,EAAoBtqB,OAAQL,IAAE,CACpC,GAAA8qB,GAAAH,EAAA3qB,EACJ8qB,GAAAgB,oBAAA,YAAA4Y,8JA7TGpB,EAAIn4B,UAsVRyf,WAAA,WAEE,MADAvrB,MAAKmzB,YAAAnzB,KAAiBmzB,aAAQ,GAAAmS,GAAqB,WAC5CtlC,KAAKmzB,qQAxVV,OAAIoS,GAqXRvlC,KAAkB8qB,EAAAlD,EAAAxH,wFArXd,8CAoYFqL,MAAKA,kDApYHzrB,KAAIurB,aA+YRwX,aAAStX,4CAeTwY,EAAAn4B,UAAe4xB,UAAK,aAEhBuG,GACF7mB,EAAQ,WAEV6mB,GAAAn4B,UAAYqnB,eAEXoS,GAAA,SAAAxlC,EAAA+qB,EAAAlD,EAAAxH,GACD,GAAA/d,GAAYsB,UAAQ3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,GAEhB2nB,EAAQvrB,EAAAwrB,sBAIZ3D,iCAMFvlB,EAAKo1B,KAAU13B,2BAKf,uBAAK0rB,0JAYLwY,EAAKn4B,UAAAq4B,0BAAmC,0CAYpCF,EAAAuB,mBAAe,SAAA5I,GASfA,EAAAwG,sBAA0B,SAASqC,EAAA/gC,GACnC,GAAAghC,GAAA9I,EAAA+I,mEAWAD,EAAO9zB,OAAAlN,EAAC,EAAA+gC,IAUR7I,EAAAgJ,oBAAY,SAAAzgC,UACZugC,GAAA9I,EAAA+I,4EAOI,MAAAD,GAAgB/kC,EAIlB,OAAA,iEAWF,OAAIklC,GACKA,EAAAzH,gBAAmB0H,GAG5B,wHASK9lC,KAAU+lC,eAAYxN,gGAetBsN,KAGAjJ,EAAAuB,oBACD0H,EAAIjJ,EAAAuB,oBAER7N,EAAY,WAAA9Z,MAAA,+EAMbxW,KAAM8hB,IAAA,UAAU9hB,KAAAgmC,sBAEbhmC,KAAAy9B,eAAoBt4B,OACrB4gC,eAAAF,EAAAI,aAAA9gC,EAAAnF,MACDA,KAAAyd,GAAA,UAAAzd,KAAAgmC,yUCvkBqB,GAAAE,uBAAqB,IAAAC,4BAAA,IAAAC,qBAAA,IAAAC,iBAAA,IAAAC,kBAAA,IAAAC,0BAAA,IAAAC,kBAAA,EAAApsB,gBAAA,IAAAqsB,KAAA,SAAAvlC,EAAAzB,EAAAD,8SAa1C8e,EAAmBpC,EAAnByQ,mBAaF,GAAAjS,GAAO1a,IAEH,IAAAihC,EAAOyF,OAAK,GACbpoB,EAAA,WAAA0iB,cAAA,mCAGCtmB,EAAAisB,GAAQC,EAAQ96B,UAAA66B,yCAMpBh8B,OAAI+I,eAAiBgH,EAAM,UAC3BmsB,IAAK,WACD,MAAI7mC,MAAK8mC,oBAKTpsB,SAIIksB,GAAO96B,UAAUi7B,SAAI,SAAArb,SACtB1rB,KAAAgB,QAAA,IACA,EACJF,EAAA4qB,EAAA1qB,oBAGHhB,KAAI8mC,QAASpb,EAAM1qB,yBAGjB,GAAUL,IAAIX,OACZ2K,OAAA+I,eAAsB1T,KAAG,GAAAW,GAC1BkmC,IAAA,WACF,MAAA7mC,MAAAgnC,MAAArmC,MAMC,IAAcG,EAAdmmC,EAGE,IAFFtmC,EAAIsmC,EAEInmC,EAANH,EAAMA,IACPumC,EAAAnmC,KAAAf,KAAAW,sQCtEYyR,GAAA,GAAiBA,GAAAA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,oEACbE,GAAA,KAAsBC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,8XA8N3CojC,SAASC,EAAA,GAAAA,EAAmB,GAAA,IAAO,IAAMD,SAAAC,EAAA,GAAAA,EAAA,GAAA,IAAA,IAAAD,SAAAC,EAAA,GAAAA,EAAA,GAAA,IAAA,IAAAC,EAAA,qGA5NrB,sBAANnrB,EAAA0K,KACO,mCACF,2BAEbmF,QAAW7qB,EAAO,mBAElBqd,EAAAO,EAAUiN,GAEdY,EAAuBzrB,EAAY,mBAInC8d,GAFuB9C,EAAAyQ,GAEvBzrB,EAAuB,kBAEvB6d,EAAuB7C,EAAkC8C,GAEzDsoB,EAAuB,OACvBC,EAAA,6YAuBE,QAAOC,GAAcjrB,EAAMla,EAAWkgB,GACpCnG,EAAWpc,KAASwnC,GAElBhqB,EAAOzc,KAAAf,KAAAuc,EAAAla,EAAAkgB,qDAGThG,EAAAkB,GAAO,kBAAGc,EAAoBC,KAAGxe,KAAKA,KAAMqlC,kBAM3C9iB,MAAAhE,EAAAC,KAAAxe,KAAA,WACD,GAAEuc,EAAAyJ,OAAAzJ,EAAAyJ,MAAA,oCACLhmB,MAAA4qB,sTAsBC5qB,KAAOojB,QAhDLokB,EAAgB17B,UA0DpB6R,SAAA,WACE,MAAIH,GAAO1R,UAAA6R,SAAO5c,KAAAf,KAAS,OACzBslB,UAAA,4BA5DAkiB,EAAgB17B,UAqEpB27B,aAAa,WAC4B,kBAA7B1oB,GAAgB,WAAa,mEAWnCyoB,EAAK17B,UAAeu5B,cAAO,cAC5B/Z,GAAAtrB,KAAAof,QAAAmM,gBAEJvrB,KAAAynC,4EApFGznC,KAAA0nC,eAAgBjc,KAwGlB+b,EAAA17B,UAAA47B,eAAiB,SAAcjc,4DAQ7B,IAAA,GAHAkc,GAAc3nC,KAAKof,QAAE,kBAAAwoB,YAEpBlc,KACGmc,EAAA,EAAUA,EAAApc,EAAa,WAAAzqB,OAAA6mC,IACzBnc,EAAAzjB,KAAAwjB,EAAsB,WAAAoc,GAMtB9oB,GAAO,WAAiB,OAAkB,YAAAA,EAAU,WAAgB0M,EAAA,WAAAzrB,KAAAwf,IAGpE,KADF,GAAA7e,GAAI+qB,EAAA1qB,OACFL,KAAA,IAIDmnC,GAAApc,EAAA/qB,GAAAonC,gBACGJ,EAAUP,QACZU,EAAIhE,WAAUpgB,MAAA0jB,MAAeO,EAAAP,OAI5BO,EAAMK,aACLC,EAAaH,EAAAhE,WAAkB,QAAUoE,EAAYP,EAAAP,OAAA,OAAAO,EAAAK,cAExDL,EAAAQ,kBACDL,EAAIhE,WAAUpgB,MAAWykB,gBAAAR,EAAAQ,iBAErBR,EAAOS,qBACEN,EAAUhE,WAAS,kBAAeoE,EAAAP,EAAAQ,iBAAA,OAAAR,EAAAS,oBAE5CT,EAAUU,cACTV,EAAOW,cACRL,EAAUH,EAAU,kBAAuBI,EAAEP,EAAAU,YAAAV,EAAAW,gBAE7CR,EAAApkB,MAAAykB,gBAAAR,EAAAU,aAGDV,EAAcY,YACW,eAAzBZ,EAAaY,UACbT,EAAOhE,WAAYpgB,MAAG8kB,WAAO,eAAAlB,EAAA,iBAAAA,EAAA,iBAAAA,EACH,WAAnBK,EAAYY,UACnBT,EAAOhE,WAAYpgB,MAAG8kB,WAAM,WAAAlB,EAAA,aAAAA,EAAA,aAAAA,EAC7B,cAAAK,EAAAY,UACGT,EAAAhE,WAAUpgB,MAAc8kB,WAAU,WAAejB,EAAW,WAAAA,EAAA,eAAAD,EAAA,YAAAA,EACjC,YAAzBK,EAAUY,YACZT,EAAOhE,WAAWpgB,MAAM8kB,WAAW,WAAelB,EAAC,aAAAA,EAAA,aAAAA,EAAA,aAAAA,IAGpDK,EAAAc,aAAA,IAAAd,EAAAc,YAAA,CACF,GAAAC,GAAA3pB,EAAA,WAAAgT,WAAA+V,EAAApkB,MAAAglB,SACFZ,GAAApkB,MAAAglB,SAAAA,EAAAf,EAAAc,YAAA,KACFX,EAAApkB,MAAAgO,OAAA,4BAlKGhO,MAAAilB,OAAgB,+CA8KS,eAAtBhB,EAAAiB,WACAd,EAAOhE,WAAApgB,MAAAmlB,YAAA,aAEJf,EAAOhE,WAAWpgB,MAAMklB,WAChCE,EAASnB,EAAWiB,8HC7MtBG,eAAY,GAAAC,yBAAU,GAAAC,uBAAA,GAAAC,kBAAA,GAAA7C,iBAAA,IAAAG,kBAAA,EAAApsB,gBAAA,IAAA+uB,KAAA,SAAAjoC,EAAAzB,EAAAD,eAUxBA,GAAIid,YAAgB,CAClB,IAAA2sB,IACAC,SAAY,WACZC,OAAA,SACAC,QAAU,2LCCN,YAEE/pC,GAAAid,YAAa,CACb,IAAA+sB,GAAU,SAAI/d,GACd,YACAA,EAAAX,WACFW,EAAA7D,MACFxH,SAAUqL,EAAIrL,SACdrd,GAAA0oB,EAAA1oB,GACF0mC,gCAAAhe,EAAAge,2KAUElW,IAAA9H,EAAA8H,MAUFmW,EAAqB,SAAuBjS,GAC1C,GAAAkS,GAAOlS,EAAU1Z,KAAA6rB,iBAAsB,SAEzCC,EAAAjlC,MAAAkH,UAAAoI,IAAAnT,KAAA4oC,EAAA,SAAAxpC,4KAUE,MAAA,KAAA0pC,EAAgB9tB,QAAG0P,KACrBvX,IAAKs1B,+CAUS/d,yOCzEQhsB,EAAAD,2BAEC4S,GAAA,GAAAA,GAAqBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAlCR,GAAO9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,KADLqK,YAAA,iIA6BZqtB,EAAkB,QAAAA,GAAAxe,aAGhB,IAAA2V,EAAKyF,OAAA,CACHhsB,EAAA4D,EAAoB,WAAO0iB,cAAA,SAE7B,KAAC,GAAA2F,KAAAmD,GAAAh+B,sCAMH4O,EAAIqvB,kBAEHr2B,eAAAgH,EAAA,UACDmsB,IAAA,sGAUFnsB,YAIE5O,UAAAnB,OAAAsS,OAAA+sB,EAAA,WAAAl+B,qCAQAg+B,EAAYh+B,UAAK4iB,gBACjBub,OAAQ,SACNC,SAAO,WACLC,YAAK,mBAIR,GAAAC,KAAAN,GAAAh+B,UAAA4iB,0CAIG5iB,UAAAs0B,UAAA,SAAA3U,GACJ,GAAI/mB,GAAQ1E,KAAK+pC,QAAQ/oC,qBAEzB2J,OAAK+I,eAAQ1T,KAAA0E,GACXmiC,IAAM,WACN,MAAO7mC,MAAK+pC,QAAArlC,MAKd+mB,EAAIQ,iBAAc,aAAA1N,EAAAC,KAAAxe,KAAA,WAClBA,KAAI4f,QAAK,aAET5f,KAAK+pC,QAAQ9hC,KAAIwjB,GAEfzrB,KAAA4f,SACEzU,KAAI,WACJsgB,MAAAA,KAIJqe,EAAYh+B,UAACi3B,aAAA,SAAAsH,GAIb,IAAA,GAFE5e,GAAO7oB,OAETjC,EAAA,EAAAG,EAAAd,KAAAgB,OAAAF,EAAAH,EAAAA,IAEF,aAAA8qB,IAAc4e,EAAU,CAClBrqC,KAAA+pC,QAAan4B,OAACjR,EAAA,SAKdX,KAAA4f,SACAzU,KAAA,oBACDsgB,OAIH3f,UAAAw+B,aAAA,SAAAvnC,4QCpHsBqP,GAAA,GAAAA,GAAoBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAhCR,GAAM9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,cACEyK,EAAAD,GAAgB,KAAAC,YAAAD,IAAA,KAAA,IAAA7Y,WAAA,6CAAtB+Y,GAAAC,EAAAC,GAAA,GAAA,kBAAAA,IAAA,OAAAA,EAAA,KAAA,IAAAjZ,WAAA,iEAAAiZ,GAAAD,GAAAjR,UAAAnB,OAAAsS,OAAAD,GAAAA,EAAAlR,WAAAiC,aAAA5G,MAAA4V,EAAApJ,YAAA,EAAAM,UAAA,EAAAD,cAAA,KAAAgJ,IAAArS,OAAAuS,eAAAvS,OAAAuS,eAAAH,EAAAC,GAAAD,EAAAI,UAAAH,GA0Nd,QAASutB,GAAkB73B,GACzB,GAAI83B,GAAQ5nC,MAQR,OANH8P,GAAA+3B,uCAEI/3B,EAACrQ,UACNmoC,EAAgB93B,EAAOrQ,QAAQqQ,EAASrQ,QAAIqoC,gBAGxCF,EAAMrjC,sBAIV,GAAAA,EAAA,CAIA,GAAIxG,GAAAiC,uCAiHF,GAAA+nC,GAAej4B,EAACrQ,QAAA1B,EACnB,IAAAgqC,EAAAxjC,QAAAA,6uKAhVK+U,EAAiB8C,KASlB,SAAAxB,GAGC,QAAKotB,GAAeruB,EAAAla,GACpB+Z,EAAYpc,KAAA4qC,oBAGd5qC,KAAA4qB,OAG0BhoB,SAAxBP,EAAUwoC,2BACV7qC,KAAKmhB,SAAK0pB,yBAAc7qC,KAAAmhB,SAA8BK,cAAaqpB,0BAGnExsB,EAAKZ,GAAEzd,KAAG+d,KAAA0T,cAAc,oBAA0B,QAAAlT,EAAaC,KAAKxe,KAAA,WACpEA,KAAK8qC,eACL9qC,KAAK4qB,6FAIP5qB,KAAO+d,KAAG0T,cAAU,0BAAciZ,cAA2B,EAC7D1qC,KAAO+d,KAAG0T,cAAU,0BAAciZ,cAA2B,EAC7D1qC,KAAO+d,KAAG0T,cAAU,0BAAciZ,cAA2B,EAC7D1qC,KAAO+d,KAAG0T,cAAU,8BAAciZ,cAA+B,EACjE1qC,KAAO+d,KAAG0T,cAAU,4BAAciZ,cAA6B,EAC/D1qC,KAAO+d,KAAG0T,cAAU,gCAAciZ,cAAiC,EACnE1qC,KAAO+d,KAAG0T,cAAU,0BAAciZ,cAA6B,EAC/D1qC,KAAO+d,KAAG0T,cAAU,2BAAciZ,cAAmC,EACrE1qC,KAAO+d,KAAG0T,cAAU,4BAAciZ,cAAoC,4BAIrEjtB,GAAAzd,KAAA+d,KAAA0T,cAAA,0BAAA,SAAAlT,EAAAC,KAAAxe,KAAAA,KAAAqlC,gBACFhnB,EAAAZ,GAAAzd,KAAA+d,KAAA0T,cAAA,0BAAA,SAAAlT,EAAAC,KAAAxe,KAAAA,KAAAqlC,ssBA1CGrlC,KAAAmhB,SAAiB0pB,0BAmDnB7qC,KAAO+qC,kNAkCP,GAAIhtB,GAAA/d,KAAS+d,KAEXitB,EAAaT,EAAaxsB,EAAA0T,cAAA,2BAC1BmX,EAAe2B,EAAexsB,EAAA0T,cAAA,4BAC9BwZ,EAAWV,EAAUxsB,EAAA0T,cAAA,2BACrBuW,EAAcuC,EAAUxsB,EAAA0T,cAAA,+BACxByZ,EAASX,EAAOxsB,EAAA0T,cAAA,2BAChB0Z,EAAAZ,EAA0BxsB,EAAA0T,cAAA,6BAC1B4W,EAAekC,EAAWxsB,EAAA0T,cAAA,2BAC1B6W,EAAeiC,EAAWxsB,EAAA0T,cAAA,iCAC1BgX,EAAA1pB,EAAA,WAAA,WAAAwrB,EAAAxsB,EAAA0T,cAAA,gCAEAzuB,GACEolC,kBAAkB+C,cACnBnD,EACFM,cAAAA,EACDC,UAAcyC,EACfpC,WAAAA,uJA6BCgC,EAAe9+B,UAAUs/B,UAAY,SAAAC,kBAGnCC,GAAcvtB,EAAA0T,cAAmB,0BAAI4Z,EAAA9C,aACtCxqB,EAAA0T,cAAA,2BAAA4Z,EAAAzC,iEAED0C,EAAkBvtB,EAAG0T,cAAc,8BAA+B4Z,EAAArD,aACnEsD,EAAAvtB,EAAA0T,cAAA,0BAAA4Z,EAAAlD,0OA1IGM,EAAiBA,EAiJrB7e,QAAA,MACU7L,EAAA0T,cAAA,8BAAAgX,MAQP38B,UAAAi/B,gBAAA,WACF,GAAAnR,GAAA2R,EAAA,WAAAxsB,EAAA,WAAAysB,aAAAC,QAAA,mEAQKJ,GACFrrC,KAAAorC,UAAOC,MAUKv/B,UAAAg/B,aAAA,WACf,GAAA9qC,KAAAmhB,SAAA0pB,yBAAA,kJAQK9rB,EAAY,WAAaysB,aAASE,WAAA,2BAEpC,MAAAxrC,OAQN0qC,EAAS9+B,UAAAu5B,cAA+B,WACtC,GAAIsG,GAAc3rC,KAAAof,QAAC6B,SAAA,uBAEf0qB,EAAOtG,iBAIVuF,mBAGF,WAAArP,kBAAA,oBAAAqP,kFC1N4B,IAAAvE,iBAAuB,IAAAC,kBAAA,IAAAlsB,gBAAA,EAAAwxB,wBAAA,KAAAC,KAAA,SAAA3qC,EAAAzB,EAAAD,2BAE9B4S,GAAA,GAAAA,GAAkBA,EAAAqK,WAAA,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAxBR,GAAA9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,KADFqK,YAAA,UAEW,yBAAbqvB,EAAO5vB,EAAA6vB,yBACPxtB,EAAAO,EAAaiN,OACT,+BACQ,kCACH,+DAES,qBACd7P,EAAK8vB,sGAkCfC,EAAQ,QAAGA,QACZ5pC,GAAAsB,UAAA3C,QAAA,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,cAGD,KAAM,IAAG/C,OAAO,2BAGlB,IAAIggC,GAAI5gC,IACR,IAAIihC,EAAQyF,OAAQ,CACpB9F,EAAItiB,EAAmB,WAAW0iB,cAAY,mCAG1CJ,EAAA+F,GAASsF,EAAUngC,UAAQ66B,GAI/B/F,EAAG5a,MAAQ3jB,EAAGo1B,+CAGV3M,EAAOohB,EAAAC,cAAA9pC,EAA6B,OAAE,YACtCulB,EAAAvlB,EAAa,OAAA,+BAEbU,EAAAV,EAAgB,IAAA,kBAAAid,EAAAC,WAEb,aAALuL,GAAmB,aAAAA,KACnBshB,EAAI,YAGHpF,WACAqF,cAED,IAAE3gB,GAAO,GAAGogB,GAAc,WAAiBlL,EAAEoG,OAC9CsF,EAAA,GAAAR,GAAA,WAAAlL,EAAAyL,aAEDE,GAAO,EACLC,EAAgBjuB,EAAAC,KAAAoiB,EAAA,WACd5gC,KAAY,WACbusC,IACDvsC,KAAc,QAAA,aACbusC,GAAA,IA+GH,OA5GO,aAALH,GACExL,EAAA5a,MAAOvI,GAAA,aAAM+uB,UAGd94B,eAAAktB,EAAA,uBAEH,MAAO9V,IAEH2hB,IAAAn/B,SAAOxB,mBAGR4H,eAAAktB,EAAA,wBAEH,MAAOhZ,IAEH6kB,IAAAn/B,SAAUxB,mBAGX4H,eAAAktB,EAAA,2BAEH,MAAOxgB,IAEHqsB,IAAAn/B,SAAYxB,YAGZnB,OAAA+I,eAAkBktB,EAAC,MACjBiG,IAAA,iBACD9jC,IAED0pC,IAAAn/B,SAAQxB,YAGRnB,OAAA+I,eAAaktB,EAAA,YACd,WACA,MAAAwL,IAEHK,IAAO,SAAAC,GACAR,EAAW9C,cAAAsD,OAGbA,iBAED1sC,KAAOgmB,MAAKvI,GAAA,aAAA+uB,GAEdxsC,KAAK4f,QAAS,kBAIdjV,OAAK+I,eAAWktB,EAAA,QACdiG,IAAA,WACE,MAAA7mC,MAAO2sC,QAIPjhB,EAHD,qEASDmb,IAAA,WACE,IAAA7mC,KAAO2sC,QACP,MAAO,KAGL,IAAiB,IAAjB3sC,KAAW,KAACgB,aACbsrC,EAMD,KAAA,GAHFM,GAAO5sC,KAAGgmB,MAAM0D,mBAGP/oB,EAAG,EAAIG,EAACd,KAAA,KAAAgB,OAAAF,EAAAH,EAAAA,IAAA,CAChB,GAAAkrB,GAAM7rB,KAAA,KAAAW,EACLkrB,GAAiB,WAAG+gB,GAAO/gB,EAAa,SAAA+gB,EACtCC,EAAI5kC,KAAQ4jB,GACHA,EAAQ,YAAAA,EAAA,SAAAA,EAAA,WAAA+gB,GAAA/gB,EAAA,UAAA,IAAA+gB,KAChB3kC,KAAA4jB,MAIL0gB,GAAK,qCAGLA,GAAO,MAEN,KAAE,GAAQ5rC,GAAC,EAAAA,EAASksC,EAAA7rC,OAAAL,IACtB,KAAAob,EAAAhb,KAAAf,KAAAqsC,YAAAQ,EAAAlsC,WASC,OAHAX,MAACqsC,YAAeQ,EACnBP,EAAAvF,SAAA/mC,KAAAqsC,aAEUC,GAEVG,IAAAn/B,SAAAxB,YAGHzJ,EAAUkxB,KACVqN,EAAArN,IAAUlxB,EAAUkxB,6BAMlB0N,EAAWyF,OACX9F,EADA,0DAMAqL,EAAIngC,UAAQiC,YAAAk+B,IAKTngC,UAAA4iB,0BACF,aAGDud,EAAKngC,UAAQghC,OAAc,SAAOjhB,GAClC,GAAAP,GAAAtrB,KAAAgmB,MAAAuF,YAEF,IAAAD,EACE,IAAI,GAAO3qB,GAAG,EAAAA,EAAM2qB,EAAAtqB,OAAAL,iBAEf2qB,EAAQ3qB,GAAGosC,UAASlhB,QAKtBmb,MAAA/+B,KAAA4jB,QACF,KAAAkb,SAAA/mC,KAAAgnC,QAGCiF,EAAKngC,UAAKihC,UAAc,SAAOA,UAChCC,IAAA,sFAMCA,GAAY,GAIVA,QACGthB,KAAEqb,SAAA/mC,KAAAgnC,WAOPiG,GAAA,QAAAA,GAAAC,EAAAzhB,GACF,GAA2C,kBAApC1M,GAAiB,WAAmB,OAEzC,MAAAA,GAAA,WAAAxb,WAAA,mBAEF,6GAKA4pC,GAAW,MAAA,SAAAthB,GACTJ,EAAKqhB,OAAGjhB,iCAGVyE,EAAe,WAAG9Z,MAAAA,MAGjB,MAAA02B,cAIGE,EAAO,SAAA7Z,EAAI9H,MACZlK,WAIC8rB,EAAA1Q,EAAA2Q,cAAA/Z,EACJ8Z,eAIEE,EAAA,WAAUhsB,EAAUhD,EAAAC,KAAAxe,KAAA,SAAA4W,EAAAc,EAAiC81B,GACtD,MAAA52B,4BAID6U,EAAOkhB,SAAW,mCAMlB,GAAS,MAAL3sC,6DAIHytC,GAAA9iC,OAAA3K,MAEGgb,EAAKyyB,EAAGzsC,SAAE,KAEb,IAAAga,UAID,IAAA5a,IAAQstC,GAAQ,CAMhB,IAJIvpC,KAAAwpC,IAASvtC,aACV,GAGHA,GAAS4a,EACT,MAAA,mZC3SF,SAAMkB,GAAqB9J,GAAA,MAAmBA,IAAAA,EAAWqK,WAAArK,GAAuBuK,UAAQvK,GAFxF5S,EAAMid,YAAa,mGAYNmxB,EAAoB,yBAAiBC,KAAAC,gCAMvBC,EAAY,UAAI/iC,KAAA8iC,KAAEC,UAAAA,KACzCC,GAAC,QAAAhjC,KAAA8iC,oCAEEtuC,GAAMyuC,QAAcA,4CAIzB,GAAI9O,GAAQ2O,EAAW3O,MAAM,oBAC3BA,IAAKA,EAAA,GACAA,EAAC,eAIP+O,YAAAA,0BAED1uC,GAAK2uC,WAAWA,CAChB,IAAAC,GAAoB,WAGlB,GACDC,GACCC,EAFAnP,EAAO2O,EAAW3O,MAAQ,yCAI1B,OAAAA,6BAIGmP,EAAMnP,EAAA,IAAiBpN,WAAUoN,EAAK,IAChCkP,GAAAC,8BAEAD,EACA,MAPV,2BAUI,IAAM1K,GAAiBwK,GAAG,UAAcnjC,KAAA8iC,IAAe,IAAfM,oBACxC,IAAMG,GAAAJ,GAAgD,EAApBC,GAA6B,IAATI,2RCxD7B,kBAAkBlwB,GAAA,WAAA0iB,cAAA,SAAAtd,gIAuBhD,GACEjf,GACAwjB,EAFFwmB,EAAoB,QAKlB,MAAO,iBAIP3mB,EAAA4mB,EAAuB9Q,gBAAS,EAAA,GAGlC,KAAA,GAAOj9B,GAAA,EAAAA,EAAAmnB,EAAmB9mB,OAASL,IACpC8D,EAAAqjB,EAAArjB,MAAA9D,8EAzBM,IAAA+tC,GAASxtC,EAAgB,gFCNhC,SAAMgb,GAAmB9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,kBAErB,IAAAu8B,GAAOztC,EAAS,YAElB0tC,EAAG1yB,EAAkByyB,2EA4BbnvC,GAAA,WAAA,SAAIkT,GACJ,GAAAm8B,GAAAlrC,UAAO3C,QAAiB,GAAiB4B,SAAZe,UAAU,MAAaA,UAAA,MAEvD,kBAAAmrC,OAAA,IACDvN,GAAC,oGAIE,MADNqN,GAAA,WAAAG,KAAAF,EAAAjpC,IACaopC,EAAAppC,GAAA3C,MAAAjD,KAAA2D,mUC3COyO,GAAW,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,WAAjB68B,GAAAC,EAAAC,GAAA,MAAAD,GAAAC,IAAAA,EAAAD,gBA4BV,0CAAS5wB,EAAqD,WAAA8wB,eAAArsC,gBASjE,GAAAkd,GAAYtc,UAAS3C,QAAQ,GAAwB4B,SAAjBe,UAAI,GAAuB,MAAQA,UAAa,GAClFuc,EAAAvc,UAAQ3C,QAAA,GAAA4B,SAAAe,UAAA,MAEgFA,UAAK,GAC7Fia,EAAGja,UAAa3C,QAAe,GAAA4B,SAAAe,UAAA,MAAAA,UAAA,GAE/Boa,EAAGO,EAAgB,WAAA0iB,cAAA/gB,EAoBlB,eAlBF+Q,oBAAA9Q,GAAAzF,QAAA,SAAA40B,+DAOHT,EAAU,WAAAG,KAAAO,EAAA,WAAAC,EAAAF,EAAA5rB,IACX1F,EAAAoJ,aAAAkoB,EAAA5rB,6FAUe1F,8DAgBVyxB,EAAMxoB,YAAMxG,WA8BjBivB,GAAA1xB,aAUM,gDAAS2xB,EAAA3sC,uCAkBL4H,OAAGqmB,oBAAU0e,EAAA3sC,IAAA/B,UAWpB,QAAAgf,GAAkBjC,MAClBhb,GAAMgb,EAAG4xB,EAEP,IAAA5sC,EAAA,OAKH2sC,GAAA3sC,+EAqBI,QAAS+f,GAAW8sB,EAAS/sB,GAClC,MAAsC,MAAjC,IAAA+sB,EAAWtqB,UAAS,KAAavJ,QAAA,IAAA8G,EAAA,8BAYjC+sB,EAAStqB,UAAoC,KAAtBsqB,EAAStqB,UAAetC,EAAA4sB,EAAAtqB,UAAA,IAAAtC,WAUnDG,GAAAysB,EAAA1sB;ArH7LH;AACA,AqHyMO0sB,EAAStqB,UAAAuqB,EAAoBC,KAAA,8LAoChC,GAAA19B,GAAK29B,EAAcC,EAAUC,EAAUC,KAErC99B,wFAQE49B,EAAAt/B,EAAOkN,yCAGTqyB,EAAID,EAAYrvC,GAAAmT,KACjBo8B,EAAAF,EAAArvC,GAAAwG,OAIJ,iBAAAuJ,GAAAu/B,IAAA,KAAAF,EAAAh0B,QAAA,IAAAk0B,EAAA,iCAUC,MAAA79B,0CAWKkM,EAAS,WAAoB6xB,cAAG,WACrC,OAAA,wEA0BCrnB,GAAA/K,eAOD,IAJMA,EAAAqyB,uBAAOryB,EAAAgL,2CAIPsnB,SAEA50B,KAAA,EACA60B,IAAA,EAIN,IAAAC,GAAOjyB,EAAA,WAAAgZ,gBACL7f,EAAM6G,EAAgB,WAAA7G,KAEtB+4B,EAAAD,EAAAC,YAAA/4B,EAAA+4B,YAAA,EACHC,EAAA1xB,EAAA,WAAA2xB,aAAAj5B,EAAAg5B,uJAwBG,QAAKE,GAAS5yB,EAAcW,GAC5B,GAAAmK,MACDwnB,EAAAvnB,EAAA/K,mBAED6yB,EAAU7yB,EAAGikB,qBAGb6O,EAAOR,EAAQ50B,KAChBq1B,EAAApyB,EAAAoyB,2ZA/WoBC,qDACa,4MAAA,OAAA,MAAA,4MAAA,OAAA,QAElB7vC,EAAA,4BACCA,EAAM,mFAWrBouC,EAAOpzB,EAAoB80B,qKCPV5+B,GAAA,MAAeA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,+JA0BhC,QAAOqL,GAACwzB,EAAQ9lC,EAAKqI,uBAErB,MAAK09B,GAAwBzzB,EAAAwzB,EAAA9lC,EAAAqI,EAG3B,IAAA0F,GAAK+F,EAAQwwB,UAASwB,+BAKpB/3B,EAAKwsB,SAAGv6B,KAAc+N,EAAEwsB,SAAAv6B,OAExBqI,EAAIwO,OAAAxO,EAAQwO,KAAQ1C,EAAAC,WAEpBrG,EAAAwsB,SAAIv6B,GAAUlD,KAAAuL,GAEZ0F,EAAIi4B,2BAGFj4B,EAAAi4B,WAAU,SAAAzyB,EAAA0yB,SAET/H,UACC3qB,EAAA2yB,EAAA3yB,MAEHgnB,GAAAxsB,EAAAwsB,SAAAhnB,EAAAvT,KAEH,IAAAu6B,EAIE,IAAK,iBAAA4L,EAAA,EAAAlxC,EAAAmxC,EAAkBvwC,OAAAZ,EAAAkxC,IACpB5yB,EAAA8yB,gCADoBF,IAI1BC,EAAAD,GAAAvwC,KAAAkwC,EAAAvyB,EAAA0yB,6IAsBD,QAAAtvB,GAAOmvB,EAAA9lC,EAAAqI,sBAIT,GAAI0F,GAAA+F,EAAUwwB,UAAGwB,MAGf/3B,EAAAwsB,UAIA,GAAA9gC,MAAKiC,QAASsE,GAAe,MAAA+lC,GAAcpvB,EAAAmvB,EAAA9lC,EAAAqI,EAI7C,IAAIi+B,GAAW,SAAoBtxC,2BAMnC,IAAKgL,EAAL,CAMA,GAAIu6B,GAASxsB,EAAAwsB,SAAAv6B,EAGP,IAAAu6B,EAAA,KAGLlyB,EAED,sGAbE,KAAA,GAAArT,KAAW+Y,GAAMwsB,SACjB+L,EAAOtxC,aAoCRyf,GAAAqxB,EAAAvyB,EAAA0yB,0CAKG5B,EAASyB,EAAAloB,YAAYkoB,EAAAS,aAkBrB,yBAZFhzB,GAAUvT,KAAKuT,EAAMhM,OAAAu+B,kDAYnBzB,IAAI9wB,EAAOizB,wBAA6BjzB,EAAAmB,WAAY,EAClDD,EAAA7e,KAAM,KAAOyuC,EAAM9wB,EAAQ0yB,OAG7B,KAAA5B,IAAW9wB,EAAWkzB,iBAAM,IAC7BC,GAAA5yB,EAAAwwB,UAAA/wB,EAAAhM,2BAKJm/B,EAAAxI,UAAA,yEAUM,OAAS3qB,EAAIkzB,gKAqBbn0B,EAAAwzB,EAAS9lC,EAAQhJ,iBAUtB,QAAK2vC,KACH,OAAO,EAEP,QAAKC,8CAUH,GAAAC,GAAOtzB,GAAKK,EAAoB,WAAQL,0BAazC,WAAA9Y,GAAA,WAAAA,GAAA,gBAAAA,GAAA,oBAAAA,GAAA,oBAAAA,IAGU,gBAADA,GAAgBosC,EAAApzB,iBACxBF,EAAM9Y,GAAAosC,EAAapsC,QAQjB8Y,EAAIhM,WACLA,OAAAgM,EAAAuzB,YAAA3zB,EAAA,YAIDI,EAAAwzB,oFAKFxzB,EAAME,eAAe,WACfozB,EAAIpzB,gBACNozB,EAAIpzB,iBAENF,EAAMyzB,aAAY,EAClBH,EAAIG,aAAY,EAChBzzB,EAAMkzB,kBAAA,GAGRlzB,EAAMkzB,kBAAA,EAGNlzB,EAAMga,gBAAA,WACAsZ,EAAItZ,iBACNsZ,EAAItZ,kBAENha,EAAM0zB,cAAA,EACNJ,EAAAI,cAAM,EACN1zB,EAAAizB,qBAAAG,4BAMApzB,EAAI2c,yBAAM,WAA0B2W,EAAI3W,uDAKxC3c,EAAM8yB,8BACIM,EAEXpzB,EAAAga,mBAGDha,EAAM8yB,8BAAgCO,mBAItC,GAAIM,GAAM/zB,EAAgB,WAAAgZ,gBACxB7f,EAAM6G,EAAsB,WACzB7G,IAGNiH,GAAAwF,MAAAxF,EAAA4zB,SAAAD,GAAAA,EAAA5B,YAAAh5B,GAAAA,EAAAg5B,YAAA,IAAA4B,GAAAA,EAAA7B,YAAA/4B,GAAAA,EAAA+4B,YAAA,+LAeD,MAAI9xB,WAWD6zB,GAAetB,EAAA9lC,GACd,GAAA+N,GAAK+F,EAAAwwB,UAAgBwB,mDASxBA,EAAAxkB,4EAGGwkB,EAAAuB,YAAO,KAAArnC,EAAoB+N,EAAMi4B,4PA5VvB1zB,GAAAA,gCACC4zB,SAAAA,6SCuBf,IAAAoB,GAAU,WACV,MAAAj/B,GAAAvQ,MAAA2X,EAAAjX,gICVE,GAAA+uC,GAAQ/uC,UAAQ3C,QAAA,GAAA4B,SAAAe,UAAA,GAAA+yB,EAAA/yB,UAAA,SACjB,yDAGIgvC,EAAIxuC,KAAKyuC,MAAMlc,EAAW,gOCrB7Bmc,KAAK,SAAK3xC,EAAAzB,EAAAD,wCASZA,EAAAid,YAAe,IAChB8C,QAAAA,sGCmCG,QAAAuzB,GAAa3nC,EAAAhI,sDASd4vC,EAAAh0B,EAAA,WAAA,uBAGDvI,MAAW2D,EAGXhP,kCAKCA,EAAM,MAIR6nC,EAAAC,QAAAhrC,KAAAirC,sEAnEC1zC,EAAAid,YAAe,+CAYjBq2B,EAAS,KAAGnvC,WAOZqvC,GAAIC,oDAYJD,EAAAjE,KAAS,iHClCP,kEAcA,QAAKoE,GAAQ/gC,GACX,QAAOA,GAAO,gBAAAA,IAAA,oBAAAA,EAAAxH,YAAAwH,EAAArE,cAAApD,OAkChB,QAAAyoC,KAGA,GAAAjwC,GAAWyB,MAAIkH,UAAA6I,MAAA5T,KAAA4C,sJA7Bf6C,EAAa,SAAc6sC,EAAAluC,GAG3B,MAAAguC,GAAAhuC,gDC7BAmuC,6BAAY,KAAAC,KAAS,SAAAryC,EAAczB,EAASD,GAC5C,kEAEAA,EAAAid,YAAa,CAGR,IAAIkQ,GAAiBzrB,EAAjB,mBAEPod,EAAcpC,EAAkByQ,GAEhC6mB,EAAiB,SAAQluB,MAC1B5B,GAAApF,EAAA,WAAA0iB,cAAA,eACDtd,GAAA4B,UAAAA,uOCYA,QAAImuB,GAAoBhvC,EAAIwjB,GAC1B,MAAArjB,OAAOiC,QAAApC,GACLivC,EAASjvC,GACF7B,SAAA6B,GAAW7B,SAAAqlB,EAChByrB,IAECA,IAAajvC,EAAAwjB,KAKpB,QAAOyrB,GAAA7V,GACL,MAAQj7B,UAARi7B,GAAqB,IAAAA,EAAA78B,QAErBA,OAAK,EACLyD,MAAA,WACH,KAAA,IAAA7D,OAAA,oCAEDqnB,IAAS,WACH,KAAA,IAAUrnB,OAAK,sCAKnBI,OAAO68B,EAAO78B,OACfyD,MAAAkvC,EAAAn1B,KAAA,KAAA,QAAA,EAAAqf,uCAKE8V,GAAAC,EAAAC,EAAAhW,EAAAiW,SACFlxC,UAAAkxC,uXAtBKlW,gBAAA6V,qTEtBJz0B,EAAe9d,EAAY,wBAW3B6yC,EAAa,SAAEt7B,GACb,GAAA/S,IAAM,WAAA,WAAS,OAAA,WAAqB,SAAA,OAAA,yCAIpCjF,GAAAuzC,KAAIv7B,kDAOFw7B,KACJC,EAAK51B,EAAoB,WAAU0iB,cAAI,OACrCkT,EAAAj2B,UAAgB,YAAcxF,EAAE,SACjChY,EAAAyzC,EAAApQ,+GASAqQ,yBAEDA,EAAIzuC,EAAW/E,IAAAF,EAAAiF,EAAA/E,UAKf,UAAAwzC,EAAAC,8IAaA50C,GAAKu0C,SAAUA,iJAkBf,MAAGt7B,8LAoBH,MAAI,4BAWJ60B,GAAA,SAAA70B,gLCnHmB,IAAA47B,KAAiB,SAAAnzC,EAAAzB,EAAAD,2BAEV4S,GAAA,GAAAA,GAAAA,EAAAqK,WAAuB,MAAArK,EAAA,IAAAsK,KAAA,IAAA,MAAAtK,EAAA,IAAA,GAAAxM,KAAAwM,GAAAzH,OAAAmB,UAAAF,eAAA7K,KAAAqR,EAAAxM,KAAA8W,EAAA9W,GAAAwM,EAAAxM,GAAA,OAAA8W,GAAA,WAAAtK,EAAAsK,UAAvCR,GAAU9J,GAAA,MAAAA,IAAAA,EAAAqK,WAAArK,GAAAuK,UAAAvK,KADVqK,YAAK,WAEK,oDAEE,yBAAZ63B,EAAMx1B,EAAAy1B,OACC,0BACA,yEAEPC,EAAEt4B,EAAAu4B,gCAGKvzC,EAAA,uEAEI6qB,mCACP7P,EAAgBw4B,wBACpB/W,KAAyBrgB,GAAtBpc,EAAA,+BACU,0BAAb2oB,EAAO3N,EAAA+M,OACE,kBAATqH,EAAGpU,EAAAqU,OACM,2FAGA,0DAGHrU,EAAiBy4B,gDACjBz4B,EAAiB04B,qBAMjCC,EAAA3zC,EAAA,kOA+BE,GAAAwP,EAII,IAAA,gBAAA3N,GAAA,IAGS,IAAXA,EAAIgZ,QAAO,OACThZ,EAAAA,EAAA4R,MAAQ,4BAOVtS,IACDiuB,EAAA,WAAAye,KAAA,WAAAhsC,EAAA,0DAGIwf,GACLtiB,EAAS60C,aAAA/xC,GAAAwf,MAAAA,oBAMV7R,GAAAuO,EAAA8f,MAAAh8B,OAKD2N,GAAA3N,CAIF,KAAK2N,IAAOA,EAAAwR,SAEV,KAAQ,IAAGne,WAAA,kRAuBbuwC,EAAQS,eAAUrxB,EAAc,qNAkC9BzjB,EAAK60C,WAAA,WACL,MAAKN,GAAA,WAAAljB,wZA2NPrxB,EAAQ+0C,YAAG,SAAAn0C,EAAOqY,gHAsBlBjZ,EAAQ29B,gBAAU39B,EAAAwzC,iBAAc9V,EAAA8V;AhIhYhC;;AClBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;wBC3BmB,aAAa;;;;2BACV,gBAAgB;;;;;;;;;;;;;;IAWhC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,MAAM,EAAE,OAAO,EAAE;0BAFzB,aAAa;;AAGf,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;GACxB;;;;;;;;;AAJG,eAAa,WAYjB,aAAa,GAAA,yBAAG;AACd,WAAO,qBAAqB,CAAC;GAC9B;;;;;;;;AAdG,eAAa,WAqBjB,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;GACrB;;SAvBG,aAAa;;;AA2BnB,aAAa,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;;AAEpD,yBAAU,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;qBAC7C,aAAa;;;;;;;;;;;;;;;;;;;yBC1CN,aAAa;;;;0BACd,gBAAgB;;IAAzB,GAAG;;6BACS,mBAAmB;;IAA/B,MAAM;;yBACE,eAAe;;IAAvB,EAAE;;8BACO,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;;;IAU5B,MAAM;YAAN,MAAM;;AAEC,WAFP,MAAM,CAEE,MAAM,EAAE,OAAO,EAAE;0BAFzB,MAAM;;AAGR,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,aAAa,EAAE,CAAC;;AAErB,QAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACjC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;GAClC;;;;;;;;;;;AAXG,QAAM,WAqBV,QAAQ,GAAA,oBAAwC;QAAvC,GAAG,yDAAC,QAAQ;QAAE,KAAK,yDAAC,EAAE;QAAE,UAAU,yDAAC,EAAE;;AAC5C,SAAK,GAAG,0BAAO;AACb,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;AAC/B,cAAQ,EAAE,CAAC;KACZ,EAAE,KAAK,CAAC,CAAC;;;AAGV,cAAU,GAAG,0BAAO;AAClB,UAAI,EAAE,QAAQ;AACd,UAAI,EAAE,QAAQ;AACd,iBAAW,EAAE,QAAQ;KACtB,EAAE,UAAU,CAAC,CAAC;;AAEf,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;;AAEhD,QAAI,CAAC,cAAc,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE;AACzC,eAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;AAEpC,QAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;AAEpC,WAAO,EAAE,CAAC;GACX;;;;;;;;;;AA7CG,QAAM,WAsDV,WAAW,GAAA,qBAAC,IAAI,EAAE;AAChB,QAAI,CAAC,IAAI,EAAE,OAAO,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC;;AAEnD,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAI,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;;AAEjE,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA7DG,QAAM,WAqEV,aAAa,GAAA,yBAAG;AACd,uCAAiC,qBAAM,aAAa,KAAA,MAAE,CAAG;GAC1D;;;;;;;;AAvEG,QAAM,WA8EV,WAAW,GAAA,uBAAG,EAAE;;;;;;;;AA9EZ,QAAM,WAqFV,WAAW,GAAA,uBAAG;AACZ,UAAM,CAAC,EAAE,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GACpE;;;;;;;;AAvFG,QAAM,WA8FV,cAAc,GAAA,wBAAC,KAAK,EAAE;;AAEpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AAC5C,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACzB;GACF;;;;;;;;AApGG,QAAM,WA2GV,UAAU,GAAA,sBAAG;AACX,UAAM,CAAC,GAAG,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GACrE;;SA7GG,MAAM;;;AAkHZ,uBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;;;;;;;;;;;4BC/HF,eAAe;;;;0BACb,gBAAgB;;IAAzB,GAAG;;yBACK,eAAe;;IAAvB,EAAE;;2BACQ,iBAAiB;;IAA3B,IAAI;;6BACQ,mBAAmB;;IAA/B,MAAM;;0BACF,gBAAgB;;;;kCACR,0BAA0B;;;;4BAC/B,eAAe;;;;mCACT,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+B7C,SAAS;AAEF,WAFP,SAAS,CAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;0BAFhC,SAAS;;;AAKX,QAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE;AACxB,UAAI,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC;KAC9B,MAAM;AACL,YAAI,CAAC,OAAO,GAAG,MAAM,CAAC;OACvB;;;AAGD,QAAI,CAAC,QAAQ,GAAG,iCAAa,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;;AAGhD,WAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,iCAAa,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;;AAG/D,QAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,IAAK,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,CAAC,EAAE,AAAC,CAAC;;;AAGvD,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE;;AAEb,UAAI,EAAE,GAAG,MAAM,IAAI,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,EAAE,EAAE,IAAI,WAAW,CAAC;;AAE3D,UAAI,CAAC,GAAG,GAAM,EAAE,mBAAc,IAAI,CAAC,OAAO,EAAE,AAAE,CAAC;KAChD;;AAED,QAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;;;AAGlC,QAAI,OAAO,CAAC,EAAE,EAAE;AACd,UAAI,CAAC,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC;KACvB,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE;AACrC,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;KAC5B;;AAED,QAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,QAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAI,CAAC,eAAe,GAAG,EAAE,CAAC;;;AAG1B,QAAI,OAAO,CAAC,YAAY,KAAK,KAAK,EAAE;AAClC,UAAI,CAAC,YAAY,EAAE,CAAC;KACrB;;AAED,QAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;;;AAIlB,QAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE;AACzC,UAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;GACF;;;;;;;;AArDG,WAAS,WA4Db,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;;;AAGlD,QAAI,IAAI,CAAC,SAAS,EAAE;AAClB,WAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,YAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;AAC7B,cAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SAC7B;OACF;KACF;;;AAGD,QAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,QAAI,CAAC,eAAe,GAAG,IAAI,CAAC;;;AAG5B,QAAI,CAAC,GAAG,EAAE,CAAC;;;AAGX,QAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE;AACvB,UAAI,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC3C;;AAED,OAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC;GACjB;;;;;;;;;AAvFG,WAAS,WA+Fb,MAAM,GAAA,kBAAG;AACP,WAAO,IAAI,CAAC,OAAO,CAAC;GACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAjGG,WAAS,WA0Ib,OAAO,GAAA,iBAAC,GAAG,EAAE;AACX,4BAAI,IAAI,CAAC,gFAAgF,CAAC,CAAC;;AAE3F,QAAI,CAAC,GAAG,EAAE;AACR,aAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;;AAED,QAAI,CAAC,QAAQ,GAAG,iCAAa,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AACjD,WAAO,IAAI,CAAC,QAAQ,CAAC;GACtB;;;;;;;;;;;;AAnJG,WAAS,WA8Jb,EAAE,GAAA,cAAG;AACH,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;;;;;AAhKG,WAAS,WA2Kb,QAAQ,GAAA,kBAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE;AACxC,WAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;GACtD;;AA7KG,WAAS,WA+Kb,QAAQ,GAAA,kBAAC,MAAM,EAAE;AACf,QAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5D,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;;AAEnE,QAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;AACvB,aAAO,MAAM,CAAC;KACf;;AAED,QAAI,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;;AAE/B,QAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AAChC,aAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;KACzB;;AAED,QAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,QAAI,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;;AAEzC,QAAI,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACtC,aAAO,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;;AAED,WAAO,MAAM,CAAC;GACf;;;;;;;;;;AArMG,WAAS,WA8Mb,SAAS,GAAA,qBAAG;AACV,WAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC;GACpC;;;;;;;;;;;;AAhNG,WAAS,WA2Nb,EAAE,GAAA,cAAG;AACH,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;;;;;AA7NG,WAAS,WAwOb,IAAI,GAAA,gBAAG;AACL,WAAO,IAAI,CAAC,KAAK,CAAC;GACnB;;;;;;;;;;;;AA1OG,WAAS,WAqPb,QAAQ,GAAA,oBAAG;AACT,WAAO,IAAI,CAAC,SAAS,CAAC;GACvB;;;;;;;;;AAvPG,WAAS,WA+Pb,YAAY,GAAA,sBAAC,EAAE,EAAE;AACf,WAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;GAC7B;;;;;;;;;AAjQG,WAAS,WAyQb,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,WAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;GACnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA3QG,WAAS,WAwSb,QAAQ,GAAA,kBAAC,KAAK,EAAc;QAAZ,OAAO,yDAAC,EAAE;;AACxB,QAAI,SAAS,YAAA,CAAC;AACd,QAAI,aAAa,YAAA,CAAC;;;AAGlB,QAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,mBAAa,GAAG,KAAK,CAAC;;;AAGtB,UAAI,CAAC,OAAO,EAAE;AACZ,eAAO,GAAG,EAAE,CAAC;OACd;;;AAGD,UAAI,OAAO,KAAK,IAAI,EAAE;AACpB,gCAAI,IAAI,CAAC,mKAAmK,CAAC,CAAC;AAC9K,eAAO,GAAG,EAAE,CAAC;OACd;;;;AAID,UAAI,kBAAkB,GAAG,OAAO,CAAC,cAAc,IAAI,gCAAY,aAAa,CAAC,CAAC;;;AAG9E,aAAO,CAAC,IAAI,GAAG,aAAa,CAAC;;;;AAI7B,UAAI,cAAc,GAAG,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;;AAEhE,eAAS,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC;;;KAG/D,MAAM;AACL,iBAAS,GAAG,KAAK,CAAC;OACnB;;AAED,QAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAE/B,QAAI,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,EAAE;AACtC,UAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,CAAC;KAC9C;;;;AAID,iBAAa,GAAG,aAAa,IAAK,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,AAAC,CAAC;;AAEtE,QAAI,aAAa,EAAE;AACjB,UAAI,CAAC,eAAe,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjD;;;;AAID,QAAI,OAAO,SAAS,CAAC,EAAE,KAAK,UAAU,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE;AACxD,UAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;KAC9C;;;AAGD,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;AAnWG,WAAS,WA4Wb,WAAW,GAAA,qBAAC,SAAS,EAAE;AACrB,QAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;AACjC,eAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KACtC;;AAED,QAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACjC,aAAO;KACR;;AAED,QAAI,UAAU,GAAG,KAAK,CAAC;;AAEvB,SAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,UAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACnC,kBAAU,GAAG,IAAI,CAAC;AAClB,YAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5B,cAAM;OACP;KACF;;AAED,QAAI,CAAC,UAAU,EAAE;AACf,aAAO;KACR;;AAED,QAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;AACxC,QAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;;AAE9C,QAAI,MAAM,GAAG,SAAS,CAAC,EAAE,EAAE,CAAC;;AAE5B,QAAI,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,SAAS,EAAE,EAAE;AACpD,UAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;KAC9C;GACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA3YG,WAAS,WA2bb,YAAY,GAAA,wBAAG;;;AACb,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;;AAEtC,QAAI,QAAQ,EAAE;;;AAEZ,YAAI,aAAa,GAAG,MAAK,QAAQ,CAAC;;AAElC,YAAI,SAAS,GAAG,SAAZ,SAAS,CAAI,IAAI,EAAE,IAAI,EAAK;;;;AAI9B,cAAI,aAAa,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;AACrC,gBAAI,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;WAC5B;;;;AAID,cAAI,IAAI,KAAK,KAAK,EAAE;AAClB,mBAAO;WACR;;;;AAID,cAAI,IAAI,KAAK,IAAI,EAAE;AACjB,gBAAI,GAAG,EAAE,CAAC;WACX;;;;AAID,cAAI,CAAC,aAAa,GAAG,MAAK,QAAQ,CAAC,aAAa,CAAC;;;;;;AAMjD,gBAAK,IAAI,CAAC,GAAG,MAAK,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACxC,CAAC;;;AAGF,YAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAC3B,eAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,gBAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAI,KAAI,YAAA,CAAC;AACT,gBAAI,IAAI,YAAA,CAAC;;AAET,gBAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;;AAE7B,mBAAI,GAAG,KAAK,CAAC;AACb,kBAAI,GAAG,EAAE,CAAC;aACX,MAAM;;AAEL,mBAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAClB,kBAAI,GAAG,KAAK,CAAC;aACd;;AAED,qBAAS,CAAC,KAAI,EAAE,IAAI,CAAC,CAAC;WACvB;SACF,MAAM;AACL,gBAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;AACzD,qBAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;WACjC,CAAC,CAAC;SACJ;;KACF;GACF;;;;;;;;;AA1fG,WAAS,WAkgBb,aAAa,GAAA,yBAAG;;;AAGd,WAAO,EAAE,CAAC;GACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAtgBG,WAAS,WAuiBb,EAAE,GAAA,YAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;;;AACvB,QAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrD,YAAM,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;;;KAGnD,MAAM;;AACL,cAAM,MAAM,GAAG,KAAK,CAAC;AACrB,cAAM,IAAI,GAAG,MAAM,CAAC;AACpB,cAAM,EAAE,GAAG,EAAE,CAAC,IAAI,SAAO,KAAK,CAAC,CAAC;;;AAGhC,cAAM,eAAe,GAAG,SAAlB,eAAe;mBAAS,OAAK,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;WAAA,CAAC;;;;AAIzD,yBAAe,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AAC/B,iBAAK,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;;;;;AAKpC,cAAM,YAAY,GAAG,SAAf,YAAY;mBAAS,OAAK,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;WAAA,CAAC;;;AAGhE,sBAAY,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;;AAG5B,cAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,kBAAM,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC5B,kBAAM,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;;;;WAI5C,MAAM,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,UAAU,EAAE;;AAEzC,oBAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACpB,oBAAM,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;aACpC;;OACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;;;;;;;;AAjlBG,WAAS,WAwmBb,GAAG,GAAA,aAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACxB,QAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC/D,YAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KACrC,MAAM;AACL,UAAM,MAAM,GAAG,KAAK,CAAC;AACrB,UAAM,IAAI,GAAG,MAAM,CAAC;;AAEpB,UAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;;;AAIhC,UAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;;AAExB,UAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,cAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;;AAE7B,cAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;OACnC,MAAM;AACL,cAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACrB,cAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;OAC3B;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;;;;;AAjoBG,WAAS,WAqpBb,GAAG,GAAA,aAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;;;;AACxB,QAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACrD,YAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD,MAAM;;AACL,YAAM,MAAM,GAAG,KAAK,CAAC;AACrB,YAAM,IAAI,GAAG,MAAM,CAAC;AACpB,YAAM,EAAE,GAAG,EAAE,CAAC,IAAI,SAAO,KAAK,CAAC,CAAC;;AAEhC,YAAM,OAAO,GAAG,SAAV,OAAO,GAAS;AACpB,iBAAK,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAChC,YAAE,CAAC,KAAK,CAAC,IAAI,aAAY,CAAC;SAC3B,CAAC;;;AAGF,eAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEvB,eAAK,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;;KAChC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;;AAzqBG,WAAS,WAyrBb,OAAO,GAAA,iBAAC,KAAK,EAAE,IAAI,EAAE;AACnB,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACtC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AA5rBG,WAAS,WAwsBb,KAAK,GAAA,eAAC,EAAE,EAAc;QAAZ,IAAI,yDAAC,KAAK;;AAClB,QAAI,EAAE,EAAE;AACN,UAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAI,IAAI,EAAE;AACR,YAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACf,MAAM;;AAEL,cAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACxB;OACF,MAAM;AACL,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AAC1C,YAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;OAC3B;KACF;AACD,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAvtBG,WAAS,WA+tBb,YAAY,GAAA,wBAAG;AACb,QAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;;AAGrB,QAAI,CAAC,UAAU,CAAC,YAAU;AACxB,UAAI,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;;;AAGlC,UAAI,CAAC,WAAW,GAAG,EAAE,CAAC;;AAEtB,UAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,kBAAU,CAAC,OAAO,CAAC,UAAS,EAAE,EAAC;AAC7B,YAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACf,EAAE,IAAI,CAAC,CAAC;OACV;;;AAGD,UAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB,EAAE,CAAC,CAAC,CAAC;GACP;;;;;;;;;;AAlvBG,WAAS,WA2vBb,QAAQ,GAAA,kBAAC,YAAY,EAAE;AACrB,WAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;GAC/C;;;;;;;;;;AA7vBG,WAAS,WAswBb,QAAQ,GAAA,kBAAC,UAAU,EAAE;AACnB,OAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACrC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AAzwBG,WAAS,WAkxBb,WAAW,GAAA,qBAAC,aAAa,EAAE;AACzB,OAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AAC3C,WAAO,IAAI,CAAC;GACb;;;;;;;;;AArxBG,WAAS,WA6xBb,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,WAAO,IAAI,CAAC;GACb;;;;;;;;;AAhyBG,WAAS,WAwyBb,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AA3yBG,WAAS,WAqzBb,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAClC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAxzBG,WAAS,WAk0Bb,aAAa,GAAA,yBAAG;AACd,QAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACrC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;;;AAr0BG,WAAS,WAo1Bb,KAAK,GAAA,eAAC,GAAG,EAAE,aAAa,EAAE;AACxB,WAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;GACpD;;;;;;;;;;;;;;;;AAt1BG,WAAS,WAq2Bb,MAAM,GAAA,gBAAC,GAAG,EAAE,aAAa,EAAE;AACzB,WAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;GACrD;;;;;;;;;;;AAv2BG,WAAS,WAi3Bb,UAAU,GAAA,oBAAC,KAAK,EAAE,MAAM,EAAE;;AAExB,WAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;GAC/C;;;;;;;;;;;;;;;;;;;;AAp3BG,WAAS,WAu4Bb,SAAS,GAAA,mBAAC,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;AAC3C,QAAI,GAAG,KAAK,SAAS,EAAE;;AAErB,UAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE;AAC/B,WAAG,GAAG,CAAC,CAAC;OACT;;;AAGD,UAAI,CAAC,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACrE,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC;OACrC,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;AACzB,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;OACpC,MAAM;AACL,YAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;OAC5C;;;AAGD,UAAI,CAAC,aAAa,EAAE;AAClB,YAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;OACxB;;;AAGD,aAAO,IAAI,CAAC;KACb;;;;AAID,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AACb,aAAO,CAAC,CAAC;KACV;;;AAGD,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACxC,QAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;AAEhC,QAAI,OAAO,KAAK,CAAC,CAAC,EAAE;;AAElB,aAAO,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;KAC5C;;;;;AAKD,WAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,gCAAY,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;GACtE;;;;;;;;;;;;;AAn7BG,WAAS,WA+7Bb,aAAa,GAAA,yBAAG;;AAEd,QAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAI,UAAU,GAAG,IAAI,CAAC;;;;AAItB,QAAM,oBAAoB,GAAG,EAAE,CAAC;;;AAGhC,QAAM,kBAAkB,GAAG,GAAG,CAAC;;AAE/B,QAAI,UAAU,YAAA,CAAC;;AAEf,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,UAAS,KAAK,EAAE;;AAEpC,UAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;AAE9B,kBAAU,GAAG,0BAAO,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1C,kBAAU,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;;AAElC,kBAAU,GAAG,IAAI,CAAC;OACnB;KACF,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,UAAS,KAAK,EAAE;;AAEnC,UAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5B,kBAAU,GAAG,KAAK,CAAC;OACpB,MAAM,IAAI,UAAU,EAAE;;;AAGrB,YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AACxD,YAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AACxD,YAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAI,KAAK,GAAG,KAAK,GAAI,KAAK,CAAC,CAAC;;AAEjE,YAAI,aAAa,GAAG,oBAAoB,EAAE;AACxC,oBAAU,GAAG,KAAK,CAAC;SACpB;OACF;KACF,CAAC,CAAC;;AAEH,QAAM,KAAK,GAAG,SAAR,KAAK,GAAc;AACvB,gBAAU,GAAG,KAAK,CAAC;KACpB,CAAC;;;AAGF,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC7B,QAAI,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;;;;AAI9B,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAS,KAAK,EAAE;AAClC,gBAAU,GAAG,IAAI,CAAC;;AAElB,UAAI,UAAU,KAAK,IAAI,EAAE;;AAEvB,YAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC;;;AAGpD,YAAI,SAAS,GAAG,kBAAkB,EAAE;;AAElC,eAAK,CAAC,cAAc,EAAE,CAAC;AACvB,cAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;;;;SAIrB;OACF;KACF,CAAC,CAAC;GACJ;;;;;;;;;;;;;;;;;;;;;;;;AAtgCG,WAAS,WA6hCb,mBAAmB,GAAA,+BAAG;;AAEpB,QAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,EAAE;AACvD,aAAO;KACR;;;AAGD,QAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,kBAAkB,CAAC,CAAC;;AAExE,QAAI,YAAY,YAAA,CAAC;;AAEjB,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,YAAW;AAC/B,YAAM,EAAE,CAAC;;;;AAIT,UAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;;AAEjC,kBAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC9C,CAAC,CAAC;;AAEH,QAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,KAAK,EAAE;AAC/B,YAAM,EAAE,CAAC;;AAET,UAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;KAClC,CAAC;;AAEF,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7B,QAAI,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAC9B,QAAI,CAAC,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;GAClC;;;;;;;;;;;AA3jCG,WAAS,WAqkCb,UAAU,GAAA,oBAAC,EAAE,EAAE,OAAO,EAAE;AACtB,MAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;;AAGvB,QAAI,SAAS,GAAG,0BAAO,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;AAE/C,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc;AAC3B,UAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;KAC9B,CAAC;;AAEF,aAAS,CAAC,IAAI,oBAAkB,SAAS,AAAE,CAAC;;AAE5C,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE9B,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;AAplCG,WAAS,WA6lCb,YAAY,GAAA,sBAAC,SAAS,EAAE;AACtB,8BAAO,YAAY,CAAC,SAAS,CAAC,CAAC;;AAE/B,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc,EAAE,CAAC;;AAEhC,aAAS,CAAC,IAAI,oBAAkB,SAAS,AAAE,CAAC;;AAE5C,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE/B,WAAO,SAAS,CAAC;GAClB;;;;;;;;;;;AAvmCG,WAAS,WAinCb,WAAW,GAAA,qBAAC,EAAE,EAAE,QAAQ,EAAE;AACxB,MAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;;AAEvB,QAAI,UAAU,GAAG,0BAAO,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;;AAElD,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc;AAC3B,UAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;KAChC,CAAC;;AAEF,aAAS,CAAC,IAAI,qBAAmB,UAAU,AAAE,CAAC;;AAE9C,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE9B,WAAO,UAAU,CAAC;GACnB;;;;;;;;;;AA/nCG,WAAS,WAwoCb,aAAa,GAAA,uBAAC,UAAU,EAAE;AACxB,8BAAO,aAAa,CAAC,UAAU,CAAC,CAAC;;AAEjC,QAAM,SAAS,GAAG,SAAZ,SAAS,GAAc,EAAE,CAAC;;AAEhC,aAAS,CAAC,IAAI,qBAAmB,UAAU,AAAE,CAAC;;AAE9C,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;;AAE/B,WAAO,UAAU,CAAC;GACnB;;;;;;;;;;;AAlpCG,WAAS,CA4pCN,iBAAiB,GAAA,2BAAC,IAAI,EAAE,IAAI,EAAE;AACnC,QAAI,CAAC,SAAS,CAAC,WAAW,EAAE;AAC1B,eAAS,CAAC,WAAW,GAAG,EAAE,CAAC;KAC5B;;AAED,aAAS,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACnC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAnqCG,WAAS,CA6qCN,YAAY,GAAA,sBAAC,IAAI,EAAE;AACxB,QAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AACxD,aAAO,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;;AAED,QAAI,6BAAU,0BAAO,OAAO,IAAI,0BAAO,OAAO,CAAC,IAAI,CAAC,EAAE;AACpD,8BAAI,IAAI,UAAQ,IAAI,8HAA2H,CAAC;AAChJ,aAAO,0BAAO,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7B;GACF;;;;;;;;;;;;AAtrCG,WAAS,CAisCN,MAAM,GAAA,gBAAC,KAAK,EAAE;AACnB,SAAK,GAAG,KAAK,IAAI,EAAE,CAAC;;AAEpB,4BAAI,IAAI,CAAC,qFAAqF,CAAC,CAAC;;;;;AAKhG,QAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,YAAW,EAAE,CAAC;;;;;;;;;;AAUnG,QAAI,MAAM,GAAG,SAAT,MAAM,GAAc;AACtB,UAAI,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAC7B,CAAC;;;AAGF,UAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAGjD,UAAM,CAAC,SAAS,CAAC,WAAW,GAAG,MAAM,CAAC;;;AAGtC,UAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;;;AAGjC,SAAK,IAAI,MAAI,IAAI,KAAK,EAAE;AACtB,UAAI,KAAK,CAAC,cAAc,CAAC,MAAI,CAAC,EAAE;AAC9B,cAAM,CAAC,SAAS,CAAC,MAAI,CAAC,GAAG,KAAK,CAAC,MAAI,CAAC,CAAC;OACtC;KACF;;AAED,WAAO,MAAM,CAAC;GACf;;SAxuCG,SAAS;;;AA2uCf,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;qBACrC,SAAS;;;;;;;;;;;;;;;;;2BCtxCF,iBAAiB;;;;;;4BAGhB,kBAAkB;;;;gDACV,yCAAyC;;;;6CAC5C,qCAAqC;;;;yCACzC,iCAAiC;;;;kDACxB,2CAA2C;;;;6BACpD,mBAAmB;;;;gDACf,wCAAwC;;;;kCACvC,wBAAwB;;;;4CAC3B,oCAAoC;;;;kCACjC,yBAAyB;;;;4BAC/B,kBAAkB;;;;iDACd,0CAA0C;;;;kDACzC,2CAA2C;;;;iDAC5C,0CAA0C;;;;wDAClC,mDAAmD;;;;mDACtD,4CAA4C;;;;;;;;;;;IAQtE,UAAU;YAAV,UAAU;;WAAV,UAAU;0BAAV,UAAU;;;;;;;;;;;;AAAV,YAAU,WAQd,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,iBAAiB;KAC7B,CAAC,CAAC;GACJ;;SAZG,UAAU;;;AAehB,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC9B,WAAS,EAAE,MAAM;AACjB,UAAQ,EAAE,CACR,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,CACnB;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;wBC9DN,cAAc;;;;2BACX,iBAAiB;;;;;;;;;;;IAQjC,gBAAgB;YAAhB,gBAAgB;;WAAhB,gBAAgB;0BAAhB,gBAAgB;;;;;;;;;;;;AAAhB,kBAAgB,WAQpB,aAAa,GAAA,yBAAG;AACd,uCAAiC,kBAAM,aAAa,KAAA,MAAE,CAAG;GAC1D;;;;;;;;AAVG,kBAAgB,WAiBpB,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE;AAChC,UAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;AACjC,UAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;KACpC,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;AAC9B,UAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KAChC;GACF;;SAzBG,gBAAgB;;;AA6BtB,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,YAAY,CAAC;;AAEvD,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;yBCzCT,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;;;;;;;;;IAST,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAE;0BAFzB,WAAW;;AAGb,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GAC9D;;;;;;;;;AAPG,aAAW,WAef,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,8BAA8B;KAC1C,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,kBAAkB;AAC7B,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,AAAE;KAC3G,EAAE;AACD,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;AA7BG,aAAW,WA+Bf,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE;AACzC,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;SArCG,WAAW;;;AAyCjB,uBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;sBCpDP,WAAW;;;;yBACR,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;;;;;;;;;;IAUT,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAE,OAAO,EAAE;0BAFzB,UAAU;;AAGZ,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;;AAG7C,QAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;;AAED,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAW;AACtC,UAAI,CAAC,MAAM,EAAE,CAAC;;AAEd,UAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnD,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;GACJ;;;;;;;;;AArBG,YAAU,WA6Bd,aAAa,GAAA,yBAAG;AACd,iCAA2B,kBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;;;;;;;AA/BG,YAAU,WAsCd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,KAAK,CAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,IAAI,CAAE,CAAC;GAC3D;;;;;;;;AAxCG,YAAU,WA+Cd,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAC3B,KAAK,GAAG,CAAC,CAAC;;AAEd,QAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACrC,WAAK,GAAG,CAAC,CAAC;KACX,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE;AACrB,WAAK,GAAG,CAAC,CAAC;KACX,MAAM,IAAI,GAAG,GAAG,IAAI,EAAE;AACrB,WAAK,GAAG,CAAC,CAAC;KACX;;;;;AAKD,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtD,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAI,IAAI,CAAC,WAAW,EAAE,KAAK,aAAa,EAAE;AACxC,UAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;KACjC;;;AAGD,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1B,SAAG,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,eAAa,CAAC,CAAG,CAAC;KAC7C;AACD,OAAG,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,eAAa,KAAK,CAAG,CAAC;GAC9C;;SAzEG,UAAU;;;AA6EhB,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAE3C,uBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;wBC5FN,cAAc;;;;2BACX,iBAAiB;;;;;;;;;;;;;IAUjC,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAE,OAAO,EAAC;0BAFxB,UAAU;;AAGZ,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;GAC5C;;;;;;;;;AAPG,YAAU,WAed,aAAa,GAAA,yBAAG;AACd,iCAA2B,kBAAM,aAAa,KAAA,MAAE,CAAG;GACpD;;;;;;;;AAjBG,YAAU,WAwBd,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACtB;GACF;;;;;;;;AA9BG,YAAU,WAqCd,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;GAC3B;;;;;;;;AAzCG,YAAU,WAgDd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,QAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;GAC1B;;SApDG,UAAU;;;AAwDhB,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAE3C,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;;;gCCtEF,2BAA2B;;;;0BACjC,oBAAoB;;;;sCACJ,8BAA8B;;;;2BACzC,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;;;;;;;;;;IAUT,sBAAsB;YAAtB,sBAAsB;;AAEf,WAFP,sBAAsB,CAEd,MAAM,EAAE,OAAO,EAAC;0BAFxB,sBAAsB;;AAGxB,2BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAI,CAAC,WAAW,EAAE,CAAC;;AAEnB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;GACjD;;;;;;;;;AAVG,wBAAsB,WAkB1B,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,sBAAM,QAAQ,KAAA,MAAE,CAAC;;AAE1B,QAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AAClC,eAAS,EAAE,yBAAyB;AACpC,eAAS,EAAE,GAAG;KACf,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9B,WAAO,EAAE,CAAC;GACX;;;;;;;;;AA7BG,wBAAsB,WAqC1B,aAAa,GAAA,yBAAG;AACd,kCAA4B,sBAAM,aAAa,KAAA,MAAE,CAAG;GACrD;;;;;;;;;AAvCG,wBAAsB,WA+C1B,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,GAAG,4BAAS,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AACnC,QAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;AAEjC,QAAI,KAAK,EAAE;AACT,WAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAI,CAAC,QAAQ,CACX,wCAAyB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,EAAC,CAAC,CACnE,CAAC;OACH;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AA5DG,wBAAsB,WAmE1B,oBAAoB,GAAA,gCAAG;;AAErB,QAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;GACvE;;;;;;;;AAtEG,wBAAsB,WA6E1B,WAAW,GAAA,uBAAG;;AAEZ,QAAI,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC;AAC/C,QAAI,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;;;AAGjC,QAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACvB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAG,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE;AAC1B,eAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACnB,cAAM;OACP;KACF;AACD,QAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;GACrC;;;;;;;;;AA3FG,wBAAsB,WAmG1B,aAAa,GAAA,yBAAG;AACd,WAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,AAAC,CAAC;GACxH;;;;;;;;;AArGG,wBAAsB,WA6G1B,qBAAqB,GAAA,iCAAG;AACtB,WAAO,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IACrB,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAC3C,IAAI,CAAC,aAAa,EAAE,IACpB,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CACnC;GACF;;;;;;;;AAnHG,wBAAsB,WA0H1B,gBAAgB,GAAA,4BAAG;AACjB,QAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,UAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;KAChC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;GACF;;;;;;;;AAhIG,wBAAsB,WAuI1B,WAAW,GAAA,uBAAG;AACZ,QAAI,IAAI,CAAC,qBAAqB,EAAE,EAAE;AAChC,UAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC;KAC9D;GACF;;SA3IG,sBAAsB;;;AA+I5B,sBAAsB,CAAC,SAAS,CAAC,YAAY,GAAG,eAAe,CAAC;;AAEhE,yBAAU,iBAAiB,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;qBAC/D,sBAAsB;;;;;;;;;;;;;;;;;8BChKhB,yBAAyB;;;;2BACxB,oBAAoB;;;;;;;;;;;;;IAUpC,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;AAGtB,QAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAI,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;;;AAGjC,WAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AACzB,WAAO,CAAC,UAAU,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;AACjC,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEjB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAC5C;;;;;;;;AAfG,sBAAoB,WAsBxB,WAAW,GAAA,uBAAG;AACZ,wBAAM,WAAW,KAAA,MAAE,CAAC;AACpB,QAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GACvC;;;;;;;;AAzBG,sBAAoB,WAgCxB,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;GAC3D;;SAlCG,oBAAoB;;;AAsC1B,oBAAoB,CAAC,SAAS,CAAC,aAAa,GAAG,QAAQ,CAAC;;AAExD,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;;;2BCpDb,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;;;;;;;;;;IAUT,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAC1C;;;;;;;;;AALG,iBAAe,WAanB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mBAAmB;AAC9B,eAAS,4CAA0C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,uBAAoB;KAC/F,CAAC,CAAC;GACJ;;;;;;;;AAlBG,iBAAe,WAyBnB,MAAM,GAAA,kBAAG;AACP,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC7C,QAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;;;AAGjC,QAAI,UAAU,GAAG,SAAb,UAAU,CAAa,IAAI,EAAE,GAAG,EAAC;AACnC,UAAI,OAAO,GAAG,AAAC,IAAI,GAAG,GAAG,IAAK,CAAC,CAAC;AAChC,aAAO,AAAC,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA,GAAI,GAAG,GAAI,GAAG,CAAC;KACnD,CAAC;;;AAGF,QAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;;;AAGzD,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,UAAI,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC9B,UAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1B,UAAI,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAEvB,UAAI,CAAC,IAAI,EAAE;AACT,YAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;OAC7C;;;AAGD,UAAI,CAAC,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACjD,UAAI,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,GAAG,KAAK,EAAE,WAAW,CAAC,CAAC;KACzD;;;AAGD,SAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtD,UAAI,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC;KACrC;GACF;;SA3DG,eAAe;;;AA+DrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;2BC3ER,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;yBACK,mBAAmB;;IAA3B,EAAE;;iCACS,4BAA4B;;;;4CAC9B,iCAAiC;;;;;;;;;;;;;;IAWhD,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAE,OAAO,EAAE;;;0BAFzB,gBAAgB;;AAGlB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAElB,UAAM,CAAC,EAAE,CAAC,OAAO,EAAE,YAAM;AACvB,YAAK,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,0CAAS,EAAE,CAAC,IAAI,QAAO,MAAK,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;KACjH,CAAC,CAAC;GACJ;;;;;;;;;AAVG,kBAAgB,WAkBpB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;GACJ;;AAtBG,kBAAgB,WAwBpB,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AACvD,QAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;;AAE3E,QAAI,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;GAChC;;AA9BG,kBAAgB,WAgCpB,MAAM,GAAA,gBAAC,OAAO,EAAE,QAAQ,EAAE;AACxB,QAAI,IAAI,GAAG,+BAAW,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;;AAExD,QAAI,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;AACvC,QAAI,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;GACnD;;AArCG,kBAAgB,WAuCpB,iBAAiB,GAAA,2BAAC,KAAK,EAAE;AACvB,WAAO,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;GAC9D;;SAzCG,gBAAgB;;;AA4CtB,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;2BC5DT,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;iCACS,4BAA4B;;;;;;;;;;;;;IAU7C,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,cAAc,EAAE,CAAC;AACtB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACnD,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;GAClD;;;;;;;;;AAPG,iBAAe,WAenB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kCAAkC;AAC7C,eAAS,4CAA0C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,uBAAoB;KACjG,CAAC,CAAC;GACJ;;AApBG,iBAAe,WAsBnB,cAAc,GAAA,0BAAG;AACf,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,mBAAmB,EAAE,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;GACvF;;SAzBG,eAAe;;;AA6BrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;2BC1CR,oBAAoB;;;;yBACtB,eAAe;;;;kCACN,yBAAyB;;;;;;;;;;;;;;IAWhD,eAAe;YAAf,eAAe;;WAAf,eAAe;0BAAf,eAAe;;;;;;;;;;;;AAAf,iBAAe,WAQnB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kCAAkC;KAC9C,CAAC,CAAC;GACJ;;SAZG,eAAe;;;AAerB,eAAe,CAAC,SAAS,CAAC,QAAQ,GAAG;AACnC,UAAQ,EAAE,CACR,SAAS,CACV;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;8BCnCX,wBAAwB;;;;2BACrB,oBAAoB;;;;iCACd,wBAAwB;;;;iCACxB,wBAAwB;;;;yBAChC,mBAAmB;;IAA3B,EAAE;;iCACS,4BAA4B;;;;4BAChC,eAAe;;;;;;;;;;;;;IAU5B,OAAO;YAAP,OAAO;;AAEA,WAFP,OAAO,CAEC,MAAM,EAAE,OAAO,EAAC;0BAFxB,OAAO;;AAGT,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AACzD,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;GACxD;;;;;;;;;AANG,SAAO,WAcX,QAAQ,GAAA,oBAAG;AACT,WAAO,kBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,qBAAqB;KACjC,EAAE;AACD,kBAAY,EAAE,oBAAoB;KACnC,CAAC,CAAC;GACJ;;;;;;;;AApBG,SAAO,WA2BX,oBAAoB,GAAA,gCAAG;;AAEnB,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,EAAE,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;GACtF;;;;;;;;;AAhCG,SAAO,WAwCX,UAAU,GAAA,sBAAG;AACX,QAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACnE,WAAO,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;GACnC;;;;;;;;AA3CG,SAAO,WAkDX,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,sBAAM,eAAe,KAAA,OAAC,KAAK,CAAC,CAAC;;AAE7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;AAE7B,QAAI,CAAC,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAC9C,QAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;GACtB;;;;;;;;AAzDG,SAAO,WAgEX,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;;;AAGtE,QAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;AAAE,aAAO,GAAG,OAAO,GAAG,GAAG,CAAC;KAAE;;;AAGrE,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;GACnC;;;;;;;;AAxEG,SAAO,WA+EX,aAAa,GAAA,uBAAC,KAAK,EAAE;AACnB,sBAAM,aAAa,KAAA,OAAC,KAAK,CAAC,CAAC;;AAE3B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAI,IAAI,CAAC,eAAe,EAAE;AACxB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB;GACF;;;;;;;;AAtFG,SAAO,WA6FX,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;GAC1D;;;;;;;;AA/FG,SAAO,WAsGX,QAAQ,GAAA,oBAAG;AACT,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;GAC1D;;SAxGG,OAAO;;;AA4Gb,OAAO,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC3B,UAAQ,EAAE,CACR,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,CAClB;AACD,WAAS,EAAE,iBAAiB;CAC7B,CAAC;;AAEF,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC;;AAE7C,yBAAU,iBAAiB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;qBACjC,OAAO;;;;;;;;;;;;;;;;;wBCxIH,aAAa;;;;2BACV,oBAAoB;;;;;;;;;;;IAQpC,mBAAmB;YAAnB,mBAAmB;;WAAnB,mBAAmB;0BAAnB,mBAAmB;;;;;;;;;;;;AAAnB,qBAAmB,WAQvB,aAAa,GAAA,yBAAG;AACd,0CAAoC,kBAAM,aAAa,KAAA,MAAE,CAAG;GAC7D;;;;;;;;;AAVG,qBAAmB,WAkBvB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,kBAAM,QAAQ,KAAA,OAAC;AACtB,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;;;;AAIH,MAAE,CAAC,SAAS,GAAG,QAAQ,CAAC;AACxB,WAAO,EAAE,CAAC;GACX;;SA3BG,mBAAmB;;;AA8BzB,yBAAU,iBAAiB,CAAC,qBAAqB,EAAE,mBAAmB,CAAC,CAAC;qBACzD,mBAAmB;;;;;;;;;;;;;;;;;2BCxCZ,oBAAoB;;;;;;;;;;;;IASpC,MAAM;YAAN,MAAM;;WAAN,MAAM;0BAAN,MAAM;;;;;;;;;;;;AAAN,QAAM,WAQV,aAAa,GAAA,yBAAG;AACd,2BAAqB,qBAAM,aAAa,KAAA,MAAE,CAAG;GAC9C;;;;;;;;;AAVG,QAAM,WAkBV,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;GACJ;;SAtBG,MAAM;;;AAyBZ,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;;qBAE/B,MAAM;;;;;;;;;;;;;;;;;mCCpCS,2BAA2B;;;;2BACnC,oBAAoB;;;;;;;;;;;;;IAUnC,uBAAuB;YAAvB,uBAAuB;;AAEjB,WAFN,uBAAuB,CAEhB,MAAM,EAAE,OAAO,EAAE;0BAFxB,uBAAuB;;AAG1B,WAAO,CAAC,OAAO,CAAC,GAAG;AACjB,YAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,cAAQ,EAAE,MAAM;AAChB,aAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,WAAW;AACtC,eAAS,EAAE,KAAK;AAChB,UAAI,EAAE,UAAU;KACjB,CAAC;;AAEF,kCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;GACzC;;;;;;;;AAbI,yBAAuB,WAoB5B,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,CAAC;GACpD;;SAtBI,uBAAuB;;;AA0B9B,yBAAU,iBAAiB,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;qBACjE,uBAAuB;;;;;;;;;;;;;;;;;iCCtCV,wBAAwB;;;;2BAC9B,oBAAoB;;;;yCACN,iCAAiC;;;;;;;;;;;;;;IAW/D,cAAc;YAAd,cAAc;;AAEP,WAFP,cAAc,CAEN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,cAAc;;AAGhB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,eAAe,CAAC,CAAC;GACrD;;;;;;;;;AALG,gBAAc,WAalB,aAAa,GAAA,yBAAG;AACd,oCAA8B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACvD;;;;;;;;AAfG,gBAAc,WAsBlB,MAAM,GAAA,kBAAG;AACP,QAAI,SAAS,GAAG,CAAC,CAAC;AAClB,+BAAM,MAAM,KAAA,MAAE,CAAC;;;AAGf,QAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AAC1E,eAAS,GAAG,CAAC,CAAC;KACf;;AAED,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE;AAC/C,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AApCG,gBAAc,WA4ClB,WAAW,GAAA,uBAAG;AACZ,QAAI,KAAK,GAAG,EAAE,CAAC;;AAEf,QAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA,AAAC,EAAE;AAC7E,WAAK,CAAC,IAAI,CAAC,2CAA4B,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAC/E;;AAED,WAAO,2BAAM,WAAW,KAAA,OAAC,KAAK,CAAC,CAAC;GACjC;;SApDG,cAAc;;;AAwDpB,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AAC5C,cAAc,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC;;AAEnD,yBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;;;;;;;iCCzED,wBAAwB;;;;2BAC9B,oBAAoB;;;;mCACZ,2BAA2B;;;;uCACvB,+BAA+B;;;;0BAChD,oBAAoB;;;;0BAChB,oBAAoB;;IAA7B,GAAG;;yBACK,mBAAmB;;IAA3B,EAAE;;kCACU,8BAA8B;;;;4BACnC,eAAe;;;;;;;;;;;;;;;;IAa5B,cAAc;YAAd,cAAc;;AAEP,WAFP,cAAc,CAEN,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,cAAc;;AAGhB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,eAAe,CAAC,CAAC;GACrD;;;;;;;;;AALG,gBAAc,WAalB,aAAa,GAAA,yBAAG;AACd,oCAA8B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACvD;;;;;;;;;AAfG,gBAAc,WAuBlB,WAAW,GAAA,uBAAG;AACZ,QAAI,KAAK,GAAG,EAAE,CAAC;;AAEf,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,MAAM,EAAE;AACX,aAAO,KAAK,CAAC;KACd;;AAED,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,aAAK,CAAC,IAAI,CAAC,qCAAsB,IAAI,CAAC,OAAO,EAAE;AAC7C,iBAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAC;OACL;KACF;;AAED,WAAO,KAAK,CAAC;GACd;;;;;;;;;AA1CG,gBAAc,WAkDlB,UAAU,GAAA,sBAAG;AACX,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;AAC7C,QAAI,aAAa,YAAA,CAAC;AAClB,QAAI,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;;AAE5B,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,YAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACf,eAAK,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;;;AAGzB,oCAAO,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACzC,gBAAI,CAAC,UAAU,EAAE,CAAC;WACnB,CAAC,EAAE,GAAG,CAAC,CAAC;;SAEV,MAAM;AACL,yBAAa,GAAG,KAAK,CAAC;AACtB,kBAAM;WACP;OACF;KACF;;AAED,QAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AACrB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,4BAAS,IAAI,CAAC,OAAO,CAAC,CAAC;AAC9B,UAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC9C,iBAAS,EAAE,gBAAgB;AAC3B,iBAAS,EAAE,gCAAY,IAAI,CAAC,KAAK,CAAC;AAClC,gBAAQ,EAAE,CAAC,CAAC;OACb,CAAC,CAAC,CAAC;KACL;;AAED,QAAI,aAAa,EAAE;AACjB,UAAI,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC;UAAE,GAAG,YAAA,CAAC;;AAEtC,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,WAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEd,YAAI,EAAE,GAAG,yCAA0B,IAAI,CAAC,OAAO,EAAE;AAC/C,iBAAO,EAAE,aAAa;AACtB,eAAK,EAAE,GAAG;SACX,CAAC,CAAC;;AAEH,aAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAEf,YAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;OACnB;AACD,UAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrB;;AAED,QAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;;AAED,WAAO,IAAI,CAAC;GACb;;SA1GG,cAAc;;;AA8GpB,cAAc,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,CAAC;AAC5C,cAAc,CAAC,SAAS,CAAC,YAAY,GAAG,UAAU,CAAC;;AAEnD,yBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;;;;;;;8BCvIR,yBAAyB;;;;2BACxB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;;;;;;;;IAUR,qBAAqB;YAArB,qBAAqB;;AAEd,WAFP,qBAAqB,CAEb,MAAM,EAAE,OAAO,EAAC;0BAFxB,qBAAqB;;AAGvB,QAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAI,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;AACzB,QAAI,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;;;AAGvC,WAAO,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;AAC5B,WAAO,CAAC,UAAU,CAAC,GAAI,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,AAAC,CAAC;AACxF,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACf,SAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;GACjE;;;;;;;;AAfG,uBAAqB,WAsBzB,WAAW,GAAA,uBAAG;AACZ,wBAAM,WAAW,KAAA,MAAE,CAAC;AACpB,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;GACjC;;;;;;;;AA1BG,uBAAqB,WAiCzB,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,QAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;;;AAG7C,QAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,WAAW,IAAI,WAAW,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;GAChF;;SAvCG,qBAAqB;;;AA2C3B,yBAAU,iBAAiB,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;qBAC7D,qBAAqB;;;;;;;;;;;;;;;;;mCCxDN,2BAA2B;;;;2BACnC,oBAAoB;;;;;;;;;;;;;IAUpC,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;;;AAKtB,WAAO,CAAC,OAAO,CAAC,GAAG;AACjB,YAAM,EAAE,OAAO,CAAC,MAAM,CAAC;AACvB,cAAQ,EAAE,MAAM;AAChB,aAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM;AACjC,eAAS,EAAE,KAAK;AAChB,YAAM,EAAE,UAAU;KACnB,CAAC;;AAEF,kCAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;GACrB;;;;;;;;;AAfG,sBAAoB,WAuBxB,kBAAkB,GAAA,4BAAC,KAAK,EAAC;AACvB,QAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;AACxC,QAAI,QAAQ,GAAG,IAAI,CAAC;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC7C,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACvE,gBAAQ,GAAG,KAAK,CAAC;AACjB,cAAM;OACP;KACF;;AAED,QAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;GACzB;;SApCG,oBAAoB;;;AAwC1B,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;iCCpDP,wBAAwB;;;;2BAC9B,oBAAoB;;;;;;;;;;;;;;IAWpC,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,eAAe;;AAGjB,gCAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,YAAY,EAAC,gBAAgB,CAAC,CAAC;GACtD;;;;;;;;;AALG,iBAAe,WAanB,aAAa,GAAA,yBAAG;AACd,qCAA+B,2BAAM,aAAa,KAAA,MAAE,CAAG;GACxD;;SAfG,eAAe;;;AAmBrB,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC;AAC9C,eAAe,CAAC,SAAS,CAAC,YAAY,GAAG,WAAW,CAAC;;AAErD,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;gCCnCP,2BAA2B;;;;2BAC5B,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;mCACgB,2BAA2B;;;;sCACxB,+BAA+B;;;;;;;;;;;;;IAU1D,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,2BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE;AAC1B,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;;AAED,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;AAED,QAAI,aAAa,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,UAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACtD,UAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;;AAEnD,QAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AACpC,YAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;AACzD,YAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;KACvD,CAAC,CAAC;GACJ;;;;AAvBG,iBAAe,WA0BnB,WAAW,GAAA,uBAAW;QAAV,KAAK,yDAAC,EAAE;;;AAElB,SAAK,CAAC,IAAI,CAAC,wCAAyB,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;;AAE3E,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,MAAM,EAAE;AACX,aAAO,KAAK,CAAC;KACd;;AAED,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;AAGtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AAChC,aAAK,CAAC,IAAI,CAAC,qCAAsB,IAAI,CAAC,OAAO,EAAE;AAC7C,iBAAO,EAAE,KAAK;SACf,CAAC,CAAC,CAAC;OACL;KACF;;AAED,WAAO,KAAK,CAAC;GACd;;SAhDG,eAAe;;;AAoDrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;8BCnET,yBAAyB;;;;2BACxB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;4BACK,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;IAUhC,iBAAiB;YAAjB,iBAAiB;;AAEV,WAFP,iBAAiB,CAET,MAAM,EAAE,OAAO,EAAC;;;0BAFxB,iBAAiB;;AAGnB,QAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAI,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;;;AAGjC,WAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC;AACpE,WAAO,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACtE,yBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;AAEnB,QAAI,MAAM,EAAE;;AACV,YAAI,aAAa,GAAG,EAAE,CAAC,IAAI,QAAO,MAAK,kBAAkB,CAAC,CAAC;;AAE3D,cAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AACjD,cAAK,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,gBAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrD,CAAC,CAAC;;KACJ;;;;;;;;AAQD,QAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE;;AAC3C,YAAI,KAAK,YAAA,CAAC;;AAEV,cAAK,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,YAAW;AACnC,cAAI,OAAO,0BAAO,KAAK,KAAK,QAAQ,EAAE;;AAEpC,gBAAI;AACF,mBAAK,GAAG,IAAI,0BAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;aACpC,CAAC,OAAM,GAAG,EAAC,EAAE;WACf;;AAED,cAAI,CAAC,KAAK,EAAE;AACV,iBAAK,GAAG,4BAAS,WAAW,CAAC,OAAO,CAAC,CAAC;AACtC,iBAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;WACvC;;AAED,gBAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SAC7B,CAAC,CAAC;;KACJ;GACF;;;;;;;;AA/CG,mBAAiB,WAsDrB,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,QAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,wBAAM,WAAW,KAAA,OAAC,KAAK,CAAC,CAAC;;AAEzB,QAAI,CAAC,MAAM,EAAE,OAAO;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;AAEtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;AAC1B,iBAAS;OACV;;AAED,UAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;AACxB,aAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;OAC3B,MAAM;AACL,aAAK,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;OAC5B;KACF;GACF;;;;;;;;AA3EG,mBAAiB,WAkFrB,kBAAkB,GAAA,4BAAC,KAAK,EAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC;GACjD;;SApFG,iBAAiB;;;AAwFvB,yBAAU,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;qBACrD,iBAAiB;;;;;;;;;;;;;;;;;;;2BCvGV,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,kBAAkB;YAAlB,kBAAkB;;AAEX,WAFP,kBAAkB,CAEV,MAAM,EAAE,OAAO,EAAC;0BAFxB,kBAAkB;;AAGpB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACnD;;;;;;;;;AANG,oBAAkB,WActB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,+CAA+C;KAC3D,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,0BAA0B;;AAErC,eAAS,EAAE,qDAAqD,GAAG,MAAM;KAC1E,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AA9BG,oBAAkB,WAqCtB,aAAa,GAAA,yBAAG;;AAEd,QAAI,IAAI,GAAG,AAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AACzG,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAClD,QAAI,aAAa,GAAG,+BAAW,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC9D,QAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,gBAAW,aAAa,AAAE,CAAC;GACvG;;SA3CG,kBAAkB;;;AA+CxB,yBAAU,iBAAiB,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;qBACvD,kBAAkB;;;;;;;;;;;;;;;;;;;2BC5DX,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,eAAe;YAAf,eAAe;;AAER,WAFP,eAAe,CAEP,MAAM,EAAE,OAAO,EAAC;0BAFxB,eAAe;;AAGjB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;;;;;AAOvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACvD;;;;;;;;;AAZG,iBAAe,WAoBnB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,2CAA2C;KACvD,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,sBAAsB;;AAEjC,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,iBAAc;KAC1F,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AApCG,iBAAe,WA2CnB,aAAa,GAAA,yBAAG;AACd,QAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;AACvC,QAAI,QAAQ,EAAE;AACZ,UAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACnD,UAAI,aAAa,GAAG,+BAAW,QAAQ,CAAC,CAAC;AACzC,UAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,gBAAW,aAAa,AAAE,CAAC;KACvG;GACF;;SAlDG,eAAe;;;AAsDrB,yBAAU,iBAAiB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;qBACjD,eAAe;;;;;;;;;;;;;;;;;;;2BCnER,oBAAoB;;;;0BACrB,oBAAoB;;IAA7B,GAAG;;iCACQ,4BAA4B;;;;;;;;;;;;;IAU7C,oBAAoB;YAApB,oBAAoB;;AAEb,WAFP,oBAAoB,CAEZ,MAAM,EAAE,OAAO,EAAC;0BAFxB,oBAAoB;;AAGtB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACnD;;;;;;;;;AANG,sBAAoB,WAcxB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,iDAAiD;KAC7D,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AACpC,eAAS,EAAE,4BAA4B;;AAEvC,eAAS,sCAAoC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,kBAAe;KAC5F,EAAE;;AAED,iBAAW,EAAE,KAAK;KACnB,CAAC,CAAC;;AAEH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,WAAO,EAAE,CAAC;GACX;;;;;;;;AA9BG,sBAAoB,WAqCxB,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;AAC3B,UAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;AACtD,UAAM,aAAa,GAAG,+BAAW,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;AAC/D,UAAI,CAAC,UAAU,CAAC,SAAS,uCAAqC,aAAa,iBAAY,aAAa,AAAE,CAAC;KACxG;;;;;GAKF;;SA/CG,oBAAoB;;;AAmD1B,yBAAU,iBAAiB,CAAC,sBAAsB,EAAE,oBAAoB,CAAC,CAAC;qBAC3D,oBAAoB;;;;;;;;;;;;;;;;;2BChEb,oBAAoB;;;;;;;;;;;;;;IAWpC,WAAW;YAAX,WAAW;;WAAX,WAAW;0BAAX,WAAW;;;;;;;;;;;;AAAX,aAAW,WAQf,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,mCAAmC;AAC9C,eAAS,EAAE,2BAA2B;KACvC,CAAC,CAAC;GACJ;;SAbG,WAAW;;;AAiBjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;8BC7BP,wBAAwB;;;;2BACrB,oBAAoB;;;;yBACtB,mBAAmB;;IAA3B,EAAE;;;;6BAGU,mBAAmB;;;;;;;;;;;;;IAUrC,SAAS;YAAT,SAAS;;AAEF,WAFP,SAAS,CAED,MAAM,EAAE,OAAO,EAAC;0BAFxB,SAAS;;AAGX,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC3D,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;GACxD;;;;;;;;;AANG,WAAS,WAcb,QAAQ,GAAA,oBAAG;AACT,WAAO,kBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,+BAA+B;KAC3C,EAAE;AACD,kBAAY,EAAE,cAAc;KAC7B,CAAC,CAAC;GACJ;;;;;;;;AApBG,WAAS,WA2Bb,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACxB,UAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KAC3B;;AAED,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;GACpD;;;;;;;;;AAjCG,WAAS,WAyCb,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE;AACxB,aAAO,CAAC,CAAC;KACV,MAAM;AACL,aAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;KAC9B;GACF;;;;;;;;AA/CG,WAAS,WAsDb,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;GAClD;;;;;;;;AAxDG,WAAS,WA+Db,QAAQ,GAAA,oBAAG;AACT,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;GAClD;;;;;;;;AAjEG,WAAS,WAwEb,oBAAoB,GAAA,gCAAG;;AAErB,QAAI,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACtD,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC/C,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;GACvD;;SA7EG,SAAS;;;AAiFf,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG;AAC7B,UAAQ,EAAE,CACR,aAAa,CACd;AACD,WAAS,EAAE,aAAa;CACzB,CAAC;;AAEF,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,cAAc,CAAC;;AAEjD,yBAAU,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;qBACrC,SAAS;;;;;;;;;;;;;;;;;2BC1GF,oBAAoB;;;;;;2BAGpB,iBAAiB;;;;;;;;;;;;;IAUjC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,MAAM,EAAE,OAAO,EAAC;0BAFxB,aAAa;;AAGf,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,UAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;KAC7B;AACD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAU;AACrC,UAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnD,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF,CAAC,CAAC;GACJ;;;;;;;;;AAhBG,eAAa,WAwBjB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;GACJ;;SA5BG,aAAa;;;AAgCnB,aAAa,CAAC,SAAS,CAAC,QAAQ,GAAG;AACjC,UAAQ,EAAE,CACR,WAAW,CACZ;CACF,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;qBAC7C,aAAa;;;;;;;;;;;;;;;;;2BCpDN,oBAAoB;;;;;;;;;;;;;IAUpC,WAAW;YAAX,WAAW;;WAAX,WAAW;0BAAX,WAAW;;;;;;;;;;;;AAAX,aAAW,WAQf,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,kBAAkB;AAC7B,eAAS,EAAE,wCAAwC;KACpD,CAAC,CAAC;GACJ;;SAbG,WAAW;;;AAiBjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;wBC5BP,cAAc;;;;2BACX,iBAAiB;;;;0BACtB,iBAAiB;;;;gCACX,wBAAwB;;;;4BACxB,kBAAkB;;;;wCACnB,gCAAgC;;;;;;;;;;;;;IAUhD,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAa;QAAX,OAAO,yDAAC,EAAE;;0BAF1B,gBAAgB;;;AAIlB,QAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE;AAChC,aAAO,CAAC,MAAM,GAAG,IAAI,CAAC;KACvB;;;AAGD,QAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;;;AAGlC,UAAI,OAAO,CAAC,MAAM,EAAE;AAClB,eAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;OAC1B,MAAM;AACL,eAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;OACzB;KACF;;;;AAID,WAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;AAC5C,WAAO,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;;AAEhD,2BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACnD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;;;AAGhD,aAAS,gBAAgB,GAAG;AAC1B,UAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,KAAK,EAAE;AACnE,YAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;OAC7B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;OAChC;KACF;;AAED,oBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC;;AAE/C,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,YAAU;AAC3D,UAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;KACpC,CAAC,CAAC;;AAEH,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAU;AAC5D,UAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;KACvC,CAAC,CAAC;GACJ;;;;;;;;;AAjDG,kBAAgB,WAyDpB,aAAa,GAAA,yBAAG;AACd,QAAI,gBAAgB,GAAG,EAAE,CAAC;AAC1B,QAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC5B,sBAAgB,GAAG,iCAAiC,CAAC;KACtD,MAAM;AACL,sBAAgB,GAAG,mCAAmC,CAAC;KACxD;;AAED,uCAAiC,sBAAM,aAAa,KAAA,MAAE,SAAI,gBAAgB,CAAG;GAC9E;;;;;;;;;AAlEG,kBAAgB,WA0EpB,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,GAAG,4BAAS,IAAI,CAAC,OAAO,EAAE;AAChC,mBAAa,EAAE,KAAK;KACrB,CAAC,CAAC;;AAEH,QAAI,EAAE,GAAG,0CAAc,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;;AAE9D,QAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;AAElB,QAAI,CAAC,SAAS,GAAG,EAAE,CAAC;AACpB,WAAO,IAAI,CAAC;GACb;;;;;;;;AArFG,kBAAgB,WA4FpB,WAAW,GAAA,uBAAG;AACZ,8BAAW,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5C,0BAAM,WAAW,KAAA,MAAE,CAAC;GACrB;;SA/FG,gBAAgB;;;AAmGtB,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,0BAAW,SAAS,CAAC,MAAM,CAAC;AACtE,gBAAgB,CAAC,SAAS,CAAC,YAAY,GAAG,MAAM,CAAC;;AAEjD,yBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;;;;;;yBCtHT,aAAa;;;;0BACb,gBAAgB;;IAAzB,GAAG;;;;;;;;;;;IAUV,YAAY;YAAZ,YAAY;;AAEL,WAFP,YAAY,CAEJ,MAAM,EAAE,OAAO,EAAE;0BAFzB,YAAY;;AAGd,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GACvC;;;;;;;;;AAPG,cAAY,WAehB,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,eAAS,EAAE,mBAAmB;KAC/B,CAAC,CAAC;;AAEH,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtC,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAEhC,WAAO,EAAE,CAAC;GACX;;;;;;;;AAxBG,cAAY,WA+BhB,MAAM,GAAA,kBAAG;AACP,QAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;AACzB,UAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC;KAC1E;GACF;;SAnCG,YAAY;;;AAsClB,uBAAU,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;qBAC3C,YAAY;;;;;;;;;;;;;6BClDH,mBAAmB;;IAA/B,MAAM;;AAElB,IAAI,WAAW,GAAG,SAAd,WAAW,GAAc,EAAE,CAAC;;AAEhC,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,EAAE,CAAC;;AAE1C,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;;;AAG5C,MAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;AAChC,MAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC;AAC3C,QAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1B,MAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC;CAC7B,CAAC;AACF,WAAW,CAAC,SAAS,CAAC,gBAAgB,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;;AAElE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;AAC7C,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;CAC5B,CAAC;AACF,WAAW,CAAC,SAAS,CAAC,mBAAmB,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;;AAEtE,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,UAAS,IAAI,EAAE,EAAE,EAAE;AAC7C,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;CAC5B,CAAC;;AAEF,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE;AAC9C,MAAI,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;;AAE/B,MAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,SAAK,GAAG;AACN,UAAI,EAAE,IAAI;KACX,CAAC;GACH;AACD,OAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAE/B,MAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE;AAClD,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1B;;AAED,QAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAC7B,CAAC;;AAEF,WAAW,CAAC,SAAS,CAAC,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC;;qBAErD,WAAW;;;;;;;;;;wBC/CV,aAAa;;;;;;;;;;;AAS7B,IAAM,SAAS,GAAG,SAAZ,SAAS,CAAa,QAAQ,EAAE,UAAU,EAAE;AAChD,MAAI,OAAO,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,IAAI,EAAE;AAC3D,UAAM,IAAI,SAAS,CAAC,0DAA0D,GAAG,OAAO,UAAU,CAAC,CAAC;GACrG;;AAED,UAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS,EAAE;AACrE,eAAW,EAAE;AACX,WAAK,EAAE,QAAQ;AACf,gBAAU,EAAE,KAAK;AACjB,cAAQ,EAAE,IAAI;AACd,kBAAY,EAAE,IAAI;KACnB;GACF,CAAC,CAAC;;AAEH,MAAI,UAAU,EAAE;;AAEd,YAAQ,CAAC,MAAM,GAAG,UAAU,CAAC;GAC9B;CACF,CAAC;;;;;;;;;;;;;;;;;;;AAmBF,IAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,UAAU,EAAsB;MAApB,eAAe,yDAAC,EAAE;;AACtD,MAAI,QAAQ,GAAG,oBAAW;AACxB,cAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GACnC,CAAC;AACF,MAAI,OAAO,GAAG,EAAE,CAAC;;AAEjB,MAAI,OAAO,eAAe,KAAK,QAAQ,EAAE;AACvC,QAAI,OAAO,eAAe,CAAC,IAAI,KAAK,UAAU,EAAE;AAC9C,4BAAI,IAAI,CAAC,+EAA+E,CAAC,CAAC;AAC1F,qBAAe,CAAC,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;KACpD;AACD,QAAI,eAAe,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;AAChE,cAAQ,GAAG,eAAe,CAAC,WAAW,CAAC;KACxC;AACD,WAAO,GAAG,eAAe,CAAC;GAC3B,MAAM,IAAI,OAAO,eAAe,KAAK,UAAU,EAAE;AAChD,YAAQ,GAAG,eAAe,CAAC;GAC5B;;AAED,WAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;;;AAGhC,OAAK,IAAI,IAAI,IAAI,OAAO,EAAE;AACxB,QAAI,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;AAChC,cAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1C;GACF;;AAED,SAAO,QAAQ,CAAC;CACjB,CAAC;;qBAEa,QAAQ;;;;;;;;;;;;;8BC1EF,iBAAiB;;;;;;;;;AAOtC,IAAI,aAAa,GAAG,EAAE,CAAC;;;;AAIvB,IAAM,MAAM,GAAG;;AAEb,CACE,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,CAClB;;AAED,CACE,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,CACxB;;AAED,CACE,yBAAyB,EACzB,wBAAwB,EACxB,gCAAgC,EAChC,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,CACxB;;AAED,CACE,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,CACrB;;AAED,CACE,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,CACpB,CACF,CAAC;;AAEF,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,UAAU,YAAA,CAAC;;;AAGf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;AAEtC,MAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAAY,EAAE;AAC5B,cAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACvB,UAAM;GACP;CACF;;;AAGD,IAAI,UAAU,EAAE;AACd,OAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,iBAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;GAC3C;CACF;;qBAEc,aAAa;;;;;;;;;;;;;;;;;yBC9EN,aAAa;;;;;;;;;;;;;IAU7B,cAAc;YAAd,cAAc;;WAAd,cAAc;0BAAd,cAAc;;;;;;;;;;;AAAd,gBAAc,WAOlB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,qBAAqB;KACjC,CAAC,CAAC;GACJ;;SAXG,cAAc;;;AAcpB,uBAAU,iBAAiB,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;qBAC/C,cAAc;;;;;;;;;;;;;4BCzBV,eAAe;;;;;;;;;AAOlC,IAAI,UAAU,GAAG,SAAb,UAAU,CAAY,IAAI,EAAC;AAC7B,MAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC5B,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;GAClB,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AAEnC,QAAI,CAAC,OAAO,GAAG,IAAI,CAAC;GACrB,MAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;;AACnC,8BAAO,IAAI,EAAE,IAAI,CAAC,CAAC;GACpB;;AAED,MAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,QAAI,CAAC,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;GAC5D;CACF,CAAC;;;;;;;;AAQF,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC;;;;;;;;;AAS9B,UAAU,CAAC,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;;;;;;;;;;;;AAYlC,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;;AAEnC,UAAU,CAAC,UAAU,GAAG,CACtB,kBAAkB;AAClB,mBAAmB;AACnB,mBAAmB;AACnB,kBAAkB;AAClB,6BAA6B;AAC7B,qBAAqB;CACtB,CAAC;;AAEF,UAAU,CAAC,eAAe,GAAG;AAC3B,GAAC,EAAE,gCAAgC;AACnC,GAAC,EAAE,6DAA6D;AAChE,GAAC,EAAE,6HAA6H;AAChI,GAAC,EAAE,oHAAoH;AACvH,GAAC,EAAE,mEAAmE;CACvE,CAAC;;;;AAIF,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;AACpE,YAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;;AAEnD,YAAU,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;CAC9D;;qBAEc,UAAU;;;;;;;;;;;;;;;;;;;wBC5EN,cAAc;;;;2BACX,iBAAiB;;;;sBACtB,WAAW;;;;0BACP,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;kCACU,2BAA2B;;;;;;;;;;;;;IAU7C,UAAU;YAAV,UAAU;;AAEH,WAFP,UAAU,CAEF,MAAM,EAAa;QAAX,OAAO,yDAAC,EAAE;;0BAF1B,UAAU;;AAGZ,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;;AAEd,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACxC,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;AAC7C,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;GACzC;;;;;;;;AAVG,YAAU,WAiBd,MAAM,GAAA,kBAAG;AACP,QAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE7B,QAAI,IAAI,CAAC,IAAI,EAAE;AACb,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;;AAED,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;;;;;AAQpB,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;;AAE5B,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9C,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AAxCG,YAAU,WAgDd,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,GAAG,wBAAS,IAAI,CAAC,OAAO,CAAC,CAAC;;;AAGlC,QAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvB,UAAI,CAAC,SAAS,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC9C,iBAAS,EAAE,gBAAgB;AAC3B,iBAAS,EAAE,gCAAY,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3C,gBAAQ,EAAE,CAAC,CAAC;OACb,CAAC,CAAC,CAAC;KACL;;AAED,QAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;;AAEnC,QAAI,IAAI,CAAC,KAAK,EAAE;;AAEd,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,YAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;OAC7B;KACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AAtEG,YAAU,WA6Ed,WAAW,GAAA,uBAAE,EAAE;;;;;;;;;AA7EX,YAAU,WAqFd,QAAQ,GAAA,oBAAG;AACT,WAAO,kBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,IAAI,CAAC,aAAa,EAAE;KAChC,CAAC,CAAC;GACJ;;;;;;;;;AAzFG,YAAU,WAiGd,aAAa,GAAA,yBAAG;AACd,QAAI,eAAe,GAAG,iBAAiB,CAAC;;;AAGxC,QAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE;AACjC,qBAAe,IAAI,SAAS,CAAC;KAC9B,MAAM;AACL,qBAAe,IAAI,QAAQ,CAAC;KAC7B;;AAED,gCAA0B,eAAe,SAAI,kBAAM,aAAa,KAAA,MAAE,CAAG;GACtE;;;;;;;;;;;;;;AA5GG,YAAU,WAyHd,WAAW,GAAA,uBAAG,EAAE;;;;;;;;;AAzHZ,YAAU,WAiId,UAAU,GAAA,sBAAG,EAAE;;;;;;;;;;;;AAjIX,YAAU,WA4Id,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;AAC3C,UAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,UAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;KACjB,CAAC,CAAC,CAAC;AACJ,QAAI,IAAI,CAAC,cAAc,EAAC;AACtB,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,MAAM;AACL,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;GACF;;;;;;;;;AAtJG,YAAU,WA8Jd,cAAc,GAAA,wBAAC,KAAK,EAAE;;;AAGpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;AAC5C,UAAI,IAAI,CAAC,cAAc,EAAC;AACtB,YAAI,CAAC,aAAa,EAAE,CAAC;OACtB,MAAM;AACL,YAAI,CAAC,WAAW,EAAE,CAAC;OACpB;AACD,WAAK,CAAC,cAAc,EAAE,CAAC;;KAExB,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAC;AAC5B,YAAI,IAAI,CAAC,cAAc,EAAC;AACtB,cAAI,CAAC,aAAa,EAAE,CAAC;SACtB;AACD,aAAK,CAAC,cAAc,EAAE,CAAC;OACxB;GACF;;;;;;;;AA/KG,YAAU,WAsLd,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,cAAc,GAAG,IAAI,CAAC;AAC3B,QAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACxB,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;AAC5C,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACvC,UAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC;KAC5B;GACF;;;;;;;;AA7LG,YAAU,WAoMd,aAAa,GAAA,yBAAG;AACd,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;AAC1B,QAAI,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;GAC9C;;SAxMG,UAAU;;;AA2MhB,yBAAU,iBAAiB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;qBACvC,UAAU;;;;;;;;;;;;;;;;;wBC3NN,cAAc;;;;2BACX,iBAAiB;;;;4BACpB,eAAe;;;;;;;;;;;;;IAU5B,QAAQ;YAAR,QAAQ;;AAED,WAFP,QAAQ,CAEA,MAAM,EAAE,OAAO,EAAE;0BAFzB,QAAQ;;AAGV,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;GACpC;;;;;;;;;;;AALG,UAAQ,WAeZ,QAAQ,GAAA,kBAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;AAC3B,WAAO,kBAAM,QAAQ,KAAA,OAAC,IAAI,EAAE,0BAAO;AACjC,eAAS,EAAE,eAAe;AAC1B,eAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KACjD,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;GACnB;;;;;;;;AApBG,UAAQ,WA2BZ,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;GACrB;;;;;;;;;AA7BG,UAAQ,WAqCZ,QAAQ,GAAA,kBAAC,SAAQ,EAAE;AACjB,QAAI,SAAQ,EAAE;AACZ,UAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AAC9B,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAC,IAAI,CAAC,CAAC;KAC7C,MAAM;AACL,UAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACjC,UAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,EAAC,KAAK,CAAC,CAAC;KAC9C;GACF;;SA7CG,QAAQ;;;AAiDd,yBAAU,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;qBACnC,QAAQ;;;;;;;;;;;;;;;;;;;2BC9DD,iBAAiB;;;;0BAClB,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;6BACU,oBAAoB;;IAAhC,MAAM;;;;;;;;;;IASZ,IAAI;YAAJ,IAAI;;WAAJ,IAAI;0BAAJ,IAAI;;;;;;;;;;;;AAAJ,MAAI,WAQR,OAAO,GAAA,iBAAC,SAAS,EAAE;AACjB,QAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACzB,aAAS,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;AAC5C,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC,CAAC,CAAC;GACL;;;;;;;;;AAbG,MAAI,WAqBR,QAAQ,GAAA,oBAAG;AACT,QAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,IAAI,IAAI,CAAC;AACxD,QAAI,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,aAAa,EAAE;AAC5C,eAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;AACH,QAAI,EAAE,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC7B,YAAM,EAAE,IAAI,CAAC,UAAU;AACvB,eAAS,EAAE,UAAU;KACtB,CAAC,CAAC;AACH,MAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;;AAIhC,UAAM,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,UAAS,KAAK,EAAC;AACpC,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,WAAK,CAAC,wBAAwB,EAAE,CAAC;KAClC,CAAC,CAAC;;AAEH,WAAO,EAAE,CAAC;GACX;;SAxCG,IAAI;;;AA2CV,yBAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;qBAC3B,IAAI;;;;;;;;;;;;;;;;;;;;2BCvDG,gBAAgB;;;;8BAEjB,iBAAiB;;;;4BACnB,eAAe;;;;6BACV,mBAAmB;;IAA/B,MAAM;;0BACG,gBAAgB;;IAAzB,GAAG;;yBACK,eAAe;;IAAvB,EAAE;;2BACQ,iBAAiB;;IAA3B,IAAI;;8BACS,oBAAoB;;IAAjC,OAAO;;0BACH,gBAAgB;;;;kCACR,0BAA0B;;;;iCAClB,wBAAwB;;6BACxB,mBAAmB;;iCACvB,uBAAuB;;IAAvC,UAAU;;+BACI,qBAAqB;;;;4BACxB,kBAAkB;;;;kCACd,uBAAuB;;;;4BAC/B,eAAe;;;;mCACT,0BAA0B;;;;8CACpB,uCAAuC;;;;;;4BAG9C,kBAAkB;;;;6BAClB,mBAAmB;;;;wCACd,gCAAgC;;;;gCAClC,sBAAsB;;;;+BACvB,sBAAsB;;;;sCACzB,8BAA8B;;;;8BAC5B,oBAAoB;;;;yCACf,iCAAiC;;;;;;2BAG7C,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;IAqB7B,MAAM;YAAN,MAAM;;;;;;;;;;;;AAWC,WAXP,MAAM,CAWE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAC;;;0BAX5B,MAAM;;;AAaR,OAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,mBAAiB,IAAI,CAAC,OAAO,EAAE,AAAE,CAAC;;;;;;;AAOjD,WAAO,GAAG,0BAAO,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;;;;AAItD,WAAO,CAAC,YAAY,GAAG,KAAK,CAAC;;;AAG7B,WAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;;;;AAIzB,WAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;;;AAGpC,0BAAM,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;AAI5B,QAAI,CAAC,IAAI,CAAC,QAAQ,IACd,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,IACxB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE;AACnC,YAAM,IAAI,KAAK,CAAC,4CAA4C,GAC5C,+CAA+C,GAC/C,kCAAkC,CAAC,CAAC;KACrD;;AAED,QAAI,CAAC,GAAG,GAAG,GAAG,CAAC;;;AAGf,QAAI,CAAC,aAAa,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;;AAGrD,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;;AAGtC,QAAI,OAAO,CAAC,SAAS,EAAE;;;AAErB,YAAI,gBAAgB,GAAG,EAAE,CAAC;;AAE1B,cAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAE;AACnE,0BAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAChE,CAAC,CAAC;AACH,cAAK,UAAU,GAAG,gBAAgB,CAAC;;KACpC,MAAM;AACL,UAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;KACvD;;;AAGD,QAAI,CAAC,MAAM,GAAG,EAAE,CAAC;;;AAGjB,QAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;;;AAGpC,QAAI,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;;;;;AAKpC,OAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;;;;;;;;AAQrB,QAAI,CAAC,UAAU,GAAG,KAAK,CAAC;;AAExB,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;;;;;;AAM3B,QAAI,iBAAiB,GAAG,iCAAa,IAAI,CAAC,QAAQ,CAAC,CAAC;;;AAGpD,QAAI,OAAO,CAAC,OAAO,EAAE;;AACnB,YAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;;AAE9B,cAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;AACxD,cAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AACpC,gBAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;WAC3B,MAAM;AACL,oCAAI,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;WAC3C;SACF,QAAO,CAAC;;KACV;;AAED,QAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,iBAAiB,CAAC;;AAEhD,QAAI,CAAC,YAAY,EAAE,CAAC;;;AAGpB,QAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC;;;;AAIrD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;KACvC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;KACxC;;AAED,QAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,UAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC5B;;AAED,QAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE;AAC5B,UAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KAC9B;;;;;;;;;AASD,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;;;;AAIhC,QAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACtB,QAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAI,CAAC,sBAAsB,EAAE,CAAC;;AAE9B,QAAI,CAAC,EAAE,CAAC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;GAC/C;;;;;;;;;;;;;;;;;;;AAtJG,QAAM,WAkKV,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;;AAExB,QAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;AAEpB,QAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,UAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KACrD;;;AAGD,UAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAChC,QAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAAE,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KAAE;AAC5D,QAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;AAAE,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;KAAE;;AAE5D,QAAI,IAAI,CAAC,KAAK,EAAE;AAAE,UAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;KAAE;;AAEzC,yBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AAnLG,QAAM,WA2LV,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,qBAAM,QAAQ,KAAA,OAAC,KAAK,CAAC,CAAC;AAC1C,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnB,OAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC7B,OAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;;;;AAI9B,QAAM,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;;AAEvC,UAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;;;AAGtD,UAAI,IAAI,KAAK,OAAO,EAAE;AACpB,UAAE,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;OAC5B,MAAM;AACL,UAAE,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;OACpC;KACF,CAAC,CAAC;;;;;AAKH,OAAG,CAAC,EAAE,IAAI,YAAY,CAAC;AACvB,OAAG,CAAC,SAAS,GAAG,UAAU,CAAC;;;AAG3B,OAAG,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC;;AAE9B,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;;;;;AAK5B,QAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,CAAC;AACvE,QAAI,eAAe,GAAG,4BAAS,aAAa,CAAC,sBAAsB,CAAC,CAAC;AACrE,QAAI,IAAI,GAAG,4BAAS,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,eAAe,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;;;AAGlG,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,QAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChC,QAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;;;AAI5C,OAAG,CAAC,iBAAiB,GAAG,GAAG,CAAC,YAAY,CAAC;;;AAGzC,QAAI,GAAG,CAAC,UAAU,EAAE;AAClB,SAAG,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;KACtC;AACD,OAAG,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;;AAE3B,QAAI,CAAC,GAAG,GAAG,EAAE,CAAC;;AAEd,WAAO,EAAE,CAAC;GACX;;;;;;;;;;AAvPG,QAAM,WAgQV,KAAK,GAAA,eAAC,KAAK,EAAE;AACX,WAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;GACvC;;;;;;;;;;AAlQG,QAAM,WA2QV,MAAM,GAAA,gBAAC,KAAK,EAAE;AACZ,WAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;GACxC;;;;;;;;;;;AA7QG,QAAM,WAuRV,SAAS,GAAA,mBAAC,UAAS,EAAE,KAAK,EAAE;AAC1B,QAAI,aAAa,GAAG,UAAS,GAAG,GAAG,CAAC;;AAEpC,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,aAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KACjC;;AAED,QAAI,KAAK,KAAK,EAAE,EAAE;;AAEhB,UAAI,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjC,MAAM;AACL,UAAI,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;;AAElC,UAAI,KAAK,CAAC,SAAS,CAAC,EAAE;AACpB,gCAAI,KAAK,sBAAoB,KAAK,2BAAsB,UAAS,CAAG,CAAC;AACrE,eAAO,IAAI,CAAC;OACb;;AAED,UAAI,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;KACjC;;AAED,QAAI,CAAC,cAAc,EAAE,CAAC;AACtB,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA9SG,QAAM,WAsTV,KAAK,GAAA,eAAC,IAAI,EAAE;AACV,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;KACtB;;AAED,QAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;;AAErB,QAAI,IAAI,EAAE;AACR,UAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;KAC5B,MAAM;AACL,UAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;KAC/B;GACF;;;;;;;;;;AAlUG,QAAM,WA2UV,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,aAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;;;AAGD,QAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC7B,YAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;KACnH;AACD,QAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;;;AAI1B,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEjB,QAAI,CAAC,cAAc,EAAE,CAAC;GACvB;;;;;;;;AA3VG,QAAM,WAkWV,cAAc,GAAA,0BAAG;AACf,QAAI,KAAK,YAAA,CAAC;AACV,QAAI,MAAM,YAAA,CAAC;AACX,QAAI,WAAW,YAAA,CAAC;;;AAGhB,QAAI,IAAI,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,EAAE;;AAEnE,iBAAW,GAAG,IAAI,CAAC,YAAY,CAAC;KACjC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;;AAE5B,iBAAW,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;KAC5D,MAAM;;AAEL,iBAAW,GAAG,MAAM,CAAC;KACtB;;;AAGD,QAAI,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxC,QAAI,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;AAEpD,QAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;;AAE7B,WAAK,GAAG,IAAI,CAAC,MAAM,CAAC;KACrB,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;AAErC,WAAK,GAAG,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;KACxC,MAAM;;AAEL,WAAK,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC;KAClC;;AAED,QAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;;AAE9B,YAAM,GAAG,IAAI,CAAC,OAAO,CAAC;KACvB,MAAM;;AAEL,YAAM,GAAG,KAAK,GAAI,eAAe,CAAC;KACnC;;AAED,QAAI,OAAO,GAAG,IAAI,CAAC,EAAE,EAAE,GAAC,aAAa,CAAC;;;AAGtC,QAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;AAEvB,cAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,gBAClC,OAAO,2BACC,KAAK,6BACJ,MAAM,+BAGf,OAAO,2CACO,eAAe,GAAG,GAAG,uBAEtC,CAAC;GACJ;;;;;;;;;;;;;AAzZG,QAAM,WAqaV,SAAS,GAAA,mBAAC,QAAQ,EAAE,MAAM,EAAE;;;AAG1B,QAAI,IAAI,CAAC,KAAK,EAAE;AACd,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;;;AAGD,QAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE;AACpC,+BAAU,YAAY,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9D,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACjB;;AAED,QAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;;;AAG1B,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;;AAGtB,QAAI,WAAW,GAAG,0BAAO;AACvB,8BAAwB,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB;AAC9D,cAAQ,EAAE,MAAM;AAChB,gBAAU,EAAE,IAAI,CAAC,EAAE,EAAE;AACrB,cAAQ,EAAK,IAAI,CAAC,EAAE,EAAE,SAAI,QAAQ,SAAM;AACxC,kBAAY,EAAE,IAAI,CAAC,WAAW;AAC9B,gBAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAClC,eAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;AAChC,YAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AAC1B,aAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK;AAC5B,cAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;AACvB,gBAAU,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC3B,cAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAClC,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;;AAE1C,QAAI,IAAI,CAAC,GAAG,EAAE;AACZ,iBAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;KAC5B;;AAED,QAAI,MAAM,EAAE;AACV,UAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;AAChC,UAAI,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE;AACjE,mBAAW,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;OACjD;;AAED,UAAI,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;KAC9B;;;AAGD,QAAI,aAAa,GAAG,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;AACrD,QAAI,CAAC,KAAK,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;;;AAG5C,QAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,CAAC;;AAE7D,gDAAmB,gBAAgB,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;;;AAG5E,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACtD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAClD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC1D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,CAAC,CAAC;AAC1E,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACtE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAClE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;AACxE,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AAC3D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;;AAElE,QAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;;AAEpD,QAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAClD,UAAI,CAAC,yBAAyB,EAAE,CAAC;KAClC;;;;AAID,QAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK,QAAQ,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAA,AAAC,EAAE;AACnF,SAAG,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;KAC/C;;;AAGD,QAAI,IAAI,CAAC,GAAG,EAAE;AACZ,UAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;AACvB,UAAI,CAAC,GAAG,GAAG,IAAI,CAAC;KACjB;GACF;;;;;;;;;AA5gBG,QAAM,WAohBV,WAAW,GAAA,uBAAG;;AAEZ,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,QAAI,CAAC,eAAe,GAAG,4CAAmB,gBAAgB,CAAC,IAAI,CAAC,CAAC;;AAEjE,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAEtB,QAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;;AAErB,QAAI,CAAC,KAAK,GAAG,KAAK,CAAC;GACpB;;;;;;;;;;;;;;;;;;;;;;;;AA9hBG,QAAM,WAqjBV,yBAAyB,GAAA,qCAAG;;AAE1B,QAAI,CAAC,4BAA4B,EAAE,CAAC;;;;;;AAMpC,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;;;;;AAKxD,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC9D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC5D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;;;;AAI1D,QAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACjD;;;;;;;;;;AAzkBG,QAAM,WAklBV,4BAA4B,GAAA,wCAAG;;;AAG7B,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACjD,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC/D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC7D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC3D,QAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;GAC1D;;;;;;;;;AA1lBG,QAAM,WAkmBV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,YAAY,EAAE,CAAC;;;AAGpB,QAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AACtB,UAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KACjD;;;AAGD,QAAI,CAAC,uBAAuB,EAAE,CAAC;;;AAG/B,QAAI,CAAC,yBAAyB,EAAE,CAAC;;;;;;AAMjC,QAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACvD,aAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AACvB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AAxnBG,QAAM,WAgoBV,oBAAoB,GAAA,gCAAG;;;AAGrB,QAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;;;AAG9B,QAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;;;;AAKjB,QAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AAClB,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AAC1B,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC3B,MAAM;;AAEL,UAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,UAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;KAC3B;GACF;;;;;;;;;;;AAnpBG,QAAM,WA6pBV,UAAU,GAAA,oBAAC,WAAU,EAAE;AACrB,QAAI,WAAU,KAAK,SAAS,EAAE;;AAE5B,UAAI,IAAI,CAAC,WAAW,KAAK,WAAU,EAAE;AACnC,YAAI,CAAC,WAAW,GAAG,WAAU,CAAC;AAC9B,YAAI,WAAU,EAAE;AACd,cAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;;AAEjC,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SAC3B,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;SACrC;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;GAC3B;;;;;;;;;AA7qBG,QAAM,WAqrBV,eAAe,GAAA,2BAAG;AAChB,QAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC9B,QAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAC/B,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;;;;AAI7B,QAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;AAEtB,QAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;GACtB;;;;;;;;;AA/rBG,QAAM,WAusBV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;;AA1sBG,QAAM,WAmtBV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;;AAttBG,QAAM,WA+tBV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;;AAluBG,QAAM,WA2uBV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AA9uBG,QAAM,WAsvBV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AAzvBG,QAAM,WAiwBV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;GACxB;;;;;;;;;;;;AApwBG,QAAM,WA+wBV,oBAAoB,GAAA,gCAAG;;;AAGrB,QAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAC;AACzB,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;KAC3C;;AAED,QAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACjC,QAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;GAC3B;;;;;;;;;AAxxBG,QAAM,WAgyBV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAC5B,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AApyBG,QAAM,WA4yBV,mBAAmB,GAAA,+BAAG;AACpB,QAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;GAC1B;;;;;;;;;AA9yBG,QAAM,WAszBV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC3B,QAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB,UAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACpB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,KAAK,EAAE,CAAC;KACd;;AAED,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AAh0BG,QAAM,WAw0BV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;GAC1C;;;;;;;;;;AA10BG,QAAM,WAm1BV,gBAAgB,GAAA,0BAAC,KAAK,EAAE;;;AAGtB,QAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;;;AAI/B,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjB,YAAI,CAAC,IAAI,EAAE,CAAC;OACb,MAAM;AACL,YAAI,CAAC,KAAK,EAAE,CAAC;OACd;KACF;GACF;;;;;;;;;;AAj2BG,QAAM,WA02BV,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;GACrC;;;;;;;;;AA52BG,QAAM,WAo3BV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;GACxC;;;;;;;;;AAt3BG,QAAM,WA83BV,oBAAoB,GAAA,gCAAG;AACrB,QAAI,IAAI,CAAC,aAAa,EAAC;AACrB,UAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;GACF;;;;;;;;;AAl4BG,QAAM,WA04BV,mBAAmB,GAAA,6BAAC,KAAK,EAAE;;AAEzB,SAAK,CAAC,cAAc,EAAE,CAAC;GACxB;;;;;;;;;AA74BG,QAAM,WAq5BV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,IAAI,CAAC,YAAY,EAAE,EAAE;AACvB,UAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;KACjC,MAAM;AACL,UAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;KACpC;GACF;;;;;;;;;;AA35BG,QAAM,WAo6BV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,kBAAkB,EAAE,CAAC;GAC3B;;;;;;;;;AAt6BG,QAAM,WA86BV,2BAA2B,GAAA,qCAAC,KAAK,EAAE,IAAI,EAAE;AACvC,QAAI,IAAI,EAAE;AACR,UAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACtC;AACD,QAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;GAClC;;;;;;;;;AAn7BG,QAAM,WA27BV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;GACjC;;;;;;;;;AA97BG,QAAM,WAs8BV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AAx8BG,QAAM,WAg9BV,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;GACvB;;;;;;;;;AAl9BG,QAAM,WA09BV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AA59BG,QAAM,WAo+BV,kBAAkB,GAAA,8BAAG;AACnB,QAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;GACzB;;;;;;;;;AAt+BG,QAAM,WA8+BV,yBAAyB,GAAA,qCAAG;AAC1B,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;AAh/BG,QAAM,WAw/BV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AA1/BG,QAAM,WAkgCV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AApgCG,QAAM,WA4gCV,qBAAqB,GAAA,iCAAG;AACtB,QAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;GAC5B;;;;;;;;;AA9gCG,QAAM,WAshCV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;GAC9B;;;;;;;;;AAxhCG,QAAM,WAgiCV,0BAA0B,GAAA,sCAAG;AAC3B,QAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;GACjC;;;;;;;;;AAliCG,QAAM,WA0iCV,QAAQ,GAAA,oBAAG;AACT,WAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;;;;;;;;AA5iCG,QAAM,WAsjCV,SAAS,GAAA,mBAAC,MAAM,EAAE,GAAG,EAAE;;AAErB,QAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;AACtC,UAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAU;AACzB,YAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;OACnB,EAAE,IAAI,CAAC,CAAC;;;KAGV,MAAM;AACL,YAAI;AACF,cAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,CAAC,OAAM,CAAC,EAAE;AACT,kCAAI,CAAC,CAAC,CAAC;AACP,gBAAM,CAAC,CAAC;SACT;OACF;GACF;;;;;;;;;;;AAtkCG,QAAM,WAglCV,QAAQ,GAAA,kBAAC,MAAM,EAAE;AACf,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;;;;;AAKrC,UAAI;AACF,eAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;OAC7B,CAAC,OAAM,CAAC,EAAE;;AAET,YAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AACpC,iDAAiB,MAAM,gCAA2B,IAAI,CAAC,SAAS,4BAAyB,CAAC,CAAC,CAAC;SAC7F,MAAM;;AAEL,cAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE;AAC1B,mDAAiB,MAAM,wBAAmB,IAAI,CAAC,SAAS,oCAAiC,CAAC,CAAC,CAAC;AAC5F,gBAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;WAC7B,MAAM;AACL,oCAAI,CAAC,CAAC,CAAC;WACR;SACF;AACD,cAAM,CAAC,CAAC;OACT;KACF;;AAED,WAAO;GACR;;;;;;;;;;;;AA1mCG,QAAM,WAqnCV,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AAxnCG,QAAM,WAmoCV,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACxB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AAtoCG,QAAM,WAkpCV,MAAM,GAAA,kBAAG;;AAEP,WAAO,AAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAI,KAAK,GAAG,IAAI,CAAC;GAC3D;;;;;;;;;;;;AArpCG,QAAM,WAgqCV,SAAS,GAAA,mBAAC,WAAW,EAAE;AACrB,QAAI,WAAW,KAAK,SAAS,EAAE;AAC7B,UAAI,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC;;AAEhC,UAAI,WAAW,EAAE;AACf,YAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;OAChC,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;OACnC;;AAED,aAAO,IAAI,CAAC;KACb;;AAED,WAAO,IAAI,CAAC,UAAU,CAAC;GACxB;;;;;;;;;;;;;;;;;AA9qCG,QAAM,WA8rCV,WAAW,GAAA,qBAAC,OAAO,EAAE;AACnB,QAAI,OAAO,KAAK,SAAS,EAAE;;AAEzB,UAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;;AAE1C,aAAO,IAAI,CAAC;KACb;;;;;;;;AAQD,WAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAI,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,AAAC,CAAC;GACtE;;;;;;;;;;;;;;;;AA7sCG,QAAM,WA4tCV,QAAQ,GAAA,kBAAC,OAAO,EAAE;AAChB,QAAI,OAAO,KAAK,SAAS,EAAE;AACzB,aAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;KAClC;;AAED,WAAO,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;;AAGnC,QAAI,OAAO,GAAG,CAAC,EAAE;AACf,aAAO,GAAG,QAAQ,CAAC;KACpB;;AAED,QAAI,OAAO,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;AAEpC,UAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;;AAE/B,UAAI,OAAO,KAAK,QAAQ,EAAE;AACxB,YAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;OAC3B,MAAM;AACL,YAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;OAC9B;;AAED,UAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;KAChC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;AAtvCG,QAAM,WAkwCV,aAAa,GAAA,yBAAG;AACd,WAAO,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;GAC7C;;;;;;;;;;;;;;;;;;;;;;;;;AApwCG,QAAM,WA4xCV,QAAQ,GAAA,oBAAG;AACT,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;;AAEzC,QAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjC,cAAQ,GAAG,mCAAgB,CAAC,EAAC,CAAC,CAAC,CAAC;KACjC;;AAED,WAAO,QAAQ,CAAC;GACjB;;;;;;;;;;;;;;AApyCG,QAAM,WAizCV,eAAe,GAAA,2BAAG;AAChB,WAAO,+BAAgB,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;GAC1D;;;;;;;;;;AAnzCG,QAAM,WA4zCV,WAAW,GAAA,uBAAG;AACZ,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1B,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAC1B,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;;AAE1C,QAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,SAAG,GAAG,QAAQ,CAAC;KAChB;;AAED,WAAO,GAAG,CAAC;GACZ;;;;;;;;;;;;;;;;;;AAt0CG,QAAM,WAu1CV,MAAM,GAAA,gBAAC,gBAAgB,EAAE;AACvB,QAAI,GAAG,YAAA,CAAC;;AAER,QAAI,gBAAgB,KAAK,SAAS,EAAE;AAClC,SAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7D,UAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;AACzB,UAAI,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;;AAEjC,aAAO,IAAI,CAAC;KACb;;;AAGD,OAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,WAAO,AAAC,KAAK,CAAC,GAAG,CAAC,GAAI,CAAC,GAAG,GAAG,CAAC;GAC/B;;;;;;;;;;;;;;;;;AAr2CG,QAAM,WAs3CV,KAAK,GAAA,eAAC,MAAK,EAAE;AACX,QAAI,MAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,UAAU,EAAE,MAAK,CAAC,CAAC;AAClC,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;GACxC;;;;;;;;;;;AA53CG,QAAM,WAs4CV,kBAAkB,GAAA,8BAAG;AACnB,WAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,KAAK,CAAC;GACrD;;;;;;;;;;;;;;;;;;;;AAx4CG,QAAM,WA25CV,YAAY,GAAA,sBAAC,IAAI,EAAE;AACjB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC;AAC5B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;GAC7B;;;;;;;;;;;;;;;;;;AAj6CG,QAAM,WAk7CV,iBAAiB,GAAA,6BAAG;AAClB,QAAI,KAAK,+BAAgB,CAAC;;AAE1B,QAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;;AAExB,QAAI,KAAK,CAAC,iBAAiB,EAAE;;;;;;;;;AAS3B,YAAM,CAAC,EAAE,8BAAW,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,wBAAwB,CAAC,CAAC,EAAC;AAC5F,YAAI,CAAC,YAAY,CAAC,4BAAS,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;;;AAGrD,YAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE;AACjC,gBAAM,CAAC,GAAG,8BAAW,KAAK,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC;SACxE;;AAED,YAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;OAClC,CAAC,CAAC,CAAC;;AAEJ,UAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;KAErC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE;;;AAG1C,UAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;KACnC,MAAM;;;AAGL,UAAI,CAAC,eAAe,EAAE,CAAC;AACvB,UAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;KAClC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;AAz9CG,QAAM,WAo+CV,cAAc,GAAA,0BAAG;AACf,QAAI,KAAK,+BAAgB,CAAC;AAC1B,QAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;;AAGzB,QAAI,KAAK,CAAC,iBAAiB,EAAE;AAC3B,kCAAS,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;KAClC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE;AAC3C,UAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;KACjC,MAAM;AACN,UAAI,CAAC,cAAc,EAAE,CAAC;AACtB,UAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjC;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;AAn/CG,QAAM,WA0/CV,eAAe,GAAA,2BAAG;AAChB,QAAI,CAAC,YAAY,GAAG,IAAI,CAAC;;;AAGzB,QAAI,CAAC,eAAe,GAAG,4BAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC;;;AAG/D,UAAM,CAAC,EAAE,8BAAW,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;;;AAGvE,gCAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;;;AAGnD,OAAG,CAAC,UAAU,CAAC,4BAAS,IAAI,EAAE,iBAAiB,CAAC,CAAC;;AAEjD,QAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;GACjC;;;;;;;;;AA1gDG,QAAM,WAkhDV,kBAAkB,GAAA,4BAAC,KAAK,EAAE;AACxB,QAAI,KAAK,CAAC,OAAO,KAAK,EAAE,EAAE;AACxB,UAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;AAChC,YAAI,CAAC,cAAc,EAAE,CAAC;OACvB,MAAM;AACL,YAAI,CAAC,cAAc,EAAE,CAAC;OACvB;KACF;GACF;;;;;;;;AA1hDG,QAAM,WAiiDV,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,UAAM,CAAC,GAAG,8BAAW,SAAS,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;;AAGzD,gCAAS,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;;;AAG/D,OAAG,CAAC,aAAa,CAAC,4BAAS,IAAI,EAAE,iBAAiB,CAAC,CAAC;;;;AAIpD,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;GAChC;;;;;;;;;;AA9iDG,QAAM,WAujDV,YAAY,GAAA,sBAAC,OAAO,EAAE;;AAEpB,SAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;AACrD,UAAI,QAAQ,GAAG,gCAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,UAAI,IAAI,GAAG,yBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;;;AAG5C,UAAI,CAAC,IAAI,EAAE;AACT,gCAAI,KAAK,WAAS,QAAQ,uEAAoE,CAAC;AAC/F,iBAAS;OACV;;;AAGD,UAAI,IAAI,CAAC,WAAW,EAAE,EAAE;;AAEtB,aAAK,IAAI,CAAC,GAAC,CAAC,EAAC,CAAC,GAAC,OAAO,EAAC,CAAC,GAAC,CAAC,CAAC,MAAM,EAAC,CAAC,EAAE,EAAE;AACrC,cAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;;;AAGlB,cAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC9B,mBAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;WAC3C;SACF;OACF;KACF;;AAED,WAAO,KAAK,CAAC;GACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAllDG,QAAM,WAonDV,GAAG,GAAA,aAAC,MAAM,EAAE;AACV,QAAI,MAAM,KAAK,SAAS,EAAE;AACxB,aAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAC7B;;AAED,QAAI,WAAW,GAAG,yBAAU,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAGzD,QAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,UAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;;KAG1B,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;;AAErC,YAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;;;OAG3B,MAAM,IAAI,MAAM,YAAY,MAAM,EAAE;;;AAGnC,cAAI,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;;;AAGrD,gBAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;WAC5B,MAAM;AACL,gBAAI,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AAC7B,gBAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;;;AAGtC,gBAAI,CAAC,KAAK,CAAC,YAAU;;;;;;AAMnB,kBAAI,WAAW,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE;AACrD,oBAAI,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;eACrC,MAAM;AACL,oBAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;eACnC;;AAED,kBAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,KAAK,MAAM,EAAE;AACpC,oBAAI,CAAC,IAAI,EAAE,CAAC;eACb;;AAED,kBAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAC1B,oBAAI,CAAC,IAAI,EAAE,CAAC;eACb;;;aAGF,EAAE,IAAI,CAAC,CAAC;WACV;SACF;;AAED,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AA3qDG,QAAM,WAorDV,WAAW,GAAA,qBAAC,OAAO,EAAE;AACnB,QAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;AAE5C,QAAI,UAAU,EAAE;AACd,UAAI,UAAU,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,EAAE;;AAEtC,YAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;OAC7B,MAAM;;AAEL,YAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;OACpD;KACF,MAAM;;AAEL,UAAI,CAAC,UAAU,CAAE,YAAW;AAC1B,YAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;OACpF,EAAE,CAAC,CAAC,CAAC;;;;AAIN,UAAI,CAAC,YAAY,EAAE,CAAC;KACrB;GACF;;;;;;;;;AAzsDG,QAAM,WAitDV,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACvB,WAAO,IAAI,CAAC;GACb;;;;;;;;;;AAptDG,QAAM,WA6tDV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;GAC7D;;;;;;;;;;;AA/tDG,QAAM,WAyuDV,WAAW,GAAA,uBAAG;AACZ,WAAO,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;GAChC;;;;;;;;;;;AA3uDG,QAAM,WAqvDV,OAAO,GAAA,iBAAC,KAAK,EAAE;AACb,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AACpC,UAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;GACjC;;;;;;;;;;;AA5vDG,QAAM,WAswDV,QAAQ,GAAA,kBAAC,KAAK,EAAE;AACd,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;AACrC,UAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC;AAC/B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;GACzC;;;;;;;;;;;AA7wDG,QAAM,WAuxDV,IAAI,GAAA,cAAC,KAAK,EAAE;AACV,QAAI,KAAK,KAAK,SAAS,EAAE;AACvB,UAAI,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjC,UAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;AAC9B,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;GAC9B;;;;;;;;;;;;;;;;;;;AA9xDG,QAAM,WAgzDV,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,OAAO,CAAC;KACrB;;;;AAID,QAAI,CAAC,GAAG,EAAE;AACR,SAAG,GAAG,EAAE,CAAC;KACV;;;AAGD,QAAI,CAAC,OAAO,GAAG,GAAG,CAAC;;;AAGnB,QAAI,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;;;AAGjC,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;AAE7B,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;;;;AAr0DG,QAAM,WAk1DV,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACpD,UAAI,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;;;AAGzC,UAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;KAC9B;GACF;;;;;;;;;;AAz1DG,QAAM,WAk2DV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;;AAEd,UAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE;AAC3B,YAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;AAEtB,YAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC9B,cAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;SACrC;;AAED,YAAI,IAAI,EAAE;AACR,cAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;AAC1C,cAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;AACtC,cAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;AAEhC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,gBAAI,CAAC,yBAAyB,EAAE,CAAC;WAClC;SACF,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;AACzC,cAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;AACvC,cAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;;AAEjC,cAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAC/B,gBAAI,CAAC,4BAA4B,EAAE,CAAC;WACrC;SACF;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;GACzB;;;;;;;;;;;;;;;AAl4DG,QAAM,WAg5DV,mBAAmB,GAAA,6BAAC,IAAI,EAAE;AACxB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;;AAEd,UAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE;AACtC,YAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACjC,YAAI,IAAI,EAAE;AACR,cAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;;;;;;;;;;AAU3C,cAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;SACrC,MAAM;AACL,cAAI,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC;;;;;;;;;;AAU9C,cAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;SACrC;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;GACpC;;;;;;;;;;;AAn7DG,QAAM,WA67DV,KAAK,GAAA,eAAC,GAAG,EAAE;AACT,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;KAC5B;;;AAGD,QAAI,GAAG,KAAK,IAAI,EAAE;AAChB,UAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AAClB,UAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAC9B,aAAO,IAAI,CAAC;KACb;;;AAGD,QAAI,GAAG,qCAAsB,EAAE;AAC7B,UAAI,CAAC,MAAM,GAAG,GAAG,CAAC;KACnB,MAAM;AACL,UAAI,CAAC,MAAM,GAAG,8BAAe,GAAG,CAAC,CAAC;KACnC;;;AAGD,QAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;;;AAGtB,QAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;;;;AAI3B,4BAAI,KAAK,YAAU,IAAI,CAAC,MAAM,CAAC,IAAI,SAAI,0BAAW,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;AAErH,WAAO,IAAI,CAAC;GACb;;;;;;;;;AA39DG,QAAM,WAm+DV,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;GAAE;;;;;;;;;AAn+DtC,QAAM,WA2+DV,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;GAAE;;;;;;;;;;AA3+D1C,QAAM,WAo/DV,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;GAAE;;;;;;;;;AAp/D5C,QAAM,WA4/DV,kBAAkB,GAAA,4BAAC,KAAK,EAAE;AACxB,QAAI,CAAC,aAAa,GAAG,IAAI,CAAC;GAC3B;;;;;;;;;;AA9/DG,QAAM,WAugEV,UAAU,GAAA,oBAAC,IAAI,EAAE;AACf,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,GAAG,CAAC,CAAC,IAAI,CAAC;AACd,UAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAI,IAAI,EAAE;;;AAGR,cAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,cAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;AACtC,cAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACjC,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAC5B,MAAM;;;AAGL,cAAI,CAAC,aAAa,GAAG,KAAK,CAAC;;;;;;;;;;AAU3B,cAAG,IAAI,CAAC,KAAK,EAAE;AACb,gBAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,UAAS,CAAC,EAAC;AACrC,eAAC,CAAC,eAAe,EAAE,CAAC;AACpB,eAAC,CAAC,cAAc,EAAE,CAAC;aACpB,CAAC,CAAC;WACJ;;AAED,cAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AACpC,cAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACnC,cAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;SAC9B;OACF;AACD,aAAO,IAAI,CAAC;KACb;AACD,WAAO,IAAI,CAAC,WAAW,CAAC;GACzB;;;;;;;;;AA/iEG,QAAM,WAujEV,sBAAsB,GAAA,kCAAG;AACvB,QAAI,eAAe,YAAA;QAAE,SAAS,YAAA;QAAE,SAAS,YAAA,CAAC;;AAE1C,QAAI,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;;AAE5D,QAAI,eAAe,GAAG,SAAlB,eAAe,CAAY,CAAC,EAAE;;;AAGhC,UAAG,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,EAAE;AACrD,iBAAS,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB,iBAAS,GAAG,CAAC,CAAC,OAAO,CAAC;AACtB,sBAAc,EAAE,CAAC;OAClB;KACF,CAAC;;AAEF,QAAI,eAAe,GAAG,SAAlB,eAAe,GAAc;AAC/B,oBAAc,EAAE,CAAC;;;;AAIjB,UAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;;;;AAIpC,qBAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;KACzD,CAAC;;AAEF,QAAI,aAAa,GAAG,SAAhB,aAAa,CAAY,KAAK,EAAE;AAClC,oBAAc,EAAE,CAAC;;AAEjB,UAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;KACrC,CAAC;;;AAGF,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACtC,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;AACtC,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;;;;AAIlC,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;;;;;;;AAOjC,QAAI,iBAAiB,YAAA,CAAC;AACtB,QAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,YAAW;;AAE9C,UAAI,IAAI,CAAC,aAAa,EAAE;;AAEtB,YAAI,CAAC,aAAa,GAAG,KAAK,CAAC;;;AAG3B,YAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;;;AAGtB,YAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;;AAErC,YAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;AACjD,YAAI,OAAO,GAAG,CAAC,EAAE;;;AAGf,2BAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY;;;;AAI9C,gBAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACrB,kBAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aAC1B;WACF,EAAE,OAAO,CAAC,CAAC;SACb;OACF;KACF,EAAE,GAAG,CAAC,CAAC;GACT;;;;;;;;;;;;;;AAnoEG,QAAM,WAgpEV,YAAY,GAAA,sBAAC,IAAI,EAAE;AACjB,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AACxC,aAAO,IAAI,CAAC;KACb;;AAED,QAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE;AACpD,aAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;KACtC,MAAM;AACL,aAAO,GAAG,CAAC;KACZ;GACF;;;;;;;;;;;;AA3pEG,QAAM,WAsqEV,OAAO,GAAA,iBAAC,IAAI,EAAE;AACZ,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,UAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC;AACvB,aAAO,IAAI,CAAC;KACb;;AAED,WAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;GACxB;;;;;;;;;;;;;;;;;;;;;;;AA7qEG,QAAM,WAmsEV,YAAY,GAAA,wBAAG;AACb,WAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;GACtC;;;;;;;;;;;;;;;;;;;;;;;;;;AArsEG,QAAM,WA8tEV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;GACpC;;;;;;;;;;;;;;;;;;AAhuEG,QAAM,WAivEV,UAAU,GAAA,sBAAG;;;AAGX,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;GACjD;;;;;;;;;AArvEG,QAAM,WA6vEV,gBAAgB,GAAA,4BAAG;AACjB,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;GACvD;;;;;;;;;;;;;AA/vEG,QAAM,WA2wEV,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACxE;;;;;;;;;AA7wEG,QAAM,WAqxEV,kBAAkB,GAAA,4BAAC,OAAO,EAAE;AAC1B,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC;GAChE;;;;;;;;;AAvxEG,QAAM,WA+xEV,qBAAqB,GAAA,+BAAC,KAAK,EAAE;AAC3B,QAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,CAAC;GAC1D;;;;;;;;;AAjyEG,QAAM,WAyyEV,UAAU,GAAA,sBAAG;AACX,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;GAC5E;;;;;;;;;AA3yEG,QAAM,WAmzEV,WAAW,GAAA,uBAAG;AACZ,WAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;GAC9E;;;;;;;;;;;;;;;;;;;;;;;AArzEG,QAAM,WA20EV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,IAAI,CAAC,SAAS,CAAC;KACvB;;AAED,QAAI,CAAC,SAAS,GAAG,CAAC,EAAE,GAAC,IAAI,CAAA,CAAE,WAAW,EAAE,CAAC;AACzC,WAAO,IAAI,CAAC;GACb;;;;;;;;;;;AAl1EG,QAAM,WA41EV,SAAS,GAAA,qBAAG;AACV,WAAQ,iCAAa,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;GAC5E;;;;;;;;;AA91EG,QAAM,WAs2EV,MAAM,GAAA,kBAAG;AACP,QAAI,OAAO,GAAG,iCAAa,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1C,QAAI,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;AAE5B,WAAO,CAAC,MAAM,GAAG,EAAE,CAAC;;AAEpB,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;;;AAGtB,WAAK,GAAG,iCAAa,KAAK,CAAC,CAAC;AAC5B,WAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AACzB,aAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;KAC3B;;AAED,WAAO,OAAO,CAAC;GAChB;;;;;;;;;;;AAt3EG,QAAM,CAg4EH,cAAc,GAAA,wBAAC,GAAG,EAAE;AACzB,QAAI,WAAW,GAAG;AAChB,eAAS,EAAE,EAAE;AACb,cAAQ,EAAE,EAAE;KACb,CAAC;;AAEF,QAAM,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAM,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;;;AAG3C,QAAI,SAAS,KAAK,IAAI,EAAC;;;4BAGD,gCAAe,SAAS,IAAI,IAAI,CAAC;;UAA9C,GAAG;UAAE,IAAI;;AAChB,UAAI,GAAG,EAAE;AACP,gCAAI,KAAK,CAAC,GAAG,CAAC,CAAC;OAChB;AACD,gCAAO,UAAU,EAAE,IAAI,CAAC,CAAC;KAC1B;;AAED,8BAAO,WAAW,EAAE,UAAU,CAAC,CAAC;;;AAGhC,QAAI,GAAG,CAAC,aAAa,EAAE,EAAE;AACvB,UAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEhC,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,YAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAE1B,YAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC/C,YAAI,SAAS,KAAK,QAAQ,EAAE;AAC1B,qBAAW,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;SACtD,MAAM,IAAI,SAAS,KAAK,OAAO,EAAE;AAChC,qBAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;SACrD;OACF;KACF;;AAED,WAAO,WAAW,CAAC;GACpB;;SAv6EG,MAAM;;;AAg7EZ,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;;AAEpB,IAAI,SAAS,GAAG,0BAAO,SAAS,CAAC;;;;;;;;;AASjC,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG;;AAE1B,WAAS,EAAE,CAAC,OAAO,EAAC,OAAO,CAAC;;;AAG5B,OAAK,EAAE,EAAE;AACT,OAAK,EAAE,EAAE;;;AAGT,eAAa,EAAE,IAAI;;;AAGnB,mBAAiB,EAAE,IAAI;;;AAGvB,eAAa,EAAE,EAAE;;;;;AAKjB,UAAQ,EAAE,CACR,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,cAAc,EACd,mBAAmB,CACpB;;AAED,UAAQ,EAAE,4BAAS,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,IAAI;;;AAGhL,WAAS,EAAE,EAAE;;;AAGb,qBAAmB,EAAE,gDAAgD;CACtE,CAAC;;;;;;;AAOF,MAAM,CAAC,SAAS,CAAC,qBAAqB,CAAC;;;;;;;AAOvC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;;;;;;;;;AASrC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC;;;;;;;AAOnC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC;;;;;;;AAOrC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;;AAE9B,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,YAAW;AAC9C,MAAI,IAAI,GAAG,4BAAS,aAAa,CAAC,GAAG,CAAC,CAAC;;;;AAIvC,SAAO,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,IAC1B,iBAAiB,IAAI,IAAI,CAAC,KAAK,IAC/B,cAAc,IAAI,IAAI,CAAC,KAAK,IAC5B,aAAa,IAAI,IAAI,CAAC,KAAK,IAC3B,aAAa,IAAI,IAAI,CAAC,KAAK,CAAA,sCAAuC,CAAC;CAC5E,CAAC;;AAEF,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;;;;;wBCzlFF,aAAa;;;;;;;;;;;AAShC,IAAI,MAAM,GAAG,SAAT,MAAM,CAAY,IAAI,EAAE,IAAI,EAAC;AAC/B,wBAAO,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC/B,CAAC;;qBAEa,MAAM;;;;;;;;;;;;;;;;;;;wBCbF,aAAa;;;;2BACV,gBAAgB;;;;yBAClB,eAAe;;IAAvB,EAAE;;0BACO,gBAAgB;;IAAzB,GAAG;;8BACU,oBAAoB;;IAAjC,OAAO;;;;;;;;;;;IAUb,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAC;0BAFxB,WAAW;;AAGb,uBAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;AAEvB,QAAI,CAAC,MAAM,EAAE,CAAC;AACd,UAAM,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;GACvD;;;;;;;;AAPG,aAAW,WAcf,OAAO,GAAA,mBAAG;AACR,QAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,sBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AAjBG,aAAW,WAyBf,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,YAAY;;;AAGvB,cAAQ,EAAE,CAAC,CAAC;KACb,CAAC,CAAC;;;;;;AAMH,QAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;AACtC,UAAI,CAAC,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,QAAE,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACnC;;AAED,WAAO,EAAE,CAAC;GACX;;;;;;;;AA3CG,aAAW,WAkDf,MAAM,GAAA,kBAAG;AACP,QAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;;AAEjC,QAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;;;AAIjB,QAAI,GAAG,EAAE;AACP,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AA9DG,aAAW,WAsEf,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,IAAI,CAAC,YAAY,EAAE;AACrB,UAAI,CAAC,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;KAC7B,MAAM;AACL,UAAI,eAAe,GAAG,EAAE,CAAC;;;AAGzB,UAAI,GAAG,EAAE;AACP,uBAAe,aAAW,GAAG,OAAI,CAAC;OACnC;;AAED,UAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;KAClD;GACF;;;;;;;;AAnFG,aAAW,WA0Ff,WAAW,GAAA,uBAAG;;;AAGZ,QAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;AACzB,UAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;KACrB,MAAM;AACL,UAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;KACtB;GACF;;SAlGG,WAAW;;;AAsGjB,yBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;6BClHF,mBAAmB;;IAA/B,MAAM;;8BACG,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,OAAO,YAAA,CAAC;;;AAIZ,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAa;;;;;;;;AAQxB,MAAI,IAAI,GAAG,4BAAS,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAClD,MAAI,MAAM,GAAG,4BAAS,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACpD,MAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,MAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,SAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACpC,cAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACxB;GACF;AACD,MAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,SAAI,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACtC,cAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1B;GACF;;;AAGD,MAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;;AAEnC,SAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAC,CAAC,EAAE,CAAC,EAAE,EAAE;AACzC,UAAI,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;;;;AAI1B,UAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE;;;AAGnC,YAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE;AACnC,cAAI,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;;;;AAIjD,cAAI,OAAO,KAAK,IAAI,EAAE;;AAEpB,gBAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;WAC/B;SACF;;;OAGF,MAAM;AACL,0BAAgB,CAAC,CAAC,CAAC,CAAC;AACpB,gBAAM;SACP;KACF;;;GAGF,MAAM,IAAI,CAAC,aAAa,EAAE;AACzB,sBAAgB,CAAC,CAAC,CAAC,CAAC;KACrB;CACF,CAAC;;;AAGF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE,GAAG,EAAC;AACxC,SAAO,GAAG,GAAG,CAAC;AACd,YAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;CAC7B,CAAC;;AAEF,IAAI,4BAAS,UAAU,KAAK,UAAU,EAAE;AACtC,eAAa,GAAG,IAAI,CAAC;CACtB,MAAM;AACL,QAAM,CAAC,GAAG,4BAAS,MAAM,EAAE,YAAU;AACnC,iBAAa,GAAG,IAAI,CAAC;GACtB,CAAC,CAAC;CACJ;;AAED,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAc;AACzB,SAAO,aAAa,CAAC;CACtB,CAAC;;QAEO,SAAS,GAAT,SAAS;QAAE,gBAAgB,GAAhB,gBAAgB;QAAE,SAAS,GAAT,SAAS;;;;;;;;;;;;;;;;;;2BCvFzB,iBAAiB;;;;0BAClB,iBAAiB;;IAA1B,GAAG;;8BACM,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;;;IAU5B,MAAM;YAAN,MAAM;;AAEC,WAFP,MAAM,CAEE,MAAM,EAAE,OAAO,EAAE;0BAFzB,MAAM;;AAGR,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;;;AAGvB,QAAI,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;;;AAGhD,QAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;AAExC,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC3C,QAAI,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAC5C,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEnC,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;GAChD;;;;;;;;;;;AAnBG,QAAM,WA6BV,QAAQ,GAAA,kBAAC,IAAI,EAA2B;QAAzB,KAAK,yDAAC,EAAE;QAAE,UAAU,yDAAC,EAAE;;;AAEpC,SAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,GAAG,aAAa,CAAC;AAClD,SAAK,GAAG,0BAAO;AACb,cAAQ,EAAE,CAAC;KACZ,EAAE,KAAK,CAAC,CAAC;;AAEV,cAAU,GAAG,0BAAO;AAClB,YAAM,EAAE,QAAQ;AAChB,qBAAe,EAAE,CAAC;AAClB,qBAAe,EAAE,CAAC;AAClB,qBAAe,EAAE,GAAG;AACpB,cAAQ,EAAE,CAAC;KACZ,EAAE,UAAU,CAAC,CAAC;;AAEf,WAAO,qBAAM,QAAQ,KAAA,OAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;GAChD;;;;;;;;;AA7CG,QAAM,WAqDV,eAAe,GAAA,yBAAC,KAAK,EAAE;AACrB,SAAK,CAAC,cAAc,EAAE,CAAC;AACvB,OAAG,CAAC,kBAAkB,EAAE,CAAC;;AAEzB,QAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAC7B,QAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;;AAE7B,QAAI,CAAC,EAAE,8BAAW,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACrD,QAAI,CAAC,EAAE,8BAAW,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AACjD,QAAI,CAAC,EAAE,8BAAW,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACrD,QAAI,CAAC,EAAE,8BAAW,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;AAElD,QAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;GAC7B;;;;;;;;AAlEG,QAAM,WAyEV,eAAe,GAAA,2BAAG,EAAE;;;;;;;;AAzEhB,QAAM,WAgFV,aAAa,GAAA,yBAAG;AACd,OAAG,CAAC,oBAAoB,EAAE,CAAC;;AAE3B,QAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAChC,QAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;;AAE/B,QAAI,CAAC,GAAG,8BAAW,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACtD,QAAI,CAAC,GAAG,8BAAW,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;AAClD,QAAI,CAAC,GAAG,8BAAW,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACtD,QAAI,CAAC,GAAG,8BAAW,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;;AAEnD,QAAI,CAAC,MAAM,EAAE,CAAC;GACf;;;;;;;;AA5FG,QAAM,WAmGV,MAAM,GAAA,kBAAG;;;AAGP,QAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO;;;;;AAKtB,QAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACjC,QAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;;;AAGnB,QAAI,CAAC,GAAG,EAAE,OAAO;;;AAGjB,QAAI,OAAO,QAAQ,KAAK,QAAQ,IAC5B,QAAQ,KAAK,QAAQ,IACrB,QAAQ,GAAG,CAAC,IACZ,QAAQ,KAAK,QAAQ,EAAE;AACrB,cAAQ,GAAG,CAAC,CAAC;KAClB;;;AAGD,QAAI,UAAU,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;;AAGnD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,SAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC;KACpC,MAAM;AACL,SAAG,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;KACnC;GACF;;;;;;;;;AAlIG,QAAM,WA0IV,iBAAiB,GAAA,2BAAC,KAAK,EAAC;AACtB,QAAI,QAAQ,GAAG,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,aAAO,QAAQ,CAAC,CAAC,CAAC;KACnB;AACD,WAAO,QAAQ,CAAC,CAAC,CAAC;GACnB;;;;;;;;AAhJG,QAAM,WAuJV,WAAW,GAAA,uBAAG;AACZ,QAAI,CAAC,EAAE,8BAAW,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACnD;;;;;;;;;AAzJG,QAAM,WAiKV,cAAc,GAAA,wBAAC,KAAK,EAAE;AACpB,QAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AAC5C,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,QAAQ,EAAE,CAAC;KACjB,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE;;AACnD,WAAK,CAAC,cAAc,EAAE,CAAC;AACvB,UAAI,CAAC,WAAW,EAAE,CAAC;KACpB;GACF;;;;;;;;AAzKG,QAAM,WAgLV,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,GAAG,8BAAW,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;GACpD;;;;;;;;;;AAlLG,QAAM,WA2LV,WAAW,GAAA,qBAAC,KAAK,EAAE;AACjB,SAAK,CAAC,wBAAwB,EAAE,CAAC;AACjC,SAAK,CAAC,cAAc,EAAE,CAAC;GACxB;;;;;;;;;;AA9LG,QAAM,WAuMV,QAAQ,GAAA,kBAAC,IAAI,EAAE;AACb,QAAI,IAAI,KAAK,SAAS,EAAE;AACtB,aAAO,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;KAChC;;AAED,QAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC;;AAExB,QAAI,IAAI,CAAC,SAAS,EAAE;AAClB,UAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;KACtC,MAAM;AACL,UAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;KACxC;;AAED,WAAO,IAAI,CAAC;GACb;;SArNG,MAAM;;;AAyNZ,yBAAU,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;qBAC/B,MAAM;;;;;;;;;;ACvOrB,SAAS,kBAAkB,CAAC,KAAK,EAAE;AACjC,OAAK,CAAC,gBAAgB,GAAG;AACvB,cAAU,EAAE,KAAK;AACjB,cAAU,EAAE,KAAK;GAClB,CAAC;;AAEF,OAAK,CAAC,eAAe,GAAG,UAAS,UAAU,EAAE,MAAM,EAAE;AACnD,WAAO,UAAU,GAAG,GAAG,GAAG,MAAM,CAAC;GAClC,CAAC;;AAEF,OAAK,CAAC,aAAa,GAAG,UAAS,GAAG,EAAE;AAClC,QAAI,KAAK,GAAG;AACV,gBAAU,EAAE,EAAE;AACd,YAAM,EAAE,EAAE;KACX,CAAC;;AAEF,QAAI,CAAC,GAAG,EAAE,OAAO,KAAK,CAAC;;;;;AAKvB,QAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/B,QAAI,WAAW,YAAA,CAAC;AAChB,QAAI,OAAO,KAAK,CAAC,CAAC,EAAE;AAClB,iBAAW,GAAG,OAAO,GAAG,CAAC,CAAC;KAC3B,MACI;;AAEH,aAAO,GAAG,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACjD,UAAI,OAAO,KAAK,CAAC,EAAE;;AAEjB,eAAO,GAAG,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;OACpC;KACF;AACD,SAAK,CAAC,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC7C,SAAK,CAAC,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;;AAEtD,WAAO,KAAK,CAAC;GACd,CAAC;;AAEF,OAAK,CAAC,eAAe,GAAG,UAAS,OAAO,EAAE;AACxC,WAAO,OAAO,IAAI,KAAK,CAAC,gBAAgB,CAAC;GAC1C,CAAC;;;;AAIF,OAAK,CAAC,OAAO,GAAG,mBAAmB,CAAC;;AAEpC,OAAK,CAAC,cAAc,GAAG,UAAS,GAAG,EAAE;AACnC,WAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;GAChC,CAAC;;;;;;AAMF,OAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC;;;;;;;AAO7B,OAAK,CAAC,iBAAiB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAC;AACxD,QAAI,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;AAC1E,aAAO,OAAO,CAAC;KAChB;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;;;;;;;;AASF,OAAK,CAAC,iBAAiB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAC;AAC3D,QAAI,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAE/C,QAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AAC/C,QAAI,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;GACxC,CAAC;;;AAGF,OAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;;AAErD,SAAO,KAAK,CAAC;CACd;;qBAEc,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;oBCvFhB,QAAQ;;;;0BACJ,iBAAiB;;IAA1B,GAAG;;0BACM,iBAAiB;;IAA1B,GAAG;;iCACiB,yBAAyB;;yBAC1B,cAAc;;;;yBACvB,cAAc;;;;4BACjB,eAAe;;;;4BACf,eAAe;;;;AAElC,IAAI,SAAS,GAAG,0BAAO,SAAS,CAAC;;;;;;;;;;IAS3B,KAAK;YAAL,KAAK;;AAEE,WAFP,KAAK,CAEG,OAAO,EAAE,KAAK,EAAC;0BAFvB,KAAK;;AAGP,qBAAM,OAAO,EAAE,KAAK,CAAC,CAAC;;;AAGtB,QAAI,OAAO,CAAC,MAAM,EAAE;AAClB,UAAI,CAAC,KAAK,CAAC,YAAU;AACnB,YAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAChC,EAAE,IAAI,CAAC,CAAC;KACV;;;;AAID,QAAI,OAAO,CAAC,SAAS,EAAE;AACrB,UAAI,CAAC,KAAK,CAAC,YAAU;AACnB,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,YAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;OACrC,EAAE,IAAI,CAAC,CAAC;KACV;;;;;;AAMD,8BAAO,OAAO,GAAG,0BAAO,OAAO,IAAI,EAAE,CAAC;AACtC,8BAAO,OAAO,CAAC,KAAK,GAAG,0BAAO,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;AAClD,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC7C,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAC7C,8BAAO,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;;AAE7C,QAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;AAC3B,UAAI,CAAC,eAAe,GAAG,SAAS,CAAC;KAClC,CAAC,CAAC;GACJ;;;;;;;;;;;AAnCG,OAAK,WA2CT,QAAQ,GAAA,oBAAG;AACT,QAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;;;;;;AAM5B,QAAI,CAAC,OAAO,CAAC,GAAG,EAAE;AAChB,aAAO,CAAC,GAAG,GAAG,mDAAmD,CAAC;KACnE;;;AAGD,QAAI,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;;;AAG3B,QAAI,SAAS,GAAG,0BAAO;;;AAGrB,qBAAe,EAAE,uBAAuB;AACxC,0BAAoB,EAAE,uBAAuB;AAC7C,+BAAyB,EAAE,uBAAuB;;;AAGlD,gBAAU,EAAE,OAAO,CAAC,QAAQ;AAC5B,eAAS,EAAE,OAAO,CAAC,OAAO;AAC1B,YAAM,EAAE,OAAO,CAAC,IAAI;AACpB,aAAO,EAAE,OAAO,CAAC,KAAK;;KAEvB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;;;AAGtB,QAAI,MAAM,GAAG,0BAAO;AAClB,aAAO,EAAE,QAAQ;AACjB,eAAS,EAAE,SAAS;KACrB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;;AAGnB,QAAI,UAAU,GAAG,0BAAO;AACtB,UAAI,EAAE,KAAK;AACX,YAAM,EAAE,KAAK;AACb,aAAO,EAAE,UAAU;KACpB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;;AAEvB,QAAI,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AACnE,QAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;;AAErB,WAAO,IAAI,CAAC,GAAG,CAAC;GACjB;;;;;;;;AA1FG,OAAK,WAiGT,IAAI,GAAA,gBAAG;AACL,QAAI,IAAI,CAAC,KAAK,EAAE,EAAE;AAChB,UAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;KACxB;AACD,QAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;GACrB;;;;;;;;AAtGG,OAAK,WA6GT,KAAK,GAAA,iBAAG;AACN,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;GACtB;;;;;;;;;;AA/GG,OAAK,WAwHT,GAAG,GAAA,aAAC,IAAG,EAAE;AACP,QAAI,IAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,UAAU,EAAE,CAAC;KAC1B;;;AAGD,WAAO,IAAI,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC;GACzB;;;;;;;;;;AA/HG,OAAK,WAwIT,MAAM,GAAA,gBAAC,GAAG,EAAE;;AAEV,OAAG,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9B,QAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;;;;AAItB,QAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,UAAI,IAAI,GAAG,IAAI,CAAC;AAChB,UAAI,CAAC,UAAU,CAAC,YAAU;AAAE,YAAI,CAAC,IAAI,EAAE,CAAC;OAAE,EAAE,CAAC,CAAC,CAAC;KAChD;GACF;;;;;;;AAnJG,OAAK,WAyJT,OAAO,GAAA,mBAAG;AACR,WAAO,IAAI,CAAC,eAAe,KAAK,SAAS,CAAC;GAC3C;;;;;;;;;AA3JG,OAAK,WAmKT,cAAc,GAAA,wBAAC,IAAI,EAAE;AACnB,QAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/B,QAAI,QAAQ,CAAC,MAAM,EAAE;;AAEnB,UAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3D,UAAI,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;AAE3F,UAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AAC5B,UAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACxB,UAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC9C,sBAAM,cAAc,KAAA,MAAE,CAAC;KACxB;GACF;;;;;;;;;;AA/KG,OAAK,WAwLT,WAAW,GAAA,qBAAC,IAAI,EAAE;;;AAGhB,QAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,aAAO,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;KAClC;AACD,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;GAChD;;;;;;;;AA/LG,OAAK,WAsMT,UAAU,GAAA,sBAAG;AACX,QAAI,IAAI,CAAC,cAAc,EAAE;AACvB,aAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;KAChC,MAAM;AACL,aAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;KAC/C;GACF;;;;;;;;AA5MG,OAAK,WAmNT,IAAI,GAAA,gBAAG;AACL,QAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;GACrB;;;;;;;;AArNG,OAAK,WA4NT,MAAM,GAAA,kBAAG;AACP,QAAI,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;GACpC;;;;;;;;AA9NG,OAAK,WAqOT,SAAS,GAAA,qBAAG,EAAE;;;;;;;;;AArOV,OAAK,WA6OT,QAAQ,GAAA,oBAAG;AACT,QAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AACjC,QAAI,QAAQ,KAAK,CAAC,EAAE;AAClB,aAAO,oCAAiB,CAAC;KAC1B;AACD,WAAO,mCAAgB,CAAC,EAAE,QAAQ,CAAC,CAAC;GACrC;;;;;;;;;AAnPG,OAAK,WA2PT,QAAQ,GAAA,oBAAG;AACT,QAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAClD,QAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACvB,aAAO,oCAAiB,CAAC;KAC1B;AACD,WAAO,mCAAgB,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;GACpD;;;;;;;;;;;AAjQG,OAAK,WA2QT,kBAAkB,GAAA,8BAAG;AACnB,WAAO,KAAK,CAAC;GACd;;;;;;;;;;;AA7QG,OAAK,WAuRT,eAAe,GAAA,2BAAG;AAChB,WAAO,KAAK,CAAC;GACd;;SAzRG,KAAK;;;AA+RX,IAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC;AAC7B,IAAM,UAAU,GAAG,2IAA2I,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC1K,IAAM,SAAS,GAAG,0HAA0H,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;AAExJ,SAAS,aAAa,CAAC,IAAI,EAAC;AAC1B,MAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7D,MAAI,CAAC,KAAK,GAAC,SAAS,CAAC,GAAG,UAAS,GAAG,EAAC;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;GAAE,CAAC;CACtF;AACD,SAAS,aAAa,CAAC,IAAI,EAAE;AAC3B,MAAI,CAAC,IAAI,CAAC,GAAG,YAAU;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;GAAE,CAAC;CACnE;;;AAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,eAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7B,eAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;CAC9B;;;AAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACzC,eAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;CAC7B;;;;AAID,KAAK,CAAC,WAAW,GAAG,YAAU;AAC5B,SAAO,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;;CAEjC,CAAC;;;AAGF,kBAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;;;;;;;;;AAS/B,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ/B,KAAK,CAAC,mBAAmB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAC;AAC1D,MAAI,IAAI,CAAC;;AAET,WAAS,aAAa,CAAC,GAAG,EAAE;AAC1B,QAAI,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;AACpC,QAAI,GAAG,EAAE;AACP,wBAAgB,GAAG,CAAG;KACvB;AACD,WAAO,EAAE,CAAC;GACX;;AAED,MAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AAChB,QAAI,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;GAClC,MAAM;;AAEL,QAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;GACrD;;AAED,MAAI,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB,WAAO,OAAO,CAAC;GAChB;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;;AAUF,KAAK,CAAC,mBAAmB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAC;AAC7D,MAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACzB,CAAC;;;;;;AAMF,KAAK,CAAC,mBAAmB,CAAC,OAAO,GAAG,YAAU,EAAE,CAAC;;;AAGjD,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;AAEvD,KAAK,CAAC,OAAO,GAAG;AACd,aAAW,EAAE,KAAK;AAClB,eAAa,EAAE,KAAK;AACpB,aAAW,EAAE,KAAK;AAClB,aAAW,EAAE,KAAK;CACnB,CAAC;;AAEF,KAAK,CAAC,OAAO,GAAG,UAAS,OAAO,EAAC;AAC/B,MAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5B,MAAI,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC;;;;AAIzB,MAAI,IAAI,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE;;AAErB,SAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;GACxB;CACF,CAAC;;;;AAIF,KAAK,CAAC,UAAU,GAAG,UAAS,IAAI,EAAC;;AAE/B,MAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE;AACd,WAAO;GACR;;;AAGD,MAAI,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,EAAE;;AAE7B,QAAI,CAAC,YAAY,EAAE,CAAC;GACrB,MAAM;;AAEL,QAAI,CAAC,UAAU,CAAC,YAAU;AACxB,WAAK,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;KAC3B,EAAE,EAAE,CAAC,CAAC;GACR;CACF,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE,SAAS,EAAC;AACxC,MAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AACjC,MAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;CACzB,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,UAAS,KAAK,EAAE,GAAG,EAAC;AAClC,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;;;AAGnC,MAAI,GAAG,KAAK,aAAa,EAAE;AACzB,WAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;GACtB;;;AAGD,MAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;CAC7B,CAAC;;;AAGF,KAAK,CAAC,OAAO,GAAG,YAAU;AACxB,MAAI,OAAO,GAAG,OAAO,CAAC;;;AAGtB,MAAI;AACF,WAAO,GAAG,IAAI,0BAAO,aAAa,CAAC,+BAA+B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;;;GAGzI,CAAC,OAAM,CAAC,EAAE;AACT,QAAI;AACF,UAAI,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC,aAAa,EAAC;AACrE,eAAO,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA,CAAE,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;OACtJ;KACF,CAAC,OAAM,GAAG,EAAE,EAAE;GAChB;AACD,SAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CAC3B,CAAC;;;AAGF,KAAK,CAAC,KAAK,GAAG,UAAS,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC;AACxD,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;;;AAGpE,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;;AAEnE,SAAO,GAAG,CAAC;CACZ,CAAC;;AAEF,KAAK,CAAC,YAAY,GAAG,UAAS,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC;AAC/D,MAAM,MAAM,GAAG,+CAA+C,CAAC;AAC/D,MAAI,eAAe,GAAG,EAAE,CAAC;AACzB,MAAI,YAAY,GAAG,EAAE,CAAC;AACtB,MAAI,WAAW,GAAG,EAAE,CAAC;;;AAGrB,MAAI,SAAS,EAAE;AACb,UAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AACzD,qBAAe,IAAO,GAAG,SAAI,SAAS,CAAC,GAAG,CAAC,UAAO,CAAC;KACpD,CAAC,CAAC;GACJ;;;AAGD,QAAM,GAAG,0BAAO;AACd,WAAO,EAAE,GAAG;AACZ,eAAW,EAAE,eAAe;AAC5B,uBAAmB,EAAE,QAAQ;AAC7B,qBAAiB,EAAE,KAAK;GACzB,EAAE,MAAM,CAAC,CAAC;;;AAGX,QAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AACtD,gBAAY,sBAAoB,GAAG,iBAAY,MAAM,CAAC,GAAG,CAAC,SAAM,CAAC;GAClE,CAAC,CAAC;;AAEH,YAAU,GAAG,0BAAO;;AAElB,UAAM,EAAE,GAAG;;;AAGX,WAAO,EAAE,MAAM;AACf,YAAQ,EAAE,MAAM;;GAEjB,EAAE,UAAU,CAAC,CAAC;;;AAGf,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,GAAG,EAAC;AAC1D,eAAW,IAAO,GAAG,UAAK,UAAU,CAAC,GAAG,CAAC,OAAI,CAAC;GAC/C,CAAC,CAAC;;AAEH,cAAU,MAAM,GAAG,WAAW,SAAI,YAAY,eAAY;CAC3D,CAAC;;;AAGF,uBAAmB,KAAK,CAAC,CAAC;;AAE1B,uBAAU,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC7B,KAAK;;;;;;;;;;;;;;;;;;;;;sBCxhBH,WAAW;;;;yBACN,cAAc;;;;0BACf,iBAAiB;;IAA1B,GAAG;;0BACM,iBAAiB;;IAA1B,GAAG;;yBACK,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;8BACR,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;4BACnB,eAAe;;;;4BACf,eAAe;;;;mCACT,2BAA2B;;;;;;;;;;;;;IAU9C,KAAK;YAAL,KAAK;;AAEE,WAFP,KAAK,CAEG,OAAO,EAAE,KAAK,EAAC;0BAFvB,KAAK;;AAGP,qBAAM,OAAO,EAAE,KAAK,CAAC,CAAC;;AAEtB,QAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;;;;;AAM9B,QAAI,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,CAAC,GAAG,IAAK,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,CAAC,CAAC,AAAC,EAAE;AAC1G,UAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB,MAAM;AACL,UAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChC;;AAED,QAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE;;AAE5B,UAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAChC,UAAI,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;AAC/B,UAAI,WAAW,GAAG,EAAE,CAAC;;AAErB,aAAO,WAAW,EAAE,EAAE;AACpB,YAAI,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;AAC9B,YAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAC3C,YAAI,QAAQ,KAAK,OAAO,EAAE;AACxB,cAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;;;;;AAKlC,uBAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;WACxB,MAAM;AACL,gBAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;WAC/C;SACF;OACF;;AAED,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACvC,YAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;OACtC;KACF;;AAED,QAAI,IAAI,CAAC,wBAAwB,EAAE;AACjC,UAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACxE,UAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAClE,UAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC;AACxE,UAAI,CAAC,sBAAsB,EAAE,CAAC;KAC/B;;;;;;AAMD,QAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,sBAAsB,KAAK,IAAI,IAChE,OAAO,CAAC,SAAS,IACjB,OAAO,CAAC,iBAAiB,EAAE;AAC7B,UAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACxB;;AAED,QAAI,CAAC,YAAY,EAAE,CAAC;GACrB;;;;;;;;;;;;;;;;;;AA9DG,OAAK,WAqET,OAAO,GAAA,mBAAG;AACR,QAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;AAC9B,QAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;;AAGnC,QAAI,EAAE,IAAI,EAAE,CAAC,mBAAmB,EAAE;AAChC,QAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC9D,QAAE,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC7D,QAAE,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;KACpE;;;AAGD,QAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;;AAE1B,WAAO,CAAC,EAAE,EAAE;AACV,gBAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;KACxC;;AAGD,SAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpC,oBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;AA1FG,OAAK,WAkGT,QAAQ,GAAA,oBAAG;AACT,QAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;;;;;AAK3B,QAAI,CAAC,EAAE,IAAI,IAAI,CAAC,yBAAyB,CAAC,KAAK,KAAK,EAAE;;;AAGpD,UAAI,EAAE,EAAE;AACN,YAAM,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACjC,UAAE,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACtC,aAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;AAC9B,UAAE,GAAG,KAAK,CAAC;OACZ,MAAM;AACL,UAAE,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;;AAGrC,YAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChF,YAAI,UAAU,GAAG,iCAAa,EAAE,EAAE,aAAa,CAAC,CAAC;AACjD,YAAI,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,KAAK,IAAI,EAAE;AAC3E,iBAAO,UAAU,CAAC,QAAQ,CAAC;SAC5B;;AAED,WAAG,CAAC,eAAe,CAAC,EAAE,EACpB,0BAAO,UAAU,EAAE;AACjB,YAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;AACxB,mBAAO,UAAU;SAClB,CAAC,CACH,CAAC;OACH;KACF;;;AAGD,QAAI,aAAa,GAAG,CAAC,UAAU,EAAC,SAAS,EAAC,MAAM,EAAC,OAAO,CAAC,CAAC;AAC1D,SAAK,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAClD,UAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9B,UAAI,cAAc,GAAG,EAAE,CAAC;AACxB,UAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE;AAC9C,sBAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;OAC5C;AACD,SAAG,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;KACzC;;AAED,WAAO,EAAE,CAAC;;GAEX;;;;;;;AAhJG,OAAK,WAsJT,eAAe,GAAA,yBAAC,EAAE,EAAE;;;AAClB,QAAI,EAAE,CAAC,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC,YAAY,KAAK,CAAC,EAAE;;;AAGlD,aAAO;KACR;;AAED,QAAI,EAAE,CAAC,UAAU,KAAK,CAAC,EAAE;;;;;;;;;;;;AAWvB,YAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,YAAI,iBAAiB,GAAG,SAApB,iBAAiB,GAAc;AACjC,wBAAc,GAAG,IAAI,CAAC;SACvB,CAAC;AACF,cAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;;AAExC,YAAI,gBAAgB,GAAG,SAAnB,gBAAgB,GAAc;;;AAGhC,cAAI,CAAC,cAAc,EAAE;AACnB,gBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;WAC3B;SACF,CAAC;AACF,cAAK,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;;AAE5C,cAAK,KAAK,CAAC,YAAU;AACnB,cAAI,CAAC,GAAG,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;AACzC,cAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;;AAE7C,cAAI,CAAC,cAAc,EAAE;;AAEnB,gBAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;WAC3B;SACF,CAAC,CAAC;;AAEH;;UAAO;;;;KACR;;;;;;AAMD,QAAI,eAAe,GAAG,CAAC,WAAW,CAAC,CAAC;;;AAGpC,mBAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;;AAGvC,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACpC;;;AAGD,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACjC;;;AAGD,QAAI,EAAE,CAAC,UAAU,IAAI,CAAC,EAAE;AACtB,qBAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KACxC;;;AAGD,QAAI,CAAC,KAAK,CAAC,YAAU;AACnB,qBAAe,CAAC,OAAO,CAAC,UAAS,IAAI,EAAC;AACpC,YAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;OACpB,EAAE,IAAI,CAAC,CAAC;KACV,CAAC,CAAC;GACJ;;AAlOG,OAAK,WAoOT,sBAAsB,GAAA,kCAAG;AACvB,QAAI,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC;;AAE9B,QAAI,EAAE,IAAI,EAAE,CAAC,gBAAgB,EAAE;AAC7B,QAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAC3D,QAAE,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC1D,QAAE,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;KACjE;GACF;;AA5OG,OAAK,WA8OT,qBAAqB,GAAA,+BAAC,CAAC,EAAE;AACvB,QAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC3B,QAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AACxB,UAAI,EAAE,QAAQ;AACd,YAAM,EAAE,EAAE;AACV,mBAAa,EAAE,EAAE;AACjB,gBAAU,EAAE,EAAE;KACf,CAAC,CAAC;GACJ;;AAtPG,OAAK,WAwPT,kBAAkB,GAAA,4BAAC,CAAC,EAAE;AACpB,QAAI,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACtC;;AA1PG,OAAK,WA4PT,qBAAqB,GAAA,+BAAC,CAAC,EAAE;AACvB,QAAI,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;GACzC;;;;;;;;AA9PG,OAAK,WAqQT,IAAI,GAAA,gBAAG;AAAE,QAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GAAE;;;;;;;;AArQvB,OAAK,WA4QT,KAAK,GAAA,iBAAG;AAAE,QAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;GAAE;;;;;;;;;AA5QzB,OAAK,WAoRT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AApRhC,OAAK,WA4RT,WAAW,GAAA,uBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AA5R1C,OAAK,WAoST,cAAc,GAAA,wBAAC,OAAO,EAAE;AACtB,QAAI;AACF,UAAI,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC;KAChC,CAAC,OAAM,CAAC,EAAE;AACT,8BAAI,CAAC,EAAE,gCAAgC,CAAC,CAAC;;KAE1C;GACF;;;;;;;;;AA3SG,OAAK,WAmTT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;GAAE;;;;;;;;;;;AAnTzC,OAAK,WA6TT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AA7TpC,OAAK,WAqUT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AArUhC,OAAK,WA6UT,SAAS,GAAA,mBAAC,gBAAgB,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,MAAM,GAAG,gBAAgB,CAAC;GAAE;;;;;;;;;AA7U/D,OAAK,WAqVT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;AArV9B,OAAK,WA6VT,QAAQ,GAAA,kBAAC,KAAK,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;GAAE;;;;;;;;;AA7VvC,OAAK,WAqWT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AArWpC,OAAK,WA6WT,MAAM,GAAA,kBAAG;AAAG,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;AA7WvC,OAAK,WAqXT,kBAAkB,GAAA,8BAAG;AACnB,QAAI,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,KAAK,UAAU,EAAE;AACxD,UAAI,SAAS,GAAG,0BAAO,SAAS,CAAC,SAAS,CAAC;;AAE3C,UAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACxE,eAAO,IAAI,CAAC;OACb;KACF;AACD,WAAO,KAAK,CAAC;GACd;;;;;;;;AA9XG,OAAK,WAqYT,eAAe,GAAA,2BAAG;AAChB,QAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC;;AAErB,QAAI,4BAA4B,IAAI,KAAK,EAAE;AACzC,UAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,YAAW;AAC3C,YAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,YAAW;AACzC,cAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;SAC3D,CAAC,CAAC;;AAEH,YAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;OAC1D,CAAC,CAAC;KACJ;;AAED,QAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,aAAa,EAAE;;;AAG7D,UAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;;;;AAIhB,UAAI,CAAC,UAAU,CAAC,YAAU;AACxB,aAAK,CAAC,KAAK,EAAE,CAAC;AACd,aAAK,CAAC,qBAAqB,EAAE,CAAC;OAC/B,EAAE,CAAC,CAAC,CAAC;KACP,MAAM;AACL,WAAK,CAAC,qBAAqB,EAAE,CAAC;KAC/B;GACF;;;;;;;;AAhaG,OAAK,WAuaT,cAAc,GAAA,0BAAG;AACf,QAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;GACjC;;;;;;;;;;AAzaG,OAAK,WAkbT,GAAG,GAAA,aAAC,IAAG,EAAE;AACP,QAAI,IAAG,KAAK,SAAS,EAAE;AACrB,aAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KACrB,MAAM;;AAEL,UAAI,CAAC,MAAM,CAAC,IAAG,CAAC,CAAC;KAClB;GACF;;;;;;;;;;AAzbG,OAAK,WAkcT,MAAM,GAAA,gBAAC,GAAG,EAAE;AACV,QAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GACpB;;;;;;;;AApcG,OAAK,WA2cT,IAAI,GAAA,gBAAE;AACJ,QAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;GACjB;;;;;;;;;AA7cG,OAAK,WAqdT,UAAU,GAAA,sBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GAAE;;;;;;;;;AArdxC,OAAK,WA6dT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AA7dhC,OAAK,WAqeT,SAAS,GAAA,mBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AArerC,OAAK,WA6eT,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;GAAE;;;;;;;;;AA7elC,OAAK,WAqfT,UAAU,GAAA,oBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AArfvC,OAAK,WA6fT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AA7fpC,OAAK,WAqgBT,WAAW,GAAA,qBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AArgBzC,OAAK,WA6gBT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AA7gBpC,OAAK,WAqhBT,WAAW,GAAA,qBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC;GAAE;;;;;;;;;AArhB3C,OAAK,WA6hBT,IAAI,GAAA,gBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;GAAE;;;;;;;;;AA7hB5B,OAAK,WAqiBT,OAAO,GAAA,iBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;GAAE;;;;;;;;;AAriBjC,OAAK,WA6iBT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;AA7iB9B,OAAK,WAqjBT,OAAO,GAAA,mBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;GAAE;;;;;;;;;;;AArjBlC,OAAK,WA+jBT,QAAQ,GAAA,oBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;GAAE;;;;;;;;;AA/jBpC,OAAK,WAukBT,KAAK,GAAA,iBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;GAAE;;;;;;;;;;;AAvkB9B,OAAK,WAilBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;AAjlB5C,OAAK,WAylBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;;AAzlB5C,OAAK,WAkmBT,MAAM,GAAA,kBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;GAAE;;;;;;;;;AAlmBhC,OAAK,WA0mBT,eAAe,GAAA,yBAAC,GAAG,EAAE;AAAE,QAAI,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;GAAE;;;;;;;;;;;;;;AA1mBjD,OAAK,WAunBT,YAAY,GAAA,wBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;GAAE;;;;;;;;;;;;;;;;AAvnB5C,OAAK,WAsoBT,UAAU,GAAA,sBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GAAE;;;;;;;;;AAtoBxC,OAAK,WA8oBT,UAAU,GAAA,sBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;GAAE;;;;;;;;;AA9oBxC,OAAK,WAspBT,WAAW,GAAA,uBAAG;AAAE,WAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;GAAE;;;;;;;;;AAtpB1C,OAAK,WA8pBT,UAAU,GAAA,sBAAG;AACX,WAAO,gBAAM,UAAU,KAAA,MAAE,CAAC;GAC3B;;;;;;;;;;;;;AAhqBG,OAAK,WA4qBT,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,YAAY,KAAA,OAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;KAClD;;AAED,WAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACrD;;;;;;;;;;;AAlrBG,OAAK,WA4rBT,kBAAkB,GAAA,8BAAa;QAAZ,OAAO,yDAAC,EAAE;;AAC3B,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,kBAAkB,KAAA,OAAC,OAAO,CAAC,CAAC;KAC1C;;AAED,QAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;AAE5C,QAAI,OAAO,CAAC,MAAM,CAAC,EAAE;AACnB,WAAK,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;KACjC;AACD,QAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACpB,WAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACnC;AACD,QAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AAC7C,WAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;KAC9D;AACD,QAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACtB,WAAK,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;KACvC;AACD,QAAI,OAAO,CAAC,IAAI,CAAC,EAAE;AACjB,WAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC7B;AACD,QAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AAClB,WAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;KAC/B;;AAED,QAAI,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;AAE7B,QAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAE/C,WAAO,KAAK,CAAC;GACd;;;;;;;;;AA3tBG,OAAK,WAmuBT,qBAAqB,GAAA,+BAAC,KAAK,EAAE;AAC3B,QAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,EAAE;AACrC,aAAO,gBAAM,qBAAqB,KAAA,OAAC,KAAK,CAAC,CAAC;KAC3C;;AAED,QAAI,MAAM,EAAE,CAAC,CAAC;;AAEd,QAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAE5C,UAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;;AAE7C,KAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AAClB,WAAO,CAAC,EAAE,EAAE;AACV,UAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;AACpD,YAAI,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;OAClC;KACF;GACF;;SApvBG,KAAK;;;AAkwBX,KAAK,CAAC,QAAQ,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AACjD,IAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AACxB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;AACxB,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;;;;;;;AAOlC,KAAK,CAAC,WAAW,GAAG,YAAU;;AAE5B,MAAI;AACF,SAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;GAChC,CAAC,OAAO,CAAC,EAAE;AACV,WAAO,KAAK,CAAC;GACd;;AAED,SAAO,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;CACrC,CAAC;;;AAGF,oBAAK,kBAAkB,CAAC,KAAK,CAAC,CAAC;;;;;;;;;AAS/B,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC;;;;;;;;AAQ/B,KAAK,CAAC,mBAAmB,CAAC,eAAe,GAAG,UAAS,MAAM,EAAC;AAC1D,MAAI,KAAK,EAAE,GAAG,CAAC;;AAEf,WAAS,WAAW,CAAC,IAAI,EAAC;;;AAGxB,QAAI;AACF,aAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACzC,CAAC,OAAM,CAAC,EAAE;AACT,aAAO,EAAE,CAAC;KACX;GACF;;;AAGD,MAAI,MAAM,CAAC,IAAI,EAAE;AACf,WAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;GACjC,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE;;AAErB,OAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAEvC,WAAO,WAAW,YAAU,GAAG,CAAG,CAAC;GACpC;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;;AAUF,KAAK,CAAC,mBAAmB,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE,IAAI,EAAC;AAC7D,MAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CACzB,CAAC;;;;;;AAMF,KAAK,CAAC,mBAAmB,CAAC,OAAO,GAAG,YAAU,EAAE,CAAC;;;AAGjD,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;;;;;;;;;AASvD,KAAK,CAAC,gBAAgB,GAAG,YAAU;AACjC,MAAI,MAAM,GAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,OAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,AAAC,MAAM,GAAG,CAAC,GAAI,GAAG,CAAC;AAC3C,SAAO,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;CACzC,CAAC;;;;;;;AAOF,KAAK,CAAC,sBAAsB,GAAG,YAAU;AACvC,MAAI,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;AAC/C,OAAK,CAAC,QAAQ,CAAC,YAAY,GAAG,AAAC,YAAY,GAAG,CAAC,GAAI,GAAG,CAAC;AACvD,SAAO,YAAY,KAAK,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;CACrD,CAAC;;;;;;;AAOF,KAAK,CAAC,wBAAwB,GAAG,YAAW;AAC1C,MAAI,kBAAkB,CAAC;;;;;;;AAOvB,oBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;AACjD,MAAI,kBAAkB,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,sBAAkB,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;GAC/E;AACD,MAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE;AAC5C,sBAAkB,GAAG,KAAK,CAAC;GAC5B;AACD,MAAI,kBAAkB,IAAI,EAAE,eAAe,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAA,AAAC,EAAE;AACzE,sBAAkB,GAAG,KAAK,CAAC;GAC5B;;AAED,SAAO,kBAAkB,CAAC;CAC3B,CAAC;;;;;;;;AAQF,KAAK,CAAC,MAAM,GAAG,CACb,WAAW,EACX,SAAS,EACT,OAAO,EACP,OAAO,EACP,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,YAAY,EACZ,cAAc,CACf,CAAC;;;;;;;AAOF,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;;;;;;;AAOpE,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC,sBAAsB,EAAE,CAAC;;;;;;;;AAQzE,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;;;;;;;AAO7D,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,IAAI,CAAC;;;;;;AAMnD,KAAK,CAAC,SAAS,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC;;;;;;;AAOjD,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,wBAAwB,EAAE,CAAC;;;AAG/E,IAAI,WAAW,YAAA,CAAC;AAChB,IAAM,SAAS,GAAG,2CAA2C,CAAC;AAC9D,IAAM,KAAK,GAAG,cAAc,CAAC;;AAE7B,KAAK,CAAC,gBAAgB,GAAG,YAAW;;AAElC,MAAI,OAAO,CAAC,eAAe,IAAI,GAAG,EAAE;AAClC,QAAI,CAAC,WAAW,EAAE;AAChB,iBAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;KAChE;;AAED,SAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,UAAS,IAAI,EAAE;AAChE,UAAI,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAChC,eAAO,OAAO,CAAC;OAChB;AACD,aAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACrC,CAAC;GACH;;;AAGD,MAAI,OAAO,CAAC,cAAc,EAAE;AAC1B,QAAI,CAAC,WAAW,EAAE;AAChB,iBAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;KAChE;;AAED,SAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,UAAS,IAAI,EAAC;AAC/D,UAAI,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5B,eAAO,OAAO,CAAC;OAChB;AACD,aAAO,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACrC,CAAC;GACH;CACF,CAAC;;AAEF,KAAK,CAAC,kBAAkB,GAAG,YAAW;AACpC,MAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC;AACzD,OAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/D,aAAW,GAAG,IAAI,CAAC;AACnB,SAAO,CAAC,CAAC;CACV,CAAC;;;AAGF,KAAK,CAAC,gBAAgB,EAAE,CAAC;;AAEzB,KAAK,CAAC,mBAAmB,GAAG,UAAS,EAAE,EAAC;AACtC,MAAI,CAAC,EAAE,EAAE;AAAE,WAAO;GAAE;;AAEpB,MAAI,EAAE,CAAC,UAAU,EAAE;AACjB,MAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;GAC/B;;;AAGD,SAAM,EAAE,CAAC,aAAa,EAAE,EAAE;AACxB,MAAE,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;GAC/B;;;;AAID,IAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;;;;AAI1B,MAAI,OAAO,EAAE,CAAC,IAAI,KAAK,UAAU,EAAE;;AAEjC,KAAC,YAAW;AACV,UAAI;AACF,UAAE,CAAC,IAAI,EAAE,CAAC;OACX,CAAC,OAAO,CAAC,EAAE;;OAEX;KACF,CAAA,EAAG,CAAC;GACN;CACF,CAAC;;AAEF,uBAAU,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;qBAC7B,KAAK;;;;;;;;;;;;;;;;;yBCxjCE,cAAc;;;;4BACjB,eAAe;;;;kCACV,2BAA2B;;;;;;;;;;;;;;;IAY7C,WAAW;YAAX,WAAW;;AAEJ,WAFP,WAAW,CAEH,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,WAAW;;AAGb,0BAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;;AAK9B,QAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACtF,WAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC,GAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnE,YAAI,QAAQ,GAAG,gCAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,YAAI,IAAI,GAAG,uBAAU,YAAY,CAAC,QAAQ,CAAC,CAAC;;;AAG5C,YAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AAC9B,gBAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC3B,gBAAM;SACP;OACF;KACF,MAAM;;;;;AAKL,YAAM,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;KAC9C;GACF;;SA1BG,WAAW;;;AA6BjB,uBAAU,iBAAiB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;qBACzC,WAAW;;;;;;;;;;;;;;;;;;;;;;yBCzCJ,cAAc;;;;+BACd,sBAAsB;;;;mCAClB,2BAA2B;;;;yBACjC,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;iCACD,yBAAyB;;6BACzB,oBAAoB;;4BAC7B,mBAAmB;;;;4BACvB,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;IAUhC,IAAI;YAAJ,IAAI;;AAEG,WAFP,IAAI,GAEmC;QAA/B,OAAO,yDAAC,EAAE;QAAE,KAAK,yDAAC,YAAU,EAAE;;0BAFtC,IAAI;;;;AAKN,WAAO,CAAC,mBAAmB,GAAG,KAAK,CAAC;AACpC,0BAAM,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;;;AAI5B,QAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,UAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KACzB,CAAC,CAAC;AACH,QAAI,CAAC,EAAE,CAAC,WAAW,EAAE,YAAW;AAC9B,UAAI,CAAC,WAAW,GAAG,KAAK,CAAC;KAC1B,CAAC,CAAC;;AAEH,QAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;;;AAGtC,QAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;AAChC,UAAI,CAAC,gBAAgB,EAAE,CAAC;KACzB;;;AAGD,QAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,UAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;;AAED,QAAI,OAAO,CAAC,cAAc,KAAK,KAAK,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;AAC1E,UAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;KACvC;;AAED,QAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;AAClC,UAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;;AAED,QAAI,CAAC,sBAAsB,EAAE,CAAC;;;AAG9B,QAAI,CAAC,aAAa,EAAE,CAAC;GACtB;;;;;;;;;;;;;;;;;;;AA1CG,MAAI,WAqDR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;;AAEjD,QAAI,CAAC,cAAc,GAAG,IAAI,CAAC;;;AAG3B,QAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;GACvC;;;;;;;;AA5DG,MAAI,WAmER,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,cAAc,GAAG,KAAK,CAAC;AAC5B,QAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5B,QAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;GACnD;;;;;;;;AAxEG,MAAI,WA+ER,aAAa,GAAA,yBAAG;AACd,QAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAU;;;AAG/D,UAAI,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;;AAEhD,UAAI,IAAI,CAAC,gBAAgB,KAAK,kBAAkB,EAAE;AAChD,YAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;OAC1B;;AAED,UAAI,CAAC,gBAAgB,GAAG,kBAAkB,CAAC;;AAE3C,UAAI,kBAAkB,KAAK,CAAC,EAAE;AAC5B,YAAI,CAAC,oBAAoB,EAAE,CAAC;OAC7B;KACF,CAAC,EAAE,GAAG,CAAC,CAAC;GACV;;;;;;;;AAhGG,MAAI,WAuGR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;GAClC;;;;;;;;;AAzGG,MAAI,WAiHR,QAAQ,GAAA,oBAAG;AACT,WAAO,mCAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;GAC9B;;;;;;;;;AAnHG,MAAI,WA2HR,eAAe,GAAA,2BAAG;AAChB,WAAO,+BAAgB,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;GACzD;;;;;;;;AA7HG,MAAI,WAoIR,oBAAoB,GAAA,gCAAG;AACrB,QAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;GAC3C;;;;;;;;;AAtIG,MAAI,WA8IR,mBAAmB,GAAA,+BAAG;AACpB,QAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;;AAE9B,QAAI,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACvC,QAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;GAChD;;;;;;;;AAnJG,MAAI,WA0JR,oBAAoB,GAAA,gCAAG;AACrB,QAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;AAC/B,QAAI,CAAC,uBAAuB,EAAE,CAAC;AAC/B,QAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;AACxC,QAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;GACjD;;;;;;;;AA/JG,MAAI,WAsKR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,IAAI,CAAC,mBAAmB,EAAE;AAAE,UAAI,CAAC,uBAAuB,EAAE,CAAC;KAAE;AACjE,QAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,YAAU;AACpD,UAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;KAC7E,EAAE,GAAG,CAAC,CAAC;GACT;;;;;;;;AA3KG,MAAI,WAkLR,uBAAuB,GAAA,mCAAG;AACxB,QAAI,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;;;;AAI7C,QAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;GAC7E;;;;;;;;AAxLG,MAAI,WA+LR,OAAO,GAAA,mBAAG;;AAER,QAAI,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAEnC,QAAI,UAAU,EAAE;AACd,UAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;AAC1B,aAAM,CAAC,EAAE,EAAE;AACT,YAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;OAC3C;KACF;;;AAGD,QAAI,IAAI,CAAC,cAAc,EAAE;AAAE,UAAI,CAAC,iBAAiB,EAAE,CAAC;KAAE;;AAEtD,QAAI,IAAI,CAAC,iBAAiB,EAAE;AAAE,UAAI,CAAC,oBAAoB,EAAE,CAAC;KAAE;;AAE5D,yBAAM,OAAO,KAAA,MAAE,CAAC;GACjB;;;;;;;;;;;;AAhNG,MAAI,WA2NR,KAAK,GAAA,eAAC,GAAG,EAAE;AACT,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,UAAI,GAAG,qCAAsB,EAAE;AAC7B,YAAI,CAAC,MAAM,GAAG,GAAG,CAAC;OACnB,MAAM;AACL,YAAI,CAAC,MAAM,GAAG,8BAAe,GAAG,CAAC,CAAC;OACnC;AACD,UAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;KACvB;AACD,WAAO,IAAI,CAAC,MAAM,CAAC;GACpB;;;;;;;;;;;;AArOG,MAAI,WAgPR,MAAM,GAAA,kBAAG;AACP,QAAI,IAAI,CAAC,WAAW,EAAE;AACpB,aAAO,mCAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9B;AACD,WAAO,oCAAiB,CAAC;GAC1B;;;;;;;;AArPG,MAAI,WA4PR,cAAc,GAAA,0BAAG;;AAEf,QAAI,IAAI,CAAC,iBAAiB,EAAE;AAAE,UAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;KAAE;GAC7G;;;;;;;;AA/PG,MAAI,WAsQR,sBAAsB,GAAA,kCAAG;AACvB,QAAI,oBAAoB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAClD,UAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;KACjC,CAAC,CAAC;;AAEH,QAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE/B,QAAI,CAAC,MAAM,EAAE,OAAO;;AAEpB,UAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;AAC7D,UAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;;AAE1D,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAC1C,YAAM,CAAC,mBAAmB,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;AAChE,YAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;KAC9D,CAAC,CAAC,CAAC;GACL;;;;;;;;AAtRG,MAAI,WA6RR,iBAAiB,GAAA,6BAAG;AAClB,QAAI,CAAC,0BAAO,QAAQ,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI,EAAE;AACrD,UAAI,MAAM,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;AAC9C,YAAM,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,oCAAoC,CAAC;AAC7E,UAAI,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACzC,gCAAO,QAAQ,CAAC,GAAG,IAAI,CAAC;KACzB;;AAED,QAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAC/B,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;AAED,QAAI,iBAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;;;AAC/C,UAAI,aAAa,GAAG,SAAhB,aAAa;eAAS,MAAK,OAAO,CAAC,iBAAiB,CAAC;OAAA,CAAC;;AAE1D,mBAAa,EAAE,CAAC;;AAEhB,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,aAAK,CAAC,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACtD,YAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;AAC5B,eAAK,CAAC,gBAAgB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;SACpD;OACF;KACF,CAAC,CAAC;;AAEH,UAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;;AAErD,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;AAC5B,YAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;KACzD,CAAC,CAAC;GACJ;;;;;;;;;;;;;;;AA7TG,MAAI,WA2UR,UAAU,GAAA,sBAAG;AACX,QAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,sCAAmB,CAAC;AAC3D,WAAO,IAAI,CAAC,WAAW,CAAC;GACzB;;;;;;;;;AA9UG,MAAI,WAsVR,gBAAgB,GAAA,4BAAG;AACjB,QAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,sCAAmB,CAAC;AACvE,WAAO,IAAI,CAAC,iBAAiB,CAAC;GAC/B;;;;;;;;;;;;;AAzVG,MAAI,WAqWR,YAAY,GAAA,sBAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AAClC,QAAI,CAAC,IAAI,EAAE;AACT,YAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;KACpE;;AAED,WAAO,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;GACvD;;;;;;;;;;;AA3WG,MAAI,WAqXR,kBAAkB,GAAA,4BAAC,OAAO,EAAE;AAC1B,QAAI,KAAK,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5F,QAAI,CAAC,gBAAgB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,WAAO;AACL,WAAK,EAAE,KAAK;KACb,CAAC;GACH;;;;;;;;;AA3XG,MAAI,WAmYR,qBAAqB,GAAA,+BAAC,KAAK,EAAE;AAC3B,QAAI,CAAC,UAAU,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACtC,QAAI,CAAC,gBAAgB,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;GAC7C;;;;;;;;;;AAtYG,MAAI,WA+YR,SAAS,GAAA,qBAAG,EAAE;;SA/YV,IAAI;;;AAyZV,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;;AAE3B,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAY,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAc;MAAZ,OAAO,yDAAC,EAAE;;AACtE,MAAI,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;;AAE/B,SAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEpB,MAAI,KAAK,EAAE;AACT,WAAO,CAAC,KAAK,GAAG,KAAK,CAAC;GACvB;AACD,MAAI,QAAQ,EAAE;AACZ,WAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;GAC7B;AACD,SAAO,CAAC,IAAI,GAAG,IAAI,CAAC;;AAEpB,MAAI,KAAK,GAAG,iCAAc,OAAO,CAAC,CAAC;AACnC,QAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;;AAExB,SAAO,KAAK,CAAC;CACd,CAAC;;AAEF,IAAI,CAAC,SAAS,CAAC,qBAAqB,GAAG,IAAI,CAAC;;;AAG5C,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;AAChD,IAAI,CAAC,SAAS,CAAC,oBAAoB,GAAG,KAAK,CAAC;;;;AAI5C,IAAI,CAAC,SAAS,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC9C,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;;AAEhD,IAAI,CAAC,SAAS,CAAC,wBAAwB,GAAG,KAAK,CAAC;;;;;;;;;;AAUhD,IAAI,CAAC,kBAAkB,GAAG,UAAS,KAAK,EAAC;;;;;;;;;AAStC,OAAK,CAAC,qBAAqB,GAAG,UAAS,OAAO,EAAE,KAAK,EAAC;AACrD,QAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,CAAC;;AAEpC,QAAI,CAAC,QAAQ,EAAE;AACb,cAAQ,GAAG,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;KACtC;;AAED,QAAI,KAAK,KAAK,SAAS,EAAE;;AAEvB,WAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;KACzB;;AAED,YAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;GACpC,CAAC;;;;;;;;;AASD,OAAK,CAAC,mBAAmB,GAAG,UAAS,MAAM,EAAC;AAC3C,QAAI,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC;AAC1C,QAAI,GAAG,YAAA,CAAC;;AAER,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,SAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;AAE1C,UAAI,GAAG,EAAE;AACP,eAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;OACpB;KACF;;AAED,WAAO,IAAI,CAAC;GACb,CAAC;;;;;;;AAOF,OAAK,CAAC,aAAa,GAAG,UAAS,MAAM,EAAC;AACpC,QAAI,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;;AAE3C,QAAI,EAAE,EAAE;AACN,aAAO,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;KACnC;;AAED,WAAO,EAAE,CAAC;GACX,CAAC;;AAEF,MAAI,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;;;;AAIhD,OAAK,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAW;AACpC,QAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AACvD,aAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;KACvC;AACD,WAAO,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GACpC,CAAC;;;;;;;;;AASD,OAAK,CAAC,SAAS,CAAC,SAAS,GAAG,UAAS,MAAM,EAAC;AAC3C,QAAI,EAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;;AAE3C,QAAI,CAAC,EAAE,EAAE;;;AAGP,UAAI,KAAK,CAAC,mBAAmB,EAAE;AAC7B,UAAE,GAAG,KAAK,CAAC,mBAAmB,CAAC;OAChC,MAAM;AACL,gCAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;OAC7D;KACF;;;AAGD,QAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;;AAE/C,QAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAC7B,QAAI,CAAC,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACpD,QAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;;AAE9C,WAAO,IAAI,CAAC;GACb,CAAC;;;;;AAKD,OAAK,CAAC,SAAS,CAAC,oBAAoB,GAAG,YAAU;AAChD,QAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;AACtD,UAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;KAC/B;GACF,CAAC;CAEH,CAAC;;AAEF,uBAAU,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;AAE1C,uBAAU,iBAAiB,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;qBAC1C,IAAI;;;;;;;;;;;;;;;8BC9kBM,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;;;;AAYtC,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE;AACpC,MAAI,IAAI,GAAG,IAAI,CAAC;;AAEhB,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,QAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAExC,SAAK,IAAI,IAAI,IAAI,gBAAgB,CAAC,SAAS,EAAE;AAC3C,UAAI,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC/C;GACF;;AAED,kBAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;AAErD,QAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AACpC,OAAG,EAAE,eAAW;AACd,aAAO,IAAI,CAAC,OAAO,CAAC;KACrB;GACF,CAAC,CAAC;;AAEH,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAO,IAAI,CAAC;GACb;CACF,CAAC;;AAEF,gBAAgB,CAAC,SAAS,CAAC,QAAQ,GAAG,UAAS,IAAI,EAAE;AACnD,MAAI,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;AACjC,MAAI,CAAC,GAAG,CAAC,CAAC;AACV,MAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;;AAEpB,MAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,MAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;;AAE3B,MAAI,UAAU,GAAG,SAAb,UAAU,CAAY,CAAC,EAAE;AAC3B,QAAI,EAAE,EAAE,GAAC,CAAC,IAAI,IAAI,CAAA,AAAC,EAAE;AACnB,YAAM,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,EAAE;AAClC,WAAG,EAAE,eAAW;AACd,iBAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACtB;OACF,CAAC,CAAC;KACJ;GACF,CAAC;;AAEF,MAAI,SAAS,GAAG,CAAC,EAAE;AACjB,KAAC,GAAG,SAAS,CAAC;;AAEd,WAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAChB,gBAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;KAC1B;GACF;CACF,CAAC;;AAEF,gBAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,UAAS,EAAE,EAAE;AACnD,MAAI,MAAM,GAAG,IAAI,CAAC;AAClB,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,QAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE;AACjB,YAAM,GAAG,GAAG,CAAC;AACb,YAAM;KACP;GACF;;AAED,SAAO,MAAM,CAAC;CACf,CAAC;;qBAEa,gBAAgB;;;;;;;;;;;;;;;;;;;yBC7ET,cAAc;;;;0BACnB,iBAAiB;;;;8BACb,sBAAsB;;;;gCACpB,wBAAwB;;;;yBAC3B,gBAAgB;;IAAxB,EAAE;;8BACO,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,IAAM,SAAS,GAAG,MAAM,CAAC;AACzB,IAAM,OAAO,GAAG;AACd,WAAS,EAAc,WAAW;AAClC,WAAS,EAAc,YAAY;AACnC,OAAK,EAAkB,OAAO;AAC9B,oBAAkB,EAAK,4CAA4C;AACnE,gBAAc,EAAS,0BAA0B;AACjD,uBAAqB,EAAE,YAAY;AACnC,mBAAiB,EAAM,OAAO;AAC9B,QAAM,EAAiB,kCAAkC;AACzD,QAAM,EAAiB,6BAA6B;AACpD,WAAS,EAAc,wDAAwD;CAChF,CAAC;;;;;;;;;;;;IAWI,gBAAgB;YAAhB,gBAAgB;;AAET,WAFP,gBAAgB,CAER,MAAM,EAAE,OAAO,EAAE,KAAK,EAAC;0BAF/B,gBAAgB;;AAGlB,0BAAM,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;;AAE9B,UAAM,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1D,UAAM,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;;;;;AAMhE,UAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACpC,UAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AAC5D,YAAI,CAAC,IAAI,EAAE,CAAC;AACZ,eAAO;OACR;;AAED,YAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;AAEjE,UAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzD,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,YAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;OACxC;KACF,CAAC,CAAC,CAAC;GACL;;;;;;;;;;;;;;;;;AA1BG,kBAAgB,WAiCpB,aAAa,GAAA,yBAAG;AACd,QAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE;AACxE,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,MAAM;AACL,UAAI,CAAC,IAAI,EAAE,CAAC;KACb;GACF;;;;;;;;;AAvCG,kBAAgB,WA+CpB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,wBAAwB;KACpC,CAAC,CAAC;GACJ;;;;;;;;AAnDG,kBAAgB,WA0DpB,YAAY,GAAA,wBAAG;AACb,QAAI,OAAO,0BAAO,QAAQ,CAAC,KAAK,UAAU,EAAE;AAC1C,gCAAO,QAAQ,CAAC,CAAC,aAAa,CAAC,4BAAS,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;KACvD;GACF;;;;;;;;AA9DG,kBAAgB,WAqEpB,aAAa,GAAA,yBAAG;AACd,QAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;AAEvC,QAAI,CAAC,YAAY,EAAE,CAAC;;AAEpB,QAAI,CAAC,MAAM,EAAE;AACX,aAAO;KACR;;AAED,SAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpC,UAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE;AAC/B,YAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;OAC5B;KACF;GACF;;;;;;;;;AApFG,kBAAgB,WA4FpB,cAAc,GAAA,wBAAC,KAAK,EAAE;AACpB,QAAI,OAAO,0BAAO,QAAQ,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;AAClE,aAAO;KACR;;AAED,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,SAAS,EAAE,CAAC;;AAE9D,QAAI,IAAI,GAAG,EAAE,CAAC;AACd,SAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;AACnD,UAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;KACnC;;AAED,8BAAO,QAAQ,CAAC,CAAC,aAAa,CAAC,4BAAS,KAAK,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEvE,QAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,WAAO,CAAC,EAAE,EAAE;AACV,UAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;AAClC,UAAI,SAAS,CAAC,KAAK,EAAE;AACnB,cAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;OACjD;AACD,UAAI,SAAS,CAAC,WAAW,EAAE;AACzB,sBAAc,CAAC,MAAM,CAAC,UAAU,EACjB,OAAO,EACP,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,MAAM,EACzB,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;OACvD;AACD,UAAI,SAAS,CAAC,eAAe,EAAE;AAC7B,cAAM,CAAC,UAAU,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;OACrE;AACD,UAAI,SAAS,CAAC,iBAAiB,EAAE;AAC/B,sBAAc,CAAC,MAAM,CAAC,UAAU,EACjB,iBAAiB,EACjB,cAAc,CAAC,SAAS,CAAC,eAAe,IAAI,MAAM,EACnC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC;OAC7D;AACD,UAAI,SAAS,CAAC,WAAW,EAAE;AACzB,YAAI,SAAS,CAAC,aAAa,EAAE;AAC3B,wBAAc,CAAC,MAAM,EACN,iBAAiB,EACjB,cAAc,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;SAChF,MAAM;AACL,gBAAM,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,CAAC,WAAW,CAAC;SACtD;OACF;AACD,UAAI,SAAS,CAAC,SAAS,EAAE;AACvB,YAAI,SAAS,CAAC,SAAS,KAAK,YAAY,EAAE;AACxC,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,oBAAkB,QAAQ,sBAAiB,QAAQ,sBAAiB,QAAQ,AAAE,CAAC;SAClH,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,QAAQ,EAAE;AAC3C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,AAAE,CAAC;SACtG,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,WAAW,EAAE;AAC9C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,SAAS,gBAAW,SAAS,oBAAe,QAAQ,iBAAY,QAAQ,AAAE,CAAC;SAC5H,MAAM,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE;AAC5C,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,gBAAc,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,kBAAa,QAAQ,AAAE,CAAC;SAC3H;OACF;AACD,UAAI,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,KAAK,CAAC,EAAE;AACxD,YAAM,QAAQ,GAAG,0BAAO,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC1D,cAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,AAAC,QAAQ,GAAG,SAAS,CAAC,WAAW,GAAI,IAAI,CAAC;AAClE,cAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,cAAM,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;AAC1B,cAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;OAC7B;AACD,UAAI,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE;AAC9D,YAAI,SAAS,CAAC,UAAU,KAAK,YAAY,EAAE;AACzC,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,WAAW,GAAG,YAAY,CAAC;SACpD,MAAM;AACL,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SACpE;OACF;KACF;GACF;;SAlKG,gBAAgB;;;AA8KtB,SAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE;AACtC,SAAO,OAAO;;AAEZ,UAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,GACvC,OAAO,GAAG,GAAG,CAAC;CACjB;;;;;;;;;;;AAWD,SAAS,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;;AAEvC,MAAI;AACF,MAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;GACxB,CAAC,OAAO,CAAC,EAAE,EAAE;CACf;;AAED,uBAAU,iBAAiB,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;qBACnD,gBAAgB;;;;;;;;;;;;;;ACpO/B,IAAI,aAAa,GAAG;AAClB,YAAU,EAAE,UAAU;AACtB,UAAQ,EAAE,QAAQ;AAClB,WAAS,EAAE,SAAS;CACrB,CAAC;;;;;;;AAOF,IAAI,aAAa,GAAG;AAClB,aAAW,EAAE,WAAW;AACxB,YAAU,EAAE,UAAU;AACtB,gBAAc,EAAE,cAAc;AAC9B,YAAU,EAAE,UAAU;AACtB,YAAU,EAAE,UAAU;CACvB,CAAC;;QAEO,aAAa,GAAb,aAAa;QAAE,aAAa,GAAb,aAAa;;;;;;;;;;;;;;;;;;;;ACZrC,IAAI,YAAY,GAAG,SAAf,YAAY,CAAY,KAAK,EAAE;AACjC,SAAO;AACL,QAAI,EAAE,KAAK,CAAC,IAAI;AAChB,SAAK,EAAE,KAAK,CAAC,KAAK;AAClB,YAAQ,EAAE,KAAK,CAAC,QAAQ;AACxB,MAAE,EAAE,KAAK,CAAC,EAAE;AACZ,mCAA+B,EAAE,KAAK,CAAC,+BAA+B;AACtE,QAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,UAAS,GAAG,EAAE;AACrE,aAAO;AACL,iBAAS,EAAE,GAAG,CAAC,SAAS;AACxB,eAAO,EAAE,GAAG,CAAC,OAAO;AACpB,YAAI,EAAE,GAAG,CAAC,IAAI;AACd,UAAE,EAAE,GAAG,CAAC,EAAE;OACX,CAAC;KACH,CAAC;AACF,OAAG,EAAE,KAAK,CAAC,GAAG;GACf,CAAC;CACH,CAAC;;;;;;;;;;AAUF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE;AACpC,MAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;;AAEnD,MAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAC,CAAC;WAAK,CAAC,CAAC,KAAK;GAAA,CAAC,CAAC;AACnE,MAAI,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAS,OAAO,EAAE;AAChE,QAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,QAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AACvB,WAAO,IAAI,CAAC;GACb,CAAC,CAAC;;AAEH,SAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,UAAS,KAAK,EAAE;AAClF,WAAO,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;GACxC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;CACvB,CAAC;;;;;;;;;;AAUF,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE,IAAI,EAAE;AAC1C,MAAI,CAAC,OAAO,CAAC,UAAS,KAAK,EAAE;AAC3B,QAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;AACtD,QAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;AAC5B,WAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAC,GAAG;eAAK,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC;OAAA,CAAC,CAAC;KACrD;GACF,CAAC,CAAC;;AAEH,SAAO,IAAI,CAAC,UAAU,EAAE,CAAC;CAC1B,CAAC;;qBAEa,EAAC,gBAAgB,EAAhB,gBAAgB,EAAE,gBAAgB,EAAhB,gBAAgB,EAAE,YAAY,EAAZ,YAAY,EAAC;;;;;;;;;;;;;;;2BCzEzC,iBAAiB;;;;yBACrB,gBAAgB;;IAAxB,EAAE;;8BACW,qBAAqB;;IAAlC,OAAO;;8BACE,iBAAiB;;;;;;;;;;;;;;;;;AAetC,IAAI,aAAa,GAAG,SAAhB,aAAa,CAAY,MAAM,EAAE;AACnC,MAAI,IAAI,GAAG,IAAI,CAAC;;AAEhB,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,QAAI,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAExC,SAAK,IAAI,IAAI,IAAI,aAAa,CAAC,SAAS,EAAE;AACxC,UAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAC5C;GACF;;AAED,QAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AACtB,MAAI,CAAC,OAAO,GAAG,EAAE,CAAC;;AAElB,QAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE;AACpC,OAAG,EAAE,eAAW;AACd,aAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KAC5B;GACF,CAAC,CAAC;;AAEH,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,QAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;GAC3B;;AAED,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAO,IAAI,CAAC;GACb;CACF,CAAC;;AAEF,aAAa,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAY,SAAS,CAAC,CAAC;AAC/D,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,aAAa,CAAC;;;;;;;AAOpD,aAAa,CAAC,SAAS,CAAC,cAAc,GAAG;AACvC,UAAQ,EAAE,QAAQ;AAClB,YAAU,EAAE,UAAU;AACtB,eAAa,EAAE,aAAa;CAC7B,CAAC;;;AAGF,KAAK,IAAI,MAAK,IAAI,aAAa,CAAC,SAAS,CAAC,cAAc,EAAE;AACxD,eAAa,CAAC,SAAS,CAAC,IAAI,GAAG,MAAK,CAAC,GAAG,IAAI,CAAC;CAC9C;;AAED,aAAa,CAAC,SAAS,CAAC,SAAS,GAAG,UAAS,KAAK,EAAE;AAClD,MAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAChC,MAAI,EAAE,EAAE,GAAC,KAAK,IAAI,IAAI,CAAA,AAAC,EAAE;AACvB,UAAM,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE;AACjC,SAAG,EAAE,eAAW;AACd,eAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;OAC5B;KACF,CAAC,CAAC;GACJ;;AAED,OAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAC5D,QAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;GACxB,CAAC,CAAC,CAAC;AACJ,MAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAEzB,MAAI,CAAC,OAAO,CAAC;AACX,QAAI,EAAE,UAAU;AAChB,SAAK,EAAE,KAAK;GACb,CAAC,CAAC;CACJ,CAAC;;AAEF,aAAa,CAAC,SAAS,CAAC,YAAY,GAAG,UAAS,MAAM,EAAE;AACtD,MAAI,MAAM,GAAG,IAAI,CAAC;AAClB,MAAI,KAAK,YAAA,CAAC;;AAEV,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,SAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,QAAI,KAAK,KAAK,MAAM,EAAE;AACpB,UAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,YAAM;KACP;GACF;;AAED,MAAI,CAAC,OAAO,CAAC;AACX,QAAI,EAAE,aAAa;AACnB,SAAK,EAAE,KAAK;GACb,CAAC,CAAC;CACJ,CAAC;;AAEF,aAAa,CAAC,SAAS,CAAC,YAAY,GAAG,UAAS,EAAE,EAAE;AAClD,MAAI,MAAM,GAAG,IAAI,CAAC;;AAElB,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAI,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,QAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;AACnB,YAAM,GAAG,KAAK,CAAC;AACf,YAAM;KACP;GACF;;AAED,SAAO,MAAM,CAAC;CACf,CAAC;;qBAEa,aAAa;;;;;;;;;;;;;;;;;;;yBCvHN,cAAc;;;;6BACZ,oBAAoB;;IAAhC,MAAM;;yBACE,gBAAgB;;IAAxB,EAAE;;0BACE,iBAAiB;;;;kCACN,uBAAuB;;;;4BAC/B,eAAe;;;;;;;;;;;;;IAU5B,iBAAiB;YAAjB,iBAAiB;;AAEV,WAFP,iBAAiB,CAET,MAAM,EAAE,OAAO,EAAE;0BAFzB,iBAAiB;;AAGnB,0BAAM,MAAM,EAAE,OAAO,CAAC,CAAC;AACvB,QAAI,CAAC,IAAI,EAAE,CAAC;;;AAGZ,QAAI,OAAO,CAAC,wBAAwB,KAAK,SAAS,EAAE;AAClD,UAAI,CAAC,QAAQ,CAAC,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC;KAC/F;;AAED,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AACvF,UAAI,CAAC,YAAY,EAAE,CAAC;AACpB,UAAI,CAAC,IAAI,EAAE,CAAC;KACb,CAAC,CAAC,CAAC;;AAEJ,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,YAAW;AAC1F,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACpE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACpE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACpE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACxE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACtE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AAC1E,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACpE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACrE,UAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;AACtE,UAAI,CAAC,aAAa,EAAE,CAAC;KACtB,CAAC,CAAC,CAAC;;AAEJ,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC9G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,8BAA8B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAChH,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC5G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC1G,UAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;;AAE3G,QAAI,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE;AAC1C,UAAI,CAAC,eAAe,EAAE,CAAC;KACxB;GACF;;;;;;;;;AA1CG,mBAAiB,WAkDrB,QAAQ,GAAA,oBAAG;AACT,WAAO,qBAAM,QAAQ,KAAA,OAAC,KAAK,EAAE;AAC3B,eAAS,EAAE,wCAAwC;AACnD,eAAS,EAAE,0BAA0B,EAAE;KACxC,CAAC,CAAC;GACJ;;;;;;;;;;;;;;;;;;AAvDG,mBAAiB,WAwErB,SAAS,GAAA,qBAAG;AACV,QAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAErB,QAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACpF,QAAM,UAAU,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACvF,QAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACnF,QAAM,WAAW,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC;AAC3F,QAAM,OAAO,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACnF,QAAM,SAAS,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,CAAC;AACvF,QAAM,WAAW,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC,CAAC;AACvF,QAAM,aAAa,GAAG,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,8BAA8B,CAAC,CAAC,CAAC;AAC/F,QAAM,WAAW,GAAG,0BAAO,YAAY,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;;AAEjH,QAAI,MAAM,GAAG;AACX,yBAAmB,EAAE,SAAS;AAC9B,mBAAa,EAAE,WAAW;AAC1B,qBAAe,EAAE,aAAa;AAC9B,iBAAW,EAAE,QAAQ;AACrB,kBAAY,EAAE,UAAU;AACxB,aAAO,EAAE,OAAO;AAChB,uBAAiB,EAAE,OAAO;AAC1B,mBAAa,EAAE,WAAW;AAC1B,mBAAa,EAAE,WAAW;KAC3B,CAAC;AACF,SAAK,IAAI,KAAI,IAAI,MAAM,EAAE;AACvB,UAAI,MAAM,CAAC,KAAI,CAAC,KAAK,EAAE,IAAI,MAAM,CAAC,KAAI,CAAC,KAAK,MAAM,IAAK,KAAI,KAAK,aAAa,IAAI,MAAM,CAAC,KAAI,CAAC,KAAK,IAAI,AAAC,EAAE;AACvG,eAAO,MAAM,CAAC,KAAI,CAAC,CAAC;OACrB;KACF;AACD,WAAO,MAAM,CAAC;GACf;;;;;;;;;;;;;;;;;;AAtGG,mBAAiB,WAuHrB,SAAS,GAAA,mBAAC,MAAM,EAAE;AAChB,QAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;;AAErB,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAChF,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;AAClF,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5E,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACtF,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;AACtF,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1F,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAClF,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,8BAA8B,CAAC,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;;AAE1F,QAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;;AAErC,QAAI,WAAW,EAAE;AACf,iBAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACtC;;AAED,qBAAiB,CAAC,EAAE,CAAC,aAAa,CAAC,4BAA4B,CAAC,EAAE,WAAW,CAAC,CAAC;GAChF;;;;;;;;AA1IG,mBAAiB,WAiJrB,eAAe,GAAA,2BAAG;0BACI,gCAAe,0BAAO,YAAY,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;;QAArF,GAAG;QAAE,MAAM;;AAEhB,QAAI,GAAG,EAAE;AACP,8BAAI,KAAK,CAAC,GAAG,CAAC,CAAC;KAChB;;AAED,QAAI,MAAM,EAAE;AACV,UAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KACxB;GACF;;;;;;;;AA3JG,mBAAiB,WAkKrB,YAAY,GAAA,wBAAG;AACb,QAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,wBAAwB,EAAE;AAC3C,aAAO;KACR;;AAED,QAAI,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC9B,QAAI;AACF,UAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,kCAAO,YAAY,CAAC,OAAO,CAAC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;OAChF,MAAM;AACL,kCAAO,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;OAC3D;KACF,CAAC,OAAO,CAAC,EAAE,EAAE;GACf;;;;;;;;AA/KG,mBAAiB,WAsLrB,aAAa,GAAA,yBAAG;AACd,QAAI,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAC1D,QAAI,SAAS,EAAE;AACb,eAAS,CAAC,aAAa,EAAE,CAAC;KAC3B;GACF;;SA3LG,iBAAiB;;;AA+LvB,uBAAU,iBAAiB,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;;AAEpE,SAAS,sBAAsB,CAAC,MAAM,EAAE;AACtC,MAAI,cAAc,YAAA,CAAC;;AAEnB,MAAI,MAAM,CAAC,eAAe,EAAE;AAC1B,kBAAc,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;GAC5C,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE;AACzB,kBAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;GAC/D;;AAED,SAAO,cAAc,CAAC,KAAK,CAAC;CAC7B;;AAED,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE;AACxC,MAAI,CAAC,KAAK,EAAE;AACV,WAAO;GACR;;AAED,MAAI,CAAC,YAAA,CAAC;AACN,OAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC1C,QAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjC,QAAI,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE;AAC1B,YAAM;KACP;GACF;;AAED,QAAM,CAAC,aAAa,GAAG,CAAC,CAAC;CAC1B;;AAED,SAAS,0BAA0B,GAAG;AACpC,MAAI,QAAQ,k/JA+GH,CAAC;;AAER,SAAO,QAAQ,CAAC;CACnB;;qBAEc,iBAAiB;;;;;;;;;;;;;;;gCCjWH,uBAAuB;;;;yBAChC,gBAAgB;;IAAxB,EAAE;;2BACQ,kBAAkB;;IAA5B,IAAI;;8BACS,qBAAqB;;IAAlC,OAAO;;8BACY,oBAAoB;;IAAvC,aAAa;;0BACT,iBAAiB;;;;2BACT,iBAAiB;;;;8BACpB,iBAAiB;;;;4BACnB,eAAe;;;;0BACJ,iBAAiB;;mBAC/B,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBrB,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAwB;MAAZ,OAAO,yDAAC,EAAE;;AACjC,MAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACjB,UAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;GAC7C;;AAED,MAAI,EAAE,GAAG,IAAI,CAAC;AACd,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,MAAE,GAAG,4BAAS,aAAa,CAAC,QAAQ,CAAC,CAAC;;AAEtC,SAAK,IAAI,IAAI,IAAI,SAAS,CAAC,SAAS,EAAE;AACpC,QAAE,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtC;GACF;;AAED,IAAE,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;;AAExB,MAAI,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC;AACtE,MAAI,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC;AACvE,MAAI,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACnC,MAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAC/D,MAAI,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;;AAE7D,MAAI,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,UAAU,EAAE;AAC9C,QAAI,GAAG,QAAQ,CAAC;GACjB;;AAED,IAAE,CAAC,KAAK,GAAG,EAAE,CAAC;AACd,IAAE,CAAC,WAAW,GAAG,EAAE,CAAC;;AAEpB,MAAI,IAAI,GAAG,kCAAqB,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1C,MAAI,UAAU,GAAG,kCAAqB,EAAE,CAAC,WAAW,CAAC,CAAC;;AAEtD,MAAI,OAAO,GAAG,KAAK,CAAC;AACpB,MAAI,iBAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,YAAW;AAC7C,QAAI,CAAC,YAAY,CAAC,CAAC;AACnB,QAAI,OAAO,EAAE;AACX,UAAI,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC;AAC7B,aAAO,GAAG,KAAK,CAAC;KACjB;GACF,CAAC,CAAC;AACH,MAAI,IAAI,KAAK,UAAU,EAAE;AACvB,MAAE,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;GAC9C;;AAED,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,OAAG,EAAE,eAAW;AACd,aAAO,IAAI,CAAC;KACb;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE;AACjC,OAAG,EAAE,eAAW;AACd,aAAO,KAAK,CAAC;KACd;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,UAAU,EAAE;AACpC,OAAG,EAAE,eAAW;AACd,aAAO,QAAQ,CAAC;KACjB;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE;AAC9B,OAAG,EAAE,eAAW;AACd,aAAO,EAAE,CAAC;KACX;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,OAAG,EAAE,eAAW;AACd,aAAO,IAAI,CAAC;KACb;AACD,OAAG,EAAE,aAAS,OAAO,EAAE;AACrB,UAAI,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AACzC,eAAO;OACR;AACD,UAAI,GAAG,OAAO,CAAC;AACf,UAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;OAChD;AACD,UAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;KAC5B;GACF,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE;AAChC,OAAG,EAAE,eAAW;AACd,UAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,eAAO,IAAI,CAAC;OACb;;AAED,aAAO,IAAI,CAAC;KACb;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,QAAM,CAAC,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE;AACtC,OAAG,EAAE,eAAW;AACd,UAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,eAAO,IAAI,CAAC;OACb;;AAED,UAAI,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,eAAO,UAAU,CAAC;OACnB;;AAED,UAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;AAClC,UAAI,MAAM,GAAG,EAAE,CAAC;;AAEhB,WAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,YAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE;AAClD,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE;AACxG,gBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;OACF;;AAED,aAAO,GAAG,KAAK,CAAC;;AAEhB,UAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;AAC7C,eAAO,GAAG,IAAI,CAAC;OAChB,MAAM;AACL,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,cAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;AACpD,mBAAO,GAAG,IAAI,CAAC;WAChB;SACF;OACF;;AAED,UAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAC1B,gBAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAEtC,aAAO,UAAU,CAAC;KACnB;AACD,OAAG,EAAE,QAAQ,CAAC,SAAS;GACxB,CAAC,CAAC;;AAEH,MAAI,OAAO,CAAC,GAAG,EAAE;AACf,MAAE,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;AACrB,aAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;GAC5B,MAAM;AACL,MAAE,CAAC,OAAO,GAAG,IAAI,CAAC;GACnB;;AAED,MAAI,OAAO,CAAC,MAAM,EAAE;AAClB,WAAO,EAAE,CAAC;GACX;CACF,CAAC;;AAEF,SAAS,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAY,SAAS,CAAC,CAAC;AAC3D,SAAS,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC;;;;;AAK5C,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG;AACnC,aAAW,EAAE,WAAW;CACzB,CAAC;;AAEF,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,UAAS,GAAG,EAAE;AACzC,MAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;;AAErC,MAAI,MAAM,EAAE;AACV,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACtC,UAAI,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACtB,cAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;OAC1B;KACF;GACF;;AAED,MAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrB,MAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;CACnC,CAAC;;AAEF,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,UAAS,SAAS,EAAE;AAClD,MAAI,OAAO,GAAG,KAAK,CAAC;;AAEpB,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACjD,QAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxB,QAAI,GAAG,KAAK,SAAS,EAAE;AACrB,UAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxB,aAAO,GAAG,IAAI,CAAC;KAChB;GACF;;AAED,MAAI,OAAO,EAAE;AACX,QAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;GAChC;CACF,CAAC;;;;;AAKF,IAAI,SAAS,GAAG,SAAZ,SAAS,CAAY,UAAU,EAAE,KAAK,EAAE;AAC1C,MAAI,OAAO,0BAAO,QAAQ,CAAC,KAAK,UAAU,EAAE;;AAE1C,WAAO,0BAAO,UAAU,CAAC,YAAW;AAClC,eAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KAC9B,EAAE,EAAE,CAAC,CAAC;GACR;;AAED,MAAI,MAAM,GAAG,IAAI,0BAAO,QAAQ,CAAC,CAAC,QAAQ,CAAC,4BAAS,0BAAO,OAAO,CAAC,EAAE,0BAAO,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;;AAE1G,QAAM,CAAC,OAAO,CAAC,GAAG,UAAS,GAAG,EAAE;AAC9B,SAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;GACnB,CAAC;AACF,QAAM,CAAC,gBAAgB,CAAC,GAAG,UAAS,KAAK,EAAE;AACzC,4BAAI,KAAK,CAAC,KAAK,CAAC,CAAC;GAClB,CAAC;;AAEF,QAAM,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAM,CAAC,OAAO,CAAC,EAAE,CAAC;CACnB,CAAC;;AAEF,IAAI,SAAS,GAAG,SAAZ,SAAS,CAAY,GAAG,EAAE,KAAK,EAAE;AACnC,MAAI,IAAI,GAAG;AACT,OAAG,EAAE,GAAG;GACT,CAAC;;AAEF,MAAI,WAAW,GAAG,0BAAc,GAAG,CAAC,CAAC;AACrC,MAAI,WAAW,EAAE;AACf,QAAI,CAAC,IAAI,GAAG,WAAW,CAAC;GACzB;;AAED,mBAAI,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,UAAS,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAC;AAC3D,QAAI,GAAG,EAAE;AACP,aAAO,wBAAI,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;KACjC;;AAED,SAAK,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,aAAS,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;GAChC,CAAC,CAAC,CAAC;CACL,CAAC;;AAEF,IAAI,OAAO,GAAG,SAAV,OAAO,CAAY,aAAa,EAAE,SAAS,EAAE;AAC/C,MAAI,IAAI,IAAI,IAAI,EAAE;AAChB,UAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;GACtD;;AAED,MAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;;AAErB,MAAI,GAAG,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;;AAEzB,MAAI,GAAG,KAAK,CAAC,EAAE;AACb,WAAO,CAAC,CAAC,CAAC;GACX;;AAED,MAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC;;AAExB,MAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AAC5B,KAAC,GAAG,CAAC,CAAC;GACP;;AAED,MAAI,CAAC,IAAI,GAAG,EAAE;AACZ,WAAO,CAAC,CAAC,CAAC;GACX;;AAED,MAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAEpD,SAAO,CAAC,GAAG,GAAG,EAAE;AACd,QAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE;AACpC,aAAO,CAAC,CAAC;KACV;AACD,KAAC,EAAE,CAAC;GACL;AACD,SAAO,CAAC,CAAC,CAAC;CACX,CAAC;;qBAEa,SAAS;;;;;;;;;;;;;8BClTH,iBAAiB;;;;4BACnB,eAAe;;;;AAElC,IAAM,UAAU,GAAG,0BAAO,SAAS,CAAC,SAAS,CAAC;AAC9C,IAAM,gBAAgB,GAAG,AAAC,wBAAwB,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACrE,IAAM,kBAAkB,GAAG,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;;;;;;;;;AASjF,IAAM,SAAS,GAAG,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC/C,IAAM,OAAO,GAAG,AAAC,OAAO,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC3C,IAAM,OAAO,GAAG,AAAC,OAAO,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC3C,IAAM,MAAM,GAAG,SAAS,IAAI,OAAO,IAAI,OAAO,CAAC;;;AAE/C,IAAM,WAAW,GAAG,CAAC,YAAU;AACpC,MAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAC3C,MAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;AAAE,WAAO,KAAK,CAAC,CAAC,CAAC,CAAC;GAAE;CAC5C,CAAA,EAAG,CAAC;;;AAEE,IAAM,UAAU,GAAG,AAAC,UAAU,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AACjD,IAAM,eAAe,GAAG,CAAC,YAAW;;;AAGzC,MAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,wCAAwC,CAAC;MACpE,KAAK;MACL,KAAK,CAAC;;AAER,MAAI,CAAC,KAAK,EAAE;AACV,WAAO,IAAI,CAAC;GACb;;AAED,OAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,OAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;AAEzC,MAAI,KAAK,IAAI,KAAK,EAAE;AAClB,WAAO,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GAC9C,MAAM,IAAI,KAAK,EAAE;AAChB,WAAO,KAAK,CAAC;GACd,MAAM;AACL,WAAO,IAAI,CAAC;GACb;CACF,CAAA,EAAG,CAAC;;;AAEE,IAAM,cAAc,GAAG,UAAU,IAAI,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,IAAI,eAAe,GAAG,GAAG,CAAC;;AAC3F,IAAM,iBAAiB,GAAG,UAAU,IAAI,eAAe,GAAG,CAAC,IAAI,kBAAkB,GAAG,GAAG,CAAC;;;AAExF,IAAM,UAAU,GAAG,AAAC,UAAU,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AACjD,IAAM,SAAS,GAAG,AAAC,SAAS,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;AAC/C,IAAM,MAAM,GAAG,AAAC,YAAY,CAAE,IAAI,CAAC,UAAU,CAAC,CAAC;;;AAE/C,IAAM,aAAa,GAAG,CAAC,EAAE,AAAC,cAAc,6BAAU,IAAK,0BAAO,aAAa,IAAI,uCAAoB,0BAAO,aAAa,CAAA,AAAC,CAAC;;AACzH,IAAM,yBAAyB,IAAG,gBAAgB,IAAI,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAA,CAAC;;;;;;;;;;;;4BCxDnE,kBAAkB;;;;;;;;;;;;AAW3C,SAAS,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClD,MAAI,gBAAgB,GAAG,CAAC;MACpB,KAAK;MAAE,GAAG,CAAC;;AAEf,MAAI,CAAC,QAAQ,EAAE;AACb,WAAO,CAAC,CAAC;GACV;;AAED,MAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACjC,YAAQ,GAAG,8BAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;GAClC;;AAED,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;AACvC,SAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,OAAG,GAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;AAGxB,QAAI,GAAG,GAAG,QAAQ,EAAE;AAClB,SAAG,GAAG,QAAQ,CAAC;KAChB;;AAED,oBAAgB,IAAI,GAAG,GAAG,KAAK,CAAC;GACjC;;AAED,SAAO,gBAAgB,GAAG,QAAQ,CAAC;CACpC;;;;;;;;;qBCvCe,UAAU;;;;;;;;;;AAQ1B,IAAM,gBAAgB,GAAG;AACvB,KAAG,EAAA,aAAC,GAAG,EAAE,GAAG,EAAE;AACZ,WAAO,GAAG,CAAC,GAAG,CAAC,CAAC;GACjB;AACD,KAAG,EAAA,aAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE;AACnB,OAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjB,WAAO,IAAI,CAAC;GACb;CACF,CAAC;;;;;;;;;;;;;;;;qBAea,UAAC,MAAM,EAAkB;MAAhB,QAAQ,yDAAC,EAAE;;AACjC,MAAI,OAAO,KAAK,KAAK,UAAU,EAAE;;AAC/B,UAAI,OAAO,GAAG,EAAE,CAAC;;;;AAIjB,YAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,UAAA,GAAG,EAAI;AACnC,YAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACxC,iBAAO,CAAC,GAAG,CAAC,GAAG,YAAW;AACxB,+BAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB,mBAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;WACrD,CAAC;SACH;OACF,CAAC,CAAC;;AAEH;WAAO,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC;;;;GACnC;AACD,SAAO,MAAM,CAAC;CACf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BC9CoB,iBAAiB;;;;4BACnB,eAAe;;;;sBACX,WAAW;;IAArB,IAAI;;qBACD,UAAU;;;;oBACT,MAAM;;;;;;;;;;;;;AAUhB,SAAS,KAAK,CAAC,EAAE,EAAC;AACvB,MAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACzB,MAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;GAClB;;AAED,SAAO,4BAAS,cAAc,CAAC,EAAE,CAAC,CAAC;CACpC;;;;;;;;;;;AAUM,SAAS,QAAQ,GAA6C;MAA5C,OAAO,yDAAC,KAAK;MAAE,UAAU,yDAAC,EAAE;MAAE,UAAU,yDAAC,EAAE;;AAClE,MAAI,EAAE,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;;AAEzC,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;;;;;AAK/B,QAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;AAClF,yBAAI,IAAI,oCAE8D,QAAQ,EAAO,GAAG,EAAI,CAAC;AAC7F,QAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;KAChC,MAAM;AACL,QAAE,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC;KACpB;GACF,CAAC,CAAC;;AAEH,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/B,MAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;GACjD,CAAC,CAAC;;AAEH,SAAO,EAAE,CAAC;CACX;;;;;;;;;;;AAUM,SAAS,aAAa,CAAC,KAAK,EAAE,MAAM,EAAC;AAC1C,MAAI,MAAM,CAAC,UAAU,EAAE;AACrB,UAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;GAC/C,MAAM;AACL,UAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;GAC3B;CACF;;;;;;;;;;AAUD,IAAM,MAAM,GAAG,EAAE,CAAC;;;;;;;;;AASlB,IAAM,QAAQ,GAAG,OAAO,GAAG,AAAC,IAAI,IAAI,EAAE,CAAE,OAAO,EAAE,CAAC;;;;;;;;;;AAS3C,SAAS,SAAS,CAAC,EAAE,EAAE;AAC5B,MAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAEtB,MAAI,CAAC,EAAE,EAAE;AACP,MAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;GACpC;;AAED,MAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACf,UAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;GACjB;;AAED,SAAO,MAAM,CAAC,EAAE,CAAC,CAAC;CACnB;;;;;;;;;;;AAUM,SAAS,SAAS,CAAC,EAAE,EAAE;AAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAExB,MAAI,CAAC,EAAE,EAAE;AACP,WAAO,KAAK,CAAC;GACd;;AAED,SAAO,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;CACxD;;;;;;;;;;AASM,SAAS,YAAY,CAAC,EAAE,EAAE;AAC/B,MAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;;AAEtB,MAAI,CAAC,EAAE,EAAE;AACP,WAAO;GACR;;;AAGD,SAAO,MAAM,CAAC,EAAE,CAAC,CAAC;;;AAGlB,MAAI;AACF,WAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;GACrB,CAAC,OAAM,CAAC,EAAE;AACT,QAAI,EAAE,CAAC,eAAe,EAAE;AACtB,QAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;KAC9B,MAAM;;AAEL,QAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;KACrB;GACF;CACF;;;;;;;;;;AASM,SAAS,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE;AAChD,SAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,CAAA,CAAE,OAAO,CAAC,GAAG,GAAG,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE;CACnF;;;;;;;;;;AASM,SAAS,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE;AAC9C,MAAI,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE;AACpC,WAAO,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,EAAE,GAAG,UAAU,GAAG,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,UAAU,CAAC;GAClG;CACF;;;;;;;;;;AASM,SAAS,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE;AACpD,MAAI,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE;AAAC,WAAO;GAAC;;AAElD,MAAI,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;;;AAG9C,OAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC/C,QAAI,UAAU,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE;AACnC,gBAAU,CAAC,MAAM,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;KACxB;GACF;;AAED,SAAO,CAAC,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;CAC1C;;;;;;;;;;;AAUM,SAAS,eAAe,CAAC,EAAE,EAAE,UAAU,EAAE;AAC9C,QAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAS,QAAQ,EAAC;AAC/D,QAAI,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;;AAErC,QAAI,SAAS,KAAK,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,KAAK,EAAE;AACjF,QAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;KAC9B,MAAM;AACL,QAAE,CAAC,YAAY,CAAC,QAAQ,EAAG,SAAS,KAAK,IAAI,GAAG,EAAE,GAAG,SAAS,CAAE,CAAC;KAClE;GACF,CAAC,CAAC;CACJ;;;;;;;;;;;;;;AAaM,SAAS,eAAe,CAAC,GAAG,EAAE;AACnC,MAAI,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC;;AAEjD,KAAG,GAAG,EAAE,CAAC;;;;;AAKT,eAAa,GAAG,GAAG,GAAC,sCAAsC,GAAC,GAAG,CAAC;;AAE/D,MAAI,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACtD,SAAK,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEvB,SAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AAC1C,cAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzB,aAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;;;;AAIzB,UAAI,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,GAAC,QAAQ,GAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;;;;AAIxF,eAAO,GAAG,AAAC,OAAO,KAAK,IAAI,GAAI,IAAI,GAAG,KAAK,CAAC;OAC7C;;AAED,SAAG,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC;KACzB;GACF;;AAED,SAAO,GAAG,CAAC;CACZ;;;;;;;;;AAQM,SAAS,kBAAkB,GAAG;AACnC,8BAAS,IAAI,CAAC,KAAK,EAAE,CAAC;AACtB,8BAAS,aAAa,GAAG,YAAW;AAClC,WAAO,KAAK,CAAC;GACd,CAAC;CACH;;;;;;;;;AAQM,SAAS,oBAAoB,GAAG;AACrC,8BAAS,aAAa,GAAG,YAAW;AAClC,WAAO,IAAI,CAAC;GACb,CAAC;CACH;;;;;;;;;;;;AAWM,SAAS,cAAc,CAAC,EAAE,EAAE;AACjC,MAAI,GAAG,YAAA,CAAC;;AAER,MAAI,EAAE,CAAC,qBAAqB,IAAI,EAAE,CAAC,UAAU,EAAE;AAC7C,OAAG,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;GAClC;;AAED,MAAI,CAAC,GAAG,EAAE;AACR,WAAO;AACL,UAAI,EAAE,CAAC;AACP,SAAG,EAAE,CAAC;KACP,CAAC;GACH;;AAED,MAAM,KAAK,GAAG,4BAAS,eAAe,CAAC;AACvC,MAAM,IAAI,GAAG,4BAAS,IAAI,CAAC;;AAE3B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,0BAAO,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC;AACzD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC;;AAEhD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;AACzD,MAAM,SAAS,GAAG,0BAAO,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC;AACvD,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,SAAS,GAAG,SAAS,CAAC;;;AAG5C,SAAO;AACL,QAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACtB,OAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;GACrB,CAAC;CACH;;;;;;;;;;;;;AAYM,SAAS,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE;AAC5C,MAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,MAAI,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;AAC7B,MAAI,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC;AAC1B,MAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC;;AAE3B,MAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AACnB,MAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;AACpB,MAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;AACxB,MAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;;AAExB,MAAI,KAAK,CAAC,cAAc,EAAE;AACxB,SAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACtC,SAAK,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;GACvC;;AAED,UAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,AAAC,IAAI,GAAG,KAAK,GAAI,IAAI,CAAA,GAAI,IAAI,CAAC,CAAC,CAAC;AACtE,UAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA,GAAI,IAAI,CAAC,CAAC,CAAC;;AAE7D,SAAO,QAAQ,CAAC;CACjB;;;;;;;;;;;;;;;;;;;;;;;;;qBCzWqB,UAAU;;IAAnB,GAAG;;sBACO,WAAW;;IAArB,IAAI;;4BACE,eAAe;;;;8BACb,iBAAiB;;;;;;;;;;;;;;;;AAa/B,SAAS,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAC;AAChC,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GAClD;;AAED,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;;AAEvC,MAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;;AAEnD,MAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;;AAEvC,MAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAE7B,MAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,QAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;;AAEtB,QAAI,CAAC,UAAU,GAAG,UAAU,KAAK,EAAE,IAAI,EAAC;;AAEtC,UAAI,IAAI,CAAC,QAAQ,EAAE,OAAO;AAC1B,WAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAExB,UAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;;AAEzC,UAAI,QAAQ,EAAE;;AAEZ,YAAI,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;;AAErC,aAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACnD,cAAI,KAAK,CAAC,6BAA6B,EAAE,EAAE;AACzC,kBAAM;WACP,MAAM;AACL,wBAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;WACzC;SACF;OACF;KACF,CAAC;GACH;;AAED,MAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,QAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,UAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACrD,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC3B,UAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KAChD;GACF;CACF;;;;;;;;;;;AAUM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;;AAElC,MAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO;;AAEjC,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAAE,WAAO;GAAE;;AAE/B,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GACnD;;;AAGD,MAAI,UAAU,GAAG,SAAb,UAAU,CAAY,CAAC,EAAC;AACzB,QAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACtB,kBAAc,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC;GACzB,CAAC;;;AAGF,MAAI,CAAC,IAAI,EAAE;AACT,SAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;AAAE,gBAAU,CAAC,CAAC,CAAC,CAAC;KAAA,AAC3C,OAAO;GACR;;AAED,MAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;AAGnC,MAAI,CAAC,QAAQ,EAAE,OAAO;;;AAGtB,MAAI,CAAC,EAAE,EAAE;AACP,cAAU,CAAC,IAAI,CAAC,CAAC;AACjB,WAAO;GACR;;;AAGD,MAAI,EAAE,CAAC,IAAI,EAAE;AACX,SAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,UAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE;AAChC,gBAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;OACzB;KACF;GACF;;AAED,gBAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;CAC5B;;;;;;;;;;;;AAWM,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;;;;AAIzC,MAAI,QAAQ,GAAG,AAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAChE,MAAI,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC;;;;;AAKnD,MAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,SAAK,GAAG,EAAE,IAAI,EAAC,KAAK,EAAE,MAAM,EAAC,IAAI,EAAE,CAAC;GACrC;;AAED,OAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;;;AAGxB,MAAI,QAAQ,CAAC,UAAU,EAAE;AACvB,YAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;GAC7C;;;;AAIC,MAAI,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE;AACrE,WAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;;GAG3C,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;AAC7C,UAAI,UAAU,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;;;AAG7C,UAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;;AAE5B,kBAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;;AAE3B,YAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,EAAE;AAClD,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B;;AAED,kBAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;OAC7B;KACF;;;AAGD,SAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC;CAChC;;;;;;;;;;;AAUM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;AAClC,MAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACvB,WAAO,qBAAqB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;GACnD;AACD,MAAI,IAAI,GAAG,SAAP,IAAI,GAAa;AACnB,OAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACtB,MAAE,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;GAC3B,CAAC;;AAEF,MAAI,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;AAChD,IAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;CACtB;;;;;;;;;;;AAUM,SAAS,QAAQ,CAAC,KAAK,EAAE;;AAE9B,WAAS,UAAU,GAAG;AAAE,WAAO,IAAI,CAAC;GAAE;AACtC,WAAS,WAAW,GAAG;AAAE,WAAO,KAAK,CAAC;GAAE;;;;;;;AAOxC,MAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE;AACzC,QAAI,GAAG,GAAG,KAAK,IAAI,0BAAO,KAAK,CAAC;;AAEhC,SAAK,GAAG,EAAE,CAAC;;;;;;AAMX,SAAK,IAAI,GAAG,IAAI,GAAG,EAAE;;;;AAInB,UAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,aAAa,IAC7D,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,iBAAiB,EAAE;;;AAG1D,YAAI,EAAE,GAAG,KAAK,aAAa,IAAI,GAAG,CAAC,cAAc,CAAA,AAAC,EAAE;AAClD,eAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;SACvB;OACF;KACF;;;AAGD,QAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,WAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,+BAAY,CAAC;KAC7C;;;AAGD,QAAI,CAAC,KAAK,CAAC,aAAa,EAAE;AACxB,WAAK,CAAC,aAAa,GAAG,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,MAAM,GACtD,KAAK,CAAC,SAAS,GACf,KAAK,CAAC,WAAW,CAAC;KACrB;;;AAGD,SAAK,CAAC,cAAc,GAAG,YAAY;AACjC,UAAI,GAAG,CAAC,cAAc,EAAE;AACtB,WAAG,CAAC,cAAc,EAAE,CAAC;OACtB;AACD,WAAK,CAAC,WAAW,GAAG,KAAK,CAAC;AAC1B,SAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AACxB,WAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;KAC/B,CAAC;;AAEF,SAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC;;;AAG/B,SAAK,CAAC,eAAe,GAAG,YAAY;AAClC,UAAI,GAAG,CAAC,eAAe,EAAE;AACvB,WAAG,CAAC,eAAe,EAAE,CAAC;OACvB;AACD,WAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAC1B,SAAG,CAAC,YAAY,GAAG,IAAI,CAAC;AACxB,WAAK,CAAC,oBAAoB,GAAG,UAAU,CAAC;KACzC,CAAC;;AAEF,SAAK,CAAC,oBAAoB,GAAG,WAAW,CAAC;;;AAGzC,SAAK,CAAC,wBAAwB,GAAG,YAAY;AAC3C,UAAI,GAAG,CAAC,wBAAwB,EAAE;AAChC,WAAG,CAAC,wBAAwB,EAAE,CAAC;OAChC;AACD,WAAK,CAAC,6BAA6B,GAAG,UAAU,CAAC;AACjD,WAAK,CAAC,eAAe,EAAE,CAAC;KACzB,CAAC;;AAEF,SAAK,CAAC,6BAA6B,GAAG,WAAW,CAAC;;;AAGlD,QAAI,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE;AACzB,UAAI,GAAG,GAAG,4BAAS,eAAe;UAAE,IAAI,GAAG,4BAAS,IAAI,CAAC;;AAEzD,WAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,IACxB,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,AAAC,IACtD,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,CAAA,AAAC,CAAC;AAC1D,WAAK,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,IACxB,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA,AAAC,IACpD,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAA,AAAC,CAAC;KACzD;;;AAGD,SAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC;;;;AAI9C,QAAI,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE;AACxB,WAAK,CAAC,MAAM,GAAI,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GACjC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAClB,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,AAAC,AAAC,AAAC,CAAC;KAClC;GACF;;;AAGD,SAAO,KAAK,CAAC;CACd;;;;;;;;;;AAUD,SAAS,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE;AAClC,MAAI,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;;;AAG/B,MAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,WAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;;;;AAK3B,QAAI,IAAI,CAAC,mBAAmB,EAAE;AAC5B,UAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACxD,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE;AAC3B,UAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;KAChD;GACF;;;AAGD,MAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;AACzD,WAAO,IAAI,CAAC,QAAQ,CAAC;AACrB,WAAO,IAAI,CAAC,UAAU,CAAC;AACvB,WAAO,IAAI,CAAC,QAAQ,CAAC;GACtB;;;AAGD,MAAI,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACjD,OAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;GACxB;CACF;;;;;;;;;;;;AAYD,SAAS,qBAAqB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;AACxD,OAAK,CAAC,OAAO,CAAC,UAAS,IAAI,EAAE;;AAE3B,MAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;GAC1B,CAAC,CAAC;CACJ;;;;;;;;;;sBCtXuB,WAAW;;;;;;;;;;;;;AAa5B,IAAM,IAAI,GAAG,SAAP,IAAI,CAAY,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE;;AAE7C,MAAI,CAAC,EAAE,CAAC,IAAI,EAAE;AAAE,MAAE,CAAC,IAAI,GAAG,iBAAS,CAAC;GAAE;;;AAGtC,MAAI,GAAG,GAAG,SAAN,GAAG,GAAc;AACnB,WAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;GACrC,CAAC;;;;;;;;AAQF,KAAG,CAAC,IAAI,GAAG,AAAC,GAAG,GAAI,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;AAEjD,SAAO,GAAG,CAAC;CACZ,CAAC;;;;;;;;;;;;;;;;;;;;ACrBF,SAAS,UAAU,CAAC,OAAO;MAAE,KAAK,yDAAC,OAAO;sBAAE;AAC1C,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;AACjC,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACtC,QAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACnC,QAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvC,QAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;;;AAGpC,QAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,QAAQ,EAAE;;;AAG1C,OAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;KACjB;;;AAGD,KAAC,GAAG,AAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAI,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;;;;AAIrC,KAAC,GAAG,CAAC,AAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAA,IAAK,CAAC,GAAG,EAAE,GAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAA,GAAI,GAAG,CAAC;;;AAGtD,KAAC,GAAG,AAAC,CAAC,GAAG,EAAE,GAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE3B,WAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;GAClB;CAAA;;qBAEc,UAAU;;;;;;;;;;;;;;;ACjCzB,IAAI,KAAK,GAAG,CAAC,CAAC;;;;;;;;;AAQP,SAAS,OAAO,GAAG;AACxB,SAAO,KAAK,EAAE,CAAC;CAChB;;;;;;;;;;;;4BCdkB,eAAe;;;;;;;AAKlC,IAAM,GAAG,GAAG,SAAN,GAAG,GAAa;AACpB,UAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;CAC3B,CAAC;;;;;;AAMF,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC;;;;;AAKjB,GAAG,CAAC,KAAK,GAAG,YAAU;AACpB,UAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;CAC9B,CAAC;;;;;AAKF,GAAG,CAAC,IAAI,GAAG,YAAU;AACnB,UAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC7B,CAAC;;;;;;;;;;AAUF,SAAS,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAC;;AAE3B,MAAI,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;;;AAKjD,MAAI,IAAI,GAAG,SAAP,IAAI,GAAa,EAAE,CAAC;;AAExB,MAAI,OAAO,GAAG,0BAAO,SAAS,CAAC,IAAI;AACjC,SAAK,EAAE,IAAI;AACX,UAAM,EAAE,IAAI;AACZ,WAAO,EAAE,IAAI;GACd,CAAC;;AAEF,MAAI,IAAI,EAAE;;AAER,aAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,GAAC,GAAG,CAAC,CAAC;GAC3C,MAAM;;AAEL,QAAI,GAAG,KAAK,CAAC;GACd;;;AAGD,KAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;AAG5B,WAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;;;AAG9B,MAAI,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE;AACvB,WAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;GACzC,MAAM;;AAEL,WAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;GACpC;CACF;;qBAEc,GAAG;;;;;;;;;;qBCnCM,YAAY;;;;uCAxClB,4BAA4B;;;;AAE9C,SAAS,OAAO,CAAC,GAAG,EAAE;AACpB,SAAO,CAAC,CAAC,GAAG,IACP,OAAO,GAAG,KAAK,QAAQ,IACvB,GAAG,CAAC,QAAQ,EAAE,KAAK,iBAAiB,IACpC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;CACjC;;;;;;;AAOD,IAAM,UAAU,GAAG,SAAb,UAAU,CAAY,WAAW,EAAE,MAAM,EAAE;;;AAG/C,MAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACpB,WAAO,MAAM,CAAC;GACf;;;;;;;AAOD,MAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACzB,WAAO,YAAY,CAAC,MAAM,CAAC,CAAC;GAC7B;CACF,CAAC;;;;;;;;;;;;AAWa,SAAS,YAAY,GAAG;;;AAGrC,MAAI,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;;;AAIjD,MAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;;;AAGjB,MAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAEtB,uCAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;;AAGxB,SAAO,IAAI,CAAC,CAAC,CAAC,CAAC;CAChB;;;;;;;;;;;8BC3DoB,iBAAiB;;;;AAE/B,IAAI,kBAAkB,GAAG,SAArB,kBAAkB,CAAY,SAAS,EAAE;AAClD,MAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAC5C,OAAK,CAAC,SAAS,GAAG,SAAS,CAAC;;AAE5B,SAAO,KAAK,CAAC;CACd,CAAC;;;AAEK,IAAI,cAAc,GAAG,SAAjB,cAAc,CAAY,EAAE,EAAE,OAAO,EAAE;AAChD,MAAI,EAAE,CAAC,UAAU,EAAE;AACjB,MAAE,CAAC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;GACjC,MAAM;AACL,MAAE,CAAC,WAAW,GAAG,OAAO,CAAC;GAC1B;CACF,CAAC;;;;;;;;;;;qBCfc,UAAU;;;;;;;;;;;;;;;;;;AAenB,SAAS,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAC;AAC1C,MAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,WAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;GACnC,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE;AACnD,WAAO,mBAAmB,EAAE,CAAC;GAC9B;AACD,SAAO,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC5C;;QAE4B,eAAe,GAAnC,gBAAgB;;AAEzB,SAAS,mBAAmB,CAAC,MAAM,EAAC;AAClC,MAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/C,WAAO;AACL,YAAM,EAAE,CAAC;AACT,WAAK,EAAE,iBAAW;AAChB,cAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;OACpD;AACD,SAAG,EAAE,eAAW;AACd,cAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;OACpD;KACF,CAAC;GACH;AACD,SAAO;AACL,UAAM,EAAE,MAAM,CAAC,MAAM;AACrB,SAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,CAAC;AAC9C,OAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC;GAC3C,CAAC;CACH;;AAED,SAAS,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAC;AACvD,MAAI,UAAU,KAAK,SAAS,EAAE;AAC5B,uBAAI,IAAI,6BAA0B,MAAM,4DAAsD,CAAC;AAC/F,cAAU,GAAG,CAAC,CAAC;GAChB;AACD,YAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAClD,SAAO,MAAM,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,CAAC;CACvC;;AAED,SAAS,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAC;AAC1C,MAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,QAAQ,EAAE;AACjC,UAAM,IAAI,KAAK,0BAAuB,MAAM,kDAA0C,KAAK,yDAAoD,QAAQ,QAAK,CAAC;GAC9J;CACF;;;;;;;;;;;;;;;;AChDD,SAAS,WAAW,CAAC,MAAM,EAAC;AAC1B,SAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACzD;;qBAEc,WAAW;;;;;;;;;;;;;8BCXL,iBAAiB;;;;4BACnB,eAAe;;;;;;;;;;;AAS3B,IAAM,QAAQ,GAAG,SAAX,QAAQ,CAAY,GAAG,EAAE;AACpC,MAAM,KAAK,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;;AAGrF,MAAI,CAAC,GAAG,4BAAS,aAAa,CAAC,GAAG,CAAC,CAAC;AACpC,GAAC,CAAC,IAAI,GAAG,GAAG,CAAC;;;;;AAKb,MAAI,SAAS,GAAI,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO,AAAC,CAAC;AAC1D,MAAI,GAAG,YAAA,CAAC;AACR,MAAI,SAAS,EAAE;AACb,OAAG,GAAG,4BAAS,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,OAAG,CAAC,SAAS,iBAAe,GAAG,WAAQ,CAAC;AACxC,KAAC,GAAG,GAAG,CAAC,UAAU,CAAC;;AAEnB,OAAG,CAAC,YAAY,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;AAC9D,gCAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;GAChC;;;;;AAKD,MAAI,OAAO,GAAG,EAAE,CAAC;AACjB,OAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,WAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;GACjC;;;;AAID,MAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE;AAChC,WAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;GACjD;AACD,MAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;AACjC,WAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;GAClD;;AAED,MAAI,SAAS,EAAE;AACb,gCAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;GAChC;;AAED,SAAO,OAAO,CAAC;CAChB,CAAC;;;;;;;;;;;;AAWK,IAAM,cAAc,GAAG,SAAjB,cAAc,CAAY,GAAG,EAAC;;AAEzC,MAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;;AAE9B,QAAI,GAAG,GAAG,4BAAS,aAAa,CAAC,KAAK,CAAC,CAAC;AACxC,OAAG,CAAC,SAAS,iBAAe,GAAG,YAAS,CAAC;AACzC,OAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;GAC3B;;AAED,SAAO,GAAG,CAAC;CACZ,CAAC;;;;;;;;;;AASK,IAAM,gBAAgB,GAAG,SAAnB,gBAAgB,CAAY,IAAI,EAAE;AAC7C,MAAG,OAAO,IAAI,KAAK,QAAQ,EAAC;AAC1B,QAAI,WAAW,GAAG,yEAAyE,CAAC;AAC5F,QAAI,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAEvC,QAAI,SAAS,EAAE;AACb,aAAO,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;KACtC;GACF;;AAED,SAAO,EAAE,CAAC;CACX,CAAC;;;;;;;;;;AASK,IAAM,aAAa,GAAG,SAAhB,aAAa,CAAY,GAAG,EAAE;AACzC,MAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC5B,MAAI,MAAM,GAAG,0BAAO,QAAQ,CAAC;;;AAG7B,MAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,KAAK,GAAG,GAAG,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;;;;AAIhF,MAAI,WAAW,GAAG,AAAC,WAAW,GAAG,OAAO,CAAC,IAAI,KAAO,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,AAAC,CAAC;;AAEnF,SAAO,WAAW,CAAC;CACpB,CAAC;;;;;;;;;;;;;;;8BCnHmB,iBAAiB;;;;qBACf,SAAS;;IAApB,KAAK;;iCACW,uBAAuB;;IAAvC,UAAU;;yBACA,aAAa;;;;2BACX,gBAAgB;;;;6BAChB,mBAAmB;;IAA/B,MAAM;;sBACC,UAAU;;;;yBACV,cAAc;;;;wCACR,qCAAqC;;;;yBAC1C,eAAe;;IAAvB,EAAE;;iCACQ,wBAAwB;;;;4BAE3B,eAAe;;;;iCACD,wBAAwB;;iCAClC,wBAAwB;;;;0BAC/B,gBAAgB;;;;0BACX,gBAAgB;;IAAzB,GAAG;;8BACU,oBAAoB;;IAAjC,OAAO;;0BACE,gBAAgB;;IAAzB,GAAG;;wBACM,aAAa;;;;uCAChB,4BAA4B;;;;6CACX,qCAAqC;;;;mBACxD,KAAK;;;;;;2BAGH,iBAAiB;;;;2BACjB,iBAAiB;;;;;AAGnC,IAAI,OAAO,gBAAgB,KAAK,WAAW,EAAE;AAC3C,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,8BAAS,aAAa,CAAC,OAAO,CAAC,CAAC;CACjC;;;;;;;;;;;;;;;;;AAiBD,IAAI,OAAO,GAAG,SAAV,OAAO,CAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAC;AACxC,MAAI,GAAG,CAAC;;;;AAIR,MAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;;;AAG1B,QAAI,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACzB,QAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAClB;;;AAGD,QAAI,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE;;;AAG5B,UAAI,OAAO,EAAE;AACX,gCAAI,IAAI,cAAY,EAAE,4DAAyD,CAAC;OACjF;;AAED,UAAI,KAAK,EAAE;AACT,eAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;OACvC;;AAED,aAAO,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;;;KAGjC,MAAM;AACL,WAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;OACrB;;;GAGF,MAAM;AACL,SAAG,GAAG,EAAE,CAAC;KACV;;;AAGD,MAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;;AACzB,UAAM,IAAI,SAAS,CAAC,oDAAoD,CAAC,CAAC;GAC3E;;;;AAID,SAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,wBAAW,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;CACzD,CAAC;;;AAGF,IAAI,KAAK,GAAG,4BAAS,aAAa,CAAC,sBAAsB,CAAC,CAAC;AAC3D,IAAI,CAAC,KAAK,EAAE;AACV,OAAK,GAAG,UAAU,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;AAC7D,MAAI,IAAI,GAAG,4BAAS,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,MAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,YAAU,CAAC,cAAc,CAAC,KAAK,kIAS7B,CAAC;CACJ;;;;AAID,KAAK,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;;;;;;;AAOnC,OAAO,CAAC,OAAO,GAAG,aAAa,CAAC;;;;;;;;;;;;;AAahC,OAAO,CAAC,OAAO,GAAG,oBAAO,SAAS,CAAC,QAAQ,CAAC;;;;;;;;;AAS5C,OAAO,CAAC,UAAU,GAAG,YAAW;AAC9B,SAAO,oBAAO,OAAO,CAAC;CACvB,CAAC;;;;;;;;;AASF,OAAO,CAAC,OAAO,GAAG,2CAAuB,oBAAO,OAAO,EAAE;AACvD,KAAG,EAAE,yEAAyE;AAC9E,KAAG,EAAE,+CAA+C;CACrD,CAAC,CAAC;;;;;;;;;;;;;;AAcH,OAAO,CAAC,YAAY,GAAG,uBAAU,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B9C,OAAO,CAAC,iBAAiB,GAAG,uBAAU,iBAAiB,CAAC;;;;;;;;AAQxD,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;;;;;;;;;;AAU1B,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC9C,OAAO,CAAC,MAAM,wBAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC1B,OAAO,CAAC,YAAY,wCAAe,CAAC;;;;;;;;;;;;;;;;;AAiBpC,OAAO,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CvB,OAAO,CAAC,MAAM,yBAAS,CAAC;;;;;;;;;;;;;;AAcxB,OAAO,CAAC,WAAW,GAAG,UAAS,IAAI,EAAE,IAAI,EAAC;;;AACxC,MAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAA,CAAE,WAAW,EAAE,CAAC;AACjC,SAAO,qCAAM,OAAO,CAAC,OAAO,CAAC,SAAS,uBAAK,IAAI,IAAG,IAAI,UAAG,CAAC,IAAI,CAAC,CAAC;CACjE,CAAC;;;;;;;AAOF,OAAO,CAAC,GAAG,0BAAM,CAAC;;;;;;;;;;AAUlB,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,gBAAgB,sCAAmB,CAAC;;;;;;;;;;;;AAYtE,OAAO,CAAC,UAAU,iCAAa,CAAC;;;;;;;;;AAShC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;;;;;;;;;AAShC,OAAO,CAAC,aAAa,GAAG,GAAG,CAAC,aAAa,CAAC;;;;;;;AAO1C,OAAO,CAAC,WAAW,2BAAc,CAAC;;;;;;;;;;;;;AAalC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;;;;;;;;;;AAUvB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;AAUzB,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;;AAWzB,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;AAuBjC,OAAO,CAAC,GAAG,mBAAM,CAAC;;;;;;;AAOlB,OAAO,CAAC,SAAS,iCAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;AA0B9B,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE;AACjD,QAAM,CAAC,SAAS,EAAE,EAAE,EAAE,YAAU;AAAE,WAAO,OAAO,CAAC;GAAE,CAAC,CAAC;;;CAGtD,MAAM,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACpE,UAAM,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;GAC7B;;qBAEc,OAAO","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o logs the number of milliseconds it took for the deferred function to be invoked\n */\nvar now = nativeNow || function() {\n return new Date().getTime();\n};\n\nmodule.exports = now;\n","var isObject = require('../lang/isObject'),\n now = require('../date/now');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed invocations. Provide an options object to indicate that `func`\n * should be invoked on the leading and/or trailing edge of the `wait` timeout.\n * Subsequent calls to the debounced function return the result of the last\n * `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the debounced function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=false] Specify invoking on the leading\n * edge of the timeout.\n * @param {number} [options.maxWait] The maximum time `func` is allowed to be\n * delayed before it's invoked.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // avoid costly calculations while the window size is in flux\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // invoke `sendMail` when the click event is fired, debouncing subsequent calls\n * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // ensure `batchLog` is invoked once after 1 second of debounced calls\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', _.debounce(batchLog, 250, {\n * 'maxWait': 1000\n * }));\n *\n * // cancel a debounced call\n * var todoChanges = _.debounce(batchLog, 1000);\n * Object.observe(models.todo, todoChanges);\n *\n * Object.observe(models, function(changes) {\n * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {\n * todoChanges.cancel();\n * }\n * }, ['delete']);\n *\n * // ...at some point `models.todo` is changed\n * models.todo.completed = true;\n *\n * // ...before 1 second has passed `models.todo` is deleted\n * // which cancels the debounced `todoChanges` call\n * delete models.todo;\n */\nfunction debounce(func, wait, options) {\n var args,\n maxTimeoutId,\n result,\n stamp,\n thisArg,\n timeoutId,\n trailingCall,\n lastCalled = 0,\n maxWait = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = wait < 0 ? 0 : (+wait || 0);\n if (options === true) {\n var leading = true;\n trailing = false;\n } else if (isObject(options)) {\n leading = !!options.leading;\n maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function cancel() {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n if (maxTimeoutId) {\n clearTimeout(maxTimeoutId);\n }\n lastCalled = 0;\n maxTimeoutId = timeoutId = trailingCall = undefined;\n }\n\n function complete(isCalled, id) {\n if (id) {\n clearTimeout(id);\n }\n maxTimeoutId = timeoutId = trailingCall = undefined;\n if (isCalled) {\n lastCalled = now();\n result = func.apply(thisArg, args);\n if (!timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n }\n }\n\n function delayed() {\n var remaining = wait - (now() - stamp);\n if (remaining <= 0 || remaining > wait) {\n complete(trailingCall, maxTimeoutId);\n } else {\n timeoutId = setTimeout(delayed, remaining);\n }\n }\n\n function maxDelayed() {\n complete(trailing, timeoutId);\n }\n\n function debounced() {\n args = arguments;\n stamp = now();\n thisArg = this;\n trailingCall = trailing && (timeoutId || !leading);\n\n if (maxWait === false) {\n var leadingCall = leading && !timeoutId;\n } else {\n if (!maxTimeoutId && !leading) {\n lastCalled = stamp;\n }\n var remaining = maxWait - (stamp - lastCalled),\n isCalled = remaining <= 0 || remaining > maxWait;\n\n if (isCalled) {\n if (maxTimeoutId) {\n maxTimeoutId = clearTimeout(maxTimeoutId);\n }\n lastCalled = stamp;\n result = func.apply(thisArg, args);\n }\n else if (!maxTimeoutId) {\n maxTimeoutId = setTimeout(maxDelayed, remaining);\n }\n }\n if (isCalled && timeoutId) {\n timeoutId = clearTimeout(timeoutId);\n }\n else if (!timeoutId && wait !== maxWait) {\n timeoutId = setTimeout(delayed, wait);\n }\n if (leadingCall) {\n isCalled = true;\n result = func.apply(thisArg, args);\n }\n if (isCalled && !timeoutId && !maxTimeoutId) {\n args = thisArg = undefined;\n }\n return result;\n }\n debounced.cancel = cancel;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\n\n/**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as an array.\n *\n * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/Web/JavaScript/Reference/Functions/rest_parameters).\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.restParam(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\nfunction restParam(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n rest = Array(length);\n\n while (++index < length) {\n rest[index] = args[start + index];\n }\n switch (start) {\n case 0: return func.call(this, rest);\n case 1: return func.call(this, args[0], rest);\n case 2: return func.call(this, args[0], args[1], rest);\n }\n var otherArgs = Array(start + 1);\n index = -1;\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = rest;\n return func.apply(this, otherArgs);\n };\n}\n\nmodule.exports = restParam;\n","var debounce = require('./debounce'),\n isObject = require('../lang/isObject');\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed invocations. Provide an options object to indicate\n * that `func` should be invoked on the leading and/or trailing edge of the\n * `wait` timeout. Subsequent calls to the throttled function return the\n * result of the last `func` call.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked\n * on the trailing edge of the timeout only if the the throttled function is\n * invoked more than once during the `wait` timeout.\n *\n * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.leading=true] Specify invoking on the leading\n * edge of the timeout.\n * @param {boolean} [options.trailing=true] Specify invoking on the trailing\n * edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // avoid excessively updating the position while scrolling\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes\n * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {\n * 'trailing': false\n * }));\n *\n * // cancel a trailing throttled call\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (options === false) {\n leading = false;\n } else if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });\n}\n\nmodule.exports = throttle;\n","/**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\nfunction arrayCopy(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n}\n\nmodule.exports = arrayCopy;\n","/**\n * A specialized version of `_.forEach` for arrays without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\nfunction arrayEach(array, iteratee) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n}\n\nmodule.exports = arrayEach;\n","/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property names to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @returns {Object} Returns `object`.\n */\nfunction baseCopy(source, props, object) {\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n object[key] = source[key];\n }\n return object;\n}\n\nmodule.exports = baseCopy;\n","var createBaseFor = require('./createBaseFor');\n\n/**\n * The base implementation of `baseForIn` and `baseForOwn` which iterates\n * over `object` properties returned by `keysFunc` invoking `iteratee` for\n * each property. Iteratee functions may exit iteration early by explicitly\n * returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\nvar baseFor = createBaseFor();\n\nmodule.exports = baseFor;\n","var baseFor = require('./baseFor'),\n keysIn = require('../object/keysIn');\n\n/**\n * The base implementation of `_.forIn` without support for callback\n * shorthands and `this` binding.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\nfunction baseForIn(object, iteratee) {\n return baseFor(object, iteratee, keysIn);\n}\n\nmodule.exports = baseForIn;\n","var arrayEach = require('./arrayEach'),\n baseMergeDeep = require('./baseMergeDeep'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isObject = require('../lang/isObject'),\n isObjectLike = require('./isObjectLike'),\n isTypedArray = require('../lang/isTypedArray'),\n keys = require('../object/keys');\n\n/**\n * The base implementation of `_.merge` without support for argument juggling,\n * multiple sources, and `this` binding `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {Object} Returns `object`.\n */\nfunction baseMerge(object, source, customizer, stackA, stackB) {\n if (!isObject(object)) {\n return object;\n }\n var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),\n props = isSrcArr ? undefined : keys(source);\n\n arrayEach(props || source, function(srcValue, key) {\n if (props) {\n key = srcValue;\n srcValue = source[key];\n }\n if (isObjectLike(srcValue)) {\n stackA || (stackA = []);\n stackB || (stackB = []);\n baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB);\n }\n else {\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n }\n if ((result !== undefined || (isSrcArr && !(key in object))) &&\n (isCommon || (result === result ? (result !== value) : (value === value)))) {\n object[key] = result;\n }\n }\n });\n return object;\n}\n\nmodule.exports = baseMerge;\n","var arrayCopy = require('./arrayCopy'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isArrayLike = require('./isArrayLike'),\n isPlainObject = require('../lang/isPlainObject'),\n isTypedArray = require('../lang/isTypedArray'),\n toPlainObject = require('../lang/toPlainObject');\n\n/**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Array} [stackA=[]] Tracks traversed source objects.\n * @param {Array} [stackB=[]] Associates values with source counterparts.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) {\n var length = stackA.length,\n srcValue = source[key];\n\n while (length--) {\n if (stackA[length] == srcValue) {\n object[key] = stackB[length];\n return;\n }\n }\n var value = object[key],\n result = customizer ? customizer(value, srcValue, key, object, source) : undefined,\n isCommon = result === undefined;\n\n if (isCommon) {\n result = srcValue;\n if (isArrayLike(srcValue) && (isArray(srcValue) || isTypedArray(srcValue))) {\n result = isArray(value)\n ? value\n : (isArrayLike(value) ? arrayCopy(value) : []);\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n result = isArguments(value)\n ? toPlainObject(value)\n : (isPlainObject(value) ? value : {});\n }\n else {\n isCommon = false;\n }\n }\n // Add the source value to the stack of traversed objects and associate\n // it with its merged value.\n stackA.push(srcValue);\n stackB.push(result);\n\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB);\n } else if (result === result ? (result !== value) : (value === value)) {\n object[key] = result;\n }\n}\n\nmodule.exports = baseMergeDeep;\n","var toObject = require('./toObject');\n\n/**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new function.\n */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : toObject(object)[key];\n };\n}\n\nmodule.exports = baseProperty;\n","var identity = require('../utility/identity');\n\n/**\n * A specialized version of `baseCallback` which only supports `this` binding\n * and specifying the number of arguments to provide to `func`.\n *\n * @private\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {number} [argCount] The number of arguments to provide to `func`.\n * @returns {Function} Returns the callback.\n */\nfunction bindCallback(func, thisArg, argCount) {\n if (typeof func != 'function') {\n return identity;\n }\n if (thisArg === undefined) {\n return func;\n }\n switch (argCount) {\n case 1: return function(value) {\n return func.call(thisArg, value);\n };\n case 3: return function(value, index, collection) {\n return func.call(thisArg, value, index, collection);\n };\n case 4: return function(accumulator, value, index, collection) {\n return func.call(thisArg, accumulator, value, index, collection);\n };\n case 5: return function(value, other, key, object, source) {\n return func.call(thisArg, value, other, key, object, source);\n };\n }\n return function() {\n return func.apply(thisArg, arguments);\n };\n}\n\nmodule.exports = bindCallback;\n","var bindCallback = require('./bindCallback'),\n isIterateeCall = require('./isIterateeCall'),\n restParam = require('../function/restParam');\n\n/**\n * Creates a `_.assign`, `_.defaults`, or `_.merge` function.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\nfunction createAssigner(assigner) {\n return restParam(function(object, sources) {\n var index = -1,\n length = object == null ? 0 : sources.length,\n customizer = length > 2 ? sources[length - 2] : undefined,\n guard = length > 2 ? sources[2] : undefined,\n thisArg = length > 1 ? sources[length - 1] : undefined;\n\n if (typeof customizer == 'function') {\n customizer = bindCallback(customizer, thisArg, 5);\n length -= 2;\n } else {\n customizer = typeof thisArg == 'function' ? thisArg : undefined;\n length -= (customizer ? 1 : 0);\n }\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, customizer);\n }\n }\n return object;\n });\n}\n\nmodule.exports = createAssigner;\n","var toObject = require('./toObject');\n\n/**\n * Creates a base function for `_.forIn` or `_.forInRight`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\nfunction createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var iterable = toObject(object),\n props = keysFunc(object),\n length = props.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length)) {\n var key = props[index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n}\n\nmodule.exports = createBaseFor;\n","var baseProperty = require('./baseProperty');\n\n/**\n * Gets the \"length\" property value of `object`.\n *\n * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)\n * that affects Safari on at least iOS 8.1-8.3 ARM64.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {*} Returns the \"length\" value.\n */\nvar getLength = baseProperty('length');\n\nmodule.exports = getLength;\n","var isNative = require('../lang/isNative');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = object == null ? undefined : object[key];\n return isNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","var getLength = require('./getLength'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n */\nfunction isArrayLike(value) {\n return value != null && isLength(getLength(value));\n}\n\nmodule.exports = isArrayLike;\n","/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nvar isHostObject = (function() {\n try {\n Object({ 'toString': 0 } + '');\n } catch(e) {\n return function() { return false; };\n }\n return function(value) {\n // IE < 9 presents many host objects as `Object` objects that can coerce\n // to strings despite having improperly defined `toString` methods.\n return typeof value.toString != 'function' && typeof (value + '') == 'string';\n };\n}());\n\nmodule.exports = isHostObject;\n","/** Used to detect unsigned integer values. */\nvar reIsUint = /^\\d+$/;\n\n/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;\n length = length == null ? MAX_SAFE_INTEGER : length;\n return value > -1 && value % 1 == 0 && value < length;\n}\n\nmodule.exports = isIndex;\n","var isArrayLike = require('./isArrayLike'),\n isIndex = require('./isIndex'),\n isObject = require('../lang/isObject');\n\n/**\n * Checks if the provided arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)) {\n var other = object[index];\n return value === value ? (value === other) : (other !== other);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n","/**\n * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)\n * of an array-like value.\n */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n */\nfunction isLength(value) {\n return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","/**\n * Checks if `value` is object-like.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isIndex = require('./isIndex'),\n isLength = require('./isLength'),\n isString = require('../lang/isString'),\n keysIn = require('../object/keysIn');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A fallback implementation of `Object.keys` which creates an array of the\n * own enumerable property names of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction shimKeys(object) {\n var props = keysIn(object),\n propsLength = props.length,\n length = propsLength && object.length;\n\n var allowIndexes = !!length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object));\n\n var index = -1,\n result = [];\n\n while (++index < propsLength) {\n var key = props[index];\n if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = shimKeys;\n","var isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/**\n * Converts `value` to an object if it's not one.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {Object} Returns the object.\n */\nfunction toObject(value) {\n if (support.unindexedChars && isString(value)) {\n var index = -1,\n length = value.length,\n result = Object(value);\n\n while (++index < length) {\n result[index] = value.charAt(index);\n }\n return result;\n }\n return isObject(value) ? value : Object(value);\n}\n\nmodule.exports = toObject;\n","var isArrayLike = require('../internal/isArrayLike'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is classified as an `arguments` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nfunction isArguments(value) {\n return isObjectLike(value) && isArrayLike(value) &&\n hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n}\n\nmodule.exports = isArguments;\n","var getNative = require('../internal/getNative'),\n isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeIsArray = getNative(Array, 'isArray');\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(function() { return arguments; }());\n * // => false\n */\nvar isArray = nativeIsArray || function(value) {\n return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag;\n};\n\nmodule.exports = isArray;\n","var isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in older versions of Chrome and Safari which return 'function' for regexes\n // and Safari 8 which returns 'object' for typed array constructors.\n return isObject(value) && objToString.call(value) == funcTag;\n}\n\nmodule.exports = isFunction;\n","var isFunction = require('./isFunction'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** Used to detect host constructors (Safari > 5). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar fnToString = Function.prototype.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n fnToString.call(hasOwnProperty).replace(/[\\\\^$.*+?()[\\]{}|]/g, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * Checks if `value` is a native function.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function, else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\nfunction isNative(value) {\n if (value == null) {\n return false;\n }\n if (isFunction(value)) {\n return reIsNative.test(fnToString.call(value));\n }\n return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);\n}\n\nmodule.exports = isNative;\n","/**\n * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.\n * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(1);\n * // => false\n */\nfunction isObject(value) {\n // Avoid a V8 JIT bug in Chrome 19-20.\n // See https://code.google.com/p/v8/issues/detail?id=2291 for more details.\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var baseForIn = require('../internal/baseForIn'),\n isArguments = require('./isArguments'),\n isHostObject = require('../internal/isHostObject'),\n isObjectLike = require('../internal/isObjectLike'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar objectTag = '[object Object]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * **Note:** This method assumes objects created by the `Object` constructor\n * have no inherited enumerable properties.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\nfunction isPlainObject(value) {\n var Ctor;\n\n // Exit early for non `Object` objects.\n if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||\n (!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {\n return false;\n }\n // IE < 9 iterates inherited properties before own properties. If the first\n // iterated property is an object's own property then there are no inherited\n // enumerable properties.\n var result;\n if (support.ownLast) {\n baseForIn(value, function(subValue, key, object) {\n result = hasOwnProperty.call(object, key);\n return false;\n });\n return result !== false;\n }\n // In most environments an object's own properties are iterated before\n // its inherited properties. If the last iterated property is an object's\n // own property then there are no inherited enumerable properties.\n baseForIn(value, function(subValue, key) {\n result = key;\n });\n return result === undefined || hasOwnProperty.call(value, result);\n}\n\nmodule.exports = isPlainObject;\n","var isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar stringTag = '[object String]';\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\nfunction isString(value) {\n return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag);\n}\n\nmodule.exports = isString;\n","var isLength = require('../internal/isLength'),\n isObjectLike = require('../internal/isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dateTag] = typedArrayTags[errorTag] =\ntypedArrayTags[funcTag] = typedArrayTags[mapTag] =\ntypedArrayTags[numberTag] = typedArrayTags[objectTag] =\ntypedArrayTags[regexpTag] = typedArrayTags[setTag] =\ntypedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;\n\n/** Used for native method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nfunction isTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)];\n}\n\nmodule.exports = isTypedArray;\n","var baseCopy = require('../internal/baseCopy'),\n keysIn = require('../object/keysIn');\n\n/**\n * Converts `value` to a plain object flattening inherited enumerable\n * properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\nfunction toPlainObject(value) {\n return baseCopy(value, keysIn(value));\n}\n\nmodule.exports = toPlainObject;\n","var getNative = require('../internal/getNative'),\n isArrayLike = require('../internal/isArrayLike'),\n isObject = require('../lang/isObject'),\n shimKeys = require('../internal/shimKeys'),\n support = require('../support');\n\n/* Native method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = getNative(Object, 'keys');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nvar keys = !nativeKeys ? shimKeys : function(object) {\n var Ctor = object == null ? undefined : object.constructor;\n if ((typeof Ctor == 'function' && Ctor.prototype === object) ||\n (typeof object == 'function' ? support.enumPrototypes : isArrayLike(object))) {\n return shimKeys(object);\n }\n return isObject(object) ? nativeKeys(object) : [];\n};\n\nmodule.exports = keys;\n","var arrayEach = require('../internal/arrayEach'),\n isArguments = require('../lang/isArguments'),\n isArray = require('../lang/isArray'),\n isFunction = require('../lang/isFunction'),\n isIndex = require('../internal/isIndex'),\n isLength = require('../internal/isLength'),\n isObject = require('../lang/isObject'),\n isString = require('../lang/isString'),\n support = require('../support');\n\n/** `Object#toString` result references. */\nvar arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n stringTag = '[object String]';\n\n/** Used to fix the JScript `[[DontEnum]]` bug. */\nvar shadowProps = [\n 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable',\n 'toLocaleString', 'toString', 'valueOf'\n];\n\n/** Used for native method references. */\nvar errorProto = Error.prototype,\n objectProto = Object.prototype,\n stringProto = String.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objToString = objectProto.toString;\n\n/** Used to avoid iterating over non-enumerable properties in IE < 9. */\nvar nonEnumProps = {};\nnonEnumProps[arrayTag] = nonEnumProps[dateTag] = nonEnumProps[numberTag] = { 'constructor': true, 'toLocaleString': true, 'toString': true, 'valueOf': true };\nnonEnumProps[boolTag] = nonEnumProps[stringTag] = { 'constructor': true, 'toString': true, 'valueOf': true };\nnonEnumProps[errorTag] = nonEnumProps[funcTag] = nonEnumProps[regexpTag] = { 'constructor': true, 'toString': true };\nnonEnumProps[objectTag] = { 'constructor': true };\n\narrayEach(shadowProps, function(key) {\n for (var tag in nonEnumProps) {\n if (hasOwnProperty.call(nonEnumProps, tag)) {\n var props = nonEnumProps[tag];\n props[key] = hasOwnProperty.call(props, key);\n }\n }\n});\n\n/**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\nfunction keysIn(object) {\n if (object == null) {\n return [];\n }\n if (!isObject(object)) {\n object = Object(object);\n }\n var length = object.length;\n\n length = (length && isLength(length) &&\n (isArray(object) || isArguments(object) || isString(object)) && length) || 0;\n\n var Ctor = object.constructor,\n index = -1,\n proto = (isFunction(Ctor) && Ctor.prototype) || objectProto,\n isProto = proto === object,\n result = Array(length),\n skipIndexes = length > 0,\n skipErrorProps = support.enumErrorProps && (object === errorProto || object instanceof Error),\n skipProto = support.enumPrototypes && isFunction(object);\n\n while (++index < length) {\n result[index] = (index + '');\n }\n // lodash skips the `constructor` property when it infers it's iterating\n // over a `prototype` object because IE < 9 can't set the `[[Enumerable]]`\n // attribute of an existing property and the `constructor` property of a\n // prototype defaults to non-enumerable.\n for (var key in object) {\n if (!(skipProto && key == 'prototype') &&\n !(skipErrorProps && (key == 'message' || key == 'name')) &&\n !(skipIndexes && isIndex(key, length)) &&\n !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n if (support.nonEnumShadows && object !== objectProto) {\n var tag = object === stringProto ? stringTag : (object === errorProto ? errorTag : objToString.call(object)),\n nonEnums = nonEnumProps[tag] || nonEnumProps[objectTag];\n\n if (tag == objectTag) {\n proto = objectProto;\n }\n length = shadowProps.length;\n while (length--) {\n key = shadowProps[length];\n var nonEnum = nonEnums[key];\n if (!(isProto && nonEnum) &&\n (nonEnum ? hasOwnProperty.call(object, key) : object[key] !== proto[key])) {\n result.push(key);\n }\n }\n }\n return result;\n}\n\nmodule.exports = keysIn;\n","var baseMerge = require('../internal/baseMerge'),\n createAssigner = require('../internal/createAssigner');\n\n/**\n * Recursively merges own enumerable properties of the source object(s), that\n * don't resolve to `undefined` into the destination object. Subsequent sources\n * overwrite property assignments of previous sources. If `customizer` is\n * provided it's invoked to produce the merged values of the destination and\n * source properties. If `customizer` returns `undefined` merging is handled\n * by the method instead. The `customizer` is bound to `thisArg` and invoked\n * with five arguments: (objectValue, sourceValue, key, object, source).\n *\n * @static\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {*} [thisArg] The `this` binding of `customizer`.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var users = {\n * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]\n * };\n *\n * var ages = {\n * 'data': [{ 'age': 36 }, { 'age': 40 }]\n * };\n *\n * _.merge(users, ages);\n * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }\n *\n * // using a customizer callback\n * var object = {\n * 'fruits': ['apple'],\n * 'vegetables': ['beet']\n * };\n *\n * var other = {\n * 'fruits': ['banana'],\n * 'vegetables': ['carrot']\n * };\n *\n * _.merge(object, other, function(a, b) {\n * if (_.isArray(a)) {\n * return a.concat(b);\n * }\n * });\n * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }\n */\nvar merge = createAssigner(baseMerge);\n\nmodule.exports = merge;\n","/** Used for native method references. */\nvar arrayProto = Array.prototype,\n errorProto = Error.prototype,\n objectProto = Object.prototype;\n\n/** Native method references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice;\n\n/**\n * An object environment feature flags.\n *\n * @static\n * @memberOf _\n * @type Object\n */\nvar support = {};\n\n(function(x) {\n var Ctor = function() { this.x = x; },\n object = { '0': x, 'length': x },\n props = [];\n\n Ctor.prototype = { 'valueOf': x, 'y': x };\n for (var key in new Ctor) { props.push(key); }\n\n /**\n * Detect if `name` or `message` properties of `Error.prototype` are\n * enumerable by default (IE < 9, Safari < 5.1).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumErrorProps = propertyIsEnumerable.call(errorProto, 'message') ||\n propertyIsEnumerable.call(errorProto, 'name');\n\n /**\n * Detect if `prototype` properties are enumerable by default.\n *\n * Firefox < 3.6, Opera > 9.50 - Opera < 11.60, and Safari < 5.1\n * (if the prototype or a property on the prototype has been set)\n * incorrectly set the `[[Enumerable]]` value of a function's `prototype`\n * property to `true`.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');\n\n /**\n * Detect if properties shadowing those on `Object.prototype` are non-enumerable.\n *\n * In IE < 9 an object's own properties, shadowing non-enumerable ones,\n * are made non-enumerable as well (a.k.a the JScript `[[DontEnum]]` bug).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.nonEnumShadows = !/valueOf/.test(props);\n\n /**\n * Detect if own properties are iterated after inherited properties (IE < 9).\n *\n * @memberOf _.support\n * @type boolean\n */\n support.ownLast = props[0] != 'x';\n\n /**\n * Detect if `Array#shift` and `Array#splice` augment array-like objects\n * correctly.\n *\n * Firefox < 10, compatibility modes of IE 8, and IE < 9 have buggy Array\n * `shift()` and `splice()` functions that fail to remove the last element,\n * `value[0]`, of array-like objects even though the \"length\" property is\n * set to `0`. The `shift()` method is buggy in compatibility modes of IE 8,\n * while `splice()` is buggy regardless of mode in IE < 9.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.spliceObjects = (splice.call(object, 0, 1), !object[0]);\n\n /**\n * Detect lack of support for accessing string characters by index.\n *\n * IE < 8 can't access characters by index. IE 8 can only access characters\n * by index on string literals, not string objects.\n *\n * @memberOf _.support\n * @type boolean\n */\n support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';\n}(1, 0));\n\nmodule.exports = support;\n","/**\n * This method returns the first argument provided to it.\n *\n * @static\n * @memberOf _\n * @category Utility\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'user': 'fred' };\n *\n * _.identity(object) === object;\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar keys = require('object-keys');\nvar canBeObject = function (obj) {\n\treturn typeof obj !== 'undefined' && obj !== null;\n};\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\nvar defineProperties = require('define-properties');\nvar toObject = Object;\nvar push = Array.prototype.push;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nvar assignShim = function assign(target, source1) {\n\tif (!canBeObject(target)) { throw new TypeError('target must be an object'); }\n\tvar objTarget = toObject(target);\n\tvar s, source, i, props, syms;\n\tfor (s = 1; s < arguments.length; ++s) {\n\t\tsource = toObject(arguments[s]);\n\t\tprops = keys(source);\n\t\tif (hasSymbols && Object.getOwnPropertySymbols) {\n\t\t\tsyms = Object.getOwnPropertySymbols(source);\n\t\t\tfor (i = 0; i < syms.length; ++i) {\n\t\t\t\tif (propIsEnumerable.call(source, syms[i])) {\n\t\t\t\t\tpush.call(props, syms[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tfor (i = 0; i < props.length; ++i) {\n\t\t\tobjTarget[props[i]] = source[props[i]];\n\t\t}\n\t}\n\treturn objTarget;\n};\n\ndefineProperties(assignShim, {\n\tshim: function shimObjectAssign() {\n\t\tvar assignHasPendingExceptions = function () {\n\t\t\tif (!Object.assign || !Object.preventExtensions) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t\t\t// which is 72% slower than our shim, and Firefox 40's native implementation.\n\t\t\tvar thrower = Object.preventExtensions({ 1: 2 });\n\t\t\ttry {\n\t\t\t\tObject.assign(thrower, 'xy');\n\t\t\t} catch (e) {\n\t\t\t\treturn thrower[1] === 'y';\n\t\t\t}\n\t\t};\n\t\tdefineProperties(\n\t\t\tObject,\n\t\t\t{ assign: assignShim },\n\t\t\t{ assign: assignHasPendingExceptions }\n\t\t);\n\t\treturn Object.assign || assignShim;\n\t}\n});\n\nmodule.exports = assignShim;\n","'use strict';\n\nvar keys = require('object-keys');\nvar foreach = require('foreach');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol';\n\nvar toStr = Object.prototype.toString;\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar arePropertyDescriptorsSupported = function () {\n\tvar obj = {};\n\ttry {\n\t\tObject.defineProperty(obj, 'x', { value: obj, enumerable: false });\n /* eslint-disable no-unused-vars */\n for (var _ in obj) { return false; }\n /* eslint-enable no-unused-vars */\n\t\treturn obj.x === obj;\n\t} catch (e) { /* this is IE 8. */\n\t\treturn false;\n\t}\n};\nvar supportsDescriptors = Object.defineProperty && arePropertyDescriptorsSupported();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object && (!isFunction(predicate) || !predicate())) {\n\t\treturn;\n\t}\n\tif (supportsDescriptors) {\n\t\tObject.defineProperty(object, name, {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tvalue: value\n\t\t});\n\t} else {\n\t\tobject[name] = value;\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = props.concat(Object.getOwnPropertySymbols(map));\n\t}\n\tforeach(props, function (name) {\n\t\tdefineProperty(object, name, map[name], predicates[name]);\n\t});\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toString = Object.prototype.toString;\n\nmodule.exports = function forEach (obj, fn, ctx) {\n if (toString.call(fn) !== '[object Function]') {\n throw new TypeError('iterator must be a function');\n }\n var l = obj.length;\n if (l === +l) {\n for (var i = 0; i < l; i++) {\n fn.call(ctx, obj[i], i, obj);\n }\n } else {\n for (var k in obj) {\n if (hasOwn.call(obj, k)) {\n fn.call(ctx, obj[k], k, obj);\n }\n }\n }\n};\n\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString');\nvar hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar blacklistedKeys = {\n\t$window: true,\n\t$console: true,\n\t$parent: true,\n\t$self: true,\n\t$frames: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\tif (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\ttry {\n\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' && !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (!Object.keys) {\n\t\tObject.keys = keysShim;\n\t} else {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","module.exports = SafeParseTuple\n\nfunction SafeParseTuple(obj, reviver) {\n var json\n var error = null\n\n try {\n json = JSON.parse(obj, reviver)\n } catch (err) {\n error = err\n }\n\n return [error, json]\n}\n","function clean (s) {\n return s.replace(/\\n\\r?\\s*/g, '')\n}\n\n\nmodule.exports = function tsml (sa) {\n var s = ''\n , i = 0\n\n for (; i < arguments.length; i++)\n s += clean(sa[i]) + (arguments[i + 1] || '')\n\n return s\n}","\"use strict\";\nvar window = require(\"global/window\")\nvar once = require(\"once\")\nvar parseHeaders = require(\"parse-headers\")\n\n\n\nmodule.exports = createXHR\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop\ncreateXHR.XDomainRequest = \"withCredentials\" in (new createXHR.XMLHttpRequest()) ? createXHR.XMLHttpRequest : window.XDomainRequest\n\n\nfunction isEmpty(obj){\n for(var i in obj){\n if(obj.hasOwnProperty(i)) return false\n }\n return true\n}\n\nfunction createXHR(options, callback) {\n function readystatechange() {\n if (xhr.readyState === 4) {\n loadFunc()\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined\n\n if (xhr.response) {\n body = xhr.response\n } else if (xhr.responseType === \"text\" || !xhr.responseType) {\n body = xhr.responseText || xhr.responseXML\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body)\n } catch (e) {}\n }\n\n return body\n }\n\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer)\n if(!(evt instanceof Error)){\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\") )\n }\n evt.statusCode = 0\n callback(evt, failureResponse)\n }\n\n // will load the data & process the response in a special response object\n function loadFunc() {\n if (aborted) return\n var status\n clearTimeout(timeoutTimer)\n if(options.useXDR && xhr.status===undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200\n } else {\n status = (xhr.status === 1223 ? 204 : xhr.status)\n }\n var response = failureResponse\n var err = null\n\n if (status !== 0){\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n }\n if(xhr.getAllResponseHeaders){ //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders())\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\")\n }\n callback(err, response, response.body)\n\n }\n\n if (typeof options === \"string\") {\n options = { uri: options }\n }\n\n options = options || {}\n if(typeof callback === \"undefined\"){\n throw new Error(\"callback argument missing\")\n }\n callback = once(callback)\n\n var xhr = options.xhr || null\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest()\n }else{\n xhr = new createXHR.XMLHttpRequest()\n }\n }\n\n var key\n var aborted\n var uri = xhr.url = options.uri || options.url\n var method = xhr.method = options.method || \"GET\"\n var body = options.body || options.data\n var headers = xhr.headers = options.headers || {}\n var sync = !!options.sync\n var isJson = false\n var timeoutTimer\n\n if (\"json\" in options) {\n isJson = true\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\") //Don't override existing accept header declared by user\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\") //Don't override existing accept header declared by user\n body = JSON.stringify(options.json)\n }\n }\n\n xhr.onreadystatechange = readystatechange\n xhr.onload = loadFunc\n xhr.onerror = errorFunc\n // IE9 must have onprogress be set to a unique function.\n xhr.onprogress = function () {\n // IE must die\n }\n xhr.ontimeout = errorFunc\n xhr.open(method, uri, !sync, options.username, options.password)\n //has to be after open\n if(!sync) {\n xhr.withCredentials = !!options.withCredentials\n }\n // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n if (!sync && options.timeout > 0 ) {\n timeoutTimer = setTimeout(function(){\n aborted=true//IE9 may still call readystatechange\n xhr.abort(\"timeout\")\n var e = new Error(\"XMLHttpRequest timeout\")\n e.code = \"ETIMEDOUT\"\n errorFunc(e)\n }, options.timeout )\n }\n\n if (xhr.setRequestHeader) {\n for(key in headers){\n if(headers.hasOwnProperty(key)){\n xhr.setRequestHeader(key, headers[key])\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\")\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType\n }\n\n if (\"beforeSend\" in options &&\n typeof options.beforeSend === \"function\"\n ) {\n options.beforeSend(xhr)\n }\n\n xhr.send(body)\n\n return xhr\n\n\n}\n\nfunction noop() {}\n","module.exports = once\n\nonce.proto = once(function () {\n Object.defineProperty(Function.prototype, 'once', {\n value: function () {\n return once(this)\n },\n configurable: true\n })\n})\n\nfunction once (fn) {\n var called = false\n return function () {\n if (called) return\n called = true\n return fn.apply(this, arguments)\n }\n}\n","var isFunction = require('is-function')\n\nmodule.exports = forEach\n\nvar toString = Object.prototype.toString\nvar hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction forEach(list, iterator, context) {\n if (!isFunction(iterator)) {\n throw new TypeError('iterator must be a function')\n }\n\n if (arguments.length < 3) {\n context = this\n }\n \n if (toString.call(list) === '[object Array]')\n forEachArray(list, iterator, context)\n else if (typeof list === 'string')\n forEachString(list, iterator, context)\n else\n forEachObject(list, iterator, context)\n}\n\nfunction forEachArray(array, iterator, context) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n iterator.call(context, array[i], i, array)\n }\n }\n}\n\nfunction forEachString(string, iterator, context) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n iterator.call(context, string.charAt(i), i, string)\n }\n}\n\nfunction forEachObject(object, iterator, context) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n iterator.call(context, object[k], k, object)\n }\n }\n}\n","module.exports = isFunction\n\nvar toString = Object.prototype.toString\n\nfunction isFunction (fn) {\n var string = toString.call(fn)\n return string === '[object Function]' ||\n (typeof fn === 'function' && string !== '[object RegExp]') ||\n (typeof window !== 'undefined' &&\n // IE8 and below\n (fn === window.setTimeout ||\n fn === window.alert ||\n fn === window.confirm ||\n fn === window.prompt))\n};\n","\nexports = module.exports = trim;\n\nfunction trim(str){\n return str.replace(/^\\s*|\\s*$/g, '');\n}\n\nexports.left = function(str){\n return str.replace(/^\\s*/, '');\n};\n\nexports.right = function(str){\n return str.replace(/\\s*$/, '');\n};\n","var trim = require('trim')\n , forEach = require('for-each')\n , isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n }\n\nmodule.exports = function (headers) {\n if (!headers)\n return {}\n\n var result = {}\n\n forEach(\n trim(headers).split('\\n')\n , function (row) {\n var index = row.indexOf(':')\n , key = trim(row.slice(0, index)).toLowerCase()\n , value = trim(row.slice(index + 1))\n\n if (typeof(result[key]) === 'undefined') {\n result[key] = value\n } else if (isArray(result[key])) {\n result[key].push(value)\n } else {\n result[key] = [ result[key], value ]\n }\n }\n )\n\n return result\n}","/**\n * @file big-play-button.js\n */\nimport Button from './button.js';\nimport Component from './component.js';\n\n/**\n * Initial play button. Shows before the video has played. The hiding of the\n * big play button is done via CSS and player states.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Button\n * @class BigPlayButton\n */\nclass BigPlayButton extends Button {\n\n constructor(player, options) {\n super(player, options);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return 'vjs-big-play-button';\n }\n\n /**\n * Handles click for play\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.play();\n }\n\n}\n\nBigPlayButton.prototype.controlText_ = 'Play Video';\n\nComponent.registerComponent('BigPlayButton', BigPlayButton);\nexport default BigPlayButton;\n","/**\n * @file button.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\nimport * as Events from './utils/events.js';\nimport * as Fn from './utils/fn.js';\nimport document from 'global/document';\nimport assign from 'object.assign';\n\n/**\n * Base class for all buttons\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class Button\n */\nclass Button extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.emitTapEvents();\n\n this.on('tap', this.handleClick);\n this.on('click', this.handleClick);\n this.on('focus', this.handleFocus);\n this.on('blur', this.handleBlur);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Element's node type. e.g. 'div'\n * @param {Object=} props An object of element attributes that should be set on the element Tag name\n * @return {Element}\n * @method createEl\n */\n createEl(tag='button', props={}, attributes={}) {\n props = assign({\n className: this.buildCSSClass(),\n tabIndex: 0\n }, props);\n\n // Add standard Aria info\n attributes = assign({\n role: 'button',\n type: 'button', // Necessary since the default button type is \"submit\"\n 'aria-live': 'polite' // let the screen reader user know that the text of the button may change\n }, attributes);\n\n let el = super.createEl(tag, props, attributes);\n\n this.controlTextEl_ = Dom.createEl('span', {\n className: 'vjs-control-text'\n });\n\n el.appendChild(this.controlTextEl_);\n\n this.controlText(this.controlText_);\n\n return el;\n }\n\n /**\n * Controls text - both request and localize\n *\n * @param {String} text Text for button\n * @return {String}\n * @method controlText\n */\n controlText(text) {\n if (!text) return this.controlText_ || 'Need Text';\n\n this.controlText_ = text;\n this.controlTextEl_.innerHTML = this.localize(this.controlText_);\n\n return this;\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String}\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-control vjs-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle Click - Override with specific functionality for button\n *\n * @method handleClick\n */\n handleClick() {}\n\n /**\n * Handle Focus - Add keyboard functionality to element\n *\n * @method handleFocus\n */\n handleFocus() {\n Events.on(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n /**\n * Handle KeyPress (document level) - Trigger click when keys are pressed\n *\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n event.preventDefault();\n this.handleClick(event);\n }\n }\n\n /**\n * Handle Blur - Remove keyboard triggers\n *\n * @method handleBlur\n */\n handleBlur() {\n Events.off(document, 'keydown', Fn.bind(this, this.handleKeyPress));\n }\n\n}\n\n\nComponent.registerComponent('Button', Button);\nexport default Button;\n","/**\n * @file component.js\n *\n * Player Component - Base class for all UI objects\n */\n\nimport window from 'global/window';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as Events from './utils/events.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\n\n\n/**\n * Base UI Component class\n * Components are embeddable UI objects that are represented by both a\n * javascript object and an element in the DOM. They can be children of other\n * components, and can have many children themselves.\n * ```js\n * // adding a button to the player\n * var button = player.addChild('button');\n * button.el(); // -> button element\n * ```\n * ```html\n *
    \n *
    Button
    \n *
    \n * ```\n * Components are also event targets.\n * ```js\n * button.on('click', function(){\n * console.log('Button Clicked!');\n * });\n * button.trigger('customevent');\n * ```\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @class Component\n */\nclass Component {\n\n constructor(player, options, ready) {\n\n // The component might be the player itself and we can't pass `this` to super\n if (!player && this.play) {\n this.player_ = player = this; // eslint-disable-line\n } else {\n this.player_ = player;\n }\n\n // Make a copy of prototype.options_ to protect against overriding defaults\n this.options_ = mergeOptions({}, this.options_);\n\n // Updated options with supplied options\n options = this.options_ = mergeOptions(this.options_, options);\n\n // Get ID from options or options element if one is supplied\n this.id_ = options.id || (options.el && options.el.id);\n\n // If there was no ID from the options, generate one\n if (!this.id_) {\n // Don't require the player ID function in the case of mock players\n let id = player && player.id && player.id() || 'no_player';\n\n this.id_ = `${id}_component_${Guid.newGUID()}`;\n }\n\n this.name_ = options.name || null;\n\n // Create element if one wasn't provided in options\n if (options.el) {\n this.el_ = options.el;\n } else if (options.createEl !== false) {\n this.el_ = this.createEl();\n }\n\n this.children_ = [];\n this.childIndex_ = {};\n this.childNameIndex_ = {};\n\n // Add any child components in options\n if (options.initChildren !== false) {\n this.initChildren();\n }\n\n this.ready(ready);\n // Don't want to trigger ready here or it will before init is actually\n // finished for all children that run this constructor\n\n if (options.reportTouchActivity !== false) {\n this.enableTouchActivity();\n }\n }\n\n /**\n * Dispose of the component and all child components\n *\n * @method dispose\n */\n dispose() {\n this.trigger({ type: 'dispose', bubbles: false });\n\n // Dispose all children.\n if (this.children_) {\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i].dispose) {\n this.children_[i].dispose();\n }\n }\n }\n\n // Delete child references\n this.children_ = null;\n this.childIndex_ = null;\n this.childNameIndex_ = null;\n\n // Remove all event listeners.\n this.off();\n\n // Remove element from DOM\n if (this.el_.parentNode) {\n this.el_.parentNode.removeChild(this.el_);\n }\n\n Dom.removeElData(this.el_);\n this.el_ = null;\n }\n\n /**\n * Return the component's player\n *\n * @return {Player}\n * @method player\n */\n player() {\n return this.player_;\n }\n\n /**\n * Deep merge of options objects\n * Whenever a property is an object on both options objects\n * the two properties will be merged using mergeOptions.\n *\n * ```js\n * Parent.prototype.options_ = {\n * optionSet: {\n * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' },\n * 'childTwo': {},\n * 'childThree': {}\n * }\n * }\n * newOptions = {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'abc': '123' }\n * 'childTwo': null,\n * 'childFour': {}\n * }\n * }\n *\n * this.options(newOptions);\n * ```\n * RESULT\n * ```js\n * {\n * optionSet: {\n * 'childOne': { 'foo': 'baz', 'asdf': 'fdsa', 'abc': '123' },\n * 'childTwo': null, // Disabled. Won't be initialized.\n * 'childThree': {},\n * 'childFour': {}\n * }\n * }\n * ```\n *\n * @param {Object} obj Object of new option values\n * @return {Object} A NEW object of this.options_ and obj merged\n * @method options\n */\n options(obj) {\n log.warn('this.options() has been deprecated and will be moved to the constructor in 6.0');\n\n if (!obj) {\n return this.options_;\n }\n\n this.options_ = mergeOptions(this.options_, obj);\n return this.options_;\n }\n\n /**\n * Get the component's DOM element\n * ```js\n * var domEl = myComponent.el();\n * ```\n *\n * @return {Element}\n * @method el\n */\n el() {\n return this.el_;\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} tagName Element's node type. e.g. 'div'\n * @param {Object=} properties An object of properties that should be set\n * @param {Object=} attributes An object of attributes that should be set\n * @return {Element}\n * @method createEl\n */\n createEl(tagName, properties, attributes) {\n return Dom.createEl(tagName, properties, attributes);\n }\n\n localize(string) {\n let code = this.player_.language && this.player_.language();\n let languages = this.player_.languages && this.player_.languages();\n\n if (!code || !languages) {\n return string;\n }\n\n let language = languages[code];\n\n if (language && language[string]) {\n return language[string];\n }\n\n let primaryCode = code.split('-')[0];\n let primaryLang = languages[primaryCode];\n\n if (primaryLang && primaryLang[string]) {\n return primaryLang[string];\n }\n\n return string;\n }\n\n /**\n * Return the component's DOM element where children are inserted.\n * Will either be the same as el() or a new element defined in createEl().\n *\n * @return {Element}\n * @method contentEl\n */\n contentEl() {\n return this.contentEl_ || this.el_;\n }\n\n /**\n * Get the component's ID\n * ```js\n * var id = myComponent.id();\n * ```\n *\n * @return {String}\n * @method id\n */\n id() {\n return this.id_;\n }\n\n /**\n * Get the component's name. The name is often used to reference the component.\n * ```js\n * var name = myComponent.name();\n * ```\n *\n * @return {String}\n * @method name\n */\n name() {\n return this.name_;\n }\n\n /**\n * Get an array of all child components\n * ```js\n * var kids = myComponent.children();\n * ```\n *\n * @return {Array} The children\n * @method children\n */\n children() {\n return this.children_;\n }\n\n /**\n * Returns a child component with the provided ID\n *\n * @return {Component}\n * @method getChildById\n */\n getChildById(id) {\n return this.childIndex_[id];\n }\n\n /**\n * Returns a child component with the provided name\n *\n * @return {Component}\n * @method getChild\n */\n getChild(name) {\n return this.childNameIndex_[name];\n }\n\n /**\n * Adds a child component inside this component\n * ```js\n * myComponent.el();\n * // ->
    \n * myComponent.children();\n * // [empty array]\n *\n * var myButton = myComponent.addChild('MyButton');\n * // ->
    myButton
    \n * // -> myButton === myComponent.children()[0];\n * ```\n * Pass in options for child constructors and options for children of the child\n * ```js\n * var myButton = myComponent.addChild('MyButton', {\n * text: 'Press Me',\n * buttonChildExample: {\n * buttonChildOption: true\n * }\n * });\n * ```\n *\n * @param {String|Component} child The class name or instance of a child to add\n * @param {Object=} options Options, including options to be passed to children of the child.\n * @return {Component} The child component (created by this process if a string was used)\n * @method addChild\n */\n addChild(child, options={}) {\n let component;\n let componentName;\n\n // If child is a string, create nt with options\n if (typeof child === 'string') {\n componentName = child;\n\n // Options can also be specified as a boolean, so convert to an empty object if false.\n if (!options) {\n options = {};\n }\n\n // Same as above, but true is deprecated so show a warning.\n if (options === true) {\n log.warn('Initializing a child component with `true` is deprecated. Children should be defined in an array when possible, but if necessary use an object instead of `true`.');\n options = {};\n }\n\n // If no componentClass in options, assume componentClass is the name lowercased\n // (e.g. playButton)\n let componentClassName = options.componentClass || toTitleCase(componentName);\n\n // Set name through options\n options.name = componentName;\n\n // Create a new object & element for this controls set\n // If there's no .player_, this is a player\n let ComponentClass = Component.getComponent(componentClassName);\n\n component = new ComponentClass(this.player_ || this, options);\n\n // child is a component instance\n } else {\n component = child;\n }\n\n this.children_.push(component);\n\n if (typeof component.id === 'function') {\n this.childIndex_[component.id()] = component;\n }\n\n // If a name wasn't used to create the component, check if we can use the\n // name function of the component\n componentName = componentName || (component.name && component.name());\n\n if (componentName) {\n this.childNameIndex_[componentName] = component;\n }\n\n // Add the UI object's element to the container div (box)\n // Having an element is not required\n if (typeof component.el === 'function' && component.el()) {\n this.contentEl().appendChild(component.el());\n }\n\n // Return so it can stored on parent object if desired.\n return component;\n }\n\n /**\n * Remove a child component from this component's list of children, and the\n * child component's element from this component's element\n *\n * @param {Component} component Component to remove\n * @method removeChild\n */\n removeChild(component) {\n if (typeof component === 'string') {\n component = this.getChild(component);\n }\n\n if (!component || !this.children_) {\n return;\n }\n\n let childFound = false;\n\n for (let i = this.children_.length - 1; i >= 0; i--) {\n if (this.children_[i] === component) {\n childFound = true;\n this.children_.splice(i, 1);\n break;\n }\n }\n\n if (!childFound) {\n return;\n }\n\n this.childIndex_[component.id()] = null;\n this.childNameIndex_[component.name()] = null;\n\n let compEl = component.el();\n\n if (compEl && compEl.parentNode === this.contentEl()) {\n this.contentEl().removeChild(component.el());\n }\n }\n\n /**\n * Add and initialize default child components from options\n * ```js\n * // when an instance of MyComponent is created, all children in options\n * // will be added to the instance by their name strings and options\n * MyComponent.prototype.options_ = {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * };\n *\n * // Or when creating the component\n * var myComp = new MyComponent(player, {\n * children: [\n * 'myChildComponent'\n * ],\n * myChildComponent: {\n * myChildOption: true\n * }\n * });\n * ```\n * The children option can also be an array of\n * child options objects (that also include a 'name' key).\n * This can be used if you have two child components of the\n * same type that need different options.\n * ```js\n * var myComp = new MyComponent(player, {\n * children: [\n * 'button',\n * {\n * name: 'button',\n * someOtherOption: true\n * },\n * {\n * name: 'button',\n * someOtherOption: false\n * }\n * ]\n * });\n * ```\n *\n * @method initChildren\n */\n initChildren() {\n let children = this.options_.children;\n\n if (children) {\n // `this` is `parent`\n let parentOptions = this.options_;\n\n let handleAdd = (name, opts) => {\n // Allow options for children to be set at the parent options\n // e.g. videojs(id, { controlBar: false });\n // instead of videojs(id, { children: { controlBar: false });\n if (parentOptions[name] !== undefined) {\n opts = parentOptions[name];\n }\n\n // Allow for disabling default components\n // e.g. options['children']['posterImage'] = false\n if (opts === false) {\n return;\n }\n\n // Allow options to be passed as a simple boolean if no configuration\n // is necessary.\n if (opts === true) {\n opts = {};\n }\n\n // We also want to pass the original player options to each component as well so they don't need to\n // reach back into the player for options later.\n opts.playerOptions = this.options_.playerOptions;\n\n // Create and add the child component.\n // Add a direct reference to the child by name on the parent instance.\n // If two of the same component are used, different names should be supplied\n // for each\n this[name] = this.addChild(name, opts);\n };\n\n // Allow for an array of children details to passed in the options\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n let name;\n let opts;\n\n if (typeof child === 'string') {\n // ['myComponent']\n name = child;\n opts = {};\n } else {\n // [{ name: 'myComponent', otherOption: true }]\n name = child.name;\n opts = child;\n }\n\n handleAdd(name, opts);\n }\n } else {\n Object.getOwnPropertyNames(children).forEach(function(name){\n handleAdd(name, children[name]);\n });\n }\n }\n }\n\n /**\n * Allows sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n // Child classes can include a function that does:\n // return 'CLASS NAME' + this._super();\n return '';\n }\n\n /**\n * Add an event listener to this component's element\n * ```js\n * var myFunc = function(){\n * var myComponent = this;\n * // Do something when the event is fired\n * };\n *\n * myComponent.on('eventType', myFunc);\n * ```\n * The context of myFunc will be myComponent unless previously bound.\n * Alternatively, you can add a listener to another element or component.\n * ```js\n * myComponent.on(otherElement, 'eventName', myFunc);\n * myComponent.on(otherComponent, 'eventName', myFunc);\n * ```\n * The benefit of using this over `VjsEvents.on(otherElement, 'eventName', myFunc)`\n * and `otherComponent.on('eventName', myFunc)` is that this way the listeners\n * will be automatically cleaned up when either component is disposed.\n * It will also bind myComponent as the context of myFunc.\n * **NOTE**: When using this on elements in the page other than window\n * and document (both permanent), if you remove the element from the DOM\n * you need to call `myComponent.trigger(el, 'dispose')` on it to clean up\n * references to it and allow the browser to garbage collect it.\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The event handler or event type\n * @param {Function} third The event handler\n * @return {Component}\n * @method on\n */\n on(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.on(this.el_, first, Fn.bind(this, second));\n\n // Targeting another component or element\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n // When this component is disposed, remove the listener from the other component\n const removeOnDispose = () => this.off(target, type, fn);\n\n // Use the same function ID so we can remove it later it using the ID\n // of the original listener\n removeOnDispose.guid = fn.guid;\n this.on('dispose', removeOnDispose);\n\n // If the other component is disposed first we need to clean the reference\n // to the other component in this component's removeOnDispose listener\n // Otherwise we create a memory leak.\n const cleanRemover = () => this.off('dispose', removeOnDispose);\n\n // Add the same function ID so we can easily remove it later\n cleanRemover.guid = fn.guid;\n\n // Check if this is a DOM node\n if (first.nodeName) {\n // Add the listener to the other element\n Events.on(target, type, fn);\n Events.on(target, 'dispose', cleanRemover);\n\n // Should be a component\n // Not using `instanceof Component` because it makes mock players difficult\n } else if (typeof first.on === 'function') {\n // Add the listener to the other component\n target.on(type, fn);\n target.on('dispose', cleanRemover);\n }\n }\n\n return this;\n }\n\n /**\n * Remove an event listener from this component's element\n * ```js\n * myComponent.off('eventType', myFunc);\n * ```\n * If myFunc is excluded, ALL listeners for the event type will be removed.\n * If eventType is excluded, ALL listeners will be removed from the component.\n * Alternatively you can use `off` to remove listeners that were added to other\n * elements or components using `myComponent.on(otherComponent...`.\n * In this case both the event type and listener function are REQUIRED.\n * ```js\n * myComponent.off(otherElement, 'eventType', myFunc);\n * myComponent.off(otherComponent, 'eventType', myFunc);\n * ```\n *\n * @param {String=|Component} first The event type or other component\n * @param {Function=|String} second The listener function or event type\n * @param {Function=} third The listener for other component\n * @return {Component}\n * @method off\n */\n off(first, second, third) {\n if (!first || typeof first === 'string' || Array.isArray(first)) {\n Events.off(this.el_, first, second);\n } else {\n const target = first;\n const type = second;\n // Ensure there's at least a guid, even if the function hasn't been used\n const fn = Fn.bind(this, third);\n\n // Remove the dispose listener on this component,\n // which was given the same guid as the event listener\n this.off('dispose', fn);\n\n if (first.nodeName) {\n // Remove the listener\n Events.off(target, type, fn);\n // Remove the listener for cleaning the dispose listener\n Events.off(target, 'dispose', fn);\n } else {\n target.off(type, fn);\n target.off('dispose', fn);\n }\n }\n\n return this;\n }\n\n /**\n * Add an event listener to be triggered only once and then removed\n * ```js\n * myComponent.one('eventName', myFunc);\n * ```\n * Alternatively you can add a listener to another element or component\n * that will be triggered only once.\n * ```js\n * myComponent.one(otherElement, 'eventName', myFunc);\n * myComponent.one(otherComponent, 'eventName', myFunc);\n * ```\n *\n * @param {String|Component} first The event type or other component\n * @param {Function|String} second The listener function or event type\n * @param {Function=} third The listener function for other component\n * @return {Component}\n * @method one\n */\n one(first, second, third) {\n if (typeof first === 'string' || Array.isArray(first)) {\n Events.one(this.el_, first, Fn.bind(this, second));\n } else {\n const target = first;\n const type = second;\n const fn = Fn.bind(this, third);\n\n const newFunc = () => {\n this.off(target, type, newFunc);\n fn.apply(null, arguments);\n };\n\n // Keep the same function ID so we can remove it later\n newFunc.guid = fn.guid;\n\n this.on(target, type, newFunc);\n }\n\n return this;\n }\n\n /**\n * Trigger an event on an element\n * ```js\n * myComponent.trigger('eventName');\n * myComponent.trigger({'type':'eventName'});\n * myComponent.trigger('eventName', {data: 'some data'});\n * myComponent.trigger({'type':'eventName'}, {data: 'some data'});\n * ```\n *\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Component} self\n * @method trigger\n */\n trigger(event, hash) {\n Events.trigger(this.el_, event, hash);\n return this;\n }\n\n /**\n * Bind a listener to the component's ready state.\n * Different from event listeners in that if the ready event has already happened\n * it will trigger the function immediately.\n *\n * @param {Function} fn Ready listener\n * @param {Boolean} sync Exec the listener synchronously if component is ready\n * @return {Component}\n * @method ready\n */\n ready(fn, sync=false) {\n if (fn) {\n if (this.isReady_) {\n if (sync) {\n fn.call(this);\n } else {\n // Call the function asynchronously by default for consistency\n this.setTimeout(fn, 1);\n }\n } else {\n this.readyQueue_ = this.readyQueue_ || [];\n this.readyQueue_.push(fn);\n }\n }\n return this;\n }\n\n /**\n * Trigger the ready listeners\n *\n * @return {Component}\n * @method triggerReady\n */\n triggerReady() {\n this.isReady_ = true;\n\n // Ensure ready is triggerd asynchronously\n this.setTimeout(function(){\n let readyQueue = this.readyQueue_;\n\n // Reset Ready Queue\n this.readyQueue_ = [];\n\n if (readyQueue && readyQueue.length > 0) {\n readyQueue.forEach(function(fn){\n fn.call(this);\n }, this);\n }\n\n // Allow for using event listeners also\n this.trigger('ready');\n }, 1);\n }\n\n /**\n * Check if a component's element has a CSS class name\n *\n * @param {String} classToCheck Classname to check\n * @return {Component}\n * @method hasClass\n */\n hasClass(classToCheck) {\n return Dom.hasElClass(this.el_, classToCheck);\n }\n\n /**\n * Add a CSS class name to the component's element\n *\n * @param {String} classToAdd Classname to add\n * @return {Component}\n * @method addClass\n */\n addClass(classToAdd) {\n Dom.addElClass(this.el_, classToAdd);\n return this;\n }\n\n /**\n * Remove and return a CSS class name from the component's element\n *\n * @param {String} classToRemove Classname to remove\n * @return {Component}\n * @method removeClass\n */\n removeClass(classToRemove) {\n Dom.removeElClass(this.el_, classToRemove);\n return this;\n }\n\n /**\n * Show the component element if hidden\n *\n * @return {Component}\n * @method show\n */\n show() {\n this.removeClass('vjs-hidden');\n return this;\n }\n\n /**\n * Hide the component element if currently showing\n *\n * @return {Component}\n * @method hide\n */\n hide() {\n this.addClass('vjs-hidden');\n return this;\n }\n\n /**\n * Lock an item in its visible state\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method lockShowing\n */\n lockShowing() {\n this.addClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Unlock an item to be hidden\n * To be used with fadeIn/fadeOut.\n *\n * @return {Component}\n * @private\n * @method unlockShowing\n */\n unlockShowing() {\n this.removeClass('vjs-lock-showing');\n return this;\n }\n\n /**\n * Set or get the width of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num Optional width number\n * @param {Boolean} skipListeners Skip the 'resize' event trigger\n * @return {Component} This component, when setting the width\n * @return {Number|String} The width, when getting\n * @method width\n */\n width(num, skipListeners) {\n return this.dimension('width', num, skipListeners);\n }\n\n /**\n * Get or set the height of the component (CSS values)\n * Setting the video tag dimension values only works with values in pixels.\n * Percent values will not work.\n * Some percents can be used, but width()/height() will return the number + %,\n * not the actual computed width/height.\n *\n * @param {Number|String=} num New component height\n * @param {Boolean=} skipListeners Skip the resize event trigger\n * @return {Component} This component, when setting the height\n * @return {Number|String} The height, when getting\n * @method height\n */\n height(num, skipListeners) {\n return this.dimension('height', num, skipListeners);\n }\n\n /**\n * Set both width and height at the same time\n *\n * @param {Number|String} width Width of player\n * @param {Number|String} height Height of player\n * @return {Component} The component\n * @method dimensions\n */\n dimensions(width, height) {\n // Skip resize listeners on width for optimization\n return this.width(width, true).height(height);\n }\n\n /**\n * Get or set width or height\n * This is the shared code for the width() and height() methods.\n * All for an integer, integer + 'px' or integer + '%';\n * Known issue: Hidden elements officially have a width of 0. We're defaulting\n * to the style.width value and falling back to computedStyle which has the\n * hidden element issue. Info, but probably not an efficient fix:\n * http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/\n *\n * @param {String} widthOrHeight 'width' or 'height'\n * @param {Number|String=} num New dimension\n * @param {Boolean=} skipListeners Skip resize event trigger\n * @return {Component} The component if a dimension was set\n * @return {Number|String} The dimension if nothing was set\n * @private\n * @method dimension\n */\n dimension(widthOrHeight, num, skipListeners) {\n if (num !== undefined) {\n // Set to zero if null or literally NaN (NaN !== NaN)\n if (num === null || num !== num) {\n num = 0;\n }\n\n // Check if using css width/height (% or px) and adjust\n if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) {\n this.el_.style[widthOrHeight] = num;\n } else if (num === 'auto') {\n this.el_.style[widthOrHeight] = '';\n } else {\n this.el_.style[widthOrHeight] = num + 'px';\n }\n\n // skipListeners allows us to avoid triggering the resize event when setting both width and height\n if (!skipListeners) {\n this.trigger('resize');\n }\n\n // Return component\n return this;\n }\n\n // Not setting a value, so getting it\n // Make sure element exists\n if (!this.el_) {\n return 0;\n }\n\n // Get dimension value from style\n let val = this.el_.style[widthOrHeight];\n let pxIndex = val.indexOf('px');\n\n if (pxIndex !== -1) {\n // Return the pixel value with no 'px'\n return parseInt(val.slice(0, pxIndex), 10);\n }\n\n // No px so using % or no style was set, so falling back to offsetWidth/height\n // If component has display:none, offset will return 0\n // TODO: handle display:none and no dimension style using px\n return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10);\n }\n\n /**\n * Emit 'tap' events when touch events are supported\n * This is used to support toggling the controls through a tap on the video.\n * We're requiring them to be enabled because otherwise every component would\n * have this extra overhead unnecessarily, on mobile devices where extra\n * overhead is especially bad.\n *\n * @private\n * @method emitTapEvents\n */\n emitTapEvents() {\n // Track the start time so we can determine how long the touch lasted\n let touchStart = 0;\n let firstTouch = null;\n\n // Maximum movement allowed during a touch event to still be considered a tap\n // Other popular libs use anywhere from 2 (hammer.js) to 15, so 10 seems like a nice, round number.\n const tapMovementThreshold = 10;\n\n // The maximum length a touch can be while still being considered a tap\n const touchTimeThreshold = 200;\n\n let couldBeTap;\n\n this.on('touchstart', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length === 1) {\n // Copy the touches object to prevent modifying the original\n firstTouch = assign({}, event.touches[0]);\n // Record start time so we can detect a tap vs. \"touch and hold\"\n touchStart = new Date().getTime();\n // Reset couldBeTap tracking\n couldBeTap = true;\n }\n });\n\n this.on('touchmove', function(event) {\n // If more than one finger, don't consider treating this as a click\n if (event.touches.length > 1) {\n couldBeTap = false;\n } else if (firstTouch) {\n // Some devices will throw touchmoves for all but the slightest of taps.\n // So, if we moved only a small distance, this could still be a tap\n const xdiff = event.touches[0].pageX - firstTouch.pageX;\n const ydiff = event.touches[0].pageY - firstTouch.pageY;\n const touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff);\n\n if (touchDistance > tapMovementThreshold) {\n couldBeTap = false;\n }\n }\n });\n\n const noTap = function() {\n couldBeTap = false;\n };\n\n // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s\n this.on('touchleave', noTap);\n this.on('touchcancel', noTap);\n\n // When the touch ends, measure how long it took and trigger the appropriate\n // event\n this.on('touchend', function(event) {\n firstTouch = null;\n // Proceed only if the touchmove/leave/cancel event didn't happen\n if (couldBeTap === true) {\n // Measure how long the touch lasted\n const touchTime = new Date().getTime() - touchStart;\n\n // Make sure the touch was less than the threshold to be considered a tap\n if (touchTime < touchTimeThreshold) {\n // Don't let browser turn this into a click\n event.preventDefault();\n this.trigger('tap');\n // It may be good to copy the touchend event object and change the\n // type to tap, if the other event properties aren't exact after\n // Events.fixEvent runs (e.g. event.target)\n }\n }\n });\n }\n\n /**\n * Report user touch activity when touch events occur\n * User activity is used to determine when controls should show/hide. It's\n * relatively simple when it comes to mouse events, because any mouse event\n * should show the controls. So we capture mouse events that bubble up to the\n * player and report activity when that happens.\n * With touch events it isn't as easy. We can't rely on touch events at the\n * player level, because a tap (touchstart + touchend) on the video itself on\n * mobile devices is meant to turn controls off (and on). User activity is\n * checked asynchronously, so what could happen is a tap event on the video\n * turns the controls off, then the touchend event bubbles up to the player,\n * which if it reported user activity, would turn the controls right back on.\n * (We also don't want to completely block touch events from bubbling up)\n * Also a touchmove, touch+hold, and anything other than a tap is not supposed\n * to turn the controls back on on a mobile device.\n * Here we're setting the default component behavior to report user activity\n * whenever touch events happen, and this can be turned off by components that\n * want touch events to act differently.\n *\n * @method enableTouchActivity\n */\n enableTouchActivity() {\n // Don't continue if the root player doesn't support reporting user activity\n if (!this.player() || !this.player().reportUserActivity) {\n return;\n }\n\n // listener for reporting that the user is active\n const report = Fn.bind(this.player(), this.player().reportUserActivity);\n\n let touchHolding;\n\n this.on('touchstart', function() {\n report();\n // For as long as the they are touching the device or have their mouse down,\n // we consider them active even if they're not moving their finger or mouse.\n // So we want to continue to update that they are active\n this.clearInterval(touchHolding);\n // report at the same interval as activityCheck\n touchHolding = this.setInterval(report, 250);\n });\n\n const touchEnd = function(event) {\n report();\n // stop the interval that maintains activity if the touch is holding\n this.clearInterval(touchHolding);\n };\n\n this.on('touchmove', report);\n this.on('touchend', touchEnd);\n this.on('touchcancel', touchEnd);\n }\n\n /**\n * Creates timeout and sets up disposal automatically.\n *\n * @param {Function} fn The function to run after the timeout.\n * @param {Number} timeout Number of ms to delay before executing specified function.\n * @return {Number} Returns the timeout ID\n * @method setTimeout\n */\n setTimeout(fn, timeout) {\n fn = Fn.bind(this, fn);\n\n // window.setTimeout would be preferable here, but due to some bizarre issue with Sinon and/or Phantomjs, we can't.\n let timeoutId = window.setTimeout(fn, timeout);\n\n const disposeFn = function() {\n this.clearTimeout(timeoutId);\n };\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.on('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Clears a timeout and removes the associated dispose listener\n *\n * @param {Number} timeoutId The id of the timeout to clear\n * @return {Number} Returns the timeout ID\n * @method clearTimeout\n */\n clearTimeout(timeoutId) {\n window.clearTimeout(timeoutId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-timeout-${timeoutId}`;\n\n this.off('dispose', disposeFn);\n\n return timeoutId;\n }\n\n /**\n * Creates an interval and sets up disposal automatically.\n *\n * @param {Function} fn The function to run every N seconds.\n * @param {Number} interval Number of ms to delay before executing specified function.\n * @return {Number} Returns the interval ID\n * @method setInterval\n */\n setInterval(fn, interval) {\n fn = Fn.bind(this, fn);\n\n let intervalId = window.setInterval(fn, interval);\n\n const disposeFn = function() {\n this.clearInterval(intervalId);\n };\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.on('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Clears an interval and removes the associated dispose listener\n *\n * @param {Number} intervalId The id of the interval to clear\n * @return {Number} Returns the interval ID\n * @method clearInterval\n */\n clearInterval(intervalId) {\n window.clearInterval(intervalId);\n\n const disposeFn = function() {};\n\n disposeFn.guid = `vjs-interval-${intervalId}`;\n\n this.off('dispose', disposeFn);\n\n return intervalId;\n }\n\n /**\n * Registers a component\n *\n * @param {String} name Name of the component to register\n * @param {Object} comp The component to register\n * @static\n * @method registerComponent\n */\n static registerComponent(name, comp) {\n if (!Component.components_) {\n Component.components_ = {};\n }\n\n Component.components_[name] = comp;\n return comp;\n }\n\n /**\n * Gets a component by name\n *\n * @param {String} name Name of the component to get\n * @return {Component}\n * @static\n * @method getComponent\n */\n static getComponent(name) {\n if (Component.components_ && Component.components_[name]) {\n return Component.components_[name];\n }\n\n if (window && window.videojs && window.videojs[name]) {\n log.warn(`The ${name} component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)`);\n return window.videojs[name];\n }\n }\n\n /**\n * Sets up the constructor using the supplied init method\n * or uses the init of the parent object\n *\n * @param {Object} props An object of properties\n * @static\n * @deprecated\n * @method extend\n */\n static extend(props) {\n props = props || {};\n\n log.warn('Component.extend({}) has been deprecated, use videojs.extend(Component, {}) instead');\n\n // Set up the constructor using the supplied init method\n // or using the init of the parent object\n // Make sure to check the unobfuscated version for external libs\n let init = props.init || props.init || this.prototype.init || this.prototype.init || function() {};\n // In Resig's simple class inheritance (previously used) the constructor\n // is a function that calls `this.init.apply(arguments)`\n // However that would prevent us from using `ParentObject.call(this);`\n // in a Child constructor because the `this` in `this.init`\n // would still refer to the Child and cause an infinite loop.\n // We would instead have to do\n // `ParentObject.prototype.init.apply(this, arguments);`\n // Bleh. We're not creating a _super() function, so it's good to keep\n // the parent constructor reference simple.\n let subObj = function() {\n init.apply(this, arguments);\n };\n\n // Inherit from this object's prototype\n subObj.prototype = Object.create(this.prototype);\n // Reset the constructor property for subObj otherwise\n // instances of subObj would have the constructor of the parent Object\n subObj.prototype.constructor = subObj;\n\n // Make the class extendable\n subObj.extend = Component.extend;\n\n // Extend subObj's prototype with functions and other properties from props\n for (let name in props) {\n if (props.hasOwnProperty(name)) {\n subObj.prototype[name] = props[name];\n }\n }\n\n return subObj;\n }\n}\n\nComponent.registerComponent('Component', Component);\nexport default Component;\n","/**\n * @file control-bar.js\n */\nimport Component from '../component.js';\n\n// Required children\nimport PlayToggle from './play-toggle.js';\nimport CurrentTimeDisplay from './time-controls/current-time-display.js';\nimport DurationDisplay from './time-controls/duration-display.js';\nimport TimeDivider from './time-controls/time-divider.js';\nimport RemainingTimeDisplay from './time-controls/remaining-time-display.js';\nimport LiveDisplay from './live-display.js';\nimport ProgressControl from './progress-control/progress-control.js';\nimport FullscreenToggle from './fullscreen-toggle.js';\nimport VolumeControl from './volume-control/volume-control.js';\nimport VolumeMenuButton from './volume-menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport ChaptersButton from './text-track-controls/chapters-button.js';\nimport SubtitlesButton from './text-track-controls/subtitles-button.js';\nimport CaptionsButton from './text-track-controls/captions-button.js';\nimport PlaybackRateMenuButton from './playback-rate-menu/playback-rate-menu-button.js';\nimport CustomControlSpacer from './spacer-controls/custom-control-spacer.js';\n\n/**\n * Container of main controls\n *\n * @extends Component\n * @class ControlBar\n */\nclass ControlBar extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-control-bar'\n });\n }\n}\n\nControlBar.prototype.options_ = {\n loadEvent: 'play',\n children: [\n 'playToggle',\n 'volumeMenuButton',\n 'currentTimeDisplay',\n 'timeDivider',\n 'durationDisplay',\n 'progressControl',\n 'liveDisplay',\n 'remainingTimeDisplay',\n 'customControlSpacer',\n 'playbackRateMenuButton',\n 'chaptersButton',\n 'subtitlesButton',\n 'captionsButton',\n 'fullscreenToggle'\n ]\n};\n\nComponent.registerComponent('ControlBar', ControlBar);\nexport default ControlBar;\n","/**\n * @file fullscreen-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Toggle fullscreen video\n *\n * @extends Button\n * @class FullscreenToggle\n */\nclass FullscreenToggle extends Button {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-fullscreen-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handles click for full screen\n *\n * @method handleClick\n */\n handleClick() {\n if (!this.player_.isFullscreen()) {\n this.player_.requestFullscreen();\n this.controlText('Non-Fullscreen');\n } else {\n this.player_.exitFullscreen();\n this.controlText('Fullscreen');\n }\n }\n\n}\n\nFullscreenToggle.prototype.controlText_ = 'Fullscreen';\n\nComponent.registerComponent('FullscreenToggle', FullscreenToggle);\nexport default FullscreenToggle;\n","/**\n * @file live-display.js\n */\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * Displays the live indicator\n * TODO - Future make it click to snap to live\n *\n * @extends Component\n * @class LiveDisplay\n */\nclass LiveDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.updateShowing();\n this.on(this.player(), 'durationchange', this.updateShowing);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-live-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-live-display',\n innerHTML: `${this.localize('Stream Type')}${this.localize('LIVE')}`\n }, {\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n updateShowing() {\n if (this.player().duration() === Infinity) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n}\n\nComponent.registerComponent('LiveDisplay', LiveDisplay);\nexport default LiveDisplay;\n","/**\n * @file mute-toggle.js\n */\nimport Button from '../button';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\n\n/**\n * A button component for muting the audio\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MuteToggle\n */\nclass MuteToggle extends Button {\n\n constructor(player, options) {\n super(player, options);\n\n this.on(player, 'volumechange', this.update);\n\n // hide mute toggle if the current tech doesn't support volume control\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n\n this.on(player, 'loadstart', function() {\n this.update(); // We need to update the button to account for a default muted state.\n\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-mute-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click on mute\n *\n * @method handleClick\n */\n handleClick() {\n this.player_.muted( this.player_.muted() ? false : true );\n }\n\n /**\n * Update volume\n *\n * @method update\n */\n update() {\n var vol = this.player_.volume(),\n level = 3;\n\n if (vol === 0 || this.player_.muted()) {\n level = 0;\n } else if (vol < 0.33) {\n level = 1;\n } else if (vol < 0.67) {\n level = 2;\n }\n\n // Don't rewrite the button text if the actual text doesn't change.\n // This causes unnecessary and confusing information for screen reader users.\n // This check is needed because this function gets called every time the volume level is changed.\n let toMute = this.player_.muted() ? 'Unmute' : 'Mute';\n let localizedMute = this.localize(toMute);\n if (this.controlText() !== localizedMute) {\n this.controlText(localizedMute);\n }\n\n /* TODO improve muted icon classes */\n for (var i = 0; i < 4; i++) {\n Dom.removeElClass(this.el_, `vjs-vol-${i}`);\n }\n Dom.addElClass(this.el_, `vjs-vol-${level}`);\n }\n\n}\n\nMuteToggle.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('MuteToggle', MuteToggle);\nexport default MuteToggle;\n","/**\n * @file play-toggle.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\n\n/**\n * Button to toggle between play and pause\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class PlayToggle\n */\nclass PlayToggle extends Button {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'play', this.handlePlay);\n this.on(player, 'pause', this.handlePause);\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-play-control ${super.buildCSSClass()}`;\n }\n\n /**\n * Handle click to toggle between play and pause\n *\n * @method handleClick\n */\n handleClick() {\n if (this.player_.paused()) {\n this.player_.play();\n } else {\n this.player_.pause();\n }\n }\n\n /**\n * Add the vjs-playing class to the element so it can change appearance\n *\n * @method handlePlay\n */\n handlePlay() {\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n this.controlText('Pause'); // change the button text to \"Pause\"\n }\n\n /**\n * Add the vjs-paused class to the element so it can change appearance\n *\n * @method handlePause\n */\n handlePause() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.controlText('Play'); // change the button text to \"Play\"\n }\n\n}\n\nPlayToggle.prototype.controlText_ = 'Play';\n\nComponent.registerComponent('PlayToggle', PlayToggle);\nexport default PlayToggle;\n","/**\n * @file playback-rate-menu-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Menu from '../../menu/menu.js';\nimport PlaybackRateMenuItem from './playback-rate-menu-item.js';\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * The component for controlling the playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class PlaybackRateMenuButton\n */\nclass PlaybackRateMenuButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n this.updateVisibility();\n this.updateLabel();\n\n this.on(player, 'loadstart', this.updateVisibility);\n this.on(player, 'ratechange', this.updateLabel);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl();\n\n this.labelEl_ = Dom.createEl('div', {\n className: 'vjs-playback-rate-value',\n innerHTML: 1.0\n });\n\n el.appendChild(this.labelEl_);\n\n return el;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-playback-rate ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the playback rate menu\n *\n * @return {Menu} Menu object populated with items\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player());\n let rates = this.playbackRates();\n\n if (rates) {\n for (let i = rates.length - 1; i >= 0; i--) {\n menu.addChild(\n new PlaybackRateMenuItem(this.player(), { 'rate': rates[i] + 'x'})\n );\n }\n }\n\n return menu;\n }\n\n /**\n * Updates ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current playback rate\n this.el().setAttribute('aria-valuenow', this.player().playbackRate());\n }\n\n /**\n * Handle menu item click\n *\n * @method handleClick\n */\n handleClick() {\n // select next rate option\n let currentRate = this.player().playbackRate();\n let rates = this.playbackRates();\n\n // this will select first one if the last one currently selected\n let newRate = rates[0];\n for (let i = 0; i < rates.length ; i++) {\n if (rates[i] > currentRate) {\n newRate = rates[i];\n break;\n }\n }\n this.player().playbackRate(newRate);\n }\n\n /**\n * Get possible playback rates\n *\n * @return {Array} Possible playback rates\n * @method playbackRates\n */\n playbackRates() {\n return this.options_['playbackRates'] || (this.options_.playerOptions && this.options_.playerOptions['playbackRates']);\n }\n\n /**\n * Get supported playback rates\n *\n * @return {Array} Supported playback rates\n * @method playbackRateSupported\n */\n playbackRateSupported() {\n return this.player().tech_\n && this.player().tech_['featuresPlaybackRate']\n && this.playbackRates()\n && this.playbackRates().length > 0\n ;\n }\n\n /**\n * Hide playback rate controls when they're no playback rate options to select\n *\n * @method updateVisibility\n */\n updateVisibility() {\n if (this.playbackRateSupported()) {\n this.removeClass('vjs-hidden');\n } else {\n this.addClass('vjs-hidden');\n }\n }\n\n /**\n * Update button label when rate changed\n *\n * @method updateLabel\n */\n updateLabel() {\n if (this.playbackRateSupported()) {\n this.labelEl_.innerHTML = this.player().playbackRate() + 'x';\n }\n }\n\n}\n\nPlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate';\n\nComponent.registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton);\nexport default PlaybackRateMenuButton;\n","/**\n * @file playback-rate-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The specific menu item type for selecting a playback rate\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class PlaybackRateMenuItem\n */\nclass PlaybackRateMenuItem extends MenuItem {\n\n constructor(player, options){\n let label = options['rate'];\n let rate = parseFloat(label, 10);\n\n // Modify options for parent MenuItem class's init.\n options['label'] = label;\n options['selected'] = rate === 1;\n super(player, options);\n\n this.label = label;\n this.rate = rate;\n\n this.on(player, 'ratechange', this.update);\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player().playbackRate(this.rate);\n }\n\n /**\n * Update playback rate with selected rate\n *\n * @method update\n */\n update() {\n this.selected(this.player().playbackRate() === this.rate);\n }\n\n}\n\nPlaybackRateMenuItem.prototype.contentElType = 'button';\n\nComponent.registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem);\nexport default PlaybackRateMenuItem;\n","/**\n * @file load-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\n\n/**\n * Shows load progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class LoadProgressBar\n */\nclass LoadProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'progress', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-load-progress',\n innerHTML: `${this.localize('Loaded')}: 0%`\n });\n }\n\n /**\n * Update progress bar\n *\n * @method update\n */\n update() {\n let buffered = this.player_.buffered();\n let duration = this.player_.duration();\n let bufferedEnd = this.player_.bufferedEnd();\n let children = this.el_.children;\n\n // get the percent width of a time compared to the total end\n let percentify = function (time, end){\n let percent = (time / end) || 0; // no NaN\n return ((percent >= 1 ? 1 : percent) * 100) + '%';\n };\n\n // update the width of the progress bar\n this.el_.style.width = percentify(bufferedEnd, duration);\n\n // add child elements to represent the individual buffered time ranges\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n let part = children[i];\n\n if (!part) {\n part = this.el_.appendChild(Dom.createEl());\n }\n\n // set the percent based on the width of the progress bar (bufferedEnd)\n part.style.left = percentify(start, bufferedEnd);\n part.style.width = percentify(end - start, bufferedEnd);\n }\n\n // remove unused buffered range elements\n for (let i = children.length; i > buffered.length; i--) {\n this.el_.removeChild(children[i-1]);\n }\n }\n\n}\n\nComponent.registerComponent('LoadProgressBar', LoadProgressBar);\nexport default LoadProgressBar;\n","/**\n * @file mouse-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport throttle from 'lodash-compat/function/throttle';\n\n/**\n * The Mouse Time Display component shows the time you will seek to\n * when hovering over the progress bar\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class MouseTimeDisplay\n */\nclass MouseTimeDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update(0, 0);\n\n player.on('ready', () => {\n this.on(player.controlBar.progressControl.el(), 'mousemove', throttle(Fn.bind(this, this.handleMouseMove), 25));\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-mouse-display'\n });\n }\n\n handleMouseMove(event) {\n let duration = this.player_.duration();\n let newTime = this.calculateDistance(event) * duration;\n let position = event.pageX - Dom.findElPosition(this.el().parentNode).left;\n\n this.update(newTime, position);\n }\n\n update(newTime, position) {\n let time = formatTime(newTime, this.player_.duration());\n\n this.el().style.left = position + 'px';\n this.el().setAttribute('data-current-time', time);\n }\n\n calculateDistance(event) {\n return Dom.getPointerPosition(this.el().parentNode, event).x;\n }\n}\n\nComponent.registerComponent('MouseTimeDisplay', MouseTimeDisplay);\nexport default MouseTimeDisplay;\n","/**\n * @file play-progress-bar.js\n */\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Shows play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class PlayProgressBar\n */\nclass PlayProgressBar extends Component {\n\n constructor(player, options){\n super(player, options);\n this.updateDataAttr();\n this.on(player, 'timeupdate', this.updateDataAttr);\n player.ready(Fn.bind(this, this.updateDataAttr));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-play-progress vjs-slider-bar',\n innerHTML: `${this.localize('Progress')}: 0%`\n });\n }\n\n updateDataAttr() {\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('data-current-time', formatTime(time, this.player_.duration()));\n }\n\n}\n\nComponent.registerComponent('PlayProgressBar', PlayProgressBar);\nexport default PlayProgressBar;\n","/**\n * @file progress-control.js\n */\nimport Component from '../../component.js';\nimport SeekBar from './seek-bar.js';\nimport MouseTimeDisplay from './mouse-time-display.js';\n\n/**\n * The Progress Control component contains the seek bar, load progress,\n * and play progress\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class ProgressControl\n */\nclass ProgressControl extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-control vjs-control'\n });\n }\n}\n\nProgressControl.prototype.options_ = {\n children: [\n 'seekBar'\n ]\n};\n\nComponent.registerComponent('ProgressControl', ProgressControl);\nexport default ProgressControl;\n","/**\n * @file seek-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport LoadProgressBar from './load-progress-bar.js';\nimport PlayProgressBar from './play-progress-bar.js';\nimport * as Fn from '../../utils/fn.js';\nimport formatTime from '../../utils/format-time.js';\nimport assign from 'object.assign';\n\n/**\n * Seek Bar and holder for the progress bars\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class SeekBar\n */\nclass SeekBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'timeupdate', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-progress-holder'\n }, {\n 'aria-label': 'video progress bar'\n });\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete)\n this.el_.setAttribute('aria-valuetext', formatTime(time, this.player_.duration())); // human readable value of progress bar (time complete)\n }\n\n /**\n * Get percentage of video played\n *\n * @return {Number} Percentage played\n * @method getPercent\n */\n getPercent() {\n let percent = this.player_.currentTime() / this.player_.duration();\n return percent >= 1 ? 1 : percent;\n }\n\n /**\n * Handle mouse down on seek bar\n *\n * @method handleMouseDown\n */\n handleMouseDown(event) {\n super.handleMouseDown(event);\n\n this.player_.scrubbing(true);\n\n this.videoWasPlaying = !this.player_.paused();\n this.player_.pause();\n }\n\n /**\n * Handle mouse move on seek bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n let newTime = this.calculateDistance(event) * this.player_.duration();\n\n // Don't let video end while scrubbing.\n if (newTime === this.player_.duration()) { newTime = newTime - 0.1; }\n\n // Set new time (tell player to seek to new time)\n this.player_.currentTime(newTime);\n }\n\n /**\n * Handle mouse up on seek bar\n *\n * @method handleMouseUp\n */\n handleMouseUp(event) {\n super.handleMouseUp(event);\n\n this.player_.scrubbing(false);\n if (this.videoWasPlaying) {\n this.player_.play();\n }\n }\n\n /**\n * Move more quickly fast forward for keyboard-only users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users\n }\n\n /**\n * Move more quickly rewind for keyboard-only users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users\n }\n\n}\n\nSeekBar.prototype.options_ = {\n children: [\n 'loadProgressBar',\n 'mouseTimeDisplay',\n 'playProgressBar'\n ],\n 'barName': 'playProgressBar'\n};\n\nSeekBar.prototype.playerEvent = 'timeupdate';\n\nComponent.registerComponent('SeekBar', SeekBar);\nexport default SeekBar;\n","/**\n * @file custom-control-spacer.js\n */\nimport Spacer from './spacer.js';\nimport Component from '../../component.js';\n\n/**\n * Spacer specifically meant to be used as an insertion point for new plugins, etc.\n *\n * @extends Spacer\n * @class CustomControlSpacer\n */\nclass CustomControlSpacer extends Spacer {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-custom-control-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl({\n className: this.buildCSSClass(),\n });\n\n // No-flex/table-cell mode requires there be some content\n // in the cell to fill the remaining space of the table.\n el.innerHTML = ' ';\n return el;\n }\n}\n\nComponent.registerComponent('CustomControlSpacer', CustomControlSpacer);\nexport default CustomControlSpacer;\n","/**\n * @file spacer.js\n */\nimport Component from '../../component.js';\n\n/**\n * Just an empty spacer element that can be used as an append point for plugins, etc.\n * Also can be used to create space between elements when necessary.\n *\n * @extends Component\n * @class Spacer\n */\nclass Spacer extends Component {\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-spacer ${super.buildCSSClass()}`;\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n}\n\nComponent.registerComponent('Spacer', Spacer);\n\nexport default Spacer;\n","/**\n * @file caption-settings-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * The menu item for caption track settings menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class CaptionSettingsMenuItem\n */\n class CaptionSettingsMenuItem extends TextTrackMenuItem {\n\n constructor(player, options) {\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' settings',\n 'default': false,\n mode: 'disabled'\n };\n\n super(player, options);\n this.addClass('vjs-texttrack-settings');\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n this.player().getChild('textTrackSettings').show();\n }\n\n}\n\nComponent.registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem);\nexport default CaptionSettingsMenuItem;\n","/**\n * @file captions-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport CaptionSettingsMenuItem from './caption-settings-menu-item.js';\n\n/**\n * The button component for toggling and selecting captions\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class CaptionsButton\n */\nclass CaptionsButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Captions Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-captions-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Update caption menu items\n *\n * @method update\n */\n update() {\n let threshold = 2;\n super.update();\n\n // if native, then threshold is 1 because no settings button\n if (this.player().tech_ && this.player().tech_['featuresNativeTextTracks']) {\n threshold = 1;\n }\n\n if (this.items && this.items.length > threshold) {\n this.show();\n } else {\n this.hide();\n }\n }\n\n /**\n * Create caption menu items\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n if (!(this.player().tech_ && this.player().tech_['featuresNativeTextTracks'])) {\n items.push(new CaptionSettingsMenuItem(this.player_, { 'kind': this.kind_ }));\n }\n\n return super.createItems(items);\n }\n\n}\n\nCaptionsButton.prototype.kind_ = 'captions';\nCaptionsButton.prototype.controlText_ = 'Captions';\n\nComponent.registerComponent('CaptionsButton', CaptionsButton);\nexport default CaptionsButton;\n","/**\n * @file chapters-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport ChaptersTrackMenuItem from './chapters-track-menu-item.js';\nimport Menu from '../../menu/menu.js';\nimport * as Dom from '../../utils/dom.js';\nimport * as Fn from '../../utils/fn.js';\nimport toTitleCase from '../../utils/to-title-case.js';\nimport window from 'global/window';\n\n/**\n * The button component for toggling and selecting chapters\n * Chapters act much differently than other text tracks\n * Cues are navigation vs. other tracks of alternative languages\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class ChaptersButton\n */\nclass ChaptersButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Chapters Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-chapters-button ${super.buildCSSClass()}`;\n }\n\n /**\n * Create a menu item for each text track\n *\n * @return {Array} Array of menu items\n * @method createItems\n */\n createItems() {\n let items = [];\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n /**\n * Create menu from chapter buttons\n *\n * @return {Menu} Menu of chapter buttons\n * @method createMenu\n */\n createMenu() {\n let tracks = this.player_.textTracks() || [];\n let chaptersTrack;\n let items = this.items = [];\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.kind_) {\n if (!track.cues) {\n track['mode'] = 'hidden';\n /* jshint loopfunc:true */\n // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864\n window.setTimeout(Fn.bind(this, function() {\n this.createMenu();\n }), 100);\n /* jshint loopfunc:false */\n } else {\n chaptersTrack = track;\n break;\n }\n }\n }\n\n let menu = this.menu;\n if (menu === undefined) {\n menu = new Menu(this.player_);\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.kind_),\n tabIndex: -1\n }));\n }\n\n if (chaptersTrack) {\n let cues = chaptersTrack['cues'], cue;\n\n for (let i = 0, l = cues.length; i < l; i++) {\n cue = cues[i];\n\n let mi = new ChaptersTrackMenuItem(this.player_, {\n 'track': chaptersTrack,\n 'cue': cue\n });\n\n items.push(mi);\n\n menu.addChild(mi);\n }\n this.addChild(menu);\n }\n\n if (this.items.length > 0) {\n this.show();\n }\n\n return menu;\n }\n\n}\n\nChaptersButton.prototype.kind_ = 'chapters';\nChaptersButton.prototype.controlText_ = 'Chapters';\n\nComponent.registerComponent('ChaptersButton', ChaptersButton);\nexport default ChaptersButton;\n","/**\n * @file chapters-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n/**\n * The chapter track menu item\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class ChaptersTrackMenuItem\n */\nclass ChaptersTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let cue = options['cue'];\n let currentTime = player.currentTime();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = cue.text;\n options['selected'] = (cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n super(player, options);\n\n this.track = track;\n this.cue = cue;\n track.addEventListener('cuechange', Fn.bind(this, this.update));\n }\n\n /**\n * Handle click on menu item\n *\n * @method handleClick\n */\n handleClick() {\n super.handleClick();\n this.player_.currentTime(this.cue.startTime);\n this.update(this.cue.startTime);\n }\n\n /**\n * Update chapter menu item\n *\n * @method update\n */\n update() {\n let cue = this.cue;\n let currentTime = this.player_.currentTime();\n\n // vjs.log(currentTime, cue.startTime);\n this.selected(cue['startTime'] <= currentTime && currentTime < cue['endTime']);\n }\n\n}\n\nComponent.registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem);\nexport default ChaptersTrackMenuItem;\n","/**\n * @file off-text-track-menu-item.js\n */\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport Component from '../../component.js';\n\n/**\n * A special menu item for turning of a specific type of text track\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends TextTrackMenuItem\n * @class OffTextTrackMenuItem\n */\nclass OffTextTrackMenuItem extends TextTrackMenuItem {\n\n constructor(player, options){\n // Create pseudo track info\n // Requires options['kind']\n options['track'] = {\n 'kind': options['kind'],\n 'player': player,\n 'label': options['kind'] + ' off',\n 'default': false,\n 'mode': 'disabled'\n };\n\n super(player, options);\n this.selected(true);\n }\n\n /**\n * Handle text track change\n *\n * @param {Object} event Event object\n * @method handleTracksChange\n */\n handleTracksChange(event){\n let tracks = this.player().textTracks();\n let selected = true;\n\n for (let i = 0, l = tracks.length; i < l; i++) {\n let track = tracks[i];\n if (track['kind'] === this.track['kind'] && track['mode'] === 'showing') {\n selected = false;\n break;\n }\n }\n\n this.selected(selected);\n }\n\n}\n\nComponent.registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem);\nexport default OffTextTrackMenuItem;\n","/**\n * @file subtitles-button.js\n */\nimport TextTrackButton from './text-track-button.js';\nimport Component from '../../component.js';\n\n/**\n * The button component for toggling and selecting subtitles\n *\n * @param {Object} player Player object\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends TextTrackButton\n * @class SubtitlesButton\n */\nclass SubtitlesButton extends TextTrackButton {\n\n constructor(player, options, ready){\n super(player, options, ready);\n this.el_.setAttribute('aria-label','Subtitles Menu');\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n return `vjs-subtitles-button ${super.buildCSSClass()}`;\n }\n\n}\n\nSubtitlesButton.prototype.kind_ = 'subtitles';\nSubtitlesButton.prototype.controlText_ = 'Subtitles';\n\nComponent.registerComponent('SubtitlesButton', SubtitlesButton);\nexport default SubtitlesButton;\n","/**\n * @file text-track-button.js\n */\nimport MenuButton from '../../menu/menu-button.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport TextTrackMenuItem from './text-track-menu-item.js';\nimport OffTextTrackMenuItem from './off-text-track-menu-item.js';\n\n/**\n * The base class for buttons that toggle specific text track types (e.g. subtitles)\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class TextTrackButton\n */\nclass TextTrackButton extends MenuButton {\n\n constructor(player, options){\n super(player, options);\n\n let tracks = this.player_.textTracks();\n\n if (this.items.length <= 1) {\n this.hide();\n }\n\n if (!tracks) {\n return;\n }\n\n let updateHandler = Fn.bind(this, this.update);\n tracks.addEventListener('removetrack', updateHandler);\n tracks.addEventListener('addtrack', updateHandler);\n\n this.player_.on('dispose', function() {\n tracks.removeEventListener('removetrack', updateHandler);\n tracks.removeEventListener('addtrack', updateHandler);\n });\n }\n\n // Create a menu item for each text track\n createItems(items=[]) {\n // Add an OFF menu item to turn all tracks off\n items.push(new OffTextTrackMenuItem(this.player_, { 'kind': this.kind_ }));\n\n let tracks = this.player_.textTracks();\n\n if (!tracks) {\n return items;\n }\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // only add tracks that are of the appropriate kind and have a label\n if (track['kind'] === this.kind_) {\n items.push(new TextTrackMenuItem(this.player_, {\n 'track': track\n }));\n }\n }\n\n return items;\n }\n\n}\n\nComponent.registerComponent('TextTrackButton', TextTrackButton);\nexport default TextTrackButton;\n","/**\n * @file text-track-menu-item.js\n */\nimport MenuItem from '../../menu/menu-item.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * The specific menu item type for selecting a language within a text track kind\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuItem\n * @class TextTrackMenuItem\n */\nclass TextTrackMenuItem extends MenuItem {\n\n constructor(player, options){\n let track = options['track'];\n let tracks = player.textTracks();\n\n // Modify options for parent MenuItem class's init.\n options['label'] = track['label'] || track['language'] || 'Unknown';\n options['selected'] = track['default'] || track['mode'] === 'showing';\n super(player, options);\n\n this.track = track;\n\n if (tracks) {\n let changeHandler = Fn.bind(this, this.handleTracksChange);\n\n tracks.addEventListener('change', changeHandler);\n this.on('dispose', function() {\n tracks.removeEventListener('change', changeHandler);\n });\n }\n\n // iOS7 doesn't dispatch change events to TextTrackLists when an\n // associated track's mode changes. Without something like\n // Object.observe() (also not present on iOS7), it's not\n // possible to detect changes to the mode attribute and polyfill\n // the change event. As a poor substitute, we manually dispatch\n // change events whenever the controls modify the mode.\n if (tracks && tracks.onchange === undefined) {\n let event;\n\n this.on(['tap', 'click'], function() {\n if (typeof window.Event !== 'object') {\n // Android 2.3 throws an Illegal Constructor error for window.Event\n try {\n event = new window.Event('change');\n } catch(err){}\n }\n\n if (!event) {\n event = document.createEvent('Event');\n event.initEvent('change', true, true);\n }\n\n tracks.dispatchEvent(event);\n });\n }\n }\n\n /**\n * Handle click on text track\n *\n * @method handleClick\n */\n handleClick(event) {\n let kind = this.track['kind'];\n let tracks = this.player_.textTracks();\n\n super.handleClick(event);\n\n if (!tracks) return;\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n if (track['kind'] !== kind) {\n continue;\n }\n\n if (track === this.track) {\n track['mode'] = 'showing';\n } else {\n track['mode'] = 'disabled';\n }\n }\n }\n\n /**\n * Handle text track change\n *\n * @method handleTracksChange\n */\n handleTracksChange(event){\n this.selected(this.track['mode'] === 'showing');\n }\n\n}\n\nComponent.registerComponent('TextTrackMenuItem', TextTrackMenuItem);\nexport default TextTrackMenuItem;\n","/**\n * @file current-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the current time\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class CurrentTimeDisplay\n */\nclass CurrentTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-current-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-current-time-display',\n // label the current time for screen reader users\n innerHTML: 'Current Time ' + '0:00',\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update current time display\n *\n * @method updateContent\n */\n updateContent() {\n // Allows for smooth scrubbing, when player can't keep up.\n let time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n let localizedText = this.localize('Current Time');\n let formattedTime = formatTime(time, this.player_.duration());\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`;\n }\n\n}\n\nComponent.registerComponent('CurrentTimeDisplay', CurrentTimeDisplay);\nexport default CurrentTimeDisplay;\n","/**\n * @file duration-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the duration\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class DurationDisplay\n */\nclass DurationDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually,\n // however the durationchange event fires before this.player_.duration() is set,\n // so the value cannot be written out using this method.\n // Once the order of durationchange and this.player_.duration() being set is figured out,\n // this can be updated.\n this.on(player, 'timeupdate', this.updateContent);\n this.on(player, 'loadedmetadata', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-duration vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-duration-display',\n // label the duration time for screen reader users\n innerHTML: `${this.localize('Duration Time')} 0:00`\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update duration time display\n *\n * @method updateContent\n */\n updateContent() {\n let duration = this.player_.duration();\n if (duration) {\n let localizedText = this.localize('Duration Time');\n let formattedTime = formatTime(duration);\n this.contentEl_.innerHTML = `${localizedText} ${formattedTime}`; // label the duration time for screen reader users\n }\n }\n\n}\n\nComponent.registerComponent('DurationDisplay', DurationDisplay);\nexport default DurationDisplay;\n","/**\n * @file remaining-time-display.js\n */\nimport Component from '../../component.js';\nimport * as Dom from '../../utils/dom.js';\nimport formatTime from '../../utils/format-time.js';\n\n/**\n * Displays the time left in the video\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class RemainingTimeDisplay\n */\nclass RemainingTimeDisplay extends Component {\n\n constructor(player, options){\n super(player, options);\n\n this.on(player, 'timeupdate', this.updateContent);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = super.createEl('div', {\n className: 'vjs-remaining-time vjs-time-control vjs-control'\n });\n\n this.contentEl_ = Dom.createEl('div', {\n className: 'vjs-remaining-time-display',\n // label the remaining time for screen reader users\n innerHTML: `${this.localize('Remaining Time')} -0:00`,\n }, {\n // tell screen readers not to automatically read the time as it changes\n 'aria-live': 'off'\n });\n\n el.appendChild(this.contentEl_);\n return el;\n }\n\n /**\n * Update remaining time display\n *\n * @method updateContent\n */\n updateContent() {\n if (this.player_.duration()) {\n const localizedText = this.localize('Remaining Time');\n const formattedTime = formatTime(this.player_.remainingTime());\n this.contentEl_.innerHTML = `${localizedText} -${formattedTime}`;\n }\n\n // Allows for smooth scrubbing, when player can't keep up.\n // var time = (this.player_.scrubbing()) ? this.player_.getCache().currentTime : this.player_.currentTime();\n // this.contentEl_.innerHTML = vjs.formatTime(time, this.player_.duration());\n }\n\n}\n\nComponent.registerComponent('RemainingTimeDisplay', RemainingTimeDisplay);\nexport default RemainingTimeDisplay;\n","/**\n * @file time-divider.js\n */\nimport Component from '../../component.js';\n\n/**\n * The separator between the current time and duration.\n * Can be hidden if it's not needed in the design.\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class TimeDivider\n */\nclass TimeDivider extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-time-control vjs-time-divider',\n innerHTML: '
    /
    '\n });\n }\n\n}\n\nComponent.registerComponent('TimeDivider', TimeDivider);\nexport default TimeDivider;\n","/**\n * @file volume-bar.js\n */\nimport Slider from '../../slider/slider.js';\nimport Component from '../../component.js';\nimport * as Fn from '../../utils/fn.js';\n\n// Required children\nimport VolumeLevel from './volume-level.js';\n\n/**\n * The bar that contains the volume level and can be clicked on to adjust the level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Slider\n * @class VolumeBar\n */\nclass VolumeBar extends Slider {\n\n constructor(player, options){\n super(player, options);\n this.on(player, 'volumechange', this.updateARIAAttributes);\n player.ready(Fn.bind(this, this.updateARIAAttributes));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-bar vjs-slider-bar'\n }, {\n 'aria-label': 'volume level'\n });\n }\n\n /**\n * Handle mouse move on volume bar\n *\n * @method handleMouseMove\n */\n handleMouseMove(event) {\n if (this.player_.muted()) {\n this.player_.muted(false);\n }\n\n this.player_.volume(this.calculateDistance(event));\n }\n\n /**\n * Get percent of volume level\n *\n * @retun {Number} Volume level percent\n * @method getPercent\n */\n getPercent() {\n if (this.player_.muted()) {\n return 0;\n } else {\n return this.player_.volume();\n }\n }\n\n /**\n * Increase volume level for keyboard users\n *\n * @method stepForward\n */\n stepForward() {\n this.player_.volume(this.player_.volume() + 0.1);\n }\n\n /**\n * Decrease volume level for keyboard users\n *\n * @method stepBack\n */\n stepBack() {\n this.player_.volume(this.player_.volume() - 0.1);\n }\n\n /**\n * Update ARIA accessibility attributes\n *\n * @method updateARIAAttributes\n */\n updateARIAAttributes() {\n // Current value of volume bar as a percentage\n let volume = (this.player_.volume() * 100).toFixed(2);\n this.el_.setAttribute('aria-valuenow', volume);\n this.el_.setAttribute('aria-valuetext', volume + '%');\n }\n\n}\n\nVolumeBar.prototype.options_ = {\n children: [\n 'volumeLevel'\n ],\n 'barName': 'volumeLevel'\n};\n\nVolumeBar.prototype.playerEvent = 'volumechange';\n\nComponent.registerComponent('VolumeBar', VolumeBar);\nexport default VolumeBar;\n","/**\n * @file volume-control.js\n */\nimport Component from '../../component.js';\n\n// Required children\nimport VolumeBar from './volume-bar.js';\n\n/**\n * The component for controlling the volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeControl\n */\nclass VolumeControl extends Component {\n\n constructor(player, options){\n super(player, options);\n\n // hide volume controls when they're not supported by the current tech\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n }\n this.on(player, 'loadstart', function(){\n if (player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n });\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-control vjs-control'\n });\n }\n\n}\n\nVolumeControl.prototype.options_ = {\n children: [\n 'volumeBar'\n ]\n};\n\nComponent.registerComponent('VolumeControl', VolumeControl);\nexport default VolumeControl;\n","/**\n * @file volume-level.js\n */\nimport Component from '../../component.js';\n\n/**\n * Shows volume level\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Component\n * @class VolumeLevel\n */\nclass VolumeLevel extends Component {\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-volume-level',\n innerHTML: ''\n });\n }\n\n}\n\nComponent.registerComponent('VolumeLevel', VolumeLevel);\nexport default VolumeLevel;\n","/**\n * @file volume-menu-button.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport Menu from '../menu/menu.js';\nimport MenuButton from '../menu/menu-button.js';\nimport MuteToggle from './mute-toggle.js';\nimport VolumeBar from './volume-control/volume-bar.js';\n\n/**\n * Button for volume menu\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends MenuButton\n * @class VolumeMenuButton\n */\nclass VolumeMenuButton extends MenuButton {\n\n constructor(player, options={}){\n // Default to inline\n if (options.inline === undefined) {\n options.inline = true;\n }\n\n // If the vertical option isn't passed at all, default to true.\n if (options.vertical === undefined) {\n // If an inline volumeMenuButton is used, we should default to using\n // a horizontal slider for obvious reasons.\n if (options.inline) {\n options.vertical = false;\n } else {\n options.vertical = true;\n }\n }\n\n // The vertical option needs to be set on the volumeBar as well,\n // since that will need to be passed along to the VolumeBar constructor\n options.volumeBar = options.volumeBar || {};\n options.volumeBar.vertical = !!options.vertical;\n\n super(player, options);\n\n // Same listeners as MuteToggle\n this.on(player, 'volumechange', this.volumeUpdate);\n this.on(player, 'loadstart', this.volumeUpdate);\n\n // hide mute toggle if the current tech doesn't support volume control\n function updateVisibility() {\n if (player.tech_ && player.tech_['featuresVolumeControl'] === false) {\n this.addClass('vjs-hidden');\n } else {\n this.removeClass('vjs-hidden');\n }\n }\n\n updateVisibility.call(this);\n this.on(player, 'loadstart', updateVisibility);\n\n this.on(this.volumeBar, ['slideractive', 'focus'], function(){\n this.addClass('vjs-slider-active');\n });\n\n this.on(this.volumeBar, ['sliderinactive', 'blur'], function(){\n this.removeClass('vjs-slider-active');\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n let orientationClass = '';\n if (!!this.options_.vertical) {\n orientationClass = 'vjs-volume-menu-button-vertical';\n } else {\n orientationClass = 'vjs-volume-menu-button-horizontal';\n }\n\n return `vjs-volume-menu-button ${super.buildCSSClass()} ${orientationClass}`;\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {Menu} The volume menu button\n * @method createMenu\n */\n createMenu() {\n let menu = new Menu(this.player_, {\n contentElType: 'div'\n });\n\n let vb = new VolumeBar(this.player_, this.options_.volumeBar);\n\n menu.addChild(vb);\n\n this.volumeBar = vb;\n return menu;\n }\n\n /**\n * Handle click on volume menu and calls super\n *\n * @method handleClick\n */\n handleClick() {\n MuteToggle.prototype.handleClick.call(this);\n super.handleClick();\n }\n\n}\n\nVolumeMenuButton.prototype.volumeUpdate = MuteToggle.prototype.update;\nVolumeMenuButton.prototype.controlText_ = 'Mute';\n\nComponent.registerComponent('VolumeMenuButton', VolumeMenuButton);\nexport default VolumeMenuButton;\n","/**\n * @file error-display.js\n */\nimport Component from './component';\nimport * as Dom from './utils/dom.js';\n\n/**\n * Display that an error has occurred making the video unplayable\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class ErrorDisplay\n */\nclass ErrorDisplay extends Component {\n\n constructor(player, options) {\n super(player, options);\n\n this.update();\n this.on(player, 'error', this.update);\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n var el = super.createEl('div', {\n className: 'vjs-error-display'\n });\n\n this.contentEl_ = Dom.createEl('div');\n el.appendChild(this.contentEl_);\n\n return el;\n }\n\n /**\n * Update the error message in localized language\n *\n * @method update\n */\n update() {\n if (this.player().error()) {\n this.contentEl_.innerHTML = this.localize(this.player().error().message);\n }\n }\n}\n\nComponent.registerComponent('ErrorDisplay', ErrorDisplay);\nexport default ErrorDisplay;\n","/**\n * @file event-target.js\n */\nimport * as Events from './utils/events.js';\n\nvar EventTarget = function() {};\n\nEventTarget.prototype.allowedEvents_ = {};\n\nEventTarget.prototype.on = function(type, fn) {\n // Remove the addEventListener alias before calling Events.on\n // so we don't get into an infinite type loop\n let ael = this.addEventListener;\n this.addEventListener = Function.prototype;\n Events.on(this, type, fn);\n this.addEventListener = ael;\n};\nEventTarget.prototype.addEventListener = EventTarget.prototype.on;\n\nEventTarget.prototype.off = function(type, fn) {\n Events.off(this, type, fn);\n};\nEventTarget.prototype.removeEventListener = EventTarget.prototype.off;\n\nEventTarget.prototype.one = function(type, fn) {\n Events.one(this, type, fn);\n};\n\nEventTarget.prototype.trigger = function(event) {\n let type = event.type || event;\n\n if (typeof event === 'string') {\n event = {\n type: type\n };\n }\n event = Events.fixEvent(event);\n\n if (this.allowedEvents_[type] && this['on' + type]) {\n this['on' + type](event);\n }\n\n Events.trigger(this, event);\n};\n// The standard DOM EventTarget.dispatchEvent() is aliased to trigger()\nEventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger;\n\nexport default EventTarget;\n","import log from './utils/log';\n\n/*\n * @file extend.js\n *\n * A combination of node inherits and babel's inherits (after transpile).\n * Both work the same but node adds `super_` to the subClass\n * and Bable adds the superClass as __proto__. Both seem useful.\n */\nconst _inherits = function (subClass, superClass) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n\n if (superClass) {\n // node\n subClass.super_ = superClass;\n }\n};\n\n/*\n * Function for subclassing using the same inheritance that\n * videojs uses internally\n * ```js\n * var Button = videojs.getComponent('Button');\n * ```\n * ```js\n * var MyButton = videojs.extend(Button, {\n * constructor: function(player, options) {\n * Button.call(this, player, options);\n * },\n * onClick: function() {\n * // doSomething\n * }\n * });\n * ```\n */\nconst extendFn = function(superClass, subClassMethods={}) {\n let subClass = function() {\n superClass.apply(this, arguments);\n };\n let methods = {};\n\n if (typeof subClassMethods === 'object') {\n if (typeof subClassMethods.init === 'function') {\n log.warn('Constructor logic via init() is deprecated; please use constructor() instead.');\n subClassMethods.constructor = subClassMethods.init;\n }\n if (subClassMethods.constructor !== Object.prototype.constructor) {\n subClass = subClassMethods.constructor;\n }\n methods = subClassMethods;\n } else if (typeof subClassMethods === 'function') {\n subClass = subClassMethods;\n }\n\n _inherits(subClass, superClass);\n\n // Extend subObj's prototype with functions and other properties from props\n for (var name in methods) {\n if (methods.hasOwnProperty(name)) {\n subClass.prototype[name] = methods[name];\n }\n }\n\n return subClass;\n};\n\nexport default extendFn;\n","/**\n * @file fullscreen-api.js\n */\nimport document from 'global/document';\n\n/*\n * Store the browser-specific methods for the fullscreen API\n * @type {Object|undefined}\n * @private\n */\nlet FullscreenApi = {};\n\n// browser API methods\n// map approach from Screenful.js - https://github.com/sindresorhus/screenfull.js\nconst apiMap = [\n // Spec: https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html\n [\n 'requestFullscreen',\n 'exitFullscreen',\n 'fullscreenElement',\n 'fullscreenEnabled',\n 'fullscreenchange',\n 'fullscreenerror'\n ],\n // WebKit\n [\n 'webkitRequestFullscreen',\n 'webkitExitFullscreen',\n 'webkitFullscreenElement',\n 'webkitFullscreenEnabled',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Old WebKit (Safari 5.1)\n [\n 'webkitRequestFullScreen',\n 'webkitCancelFullScreen',\n 'webkitCurrentFullScreenElement',\n 'webkitCancelFullScreen',\n 'webkitfullscreenchange',\n 'webkitfullscreenerror'\n ],\n // Mozilla\n [\n 'mozRequestFullScreen',\n 'mozCancelFullScreen',\n 'mozFullScreenElement',\n 'mozFullScreenEnabled',\n 'mozfullscreenchange',\n 'mozfullscreenerror'\n ],\n // Microsoft\n [\n 'msRequestFullscreen',\n 'msExitFullscreen',\n 'msFullscreenElement',\n 'msFullscreenEnabled',\n 'MSFullscreenChange',\n 'MSFullscreenError'\n ]\n];\n\nlet specApi = apiMap[0];\nlet browserApi;\n\n// determine the supported set of functions\nfor (let i = 0; i < apiMap.length; i++) {\n // check for exitFullscreen function\n if (apiMap[i][1] in document) {\n browserApi = apiMap[i];\n break;\n }\n}\n\n// map the browser API names to the spec API names\nif (browserApi) {\n for (let i=0; i 1) {\n this.show();\n }\n }\n\n /**\n * Create menu\n *\n * @return {Menu} The constructed menu\n * @method createMenu\n */\n createMenu() {\n var menu = new Menu(this.player_);\n\n // Add a title list item to the top\n if (this.options_.title) {\n menu.contentEl().appendChild(Dom.createEl('li', {\n className: 'vjs-menu-title',\n innerHTML: toTitleCase(this.options_.title),\n tabIndex: -1\n }));\n }\n\n this.items = this['createItems']();\n\n if (this.items) {\n // Add menu items to the menu\n for (var i = 0; i < this.items.length; i++) {\n menu.addItem(this.items[i]);\n }\n }\n\n return menu;\n }\n\n /**\n * Create the list of menu items. Specific to each subclass.\n *\n * @method createItems\n */\n createItems(){}\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: this.buildCSSClass()\n });\n }\n\n /**\n * Allow sub components to stack CSS class names\n *\n * @return {String} The constructed class name\n * @method buildCSSClass\n */\n buildCSSClass() {\n var menuButtonClass = 'vjs-menu-button';\n\n // If the inline option is passed, we want to use different styles altogether.\n if (this.options_.inline === true) {\n menuButtonClass += '-inline';\n } else {\n menuButtonClass += '-popup';\n }\n\n return `vjs-menu-button ${menuButtonClass} ${super.buildCSSClass()}`;\n }\n\n /**\n * Focus - Add keyboard functionality to element\n * This function is not needed anymore. Instead, the\n * keyboard functionality is handled by\n * treating the button as triggering a submenu.\n * When the button is pressed, the submenu\n * appears. Pressing the button again makes\n * the submenu disappear.\n *\n * @method handleFocus\n */\n handleFocus() {}\n\n /**\n * Can't turn off list display that we turned\n * on with focus, because list would go away.\n *\n * @method handleBlur\n */\n handleBlur() {}\n\n /**\n * When you click the button it adds focus, which\n * will show the menu indefinitely.\n * So we'll remove focus when the mouse leaves the button.\n * Focus is needed for tab navigation.\n * Allow sub components to stack CSS class names\n *\n * @method handleClick\n */\n handleClick() {\n this.one('mouseout', Fn.bind(this, function(){\n this.menu.unlockShowing();\n this.el_.blur();\n }));\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n }\n\n /**\n * Handle key press on menu\n *\n * @param {Object} Key press event\n * @method handleKeyPress\n */\n handleKeyPress(event) {\n\n // Check for space bar (32) or enter (13) keys\n if (event.which === 32 || event.which === 13) {\n if (this.buttonPressed_){\n this.unpressButton();\n } else {\n this.pressButton();\n }\n event.preventDefault();\n // Check for escape (27) key\n } else if (event.which === 27){\n if (this.buttonPressed_){\n this.unpressButton();\n }\n event.preventDefault();\n }\n }\n\n /**\n * Makes changes based on button pressed\n *\n * @method pressButton\n */\n pressButton() {\n this.buttonPressed_ = true;\n this.menu.lockShowing();\n this.el_.setAttribute('aria-pressed', true);\n if (this.items && this.items.length > 0) {\n this.items[0].el().focus(); // set the focus to the title of the submenu\n }\n }\n\n /**\n * Makes changes based on button unpressed\n *\n * @method unpressButton\n */\n unpressButton() {\n this.buttonPressed_ = false;\n this.menu.unlockShowing();\n this.el_.setAttribute('aria-pressed', false);\n }\n}\n\nComponent.registerComponent('MenuButton', MenuButton);\nexport default MenuButton;\n","/**\n * @file menu-item.js\n */\nimport Button from '../button.js';\nimport Component from '../component.js';\nimport assign from 'object.assign';\n\n/**\n * The component for a menu item. `
  • `\n *\n * @param {Player|Object} player\n * @param {Object=} options\n * @extends Button\n * @class MenuItem\n */\nclass MenuItem extends Button {\n\n constructor(player, options) {\n super(player, options);\n this.selected(options['selected']);\n }\n\n /**\n * Create the component's DOM element\n *\n * @param {String=} type Desc\n * @param {Object=} props Desc\n * @return {Element}\n * @method createEl\n */\n createEl(type, props, attrs) {\n return super.createEl('li', assign({\n className: 'vjs-menu-item',\n innerHTML: this.localize(this.options_['label'])\n }, props), attrs);\n }\n\n /**\n * Handle a click on the menu item, and set it to selected\n *\n * @method handleClick\n */\n handleClick() {\n this.selected(true);\n }\n\n /**\n * Set this menu item as selected or not\n *\n * @param {Boolean} selected\n * @method selected\n */\n selected(selected) {\n if (selected) {\n this.addClass('vjs-selected');\n this.el_.setAttribute('aria-selected',true);\n } else {\n this.removeClass('vjs-selected');\n this.el_.setAttribute('aria-selected',false);\n }\n }\n\n}\n\nComponent.registerComponent('MenuItem', MenuItem);\nexport default MenuItem;\n","/**\n * @file menu.js\n */\nimport Component from '../component.js';\nimport * as Dom from '../utils/dom.js';\nimport * as Fn from '../utils/fn.js';\nimport * as Events from '../utils/events.js';\n\n/**\n * The Menu component is used to build pop up menus, including subtitle and\n * captions selection menus.\n *\n * @extends Component\n * @class Menu\n */\nclass Menu extends Component {\n\n /**\n * Add a menu item to the menu\n *\n * @param {Object|String} component Component or component type to add\n * @method addItem\n */\n addItem(component) {\n this.addChild(component);\n component.on('click', Fn.bind(this, function(){\n this.unlockShowing();\n }));\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let contentElType = this.options_.contentElType || 'ul';\n this.contentEl_ = Dom.createEl(contentElType, {\n className: 'vjs-menu-content'\n });\n var el = super.createEl('div', {\n append: this.contentEl_,\n className: 'vjs-menu'\n });\n el.appendChild(this.contentEl_);\n\n // Prevent clicks from bubbling up. Needed for Menu Buttons,\n // where a click on the parent is significant\n Events.on(el, 'click', function(event){\n event.preventDefault();\n event.stopImmediatePropagation();\n });\n\n return el;\n }\n}\n\nComponent.registerComponent('Menu', Menu);\nexport default Menu;\n","/**\n * @file player.js\n */\n // Subclasses Component\nimport Component from './component.js';\n\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Events from './utils/events.js';\nimport * as Dom from './utils/dom.js';\nimport * as Fn from './utils/fn.js';\nimport * as Guid from './utils/guid.js';\nimport * as browser from './utils/browser.js';\nimport log from './utils/log.js';\nimport toTitleCase from './utils/to-title-case.js';\nimport { createTimeRange } from './utils/time-ranges.js';\nimport { bufferedPercent } from './utils/buffer.js';\nimport * as stylesheet from './utils/stylesheet.js';\nimport FullscreenApi from './fullscreen-api.js';\nimport MediaError from './media-error.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport assign from 'object.assign';\nimport mergeOptions from './utils/merge-options.js';\nimport textTrackConverter from './tracks/text-track-list-converter.js';\n\n// Include required child components (importing also registers them)\nimport MediaLoader from './tech/loader.js';\nimport PosterImage from './poster-image.js';\nimport TextTrackDisplay from './tracks/text-track-display.js';\nimport LoadingSpinner from './loading-spinner.js';\nimport BigPlayButton from './big-play-button.js';\nimport ControlBar from './control-bar/control-bar.js';\nimport ErrorDisplay from './error-display.js';\nimport TextTrackSettings from './tracks/text-track-settings.js';\n\n// Require html5 tech, at least for disposing the original video tag\nimport Html5 from './tech/html5.js';\n\n/**\n * An instance of the `Player` class is created when any of the Video.js setup methods are used to initialize a video.\n * ```js\n * var myPlayer = videojs('example_video_1');\n * ```\n * In the following example, the `data-setup` attribute tells the Video.js library to create a player instance when the library is ready.\n * ```html\n * \n * ```\n * After an instance has been created it can be accessed globally using `Video('example_video_1')`.\n *\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class Player\n */\nclass Player extends Component {\n\n /**\n * player's constructor function\n *\n * @constructs\n * @method init\n * @param {Element} tag The original video tag used for configuring options\n * @param {Object=} options Player options\n * @param {Function=} ready Ready callback function\n */\n constructor(tag, options, ready){\n // Make sure tag ID exists\n tag.id = tag.id || `vjs_video_${Guid.newGUID()}`;\n\n // Set Options\n // The options argument overrides options set in the video tag\n // which overrides globally set options.\n // This latter part coincides with the load order\n // (tag must exist before Player)\n options = assign(Player.getTagSettings(tag), options);\n\n // Delay the initialization of children because we need to set up\n // player properties first, and can't use `this` before `super()`\n options.initChildren = false;\n\n // Same with creating the element\n options.createEl = false;\n\n // we don't want the player to report touch activity on itself\n // see enableTouchActivity in Component\n options.reportTouchActivity = false;\n\n // Run base component initializing with new options\n super(null, options, ready);\n\n // if the global option object was accidentally blown away by\n // someone, bail early with an informative error\n if (!this.options_ ||\n !this.options_.techOrder ||\n !this.options_.techOrder.length) {\n throw new Error('No techOrder specified. Did you overwrite ' +\n 'videojs.options instead of just changing the ' +\n 'properties you want to override?');\n }\n\n this.tag = tag; // Store the original tag used to set options\n\n // Store the tag attributes used to restore html5 element\n this.tagAttributes = tag && Dom.getElAttributes(tag);\n\n // Update current language\n this.language(this.options_.language);\n\n // Update Supported Languages\n if (options.languages) {\n // Normalise player option languages to lowercase\n let languagesToLower = {};\n\n Object.getOwnPropertyNames(options.languages).forEach(function(name) {\n languagesToLower[name.toLowerCase()] = options.languages[name];\n });\n this.languages_ = languagesToLower;\n } else {\n this.languages_ = Player.prototype.options_.languages;\n }\n\n // Cache for video property values.\n this.cache_ = {};\n\n // Set poster\n this.poster_ = options.poster || '';\n\n // Set controls\n this.controls_ = !!options.controls;\n\n // Original tag settings stored in options\n // now remove immediately so native controls don't flash.\n // May be turned back on by HTML5 tech if nativeControlsForTouch is true\n tag.controls = false;\n\n /*\n * Store the internal state of scrubbing\n *\n * @private\n * @return {Boolean} True if the user is scrubbing\n */\n this.scrubbing_ = false;\n\n this.el_ = this.createEl();\n\n // We also want to pass the original player options to each component and plugin\n // as well so they don't need to reach back into the player for options later.\n // We also need to do another copy of this.options_ so we don't end up with\n // an infinite loop.\n let playerOptionsCopy = mergeOptions(this.options_);\n\n // Load plugins\n if (options.plugins) {\n let plugins = options.plugins;\n\n Object.getOwnPropertyNames(plugins).forEach(function(name){\n if (typeof this[name] === 'function') {\n this[name](plugins[name]);\n } else {\n log.error('Unable to find plugin:', name);\n }\n }, this);\n }\n\n this.options_.playerOptions = playerOptionsCopy;\n\n this.initChildren();\n\n // Set isAudio based on whether or not an audio tag was used\n this.isAudio(tag.nodeName.toLowerCase() === 'audio');\n\n // Update controls className. Can't do this when the controls are initially\n // set because the element doesn't exist yet.\n if (this.controls()) {\n this.addClass('vjs-controls-enabled');\n } else {\n this.addClass('vjs-controls-disabled');\n }\n\n if (this.isAudio()) {\n this.addClass('vjs-audio');\n }\n\n if (this.flexNotSupported_()) {\n this.addClass('vjs-no-flex');\n }\n\n // TODO: Make this smarter. Toggle user state between touching/mousing\n // using events, since devices can have both touch and mouse events.\n // if (browser.TOUCH_ENABLED) {\n // this.addClass('vjs-touch-enabled');\n // }\n\n // Make player easily findable by ID\n Player.players[this.id_] = this;\n\n // When the player is first initialized, trigger activity so components\n // like the control bar show themselves if needed\n this.userActive(true);\n this.reportUserActivity();\n this.listenForUserActivity_();\n\n this.on('fullscreenchange', this.handleFullscreenChange_);\n this.on('stageclick', this.handleStageClick_);\n }\n\n /**\n * Destroys the video player and does any necessary cleanup\n * ```js\n * myPlayer.dispose();\n * ```\n * This is especially helpful if you are dynamically adding and removing videos\n * to/from the DOM.\n *\n * @method dispose\n */\n dispose() {\n this.trigger('dispose');\n // prevent dispose from being called twice\n this.off('dispose');\n\n if (this.styleEl_) {\n this.styleEl_.parentNode.removeChild(this.styleEl_);\n }\n\n // Kill reference to this player\n Player.players[this.id_] = null;\n if (this.tag && this.tag.player) { this.tag.player = null; }\n if (this.el_ && this.el_.player) { this.el_.player = null; }\n\n if (this.tech_) { this.tech_.dispose(); }\n\n super.dispose();\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n let el = this.el_ = super.createEl('div');\n let tag = this.tag;\n\n // Remove width/height attrs from tag so CSS can make it 100% width/height\n tag.removeAttribute('width');\n tag.removeAttribute('height');\n\n // Copy over all the attributes from the tag, including ID and class\n // ID will now reference player box, not the video tag\n const attrs = Dom.getElAttributes(tag);\n\n Object.getOwnPropertyNames(attrs).forEach(function(attr){\n // workaround so we don't totally break IE7\n // http://stackoverflow.com/questions/3653444/css-styles-not-applied-on-dynamic-elements-in-internet-explorer-7\n if (attr === 'class') {\n el.className = attrs[attr];\n } else {\n el.setAttribute(attr, attrs[attr]);\n }\n });\n\n // Update tag id/class for use as HTML5 playback tech\n // Might think we should do this after embedding in container so .vjs-tech class\n // doesn't flash 100% width/height, but class only applies with .video-js parent\n tag.id += '_html5_api';\n tag.className = 'vjs-tech';\n\n // Make player findable on elements\n tag.player = el.player = this;\n // Default state of video is paused\n this.addClass('vjs-paused');\n\n // Add a style element in the player that we'll use to set the width/height\n // of the player in a way that's still overrideable by CSS, just like the\n // video element\n this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions');\n let defaultsStyleEl = document.querySelector('.vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(this.styleEl_, defaultsStyleEl ? defaultsStyleEl.nextSibling : head.firstChild);\n\n // Pass in the width/height/aspectRatio options which will update the style el\n this.width(this.options_.width);\n this.height(this.options_.height);\n this.fluid(this.options_.fluid);\n this.aspectRatio(this.options_.aspectRatio);\n\n // insertElFirst seems to cause the networkState to flicker from 3 to 2, so\n // keep track of the original for later so we can know if the source originally failed\n tag.initNetworkState_ = tag.networkState;\n\n // Wrap video tag in div (el/box) container\n if (tag.parentNode) {\n tag.parentNode.insertBefore(el, tag);\n }\n Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup.\n\n this.el_ = el;\n\n return el;\n }\n\n /**\n * Get/set player width\n *\n * @param {Number=} value Value for width\n * @return {Number} Width when getting\n * @method width\n */\n width(value) {\n return this.dimension('width', value);\n }\n\n /**\n * Get/set player height\n *\n * @param {Number=} value Value for height\n * @return {Number} Height when getting\n * @method height\n */\n height(value) {\n return this.dimension('height', value);\n }\n\n /**\n * Get/set dimension for player\n *\n * @param {String} dimension Either width or height\n * @param {Number=} value Value for dimension\n * @return {Component}\n * @method dimension\n */\n dimension(dimension, value) {\n let privDimension = dimension + '_';\n\n if (value === undefined) {\n return this[privDimension] || 0;\n }\n\n if (value === '') {\n // If an empty string is given, reset the dimension to be automatic\n this[privDimension] = undefined;\n } else {\n let parsedVal = parseFloat(value);\n\n if (isNaN(parsedVal)) {\n log.error(`Improper value \"${value}\" supplied for for ${dimension}`);\n return this;\n }\n\n this[privDimension] = parsedVal;\n }\n\n this.updateStyleEl_();\n return this;\n }\n\n /**\n * Add/remove the vjs-fluid class\n *\n * @param {Boolean} bool Value of true adds the class, value of false removes the class\n * @method fluid\n */\n fluid(bool) {\n if (bool === undefined) {\n return !!this.fluid_;\n }\n\n this.fluid_ = !!bool;\n\n if (bool) {\n this.addClass('vjs-fluid');\n } else {\n this.removeClass('vjs-fluid');\n }\n }\n\n /**\n * Get/Set the aspect ratio\n *\n * @param {String=} ratio Aspect ratio for player\n * @return aspectRatio\n * @method aspectRatio\n */\n aspectRatio(ratio) {\n if (ratio === undefined) {\n return this.aspectRatio_;\n }\n\n // Check for width:height format\n if (!/^\\d+\\:\\d+$/.test(ratio)) {\n throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.');\n }\n this.aspectRatio_ = ratio;\n\n // We're assuming if you set an aspect ratio you want fluid mode,\n // because in fixed mode you could calculate width and height yourself.\n this.fluid(true);\n\n this.updateStyleEl_();\n }\n\n /**\n * Update styles of the player element (height, width and aspect ratio)\n *\n * @method updateStyleEl_\n */\n updateStyleEl_() {\n let width;\n let height;\n let aspectRatio;\n\n // The aspect ratio is either used directly or to calculate width and height.\n if (this.aspectRatio_ !== undefined && this.aspectRatio_ !== 'auto') {\n // Use any aspectRatio that's been specifically set\n aspectRatio = this.aspectRatio_;\n } else if (this.videoWidth()) {\n // Otherwise try to get the aspect ratio from the video metadata\n aspectRatio = this.videoWidth() + ':' + this.videoHeight();\n } else {\n // Or use a default. The video element's is 2:1, but 16:9 is more common.\n aspectRatio = '16:9';\n }\n\n // Get the ratio as a decimal we can use to calculate dimensions\n let ratioParts = aspectRatio.split(':');\n let ratioMultiplier = ratioParts[1] / ratioParts[0];\n\n if (this.width_ !== undefined) {\n // Use any width that's been specifically set\n width = this.width_;\n } else if (this.height_ !== undefined) {\n // Or calulate the width from the aspect ratio if a height has been set\n width = this.height_ / ratioMultiplier;\n } else {\n // Or use the video's metadata, or use the video el's default of 300\n width = this.videoWidth() || 300;\n }\n\n if (this.height_ !== undefined) {\n // Use any height that's been specifically set\n height = this.height_;\n } else {\n // Otherwise calculate the height from the ratio and the width\n height = width * ratioMultiplier;\n }\n\n let idClass = this.id()+'-dimensions';\n\n // Ensure the right class is still on the player for the style element\n this.addClass(idClass);\n\n stylesheet.setTextContent(this.styleEl_, `\n .${idClass} {\n width: ${width}px;\n height: ${height}px;\n }\n\n .${idClass}.vjs-fluid {\n padding-top: ${ratioMultiplier * 100}%;\n }\n `);\n }\n\n /**\n * Load the Media Playback Technology (tech)\n * Load/Create an instance of playback technology including element and API methods\n * And append playback element in player div.\n *\n * @param {String} techName Name of the playback technology\n * @param {String} source Video source\n * @method loadTech_\n * @private\n */\n loadTech_(techName, source) {\n\n // Pause and remove current playback technology\n if (this.tech_) {\n this.unloadTech_();\n }\n\n // get rid of the HTML5 video tag as soon as we are using another tech\n if (techName !== 'Html5' && this.tag) {\n Component.getComponent('Html5').disposeMediaElement(this.tag);\n this.tag.player = null;\n this.tag = null;\n }\n\n this.techName_ = techName;\n\n // Turn off API access because we're loading a new tech that might load asynchronously\n this.isReady_ = false;\n\n // Grab tech-specific options from player options and add source and parent element to use.\n var techOptions = assign({\n 'nativeControlsForTouch': this.options_.nativeControlsForTouch,\n 'source': source,\n 'playerId': this.id(),\n 'techId': `${this.id()}_${techName}_api`,\n 'textTracks': this.textTracks_,\n 'autoplay': this.options_.autoplay,\n 'preload': this.options_.preload,\n 'loop': this.options_.loop,\n 'muted': this.options_.muted,\n 'poster': this.poster(),\n 'language': this.language(),\n 'vtt.js': this.options_['vtt.js']\n }, this.options_[techName.toLowerCase()]);\n\n if (this.tag) {\n techOptions.tag = this.tag;\n }\n\n if (source) {\n this.currentType_ = source.type;\n if (source.src === this.cache_.src && this.cache_.currentTime > 0) {\n techOptions.startTime = this.cache_.currentTime;\n }\n\n this.cache_.src = source.src;\n }\n\n // Initialize tech instance\n let techComponent = Component.getComponent(techName);\n this.tech_ = new techComponent(techOptions);\n\n // player.triggerReady is always async, so don't need this to be async\n this.tech_.ready(Fn.bind(this, this.handleTechReady_), true);\n\n textTrackConverter.jsonToTextTracks(this.textTracksJson_ || [], this.tech_);\n\n // Listen to all HTML5-defined events and trigger them on the player\n this.on(this.tech_, 'loadstart', this.handleTechLoadStart_);\n this.on(this.tech_, 'waiting', this.handleTechWaiting_);\n this.on(this.tech_, 'canplay', this.handleTechCanPlay_);\n this.on(this.tech_, 'canplaythrough', this.handleTechCanPlayThrough_);\n this.on(this.tech_, 'playing', this.handleTechPlaying_);\n this.on(this.tech_, 'ended', this.handleTechEnded_);\n this.on(this.tech_, 'seeking', this.handleTechSeeking_);\n this.on(this.tech_, 'seeked', this.handleTechSeeked_);\n this.on(this.tech_, 'play', this.handleTechPlay_);\n this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_);\n this.on(this.tech_, 'pause', this.handleTechPause_);\n this.on(this.tech_, 'progress', this.handleTechProgress_);\n this.on(this.tech_, 'durationchange', this.handleTechDurationChange_);\n this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_);\n this.on(this.tech_, 'error', this.handleTechError_);\n this.on(this.tech_, 'suspend', this.handleTechSuspend_);\n this.on(this.tech_, 'abort', this.handleTechAbort_);\n this.on(this.tech_, 'emptied', this.handleTechEmptied_);\n this.on(this.tech_, 'stalled', this.handleTechStalled_);\n this.on(this.tech_, 'loadedmetadata', this.handleTechLoadedMetaData_);\n this.on(this.tech_, 'loadeddata', this.handleTechLoadedData_);\n this.on(this.tech_, 'timeupdate', this.handleTechTimeUpdate_);\n this.on(this.tech_, 'ratechange', this.handleTechRateChange_);\n this.on(this.tech_, 'volumechange', this.handleTechVolumeChange_);\n this.on(this.tech_, 'texttrackchange', this.handleTechTextTrackChange_);\n this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_);\n this.on(this.tech_, 'posterchange', this.handleTechPosterChange_);\n\n this.usingNativeControls(this.techGet_('controls'));\n\n if (this.controls() && !this.usingNativeControls()) {\n this.addTechControlsListeners_();\n }\n\n // Add the tech element in the DOM if it was not already there\n // Make sure to not insert the original video element if using Html5\n if (this.tech_.el().parentNode !== this.el() && (techName !== 'Html5' || !this.tag)) {\n Dom.insertElFirst(this.tech_.el(), this.el());\n }\n\n // Get rid of the original video tag reference after the first tech is loaded\n if (this.tag) {\n this.tag.player = null;\n this.tag = null;\n }\n }\n\n /**\n * Unload playback technology\n *\n * @method unloadTech_\n * @private\n */\n unloadTech_() {\n // Save the current text tracks so that we can reuse the same text tracks with the next tech\n this.textTracks_ = this.textTracks();\n this.textTracksJson_ = textTrackConverter.textTracksToJson(this);\n\n this.isReady_ = false;\n\n this.tech_.dispose();\n\n this.tech_ = false;\n }\n\n /**\n * Set up click and touch listeners for the playback element\n *\n * On desktops, a click on the video itself will toggle playback,\n * on a mobile device a click on the video toggles controls.\n * (toggling controls is done by toggling the user state between active and\n * inactive)\n * A tap can signal that a user has become active, or has become inactive\n * e.g. a quick tap on an iPhone movie should reveal the controls. Another\n * quick tap should hide them again (signaling the user is in an inactive\n * viewing state)\n * In addition to this, we still want the user to be considered inactive after\n * a few seconds of inactivity.\n * Note: the only part of iOS interaction we can't mimic with this setup\n * is a touch and hold on the video element counting as activity in order to\n * keep the controls showing, but that shouldn't be an issue. A touch and hold\n * on any controls will still keep the user active\n *\n * @private\n * @method addTechControlsListeners_\n */\n addTechControlsListeners_() {\n // Make sure to remove all the previous listeners in case we are called multiple times.\n this.removeTechControlsListeners_();\n\n // Some browsers (Chrome & IE) don't trigger a click on a flash swf, but do\n // trigger mousedown/up.\n // http://stackoverflow.com/questions/1444562/javascript-onclick-event-over-flash-object\n // Any touch events are set to block the mousedown event from happening\n this.on(this.tech_, 'mousedown', this.handleTechClick_);\n\n // If the controls were hidden we don't want that to change without a tap event\n // so we'll check if the controls were already showing before reporting user\n // activity\n this.on(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.on(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.on(this.tech_, 'touchend', this.handleTechTouchEnd_);\n\n // The tap listener needs to come after the touchend listener because the tap\n // listener cancels out any reportedUserActivity when setting userActive(false)\n this.on(this.tech_, 'tap', this.handleTechTap_);\n }\n\n /**\n * Remove the listeners used for click and tap controls. This is needed for\n * toggling to controls disabled, where a tap/touch should do nothing.\n *\n * @method removeTechControlsListeners_\n * @private\n */\n removeTechControlsListeners_() {\n // We don't want to just use `this.off()` because there might be other needed\n // listeners added by techs that extend this.\n this.off(this.tech_, 'tap', this.handleTechTap_);\n this.off(this.tech_, 'touchstart', this.handleTechTouchStart_);\n this.off(this.tech_, 'touchmove', this.handleTechTouchMove_);\n this.off(this.tech_, 'touchend', this.handleTechTouchEnd_);\n this.off(this.tech_, 'mousedown', this.handleTechClick_);\n }\n\n /**\n * Player waits for the tech to be ready\n *\n * @method handleTechReady_\n * @private\n */\n handleTechReady_() {\n this.triggerReady();\n\n // Keep the same volume as before\n if (this.cache_.volume) {\n this.techCall_('setVolume', this.cache_.volume);\n }\n\n // Look if the tech found a higher resolution poster while loading\n this.handleTechPosterChange_();\n\n // Update the duration if available\n this.handleTechDurationChange_();\n\n // Chrome and Safari both have issues with autoplay.\n // In Safari (5.1.1), when we move the video element into the container div, autoplay doesn't work.\n // In Chrome (15), if you have autoplay + a poster + no controls, the video gets hidden (but audio plays)\n // This fixes both issues. Need to wait for API, so it updates displays correctly\n if (this.tag && this.options_.autoplay && this.paused()) {\n delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16.\n this.play();\n }\n }\n\n /**\n * Fired when the user agent begins looking for media data\n *\n * @private\n * @method handleTechLoadStart_\n */\n handleTechLoadStart_() {\n // TODO: Update to use `emptied` event instead. See #1277.\n\n this.removeClass('vjs-ended');\n\n // reset the error state\n this.error(null);\n\n // If it's already playing we want to trigger a firstplay event now.\n // The firstplay event relies on both the play and loadstart events\n // which can happen in any order for a new source\n if (!this.paused()) {\n this.trigger('loadstart');\n this.trigger('firstplay');\n } else {\n // reset the hasStarted state\n this.hasStarted(false);\n this.trigger('loadstart');\n }\n }\n\n /**\n * Add/remove the vjs-has-started class\n *\n * @param {Boolean} hasStarted The value of true adds the class the value of false remove the class\n * @return {Boolean} Boolean value if has started\n * @private\n * @method hasStarted\n */\n hasStarted(hasStarted) {\n if (hasStarted !== undefined) {\n // only update if this is a new value\n if (this.hasStarted_ !== hasStarted) {\n this.hasStarted_ = hasStarted;\n if (hasStarted) {\n this.addClass('vjs-has-started');\n // trigger the firstplay event if this newly has played\n this.trigger('firstplay');\n } else {\n this.removeClass('vjs-has-started');\n }\n }\n return this;\n }\n return !!this.hasStarted_;\n }\n\n /**\n * Fired whenever the media begins or resumes playback\n *\n * @private\n * @method handleTechPlay_\n */\n handleTechPlay_() {\n this.removeClass('vjs-ended');\n this.removeClass('vjs-paused');\n this.addClass('vjs-playing');\n\n // hide the poster when the user hits play\n // https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-play\n this.hasStarted(true);\n\n this.trigger('play');\n }\n\n /**\n * Fired whenever the media begins waiting\n *\n * @private\n * @method handleTechWaiting_\n */\n handleTechWaiting_() {\n this.addClass('vjs-waiting');\n this.trigger('waiting');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlay_\n */\n handleTechCanPlay_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplay');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechCanPlayThrough_\n */\n handleTechCanPlayThrough_() {\n this.removeClass('vjs-waiting');\n this.trigger('canplaythrough');\n }\n\n /**\n * A handler for events that signal that waiting has ended\n * which is not consistent between browsers. See #1351\n *\n * @private\n * @method handleTechPlaying_\n */\n handleTechPlaying_() {\n this.removeClass('vjs-waiting');\n this.trigger('playing');\n }\n\n /**\n * Fired whenever the player is jumping to a new time\n *\n * @private\n * @method handleTechSeeking_\n */\n handleTechSeeking_() {\n this.addClass('vjs-seeking');\n this.trigger('seeking');\n }\n\n /**\n * Fired when the player has finished jumping to a new time\n *\n * @private\n * @method handleTechSeeked_\n */\n handleTechSeeked_() {\n this.removeClass('vjs-seeking');\n this.trigger('seeked');\n }\n\n /**\n * Fired the first time a video is played\n * Not part of the HLS spec, and we're not sure if this is the best\n * implementation yet, so use sparingly. If you don't have a reason to\n * prevent playback, use `myPlayer.one('play');` instead.\n *\n * @private\n * @method handleTechFirstPlay_\n */\n handleTechFirstPlay_() {\n //If the first starttime attribute is specified\n //then we will start at the given offset in seconds\n if(this.options_.starttime){\n this.currentTime(this.options_.starttime);\n }\n\n this.addClass('vjs-has-started');\n this.trigger('firstplay');\n }\n\n /**\n * Fired whenever the media has been paused\n *\n * @private\n * @method handleTechPause_\n */\n handleTechPause_() {\n this.removeClass('vjs-playing');\n this.addClass('vjs-paused');\n this.trigger('pause');\n }\n\n /**\n * Fired while the user agent is downloading media data\n *\n * @private\n * @method handleTechProgress_\n */\n handleTechProgress_() {\n this.trigger('progress');\n }\n\n /**\n * Fired when the end of the media resource is reached (currentTime == duration)\n *\n * @private\n * @method handleTechEnded_\n */\n handleTechEnded_() {\n this.addClass('vjs-ended');\n if (this.options_.loop) {\n this.currentTime(0);\n this.play();\n } else if (!this.paused()) {\n this.pause();\n }\n\n this.trigger('ended');\n }\n\n /**\n * Fired when the duration of the media resource is first known or changed\n *\n * @private\n * @method handleTechDurationChange_\n */\n handleTechDurationChange_() {\n this.duration(this.techGet_('duration'));\n }\n\n /**\n * Handle a click on the media element to play/pause\n *\n * @param {Object=} event Event object\n * @private\n * @method handleTechClick_\n */\n handleTechClick_(event) {\n // We're using mousedown to detect clicks thanks to Flash, but mousedown\n // will also be triggered with right-clicks, so we need to prevent that\n if (event.button !== 0) return;\n\n // When controls are disabled a click should not toggle playback because\n // the click is considered a control\n if (this.controls()) {\n if (this.paused()) {\n this.play();\n } else {\n this.pause();\n }\n }\n }\n\n /**\n * Handle a tap on the media element. It will toggle the user\n * activity state, which hides and shows the controls.\n *\n * @private\n * @method handleTechTap_\n */\n handleTechTap_() {\n this.userActive(!this.userActive());\n }\n\n /**\n * Handle touch to start\n *\n * @private\n * @method handleTechTouchStart_\n */\n handleTechTouchStart_() {\n this.userWasActive = this.userActive();\n }\n\n /**\n * Handle touch to move\n *\n * @private\n * @method handleTechTouchMove_\n */\n handleTechTouchMove_() {\n if (this.userWasActive){\n this.reportUserActivity();\n }\n }\n\n /**\n * Handle touch to end\n *\n * @private\n * @method handleTechTouchEnd_\n */\n handleTechTouchEnd_(event) {\n // Stop the mouse events from also happening\n event.preventDefault();\n }\n\n /**\n * Fired when the player switches in or out of fullscreen mode\n *\n * @private\n * @method handleFullscreenChange_\n */\n handleFullscreenChange_() {\n if (this.isFullscreen()) {\n this.addClass('vjs-fullscreen');\n } else {\n this.removeClass('vjs-fullscreen');\n }\n }\n\n /**\n * native click events on the SWF aren't triggered on IE11, Win8.1RT\n * use stageclick events triggered from inside the SWF instead\n *\n * @private\n * @method handleStageClick_\n */\n handleStageClick_() {\n this.reportUserActivity();\n }\n\n /**\n * Handle Tech Fullscreen Change\n *\n * @private\n * @method handleTechFullscreenChange_\n */\n handleTechFullscreenChange_(event, data) {\n if (data) {\n this.isFullscreen(data.isFullscreen);\n }\n this.trigger('fullscreenchange');\n }\n\n /**\n * Fires when an error occurred during the loading of an audio/video\n *\n * @private\n * @method handleTechError_\n */\n handleTechError_() {\n let error = this.tech_.error();\n this.error(error && error.code);\n }\n\n /**\n * Fires when the browser is intentionally not getting media data\n *\n * @private\n * @method handleTechSuspend_\n */\n handleTechSuspend_() {\n this.trigger('suspend');\n }\n\n /**\n * Fires when the loading of an audio/video is aborted\n *\n * @private\n * @method handleTechAbort_\n */\n handleTechAbort_() {\n this.trigger('abort');\n }\n\n /**\n * Fires when the current playlist is empty\n *\n * @private\n * @method handleTechEmptied_\n */\n handleTechEmptied_() {\n this.trigger('emptied');\n }\n\n /**\n * Fires when the browser is trying to get media data, but data is not available\n *\n * @private\n * @method handleTechStalled_\n */\n handleTechStalled_() {\n this.trigger('stalled');\n }\n\n /**\n * Fires when the browser has loaded meta data for the audio/video\n *\n * @private\n * @method handleTechLoadedMetaData_\n */\n handleTechLoadedMetaData_() {\n this.trigger('loadedmetadata');\n }\n\n /**\n * Fires when the browser has loaded the current frame of the audio/video\n *\n * @private\n * @method handleTechLoadedData_\n */\n handleTechLoadedData_() {\n this.trigger('loadeddata');\n }\n\n /**\n * Fires when the current playback position has changed\n *\n * @private\n * @method handleTechTimeUpdate_\n */\n handleTechTimeUpdate_() {\n this.trigger('timeupdate');\n }\n\n /**\n * Fires when the playing speed of the audio/video is changed\n *\n * @private\n * @method handleTechRateChange_\n */\n handleTechRateChange_() {\n this.trigger('ratechange');\n }\n\n /**\n * Fires when the volume has been changed\n *\n * @private\n * @method handleTechVolumeChange_\n */\n handleTechVolumeChange_() {\n this.trigger('volumechange');\n }\n\n /**\n * Fires when the text track has been changed\n *\n * @private\n * @method handleTechTextTrackChange_\n */\n handleTechTextTrackChange_() {\n this.trigger('texttrackchange');\n }\n\n /**\n * Get object for cached values.\n *\n * @return {Object}\n * @method getCache\n */\n getCache() {\n return this.cache_;\n }\n\n /**\n * Pass values to the playback tech\n *\n * @param {String=} method Method\n * @param {Object=} arg Argument\n * @private\n * @method techCall_\n */\n techCall_(method, arg) {\n // If it's not ready yet, call method when it is\n if (this.tech_ && !this.tech_.isReady_) {\n this.tech_.ready(function(){\n this[method](arg);\n }, true);\n\n // Otherwise call method now\n } else {\n try {\n this.tech_[method](arg);\n } catch(e) {\n log(e);\n throw e;\n }\n }\n }\n\n /**\n * Get calls can't wait for the tech, and sometimes don't need to.\n *\n * @param {String} method Tech method\n * @return {Method}\n * @private\n * @method techGet_\n */\n techGet_(method) {\n if (this.tech_ && this.tech_.isReady_) {\n\n // Flash likes to die and reload when you hide or reposition it.\n // In these cases the object methods go away and we get errors.\n // When that happens we'll catch the errors and inform tech that it's not ready any more.\n try {\n return this.tech_[method]();\n } catch(e) {\n // When building additional tech libs, an expected method may not be defined yet\n if (this.tech_[method] === undefined) {\n log(`Video.js: ${method} method not defined for ${this.techName_} playback technology.`, e);\n } else {\n // When a method isn't available on the object it throws a TypeError\n if (e.name === 'TypeError') {\n log(`Video.js: ${method} unavailable on ${this.techName_} playback technology element.`, e);\n this.tech_.isReady_ = false;\n } else {\n log(e);\n }\n }\n throw e;\n }\n }\n\n return;\n }\n\n /**\n * start media playback\n * ```js\n * myPlayer.play();\n * ```\n *\n * @return {Player} self\n * @method play\n */\n play() {\n this.techCall_('play');\n return this;\n }\n\n /**\n * Pause the video playback\n * ```js\n * myPlayer.pause();\n * ```\n *\n * @return {Player} self\n * @method pause\n */\n pause() {\n this.techCall_('pause');\n return this;\n }\n\n /**\n * Check if the player is paused\n * ```js\n * var isPaused = myPlayer.paused();\n * var isPlaying = !myPlayer.paused();\n * ```\n *\n * @return {Boolean} false if the media is currently playing, or true otherwise\n * @method paused\n */\n paused() {\n // The initial state of paused should be true (in Safari it's actually false)\n return (this.techGet_('paused') === false) ? false : true;\n }\n\n /**\n * Returns whether or not the user is \"scrubbing\". Scrubbing is when the user\n * has clicked the progress bar handle and is dragging it along the progress bar.\n *\n * @param {Boolean} isScrubbing True/false the user is scrubbing\n * @return {Boolean} The scrubbing status when getting\n * @return {Object} The player when setting\n * @method scrubbing\n */\n scrubbing(isScrubbing) {\n if (isScrubbing !== undefined) {\n this.scrubbing_ = !!isScrubbing;\n\n if (isScrubbing) {\n this.addClass('vjs-scrubbing');\n } else {\n this.removeClass('vjs-scrubbing');\n }\n\n return this;\n }\n\n return this.scrubbing_;\n }\n\n /**\n * Get or set the current time (in seconds)\n * ```js\n * // get\n * var whereYouAt = myPlayer.currentTime();\n * // set\n * myPlayer.currentTime(120); // 2 minutes into the video\n * ```\n *\n * @param {Number|String=} seconds The time to seek to\n * @return {Number} The time in seconds, when not setting\n * @return {Player} self, when the current time is set\n * @method currentTime\n */\n currentTime(seconds) {\n if (seconds !== undefined) {\n\n this.techCall_('setCurrentTime', seconds);\n\n return this;\n }\n\n // cache last currentTime and return. default to 0 seconds\n //\n // Caching the currentTime is meant to prevent a massive amount of reads on the tech's\n // currentTime when scrubbing, but may not provide much performance benefit afterall.\n // Should be tested. Also something has to read the actual current time or the cache will\n // never get updated.\n return this.cache_.currentTime = (this.techGet_('currentTime') || 0);\n }\n\n /**\n * Get the length in time of the video in seconds\n * ```js\n * var lengthOfVideo = myPlayer.duration();\n * ```\n * **NOTE**: The video must have started loading before the duration can be\n * known, and in the case of Flash, may not be known until the video starts\n * playing.\n *\n * @param {Number} seconds Duration when setting\n * @return {Number} The duration of the video in seconds when getting\n * @method duration\n */\n duration(seconds) {\n if (seconds === undefined) {\n return this.cache_.duration || 0;\n }\n\n seconds = parseFloat(seconds) || 0;\n\n // Standardize on Inifity for signaling video is live\n if (seconds < 0) {\n seconds = Infinity;\n }\n\n if (seconds !== this.cache_.duration) {\n // Cache the last set value for optimized scrubbing (esp. Flash)\n this.cache_.duration = seconds;\n\n if (seconds === Infinity) {\n this.addClass('vjs-live');\n } else {\n this.removeClass('vjs-live');\n }\n\n this.trigger('durationchange');\n }\n\n return this;\n }\n\n /**\n * Calculates how much time is left.\n * ```js\n * var timeLeft = myPlayer.remainingTime();\n * ```\n * Not a native video element function, but useful\n *\n * @return {Number} The time remaining in seconds\n * @method remainingTime\n */\n remainingTime() {\n return this.duration() - this.currentTime();\n }\n\n // http://dev.w3.org/html5/spec/video.html#dom-media-buffered\n // Buffered returns a timerange object.\n // Kind of like an array of portions of the video that have been downloaded.\n\n /**\n * Get a TimeRange object with the times of the video that have been downloaded\n * If you just want the percent of the video that's been downloaded,\n * use bufferedPercent.\n * ```js\n * // Number of different ranges of time have been buffered. Usually 1.\n * numberOfRanges = bufferedTimeRange.length,\n * // Time in seconds when the first range starts. Usually 0.\n * firstRangeStart = bufferedTimeRange.start(0),\n * // Time in seconds when the first range ends\n * firstRangeEnd = bufferedTimeRange.end(0),\n * // Length in seconds of the first time range\n * firstRangeLength = firstRangeEnd - firstRangeStart;\n * ```\n *\n * @return {Object} A mock TimeRange object (following HTML spec)\n * @method buffered\n */\n buffered() {\n var buffered = this.techGet_('buffered');\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0,0);\n }\n\n return buffered;\n }\n\n /**\n * Get the percent (as a decimal) of the video that's been downloaded\n * ```js\n * var howMuchIsDownloaded = myPlayer.bufferedPercent();\n * ```\n * 0 means none, 1 means all.\n * (This method isn't in the HTML5 spec, but it's very convenient)\n *\n * @return {Number} A decimal between 0 and 1 representing the percent\n * @method bufferedPercent\n */\n bufferedPercent() {\n return bufferedPercent(this.buffered(), this.duration());\n }\n\n /**\n * Get the ending time of the last buffered time range\n * This is used in the progress bar to encapsulate all time ranges.\n *\n * @return {Number} The end of the last buffered time range\n * @method bufferedEnd\n */\n bufferedEnd() {\n var buffered = this.buffered(),\n duration = this.duration(),\n end = buffered.end(buffered.length-1);\n\n if (end > duration) {\n end = duration;\n }\n\n return end;\n }\n\n /**\n * Get or set the current volume of the media\n * ```js\n * // get\n * var howLoudIsIt = myPlayer.volume();\n * // set\n * myPlayer.volume(0.5); // Set volume to half\n * ```\n * 0 is off (muted), 1.0 is all the way up, 0.5 is half way.\n *\n * @param {Number} percentAsDecimal The new volume as a decimal percent\n * @return {Number} The current volume when getting\n * @return {Player} self when setting\n * @method volume\n */\n volume(percentAsDecimal) {\n let vol;\n\n if (percentAsDecimal !== undefined) {\n vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1\n this.cache_.volume = vol;\n this.techCall_('setVolume', vol);\n\n return this;\n }\n\n // Default to 1 when returning current volume.\n vol = parseFloat(this.techGet_('volume'));\n return (isNaN(vol)) ? 1 : vol;\n }\n\n\n /**\n * Get the current muted state, or turn mute on or off\n * ```js\n * // get\n * var isVolumeMuted = myPlayer.muted();\n * // set\n * myPlayer.muted(true); // mute the volume\n * ```\n *\n * @param {Boolean=} muted True to mute, false to unmute\n * @return {Boolean} True if mute is on, false if not when getting\n * @return {Player} self when setting mute\n * @method muted\n */\n muted(muted) {\n if (muted !== undefined) {\n this.techCall_('setMuted', muted);\n return this;\n }\n return this.techGet_('muted') || false; // Default to false\n }\n\n // Check if current tech can support native fullscreen\n // (e.g. with built in controls like iOS, so not our flash swf)\n /**\n * Check to see if fullscreen is supported\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return this.techGet_('supportsFullScreen') || false;\n }\n\n /**\n * Check if the player is in fullscreen mode\n * ```js\n * // get\n * var fullscreenOrNot = myPlayer.isFullscreen();\n * // set\n * myPlayer.isFullscreen(true); // tell the player it's in fullscreen\n * ```\n * NOTE: As of the latest HTML5 spec, isFullscreen is no longer an official\n * property and instead document.fullscreenElement is used. But isFullscreen is\n * still a valuable property for internal player workings.\n *\n * @param {Boolean=} isFS Update the player's fullscreen state\n * @return {Boolean} true if fullscreen false if not when getting\n * @return {Player} self when setting\n * @method isFullscreen\n */\n isFullscreen(isFS) {\n if (isFS !== undefined) {\n this.isFullscreen_ = !!isFS;\n return this;\n }\n return !!this.isFullscreen_;\n }\n\n /**\n * Increase the size of the video to full screen\n * ```js\n * myPlayer.requestFullscreen();\n * ```\n * In some browsers, full screen is not supported natively, so it enters\n * \"full window mode\", where the video fills the browser window.\n * In browsers and devices that support native full screen, sometimes the\n * browser's default controls will be shown, and not the Video.js custom skin.\n * This includes most mobile devices (iOS, Android) and older versions of\n * Safari.\n *\n * @return {Player} self\n * @method requestFullscreen\n */\n requestFullscreen() {\n var fsApi = FullscreenApi;\n\n this.isFullscreen(true);\n\n if (fsApi.requestFullscreen) {\n // the browser supports going fullscreen at the element level so we can\n // take the controls fullscreen as well as the video\n\n // Trigger fullscreenchange event after change\n // We have to specifically add this each time, and remove\n // when canceling fullscreen. Otherwise if there's multiple\n // players on a page, they would all be reacting to the same fullscreen\n // events\n Events.on(document, fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e){\n this.isFullscreen(document[fsApi.fullscreenElement]);\n\n // If cancelling fullscreen, remove event listener.\n if (this.isFullscreen() === false) {\n Events.off(document, fsApi.fullscreenchange, documentFullscreenChange);\n }\n\n this.trigger('fullscreenchange');\n }));\n\n this.el_[fsApi.requestFullscreen]();\n\n } else if (this.tech_.supportsFullScreen()) {\n // we can't take the video.js controls fullscreen but we can go fullscreen\n // with native controls\n this.techCall_('enterFullScreen');\n } else {\n // fullscreen isn't supported so we'll just stretch the video element to\n // fill the viewport\n this.enterFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * Return the video to its normal size after having been in full screen mode\n * ```js\n * myPlayer.exitFullscreen();\n * ```\n *\n * @return {Player} self\n * @method exitFullscreen\n */\n exitFullscreen() {\n var fsApi = FullscreenApi;\n this.isFullscreen(false);\n\n // Check for browser element fullscreen support\n if (fsApi.requestFullscreen) {\n document[fsApi.exitFullscreen]();\n } else if (this.tech_.supportsFullScreen()) {\n this.techCall_('exitFullScreen');\n } else {\n this.exitFullWindow();\n this.trigger('fullscreenchange');\n }\n\n return this;\n }\n\n /**\n * When fullscreen isn't supported we can stretch the video container to as wide as the browser will let us.\n *\n * @method enterFullWindow\n */\n enterFullWindow() {\n this.isFullWindow = true;\n\n // Storing original doc overflow value to return to when fullscreen is off\n this.docOrigOverflow = document.documentElement.style.overflow;\n\n // Add listener for esc key to exit fullscreen\n Events.on(document, 'keydown', Fn.bind(this, this.fullWindowOnEscKey));\n\n // Hide any scroll bars\n document.documentElement.style.overflow = 'hidden';\n\n // Apply fullscreen styles\n Dom.addElClass(document.body, 'vjs-full-window');\n\n this.trigger('enterFullWindow');\n }\n\n /**\n * Check for call to either exit full window or full screen on ESC key\n *\n * @param {String} event Event to check for key press\n * @method fullWindowOnEscKey\n */\n fullWindowOnEscKey(event) {\n if (event.keyCode === 27) {\n if (this.isFullscreen() === true) {\n this.exitFullscreen();\n } else {\n this.exitFullWindow();\n }\n }\n }\n\n /**\n * Exit full window\n *\n * @method exitFullWindow\n */\n exitFullWindow() {\n this.isFullWindow = false;\n Events.off(document, 'keydown', this.fullWindowOnEscKey);\n\n // Unhide scroll bars.\n document.documentElement.style.overflow = this.docOrigOverflow;\n\n // Remove fullscreen styles\n Dom.removeElClass(document.body, 'vjs-full-window');\n\n // Resize the box, controller, and poster to original sizes\n // this.positionAll();\n this.trigger('exitFullWindow');\n }\n\n /**\n * Select source based on tech order\n *\n * @param {Array} sources The sources for a media asset\n * @return {Object|Boolean} Object of source and tech order, otherwise false\n * @method selectSource\n */\n selectSource(sources) {\n // Loop through each playback technology in the options order\n for (var i=0,j=this.options_.techOrder;i 0) {\n // In milliseconds, if no more activity has occurred the\n // user will be considered inactive\n inactivityTimeout = this.setTimeout(function () {\n // Protect against the case where the inactivityTimeout can trigger just\n // before the next user activity is picked up by the activityCheck loop\n // causing a flicker\n if (!this.userActivity_) {\n this.userActive(false);\n }\n }, timeout);\n }\n }\n }, 250);\n }\n\n /**\n * Gets or sets the current playback rate. A playback rate of\n * 1.0 represents normal speed and 0.5 would indicate half-speed\n * playback, for instance.\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-playbackrate\n *\n * @param {Number} rate New playback rate to set.\n * @return {Number} Returns the new playback rate when setting\n * @return {Number} Returns the current playback rate when getting\n * @method playbackRate\n */\n playbackRate(rate) {\n if (rate !== undefined) {\n this.techCall_('setPlaybackRate', rate);\n return this;\n }\n\n if (this.tech_ && this.tech_['featuresPlaybackRate']) {\n return this.techGet_('playbackRate');\n } else {\n return 1.0;\n }\n }\n\n /**\n * Gets or sets the audio flag\n *\n * @param {Boolean} bool True signals that this is an audio player.\n * @return {Boolean} Returns true if player is audio, false if not when getting\n * @return {Player} Returns the player if setting\n * @private\n * @method isAudio\n */\n isAudio(bool) {\n if (bool !== undefined) {\n this.isAudio_ = !!bool;\n return this;\n }\n\n return !!this.isAudio_;\n }\n\n /**\n * Returns the current state of network activity for the element, from\n * the codes in the list below.\n * - NETWORK_EMPTY (numeric value 0)\n * The element has not yet been initialised. All attributes are in\n * their initial states.\n * - NETWORK_IDLE (numeric value 1)\n * The element's resource selection algorithm is active and has\n * selected a resource, but it is not actually using the network at\n * this time.\n * - NETWORK_LOADING (numeric value 2)\n * The user agent is actively trying to download data.\n * - NETWORK_NO_SOURCE (numeric value 3)\n * The element's resource selection algorithm is active, but it has\n * not yet found a resource to use.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#network-states\n * @return {Number} the current network activity state\n * @method networkState\n */\n networkState() {\n return this.techGet_('networkState');\n }\n\n /**\n * Returns a value that expresses the current state of the element\n * with respect to rendering the current playback position, from the\n * codes in the list below.\n * - HAVE_NOTHING (numeric value 0)\n * No information regarding the media resource is available.\n * - HAVE_METADATA (numeric value 1)\n * Enough of the resource has been obtained that the duration of the\n * resource is available.\n * - HAVE_CURRENT_DATA (numeric value 2)\n * Data for the immediate current playback position is available.\n * - HAVE_FUTURE_DATA (numeric value 3)\n * Data for the immediate current playback position is available, as\n * well as enough data for the user agent to advance the current\n * playback position in the direction of playback.\n * - HAVE_ENOUGH_DATA (numeric value 4)\n * The user agent estimates that enough data is available for\n * playback to proceed uninterrupted.\n *\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-readystate\n * @return {Number} the current playback rendering state\n * @method readyState\n */\n readyState() {\n return this.techGet_('readyState');\n }\n\n /*\n * Text tracks are tracks of timed text events.\n * Captions - text displayed over the video for the hearing impaired\n * Subtitles - text displayed over the video for those who don't understand language in the video\n * Chapters - text displayed in a menu allowing the user to jump to particular points (chapters) in the video\n * Descriptions (not supported yet) - audio descriptions that are read back to the user by a screen reading device\n */\n\n /**\n * Get an array of associated text tracks. captions, subtitles, chapters, descriptions\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-texttracks\n *\n * @return {Array} Array of track objects\n * @method textTracks\n */\n textTracks() {\n // cannot use techGet_ directly because it checks to see whether the tech is ready.\n // Flash is unlikely to be ready in time but textTracks should still work.\n return this.tech_ && this.tech_['textTracks']();\n }\n\n /**\n * Get an array of remote text tracks\n *\n * @return {Array}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n return this.tech_ && this.tech_['remoteTextTracks']();\n }\n\n /**\n * Add a text track\n * In addition to the W3C settings we allow adding additional info through options.\n * http://www.w3.org/html/wg/drafts/html/master/embedded-content-0.html#dom-media-addtexttrack\n *\n * @param {String} kind Captions, subtitles, chapters, descriptions, or metadata\n * @param {String=} label Optional label\n * @param {String=} language Optional language\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n return this.tech_ && this.tech_['addTextTrack'](kind, label, language);\n }\n\n /**\n * Add a remote text track\n *\n * @param {Object} options Options for remote text track\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n return this.tech_ && this.tech_['addRemoteTextTrack'](options);\n }\n\n /**\n * Remove a remote text track\n *\n * @param {Object} track Remote text track to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.tech_ && this.tech_['removeRemoteTextTrack'](track);\n }\n\n /**\n * Get video width\n *\n * @return {Number} Video width\n * @method videoWidth\n */\n videoWidth() {\n return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0;\n }\n\n /**\n * Get video height\n *\n * @return {Number} Video height\n * @method videoHeight\n */\n videoHeight() {\n return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0;\n }\n\n // Methods to add support for\n // initialTime: function(){ return this.techCall_('initialTime'); },\n // startOffsetTime: function(){ return this.techCall_('startOffsetTime'); },\n // played: function(){ return this.techCall_('played'); },\n // videoTracks: function(){ return this.techCall_('videoTracks'); },\n // audioTracks: function(){ return this.techCall_('audioTracks'); },\n // defaultPlaybackRate: function(){ return this.techCall_('defaultPlaybackRate'); },\n // defaultMuted: function(){ return this.techCall_('defaultMuted'); }\n\n /**\n * The player's language code\n * NOTE: The language should be set in the player options if you want the\n * the controls to be built with a specific language. Changing the lanugage\n * later will not update controls text.\n *\n * @param {String} code The locale string\n * @return {String} The locale string when getting\n * @return {Player} self when setting\n * @method language\n */\n language(code) {\n if (code === undefined) {\n return this.language_;\n }\n\n this.language_ = (''+code).toLowerCase();\n return this;\n }\n\n /**\n * Get the player's language dictionary\n * Merge every time, because a newly added plugin might call videojs.addLanguage() at any time\n * Languages specified directly in the player options have precedence\n *\n * @return {Array} Array of languages\n * @method languages\n */\n languages() {\n return mergeOptions(Player.prototype.options_.languages, this.languages_);\n }\n\n /**\n * Converts track info to JSON\n *\n * @return {Object} JSON object of options\n * @method toJSON\n */\n toJSON() {\n let options = mergeOptions(this.options_);\n let tracks = options.tracks;\n\n options.tracks = [];\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n\n // deep merge tracks and null out player so no circular references\n track = mergeOptions(track);\n track.player = undefined;\n options.tracks[i] = track;\n }\n\n return options;\n }\n\n /**\n * Gets tag settings\n *\n * @param {Element} tag The player tag\n * @return {Array} An array of sources and track objects\n * @static\n * @method getTagSettings\n */\n static getTagSettings(tag) {\n let baseOptions = {\n 'sources': [],\n 'tracks': []\n };\n\n const tagOptions = Dom.getElAttributes(tag);\n const dataSetup = tagOptions['data-setup'];\n\n // Check if data-setup attr exists.\n if (dataSetup !== null){\n // Parse options JSON\n // If empty string, make it a parsable json object.\n const [err, data] = safeParseTuple(dataSetup || '{}');\n if (err) {\n log.error(err);\n }\n assign(tagOptions, data);\n }\n\n assign(baseOptions, tagOptions);\n\n // Get tag children settings\n if (tag.hasChildNodes()) {\n const children = tag.childNodes;\n\n for (let i=0, j=children.length; i 0) {\n for(let i=0, e=vids.length; i 0) {\n for(let i=0, e=audios.length; i 0) {\n\n for (let i=0, e=mediaEls.length; i seekable.start(0) ? time : seekable.start(0);\n time = time < seekable.end(seekable.length - 1) ? time : seekable.end(seekable.length - 1);\n\n this.lastSeekTarget_ = time;\n this.trigger('seeking');\n this.el_.vjs_setProperty('currentTime', time);\n super.setCurrentTime();\n }\n }\n\n /**\n * Get current time\n *\n * @param {Number=} time Current time of video\n * @return {Number} Current time\n * @method currentTime\n */\n currentTime(time) {\n // when seeking make the reported time keep up with the requested time\n // by reading the time we're seeking to\n if (this.seeking()) {\n return this.lastSeekTarget_ || 0;\n }\n return this.el_.vjs_getProperty('currentTime');\n }\n\n /**\n * Get current source\n *\n * @method currentSrc\n */\n currentSrc() {\n if (this.currentSource_) {\n return this.currentSource_.src;\n } else {\n return this.el_.vjs_getProperty('currentSrc');\n }\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load() {\n this.el_.vjs_load();\n }\n\n /**\n * Get poster\n *\n * @method poster\n */\n poster() {\n this.el_.vjs_getProperty('poster');\n }\n\n /**\n * Poster images are not handled by the Flash tech so make this a no-op\n *\n * @method setPoster\n */\n setPoster() {}\n\n /**\n * Determine if can seek in media\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() {\n const duration = this.duration();\n if (duration === 0) {\n return createTimeRange();\n }\n return createTimeRange(0, duration);\n }\n\n /**\n * Get buffered time range\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() {\n let ranges = this.el_.vjs_getProperty('buffered');\n if (ranges.length === 0) {\n return createTimeRange();\n }\n return createTimeRange(ranges[0][0], ranges[0][1]);\n }\n\n /**\n * Get fullscreen support -\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n return false; // Flash does not allow fullscreen through javascript\n }\n\n /**\n * Request to enter fullscreen\n * Flash does not allow fullscreen through javascript\n * so always returns false\n *\n * @return {Boolean} false\n * @method enterFullScreen\n */\n enterFullScreen() {\n return false;\n }\n\n}\n\n\n// Create setters and getters for attributes\nconst _api = Flash.prototype;\nconst _readWrite = 'rtmpConnection,rtmpStream,preload,defaultPlaybackRate,playbackRate,autoplay,loop,mediaGroup,controller,controls,volume,muted,defaultMuted'.split(',');\nconst _readOnly = 'networkState,readyState,initialTime,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,videoWidth,videoHeight'.split(',');\n\nfunction _createSetter(attr){\n var attrUpper = attr.charAt(0).toUpperCase() + attr.slice(1);\n _api['set'+attrUpper] = function(val){ return this.el_.vjs_setProperty(attr, val); };\n}\nfunction _createGetter(attr) {\n _api[attr] = function(){ return this.el_.vjs_getProperty(attr); };\n}\n\n// Create getter and setters for all read/write attributes\nfor (let i = 0; i < _readWrite.length; i++) {\n _createGetter(_readWrite[i]);\n _createSetter(_readWrite[i]);\n}\n\n// Create getters for read-only attributes\nfor (let i = 0; i < _readOnly.length; i++) {\n _createGetter(_readOnly[i]);\n}\n\n/* Flash Support Testing -------------------------------------------------------- */\n\nFlash.isSupported = function(){\n return Flash.version()[0] >= 10;\n // return swfobject.hasFlashPlayerVersion('10');\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Flash);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler = {};\n\n/*\n * Check Flash can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nFlash.nativeSourceHandler.canHandleSource = function(source){\n var type;\n\n function guessMimeType(src) {\n var ext = Url.getFileExtension(src);\n if (ext) {\n return `video/${ext}`;\n }\n return '';\n }\n\n if (!source.type) {\n type = guessMimeType(source.src);\n } else {\n // Strip code information from the type because we don't get that specific\n type = source.type.replace(/;.*/, '').toLowerCase();\n }\n\n if (type in Flash.formats) {\n return 'maybe';\n }\n\n return '';\n};\n\n/*\n * Pass the source to the flash object\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Flash} tech The instance of the Flash tech\n */\nFlash.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n * Clean up the source handler when disposing the player or switching sources..\n * (no cleanup is needed when supporting the format natively)\n */\nFlash.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nFlash.registerSourceHandler(Flash.nativeSourceHandler);\n\nFlash.formats = {\n 'video/flv': 'FLV',\n 'video/x-flv': 'FLV',\n 'video/mp4': 'MP4',\n 'video/m4v': 'MP4'\n};\n\nFlash.onReady = function(currSwf){\n let el = Dom.getEl(currSwf);\n let tech = el && el.tech;\n\n // if there is no el then the tech has been disposed\n // and the tech element was removed from the player div\n if (tech && tech.el()) {\n // check that the flash object is really ready\n Flash.checkReady(tech);\n }\n};\n\n// The SWF isn't always ready when it says it is. Sometimes the API functions still need to be added to the object.\n// If it's not ready, we set a timeout to check again shortly.\nFlash.checkReady = function(tech){\n // stop worrying if the tech has been disposed\n if (!tech.el()) {\n return;\n }\n\n // check if API property exists\n if (tech.el().vjs_getProperty) {\n // tell tech it's ready\n tech.triggerReady();\n } else {\n // wait longer\n this.setTimeout(function(){\n Flash['checkReady'](tech);\n }, 50);\n }\n};\n\n// Trigger events from the swf on the player\nFlash.onEvent = function(swfID, eventName){\n let tech = Dom.getEl(swfID).tech;\n tech.trigger(eventName);\n};\n\n// Log errors from the swf\nFlash.onError = function(swfID, err){\n const tech = Dom.getEl(swfID).tech;\n\n // trigger MEDIA_ERR_SRC_NOT_SUPPORTED\n if (err === 'srcnotfound') {\n return tech.error(4);\n }\n\n // trigger a custom error\n tech.error('FLASH: ' + err);\n};\n\n// Flash Version Check\nFlash.version = function(){\n let version = '0,0,0';\n\n // IE\n try {\n version = new window.ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n\n // other browsers\n } catch(e) {\n try {\n if (navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin){\n version = (navigator.plugins['Shockwave Flash 2.0'] || navigator.plugins['Shockwave Flash']).description.replace(/\\D+/g, ',').match(/^,?(.+),?$/)[1];\n }\n } catch(err) {}\n }\n return version.split(',');\n};\n\n// Flash embedding method. Only used in non-iframe mode\nFlash.embed = function(swf, flashVars, params, attributes){\n const code = Flash.getEmbedCode(swf, flashVars, params, attributes);\n\n // Get element by embedding code and retrieving created element\n const obj = Dom.createEl('div', { innerHTML: code }).childNodes[0];\n\n return obj;\n};\n\nFlash.getEmbedCode = function(swf, flashVars, params, attributes){\n const objTag = '`;\n });\n\n attributes = assign({\n // Add swf to attributes (need both for IE and Others to work)\n 'data': swf,\n\n // Default to 100% width/height\n 'width': '100%',\n 'height': '100%'\n\n }, attributes);\n\n // Create Attributes string\n Object.getOwnPropertyNames(attributes).forEach(function(key){\n attrsString += `${key}=\"${attributes[key]}\" `;\n });\n\n return `${objTag}${attrsString}>${paramsString}`;\n};\n\n// Run Flash through the RTMP decorator\nFlashRtmpDecorator(Flash);\n\nComponent.registerComponent('Flash', Flash);\nexport default Flash;\n","/**\n * @file html5.js\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n */\n\nimport Tech from './tech.js';\nimport Component from '../component';\nimport * as Dom from '../utils/dom.js';\nimport * as Url from '../utils/url.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\nimport window from 'global/window';\nimport assign from 'object.assign';\nimport mergeOptions from '../utils/merge-options.js';\n\n/**\n * HTML5 Media Controller - Wrapper for HTML5 Media API\n *\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Tech\n * @class Html5\n */\nclass Html5 extends Tech {\n\n constructor(options, ready){\n super(options, ready);\n\n const source = options.source;\n\n // Set the source if one is provided\n // 1) Check if the source is new (if not, we want to keep the original so playback isn't interrupted)\n // 2) Check to see if the network state of the tag was failed at init, and if so, reset the source\n // anyway so the error gets fired.\n if (source && (this.el_.currentSrc !== source.src || (options.tag && options.tag.initNetworkState_ === 3))) {\n this.setSource(source);\n } else {\n this.handleLateInit_(this.el_);\n }\n\n if (this.el_.hasChildNodes()) {\n\n let nodes = this.el_.childNodes;\n let nodesLength = nodes.length;\n let removeNodes = [];\n\n while (nodesLength--) {\n let node = nodes[nodesLength];\n let nodeName = node.nodeName.toLowerCase();\n if (nodeName === 'track') {\n if (!this.featuresNativeTextTracks) {\n // Empty video tag tracks so the built-in player doesn't use them also.\n // This may not be fast enough to stop HTML5 browsers from reading the tags\n // so we'll need to turn off any default tracks if we're manually doing\n // captions and subtitles. videoElement.textTracks\n removeNodes.push(node);\n } else {\n this.remoteTextTracks().addTrack_(node.track);\n }\n }\n }\n\n for (let i=0; i= 0; i--) {\n const attr = settingsAttrs[i];\n let overwriteAttrs = {};\n if (typeof this.options_[attr] !== 'undefined') {\n overwriteAttrs[attr] = this.options_[attr];\n }\n Dom.setElAttributes(el, overwriteAttrs);\n }\n\n return el;\n // jenniisawesome = true;\n }\n\n // If we're loading the playback object after it has started loading\n // or playing the video (often with autoplay on) then the loadstart event\n // has already fired and we need to fire it manually because many things\n // rely on it.\n handleLateInit_(el) {\n if (el.networkState === 0 || el.networkState === 3) {\n // The video element hasn't started loading the source yet\n // or didn't find a source\n return;\n }\n\n if (el.readyState === 0) {\n // NetworkState is set synchronously BUT loadstart is fired at the\n // end of the current stack, usually before setInterval(fn, 0).\n // So at this point we know loadstart may have already fired or is\n // about to fire, and either way the player hasn't seen it yet.\n // We don't want to fire loadstart prematurely here and cause a\n // double loadstart so we'll wait and see if it happens between now\n // and the next loop, and fire it if not.\n // HOWEVER, we also want to make sure it fires before loadedmetadata\n // which could also happen between now and the next loop, so we'll\n // watch for that also.\n let loadstartFired = false;\n let setLoadstartFired = function() {\n loadstartFired = true;\n };\n this.on('loadstart', setLoadstartFired);\n\n let triggerLoadstart = function() {\n // We did miss the original loadstart. Make sure the player\n // sees loadstart before loadedmetadata\n if (!loadstartFired) {\n this.trigger('loadstart');\n }\n };\n this.on('loadedmetadata', triggerLoadstart);\n\n this.ready(function(){\n this.off('loadstart', setLoadstartFired);\n this.off('loadedmetadata', triggerLoadstart);\n\n if (!loadstartFired) {\n // We did miss the original native loadstart. Fire it now.\n this.trigger('loadstart');\n }\n });\n\n return;\n }\n\n // From here on we know that loadstart already fired and we missed it.\n // The other readyState events aren't as much of a problem if we double\n // them, so not going to go to as much trouble as loadstart to prevent\n // that unless we find reason to.\n let eventsToTrigger = ['loadstart'];\n\n // loadedmetadata: newly equal to HAVE_METADATA (1) or greater\n eventsToTrigger.push('loadedmetadata');\n\n // loadeddata: newly increased to HAVE_CURRENT_DATA (2) or greater\n if (el.readyState >= 2) {\n eventsToTrigger.push('loadeddata');\n }\n\n // canplay: newly increased to HAVE_FUTURE_DATA (3) or greater\n if (el.readyState >= 3) {\n eventsToTrigger.push('canplay');\n }\n\n // canplaythrough: newly equal to HAVE_ENOUGH_DATA (4)\n if (el.readyState >= 4) {\n eventsToTrigger.push('canplaythrough');\n }\n\n // We still need to give the player time to add event listeners\n this.ready(function(){\n eventsToTrigger.forEach(function(type){\n this.trigger(type);\n }, this);\n });\n }\n\n proxyNativeTextTracks_() {\n let tt = this.el().textTracks;\n\n if (tt && tt.addEventListener) {\n tt.addEventListener('change', this.handleTextTrackChange_);\n tt.addEventListener('addtrack', this.handleTextTrackAdd_);\n tt.addEventListener('removetrack', this.handleTextTrackRemove_);\n }\n }\n\n handleTextTrackChange(e) {\n let tt = this.textTracks();\n this.textTracks().trigger({\n type: 'change',\n target: tt,\n currentTarget: tt,\n srcElement: tt\n });\n }\n\n handleTextTrackAdd(e) {\n this.textTracks().addTrack_(e.track);\n }\n\n handleTextTrackRemove(e) {\n this.textTracks().removeTrack_(e.track);\n }\n\n /**\n * Play for html5 tech\n *\n * @method play\n */\n play() { this.el_.play(); }\n\n /**\n * Pause for html5 tech\n *\n * @method pause\n */\n pause() { this.el_.pause(); }\n\n /**\n * Paused for html5 tech\n *\n * @return {Boolean}\n * @method paused\n */\n paused() { return this.el_.paused; }\n\n /**\n * Get current time\n *\n * @return {Number}\n * @method currentTime\n */\n currentTime() { return this.el_.currentTime; }\n\n /**\n * Set current time\n *\n * @param {Number} seconds Current time of video\n * @method setCurrentTime\n */\n setCurrentTime(seconds) {\n try {\n this.el_.currentTime = seconds;\n } catch(e) {\n log(e, 'Video is not ready. (Video.js)');\n // this.warning(VideoJS.warnings.videoNotReady);\n }\n }\n\n /**\n * Get duration\n *\n * @return {Number}\n * @method duration\n */\n duration() { return this.el_.duration || 0; }\n\n /**\n * Get a TimeRange object that represents the intersection\n * of the time ranges for which the user agent has all\n * relevant media\n *\n * @return {TimeRangeObject}\n * @method buffered\n */\n buffered() { return this.el_.buffered; }\n\n /**\n * Get volume level\n *\n * @return {Number}\n * @method volume\n */\n volume() { return this.el_.volume; }\n\n /**\n * Set volume level\n *\n * @param {Number} percentAsDecimal Volume percent as a decimal\n * @method setVolume\n */\n setVolume(percentAsDecimal) { this.el_.volume = percentAsDecimal; }\n\n /**\n * Get if muted\n *\n * @return {Boolean}\n * @method muted\n */\n muted() { return this.el_.muted; }\n\n /**\n * Set muted\n *\n * @param {Boolean} If player is to be muted or note\n * @method setMuted\n */\n setMuted(muted) { this.el_.muted = muted; }\n\n /**\n * Get player width\n *\n * @return {Number}\n * @method width\n */\n width() { return this.el_.offsetWidth; }\n\n /**\n * Get player height\n *\n * @return {Number}\n * @method height\n */\n height() { return this.el_.offsetHeight; }\n\n /**\n * Get if there is fullscreen support\n *\n * @return {Boolean}\n * @method supportsFullScreen\n */\n supportsFullScreen() {\n if (typeof this.el_.webkitEnterFullScreen === 'function') {\n let userAgent = window.navigator.userAgent;\n // Seems to be broken in Chromium/Chrome && Safari in Leopard\n if (/Android/.test(userAgent) || !/Chrome|Mac OS X 10.5/.test(userAgent)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Request to enter fullscreen\n *\n * @method enterFullScreen\n */\n enterFullScreen() {\n var video = this.el_;\n\n if ('webkitDisplayingFullscreen' in video) {\n this.one('webkitbeginfullscreen', function() {\n this.one('webkitendfullscreen', function() {\n this.trigger('fullscreenchange', { isFullscreen: false });\n });\n\n this.trigger('fullscreenchange', { isFullscreen: true });\n });\n }\n\n if (video.paused && video.networkState <= video.HAVE_METADATA) {\n // attempt to prime the video element for programmatic access\n // this isn't necessary on the desktop but shouldn't hurt\n this.el_.play();\n\n // playing and pausing synchronously during the transition to fullscreen\n // can get iOS ~6.1 devices into a play/pause loop\n this.setTimeout(function(){\n video.pause();\n video.webkitEnterFullScreen();\n }, 0);\n } else {\n video.webkitEnterFullScreen();\n }\n }\n\n /**\n * Request to exit fullscreen\n *\n * @method exitFullScreen\n */\n exitFullScreen() {\n this.el_.webkitExitFullScreen();\n }\n\n /**\n * Get/set video\n *\n * @param {Object=} src Source object\n * @return {Object}\n * @method src\n */\n src(src) {\n if (src === undefined) {\n return this.el_.src;\n } else {\n // Setting src through `src` instead of `setSrc` will be deprecated\n this.setSrc(src);\n }\n }\n\n /**\n * Set video\n *\n * @param {Object} src Source object\n * @deprecated\n * @method setSrc\n */\n setSrc(src) {\n this.el_.src = src;\n }\n\n /**\n * Load media into player\n *\n * @method load\n */\n load(){\n this.el_.load();\n }\n\n /**\n * Get current source\n *\n * @return {Object}\n * @method currentSrc\n */\n currentSrc() { return this.el_.currentSrc; }\n\n /**\n * Get poster\n *\n * @return {String}\n * @method poster\n */\n poster() { return this.el_.poster; }\n\n /**\n * Set poster\n *\n * @param {String} val URL to poster image\n * @method\n */\n setPoster(val) { this.el_.poster = val; }\n\n /**\n * Get preload attribute\n *\n * @return {String}\n * @method preload\n */\n preload() { return this.el_.preload; }\n\n /**\n * Set preload attribute\n *\n * @param {String} val Value for preload attribute\n * @method setPreload\n */\n setPreload(val) { this.el_.preload = val; }\n\n /**\n * Get autoplay attribute\n *\n * @return {String}\n * @method autoplay\n */\n autoplay() { return this.el_.autoplay; }\n\n /**\n * Set autoplay attribute\n *\n * @param {String} val Value for preload attribute\n * @method setAutoplay\n */\n setAutoplay(val) { this.el_.autoplay = val; }\n\n /**\n * Get controls attribute\n *\n * @return {String}\n * @method controls\n */\n controls() { return this.el_.controls; }\n\n /**\n * Set controls attribute\n *\n * @param {String} val Value for controls attribute\n * @method setControls\n */\n setControls(val) { this.el_.controls = !!val; }\n\n /**\n * Get loop attribute\n *\n * @return {String}\n * @method loop\n */\n loop() { return this.el_.loop; }\n\n /**\n * Set loop attribute\n *\n * @param {String} val Value for loop attribute\n * @method setLoop\n */\n setLoop(val) { this.el_.loop = val; }\n\n /**\n * Get error value\n *\n * @return {String}\n * @method error\n */\n error() { return this.el_.error; }\n\n /**\n * Get whether or not the player is in the \"seeking\" state\n *\n * @return {Boolean}\n * @method seeking\n */\n seeking() { return this.el_.seeking; }\n\n /**\n * Get a TimeRanges object that represents the\n * ranges of the media resource to which it is possible\n * for the user agent to seek.\n *\n * @return {TimeRangeObject}\n * @method seekable\n */\n seekable() { return this.el_.seekable; }\n\n /**\n * Get if video ended\n *\n * @return {Boolean}\n * @method ended\n */\n ended() { return this.el_.ended; }\n\n /**\n * Get the value of the muted content attribute\n * This attribute has no dynamic effect, it only\n * controls the default state of the element\n *\n * @return {Boolean}\n * @method defaultMuted\n */\n defaultMuted() { return this.el_.defaultMuted; }\n\n /**\n * Get desired speed at which the media resource is to play\n *\n * @return {Number}\n * @method playbackRate\n */\n playbackRate() { return this.el_.playbackRate; }\n\n /**\n * Returns a TimeRanges object that represents the ranges of the\n * media resource that the user agent has played.\n * @return {TimeRangeObject} the range of points on the media\n * timeline that has been reached through normal playback\n * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-media-played\n */\n played() { return this.el_.played; }\n\n /**\n * Set desired speed at which the media resource is to play\n *\n * @param {Number} val Speed at which the media resource is to play\n * @method setPlaybackRate\n */\n setPlaybackRate(val) { this.el_.playbackRate = val; }\n\n /**\n * Get the current state of network activity for the element, from\n * the list below\n * NETWORK_EMPTY (numeric value 0)\n * NETWORK_IDLE (numeric value 1)\n * NETWORK_LOADING (numeric value 2)\n * NETWORK_NO_SOURCE (numeric value 3)\n *\n * @return {Number}\n * @method networkState\n */\n networkState() { return this.el_.networkState; }\n\n /**\n * Get a value that expresses the current state of the element\n * with respect to rendering the current playback position, from\n * the codes in the list below\n * HAVE_NOTHING (numeric value 0)\n * HAVE_METADATA (numeric value 1)\n * HAVE_CURRENT_DATA (numeric value 2)\n * HAVE_FUTURE_DATA (numeric value 3)\n * HAVE_ENOUGH_DATA (numeric value 4)\n *\n * @return {Number}\n * @method readyState\n */\n readyState() { return this.el_.readyState; }\n\n /**\n * Get width of video\n *\n * @return {Number}\n * @method videoWidth\n */\n videoWidth() { return this.el_.videoWidth; }\n\n /**\n * Get height of video\n *\n * @return {Number}\n * @method videoHeight\n */\n videoHeight() { return this.el_.videoHeight; }\n\n /**\n * Get text tracks\n *\n * @return {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n return super.textTracks();\n }\n\n /**\n * Creates and returns a text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!this['featuresNativeTextTracks']) {\n return super.addTextTrack(kind, label, language);\n }\n\n return this.el_.addTextTrack(kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options={}) {\n if (!this['featuresNativeTextTracks']) {\n return super.addRemoteTextTrack(options);\n }\n\n var track = document.createElement('track');\n\n if (options['kind']) {\n track['kind'] = options['kind'];\n }\n if (options['label']) {\n track['label'] = options['label'];\n }\n if (options['language'] || options['srclang']) {\n track['srclang'] = options['language'] || options['srclang'];\n }\n if (options['default']) {\n track['default'] = options['default'];\n }\n if (options['id']) {\n track['id'] = options['id'];\n }\n if (options['src']) {\n track['src'] = options['src'];\n }\n\n this.el().appendChild(track);\n\n this.remoteTextTracks().addTrack_(track.track);\n\n return track;\n }\n\n /**\n * Remove remote text track from TextTrackList object\n *\n * @param {TextTrackObject} track Texttrack object to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n if (!this['featuresNativeTextTracks']) {\n return super.removeRemoteTextTrack(track);\n }\n\n var tracks, i;\n\n this.remoteTextTracks().removeTrack_(track);\n\n tracks = this.el().querySelectorAll('track');\n\n i = tracks.length;\n while (i--) {\n if (track === tracks[i] || track === tracks[i].track) {\n this.el().removeChild(tracks[i]);\n }\n }\n }\n\n}\n\n\n/* HTML5 Support Testing ---------------------------------------------------- */\n\n/*\n* Element for testing browser HTML5 video capabilities\n*\n* @type {Element}\n* @constant\n* @private\n*/\nHtml5.TEST_VID = document.createElement('video');\nlet track = document.createElement('track');\ntrack.kind = 'captions';\ntrack.srclang = 'en';\ntrack.label = 'English';\nHtml5.TEST_VID.appendChild(track);\n\n/*\n * Check if HTML5 video is supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.isSupported = function(){\n // IE9 with no Media Player is a LIAR! (#984)\n try {\n Html5.TEST_VID['volume'] = 0.5;\n } catch (e) {\n return false;\n }\n\n return !!Html5.TEST_VID.canPlayType;\n};\n\n// Add Source Handler pattern functions to this tech\nTech.withSourceHandlers(Html5);\n\n/*\n * The default native source handler.\n * This simply passes the source to the video element. Nothing fancy.\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the HTML5 tech\n */\nHtml5.nativeSourceHandler = {};\n\n/*\n * Check if the video element can handle the source natively\n *\n * @param {Object} source The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\nHtml5.nativeSourceHandler.canHandleSource = function(source){\n var match, ext;\n\n function canPlayType(type){\n // IE9 on Windows 7 without MediaPlayer throws an error here\n // https://github.com/videojs/video.js/issues/519\n try {\n return Html5.TEST_VID.canPlayType(type);\n } catch(e) {\n return '';\n }\n }\n\n // If a type was provided we should rely on that\n if (source.type) {\n return canPlayType(source.type);\n } else if (source.src) {\n // If no type, fall back to checking 'video/[EXTENSION]'\n ext = Url.getFileExtension(source.src);\n\n return canPlayType(`video/${ext}`);\n }\n\n return '';\n};\n\n/*\n * Pass the source to the video element\n * Adaptive source handlers will have more complicated workflows before passing\n * video data to the video element\n *\n * @param {Object} source The source object\n * @param {Html5} tech The instance of the Html5 tech\n */\nHtml5.nativeSourceHandler.handleSource = function(source, tech){\n tech.setSrc(source.src);\n};\n\n/*\n* Clean up the source handler when disposing the player or switching sources..\n* (no cleanup is needed when supporting the format natively)\n*/\nHtml5.nativeSourceHandler.dispose = function(){};\n\n// Register the native source handler\nHtml5.registerSourceHandler(Html5.nativeSourceHandler);\n\n/*\n * Check if the volume can be changed in this browser/device.\n * Volume cannot be changed in a lot of mobile devices.\n * Specifically, it can't be changed from 1 on iOS.\n *\n * @return {Boolean}\n */\nHtml5.canControlVolume = function(){\n var volume = Html5.TEST_VID.volume;\n Html5.TEST_VID.volume = (volume / 2) + 0.1;\n return volume !== Html5.TEST_VID.volume;\n};\n\n/*\n * Check if playbackRate is supported in this browser/device.\n *\n * @return {Number} [description]\n */\nHtml5.canControlPlaybackRate = function(){\n var playbackRate = Html5.TEST_VID.playbackRate;\n Html5.TEST_VID.playbackRate = (playbackRate / 2) + 0.1;\n return playbackRate !== Html5.TEST_VID.playbackRate;\n};\n\n/*\n * Check to see if native text tracks are supported by this browser/device\n *\n * @return {Boolean}\n */\nHtml5.supportsNativeTextTracks = function() {\n var supportsTextTracks;\n\n // Figure out native text track support\n // If mode is a number, we cannot change it because it'll disappear from view.\n // Browsers with numeric modes include IE10 and older (<=2013) samsung android models.\n // Firefox isn't playing nice either with modifying the mode\n // TODO: Investigate firefox: https://github.com/videojs/video.js/issues/1862\n supportsTextTracks = !!Html5.TEST_VID.textTracks;\n if (supportsTextTracks && Html5.TEST_VID.textTracks.length > 0) {\n supportsTextTracks = typeof Html5.TEST_VID.textTracks[0]['mode'] !== 'number';\n }\n if (supportsTextTracks && browser.IS_FIREFOX) {\n supportsTextTracks = false;\n }\n if (supportsTextTracks && !('onremovetrack' in Html5.TEST_VID.textTracks)) {\n supportsTextTracks = false;\n }\n\n return supportsTextTracks;\n};\n\n/**\n * An array of events available on the Html5 tech.\n *\n * @private\n * @type {Array}\n */\nHtml5.Events = [\n 'loadstart',\n 'suspend',\n 'abort',\n 'error',\n 'emptied',\n 'stalled',\n 'loadedmetadata',\n 'loadeddata',\n 'canplay',\n 'canplaythrough',\n 'playing',\n 'waiting',\n 'seeking',\n 'seeked',\n 'ended',\n 'durationchange',\n 'timeupdate',\n 'progress',\n 'play',\n 'pause',\n 'ratechange',\n 'volumechange'\n];\n\n/*\n * Set the tech's volume control support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresVolumeControl'] = Html5.canControlVolume();\n\n/*\n * Set the tech's playbackRate support status\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresPlaybackRate'] = Html5.canControlPlaybackRate();\n\n/*\n * Set the tech's status on moving the video element.\n * In iOS, if you move a video element in the DOM, it breaks video playback.\n *\n * @type {Boolean}\n */\nHtml5.prototype['movingMediaElementInDOM'] = !browser.IS_IOS;\n\n/*\n * Set the the tech's fullscreen resize support status.\n * HTML video is able to automatically resize when going to fullscreen.\n * (No longer appears to be used. Can probably be removed.)\n */\nHtml5.prototype['featuresFullscreenResize'] = true;\n\n/*\n * Set the tech's progress event support status\n * (this disables the manual progress events of the Tech)\n */\nHtml5.prototype['featuresProgressEvents'] = true;\n\n/*\n * Sets the tech's status on native text track support\n *\n * @type {Boolean}\n */\nHtml5.prototype['featuresNativeTextTracks'] = Html5.supportsNativeTextTracks();\n\n// HTML5 Feature detection and Device Fixes --------------------------------- //\nlet canPlayType;\nconst mpegurlRE = /^application\\/(?:x-|vnd\\.apple\\.)mpegurl/i;\nconst mp4RE = /^video\\/mp4/i;\n\nHtml5.patchCanPlayType = function() {\n // Android 4.0 and above can play HLS to some extent but it reports being unable to do so\n if (browser.ANDROID_VERSION >= 4.0) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type) {\n if (type && mpegurlRE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n\n // Override Android 2.2 and less canPlayType method which is broken\n if (browser.IS_OLD_ANDROID) {\n if (!canPlayType) {\n canPlayType = Html5.TEST_VID.constructor.prototype.canPlayType;\n }\n\n Html5.TEST_VID.constructor.prototype.canPlayType = function(type){\n if (type && mp4RE.test(type)) {\n return 'maybe';\n }\n return canPlayType.call(this, type);\n };\n }\n};\n\nHtml5.unpatchCanPlayType = function() {\n var r = Html5.TEST_VID.constructor.prototype.canPlayType;\n Html5.TEST_VID.constructor.prototype.canPlayType = canPlayType;\n canPlayType = null;\n return r;\n};\n\n// by default, patch the video element\nHtml5.patchCanPlayType();\n\nHtml5.disposeMediaElement = function(el){\n if (!el) { return; }\n\n if (el.parentNode) {\n el.parentNode.removeChild(el);\n }\n\n // remove any child track or source nodes to prevent their loading\n while(el.hasChildNodes()) {\n el.removeChild(el.firstChild);\n }\n\n // remove any src reference. not setting `src=''` because that causes a warning\n // in firefox\n el.removeAttribute('src');\n\n // force the media element to update its loading state by calling load()\n // however IE on Windows 7N has a bug that throws an error so need a try/catch (#793)\n if (typeof el.load === 'function') {\n // wrapping in an iife so it's not deoptimized (#1060#discussion_r10324473)\n (function() {\n try {\n el.load();\n } catch (e) {\n // not supported\n }\n })();\n }\n};\n\nComponent.registerComponent('Html5', Html5);\nexport default Html5;\n","/**\n * @file loader.js\n */\nimport Component from '../component';\nimport window from 'global/window';\nimport toTitleCase from '../utils/to-title-case.js';\n\n/**\n * The Media Loader is the component that decides which playback technology to load\n * when the player is initialized.\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class MediaLoader\n */\nclass MediaLoader extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n // If there are no sources when the player is initialized,\n // load the first supported playback technology.\n\n if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) {\n for (let i=0, j=options.playerOptions['techOrder']; i this.trigger('texttrackchange');\n\n updateDisplay();\n\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n track.removeEventListener('cuechange', updateDisplay);\n if (track.mode === 'showing') {\n track.addEventListener('cuechange', updateDisplay);\n }\n }\n });\n\n tracks.addEventListener('change', textTracksChanges);\n\n this.on('dispose', function() {\n tracks.removeEventListener('change', textTracksChanges);\n });\n }\n\n /*\n * Provide default methods for text tracks.\n *\n * Html5 tech overrides these.\n */\n\n /**\n * Get texttracks\n *\n * @returns {TextTrackList}\n * @method textTracks\n */\n textTracks() {\n this.textTracks_ = this.textTracks_ || new TextTrackList();\n return this.textTracks_;\n }\n\n /**\n * Get remote texttracks\n *\n * @returns {TextTrackList}\n * @method remoteTextTracks\n */\n remoteTextTracks() {\n this.remoteTextTracks_ = this.remoteTextTracks_ || new TextTrackList();\n return this.remoteTextTracks_;\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {String} kind Text track kind (subtitles, captions, descriptions\n * chapters and metadata)\n * @param {String=} label Label to identify the text track\n * @param {String=} language Two letter language abbreviation\n * @return {TextTrackObject}\n * @method addTextTrack\n */\n addTextTrack(kind, label, language) {\n if (!kind) {\n throw new Error('TextTrack kind is required but was not provided');\n }\n\n return createTrackHelper(this, kind, label, language);\n }\n\n /**\n * Creates and returns a remote text track object\n *\n * @param {Object} options The object should contain values for\n * kind, language, label and src (location of the WebVTT file)\n * @return {TextTrackObject}\n * @method addRemoteTextTrack\n */\n addRemoteTextTrack(options) {\n let track = createTrackHelper(this, options.kind, options.label, options.language, options);\n this.remoteTextTracks().addTrack_(track);\n return {\n track: track\n };\n }\n\n /**\n * Remove remote texttrack\n *\n * @param {TextTrackObject} track Texttrack to remove\n * @method removeRemoteTextTrack\n */\n removeRemoteTextTrack(track) {\n this.textTracks().removeTrack_(track);\n this.remoteTextTracks().removeTrack_(track);\n }\n\n /**\n * Provide a default setPoster method for techs\n * Poster support for techs should be optional, so we don't want techs to\n * break if they don't have a way to set a poster.\n *\n * @method setPoster\n */\n setPoster() {}\n\n}\n\n/*\n * List of associated text tracks\n *\n * @type {Array}\n * @private\n */\nTech.prototype.textTracks_;\n\nvar createTrackHelper = function(self, kind, label, language, options={}) {\n let tracks = self.textTracks();\n\n options.kind = kind;\n\n if (label) {\n options.label = label;\n }\n if (language) {\n options.language = language;\n }\n options.tech = self;\n\n let track = new TextTrack(options);\n tracks.addTrack_(track);\n\n return track;\n};\n\nTech.prototype.featuresVolumeControl = true;\n\n// Resizing plugins using request fullscreen reloads the plugin\nTech.prototype.featuresFullscreenResize = false;\nTech.prototype.featuresPlaybackRate = false;\n\n// Optional events that we can manually mimic with timers\n// currently not triggered by video-js-swf\nTech.prototype.featuresProgressEvents = false;\nTech.prototype.featuresTimeupdateEvents = false;\n\nTech.prototype.featuresNativeTextTracks = false;\n\n/*\n * A functional mixin for techs that want to use the Source Handler pattern.\n *\n * ##### EXAMPLE:\n *\n * Tech.withSourceHandlers.call(MyTech);\n *\n */\nTech.withSourceHandlers = function(_Tech){\n /*\n * Register a source handler\n * Source handlers are scripts for handling specific formats.\n * The source handler pattern is used for adaptive formats (HLS, DASH) that\n * manually load video data and feed it into a Source Buffer (Media Source Extensions)\n * @param {Function} handler The source handler\n * @param {Boolean} first Register it before any existing handlers\n */\n _Tech.registerSourceHandler = function(handler, index){\n let handlers = _Tech.sourceHandlers;\n\n if (!handlers) {\n handlers = _Tech.sourceHandlers = [];\n }\n\n if (index === undefined) {\n // add to the end of the list\n index = handlers.length;\n }\n\n handlers.splice(index, 0, handler);\n };\n\n /*\n * Return the first source handler that supports the source\n * TODO: Answer question: should 'probably' be prioritized over 'maybe'\n * @param {Object} source The source object\n * @returns {Object} The first source handler that supports the source\n * @returns {null} Null if no source handler is found\n */\n _Tech.selectSourceHandler = function(source){\n let handlers = _Tech.sourceHandlers || [];\n let can;\n\n for (let i = 0; i < handlers.length; i++) {\n can = handlers[i].canHandleSource(source);\n\n if (can) {\n return handlers[i];\n }\n }\n\n return null;\n };\n\n /*\n * Check if the tech can support the given source\n * @param {Object} srcObj The source object\n * @return {String} 'probably', 'maybe', or '' (empty string)\n */\n _Tech.canPlaySource = function(srcObj){\n let sh = _Tech.selectSourceHandler(srcObj);\n\n if (sh) {\n return sh.canHandleSource(srcObj);\n }\n\n return '';\n };\n\n let originalSeekable = _Tech.prototype.seekable;\n\n // when a source handler is registered, prefer its implementation of\n // seekable when present.\n _Tech.prototype.seekable = function() {\n if (this.sourceHandler_ && this.sourceHandler_.seekable) {\n return this.sourceHandler_.seekable();\n }\n return originalSeekable.call(this);\n };\n\n /*\n * Create a function for setting the source using a source object\n * and source handlers.\n * Should never be called unless a source handler was found.\n * @param {Object} source A source object with src and type keys\n * @return {Tech} self\n */\n _Tech.prototype.setSource = function(source){\n let sh = _Tech.selectSourceHandler(source);\n\n if (!sh) {\n // Fall back to a native source hander when unsupported sources are\n // deliberately set\n if (_Tech.nativeSourceHandler) {\n sh = _Tech.nativeSourceHandler;\n } else {\n log.error('No source hander found for the current source.');\n }\n }\n\n // Dispose any existing source handler\n this.disposeSourceHandler();\n this.off('dispose', this.disposeSourceHandler);\n\n this.currentSource_ = source;\n this.sourceHandler_ = sh.handleSource(source, this);\n this.on('dispose', this.disposeSourceHandler);\n\n return this;\n };\n\n /*\n * Clean up any existing source handler\n */\n _Tech.prototype.disposeSourceHandler = function(){\n if (this.sourceHandler_ && this.sourceHandler_.dispose) {\n this.sourceHandler_.dispose();\n }\n };\n\n};\n\nComponent.registerComponent('Tech', Tech);\n// Old name for Tech\nComponent.registerComponent('MediaTechController', Tech);\nexport default Tech;\n","/**\n * @file text-track-cue-list.js\n */\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist\n *\n * interface TextTrackCueList {\n * readonly attribute unsigned long length;\n * getter TextTrackCue (unsigned long index);\n * TextTrackCue? getCueById(DOMString id);\n * };\n */\n\nlet TextTrackCueList = function(cues) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackCueList.prototype) {\n list[prop] = TextTrackCueList.prototype[prop];\n }\n }\n\n TextTrackCueList.prototype.setCues_.call(list, cues);\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.length_;\n }\n });\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackCueList.prototype.setCues_ = function(cues) {\n let oldLength = this.length || 0;\n let i = 0;\n let l = cues.length;\n\n this.cues_ = cues;\n this.length_ = cues.length;\n\n let defineProp = function(i) {\n if (!(''+i in this)) {\n Object.defineProperty(this, '' + i, {\n get: function() {\n return this.cues_[i];\n }\n });\n }\n };\n\n if (oldLength < l) {\n i = oldLength;\n\n for(; i < l; i++) {\n defineProp.call(this, i);\n }\n }\n};\n\nTextTrackCueList.prototype.getCueById = function(id) {\n let result = null;\n for (let i = 0, l = this.length; i < l; i++) {\n let cue = this[i];\n if (cue.id === id) {\n result = cue;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackCueList;\n","/**\n * @file text-track-display.js\n */\nimport Component from '../component';\nimport Menu from '../menu/menu.js';\nimport MenuItem from '../menu/menu-item.js';\nimport MenuButton from '../menu/menu-button.js';\nimport * as Fn from '../utils/fn.js';\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst darkGray = '#222';\nconst lightGray = '#ccc';\nconst fontMap = {\n monospace: 'monospace',\n sansSerif: 'sans-serif',\n serif: 'serif',\n monospaceSansSerif: '\"Andale Mono\", \"Lucida Console\", monospace',\n monospaceSerif: '\"Courier New\", monospace',\n proportionalSansSerif: 'sans-serif',\n proportionalSerif: 'serif',\n casual: '\"Comic Sans MS\", Impact, fantasy',\n script: '\"Monotype Corsiva\", cursive',\n smallcaps: '\"Andale Mono\", \"Lucida Console\", monospace, sans-serif'\n};\n\n/**\n * The component for displaying text track cues\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @param {Function=} ready Ready callback function\n * @extends Component\n * @class TextTrackDisplay\n */\nclass TextTrackDisplay extends Component {\n\n constructor(player, options, ready){\n super(player, options, ready);\n\n player.on('loadstart', Fn.bind(this, this.toggleDisplay));\n player.on('texttrackchange', Fn.bind(this, this.updateDisplay));\n\n // This used to be called during player init, but was causing an error\n // if a track should show by default and the display hadn't loaded yet.\n // Should probably be moved to an external track loader when we support\n // tracks that don't need a display.\n player.ready(Fn.bind(this, function() {\n if (player.tech_ && player.tech_['featuresNativeTextTracks']) {\n this.hide();\n return;\n }\n\n player.on('fullscreenchange', Fn.bind(this, this.updateDisplay));\n\n let tracks = this.options_.playerOptions['tracks'] || [];\n for (let i = 0; i < tracks.length; i++) {\n let track = tracks[i];\n this.player_.addRemoteTextTrack(track);\n }\n }));\n }\n\n /**\n * Toggle display texttracks\n *\n * @method toggleDisplay\n */\n toggleDisplay() {\n if (this.player_.tech_ && this.player_.tech_['featuresNativeTextTracks']) {\n this.hide();\n } else {\n this.show();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-text-track-display'\n });\n }\n\n /**\n * Clear display texttracks\n *\n * @method clearDisplay\n */\n clearDisplay() {\n if (typeof window['WebVTT'] === 'function') {\n window['WebVTT']['processCues'](window, [], this.el_);\n }\n }\n\n /**\n * Update display texttracks\n *\n * @method updateDisplay\n */\n updateDisplay() {\n var tracks = this.player_.textTracks();\n\n this.clearDisplay();\n\n if (!tracks) {\n return;\n }\n\n for (let i=0; i < tracks.length; i++) {\n let track = tracks[i];\n if (track['mode'] === 'showing') {\n this.updateForTrack(track);\n }\n }\n }\n\n /**\n * Add texttrack to texttrack list\n *\n * @param {TextTrackObject} track Texttrack object to be added to list\n * @method updateForTrack\n */\n updateForTrack(track) {\n if (typeof window['WebVTT'] !== 'function' || !track['activeCues']) {\n return;\n }\n\n let overrides = this.player_['textTrackSettings'].getValues();\n\n let cues = [];\n for (let i = 0; i < track['activeCues'].length; i++) {\n cues.push(track['activeCues'][i]);\n }\n\n window['WebVTT']['processCues'](window, track['activeCues'], this.el_);\n\n let i = cues.length;\n while (i--) {\n let cueDiv = cues[i].displayState;\n if (overrides.color) {\n cueDiv.firstChild.style.color = overrides.color;\n }\n if (overrides.textOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'color',\n constructColor(overrides.color || '#fff',\n overrides.textOpacity));\n }\n if (overrides.backgroundColor) {\n cueDiv.firstChild.style.backgroundColor = overrides.backgroundColor;\n }\n if (overrides.backgroundOpacity) {\n tryUpdateStyle(cueDiv.firstChild,\n 'backgroundColor',\n constructColor(overrides.backgroundColor || '#000',\n overrides.backgroundOpacity));\n }\n if (overrides.windowColor) {\n if (overrides.windowOpacity) {\n tryUpdateStyle(cueDiv,\n 'backgroundColor',\n constructColor(overrides.windowColor, overrides.windowOpacity));\n } else {\n cueDiv.style.backgroundColor = overrides.windowColor;\n }\n }\n if (overrides.edgeStyle) {\n if (overrides.edgeStyle === 'dropshadow') {\n cueDiv.firstChild.style.textShadow = `2px 2px 3px ${darkGray}, 2px 2px 4px ${darkGray}, 2px 2px 5px ${darkGray}`;\n } else if (overrides.edgeStyle === 'raised') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${darkGray}, 2px 2px ${darkGray}, 3px 3px ${darkGray}`;\n } else if (overrides.edgeStyle === 'depressed') {\n cueDiv.firstChild.style.textShadow = `1px 1px ${lightGray}, 0 1px ${lightGray}, -1px -1px ${darkGray}, 0 -1px ${darkGray}`;\n } else if (overrides.edgeStyle === 'uniform') {\n cueDiv.firstChild.style.textShadow = `0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}, 0 0 4px ${darkGray}`;\n }\n }\n if (overrides.fontPercent && overrides.fontPercent !== 1) {\n const fontSize = window.parseFloat(cueDiv.style.fontSize);\n cueDiv.style.fontSize = (fontSize * overrides.fontPercent) + 'px';\n cueDiv.style.height = 'auto';\n cueDiv.style.top = 'auto';\n cueDiv.style.bottom = '2px';\n }\n if (overrides.fontFamily && overrides.fontFamily !== 'default') {\n if (overrides.fontFamily === 'small-caps') {\n cueDiv.firstChild.style.fontVariant = 'small-caps';\n } else {\n cueDiv.firstChild.style.fontFamily = fontMap[overrides.fontFamily];\n }\n }\n }\n }\n\n}\n\n/**\n* Add cue HTML to display\n*\n* @param {Number} color Hex number for color, like #f0e\n* @param {Number} opacity Value for opacity,0.0 - 1.0\n* @return {RGBAColor} In the form 'rgba(255, 0, 0, 0.3)'\n* @method constructColor\n*/\nfunction constructColor(color, opacity) {\n return 'rgba(' +\n // color looks like \"#f0e\"\n parseInt(color[1] + color[1], 16) + ',' +\n parseInt(color[2] + color[2], 16) + ',' +\n parseInt(color[3] + color[3], 16) + ',' +\n opacity + ')';\n}\n\n/**\n * Try to update style\n * Some style changes will throw an error, particularly in IE8. Those should be noops.\n *\n * @param {Element} el The element to be styles\n * @param {CSSProperty} style The CSS property to be styled\n * @param {CSSStyle} rule The actual style to be applied to the property\n * @method tryUpdateStyle\n */\nfunction tryUpdateStyle(el, style, rule) {\n //\n try {\n el.style[style] = rule;\n } catch (e) {}\n}\n\nComponent.registerComponent('TextTrackDisplay', TextTrackDisplay);\nexport default TextTrackDisplay;\n","/**\n * @file text-track-enums.js\n *\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode\n *\n * enum TextTrackMode { \"disabled\", \"hidden\", \"showing\" };\n */\nvar TextTrackMode = {\n 'disabled': 'disabled',\n 'hidden': 'hidden',\n 'showing': 'showing'\n};\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind\n *\n * enum TextTrackKind { \"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\" };\n */\nvar TextTrackKind = {\n 'subtitles': 'subtitles',\n 'captions': 'captions',\n 'descriptions': 'descriptions',\n 'chapters': 'chapters',\n 'metadata': 'metadata'\n};\n\nexport { TextTrackMode, TextTrackKind };\n","/**\n * Utilities for capturing text track state and re-creating tracks\n * based on a capture.\n *\n * @file text-track-list-converter.js\n */\n\n/**\n * Examine a single text track and return a JSON-compatible javascript\n * object that represents the text track's state.\n * @param track {TextTrackObject} the text track to query\n * @return {Object} a serializable javascript representation of the\n * @private\n */\nlet trackToJson_ = function(track) {\n return {\n kind: track.kind,\n label: track.label,\n language: track.language,\n id: track.id,\n inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType,\n mode: track.mode,\n cues: track.cues && Array.prototype.map.call(track.cues, function(cue) {\n return {\n startTime: cue.startTime,\n endTime: cue.endTime,\n text: cue.text,\n id: cue.id\n };\n }),\n src: track.src\n };\n};\n\n/**\n * Examine a tech and return a JSON-compatible javascript array that\n * represents the state of all text tracks currently configured. The\n * return array is compatible with `jsonToTextTracks`.\n * @param tech {tech} the tech object to query\n * @return {Array} a serializable javascript representation of the\n * @function textTracksToJson\n */\nlet textTracksToJson = function(tech) {\n let trackEls = tech.el().querySelectorAll('track');\n\n let trackObjs = Array.prototype.map.call(trackEls, (t) => t.track);\n let tracks = Array.prototype.map.call(trackEls, function(trackEl) {\n let json = trackToJson_(trackEl.track);\n json.src = trackEl.src;\n return json;\n });\n\n return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function(track) {\n return trackObjs.indexOf(track) === -1;\n }).map(trackToJson_));\n};\n\n/**\n * Creates a set of remote text tracks on a tech based on an array of\n * javascript text track representations.\n * @param json {Array} an array of text track representation objects,\n * like those that would be produced by `textTracksToJson`\n * @param tech {tech} the tech to create text tracks on\n * @function jsonToTextTracks\n */\nlet jsonToTextTracks = function(json, tech) {\n json.forEach(function(track) {\n let addedTrack = tech.addRemoteTextTrack(track).track;\n if (!track.src && track.cues) {\n track.cues.forEach((cue) => addedTrack.addCue(cue));\n }\n });\n\n return tech.textTracks();\n};\n\nexport default {textTracksToJson, jsonToTextTracks, trackToJson_};\n","/**\n * @file text-track-list.js\n */\nimport EventTarget from '../event-target';\nimport * as Fn from '../utils/fn.js';\nimport * as browser from '../utils/browser.js';\nimport document from 'global/document';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist\n *\n * interface TextTrackList : EventTarget {\n * readonly attribute unsigned long length;\n * getter TextTrack (unsigned long index);\n * TextTrack? getTrackById(DOMString id);\n *\n * attribute EventHandler onchange;\n * attribute EventHandler onaddtrack;\n * attribute EventHandler onremovetrack;\n * };\n */\nlet TextTrackList = function(tracks) {\n let list = this;\n\n if (browser.IS_IE8) {\n list = document.createElement('custom');\n\n for (let prop in TextTrackList.prototype) {\n list[prop] = TextTrackList.prototype[prop];\n }\n }\n\n tracks = tracks || [];\n list.tracks_ = [];\n\n Object.defineProperty(list, 'length', {\n get: function() {\n return this.tracks_.length;\n }\n });\n\n for (let i = 0; i < tracks.length; i++) {\n list.addTrack_(tracks[i]);\n }\n\n if (browser.IS_IE8) {\n return list;\n }\n};\n\nTextTrackList.prototype = Object.create(EventTarget.prototype);\nTextTrackList.prototype.constructor = TextTrackList;\n\n/*\n * change - One or more tracks in the track list have been enabled or disabled.\n * addtrack - A track has been added to the track list.\n * removetrack - A track has been removed from the track list.\n */\nTextTrackList.prototype.allowedEvents_ = {\n 'change': 'change',\n 'addtrack': 'addtrack',\n 'removetrack': 'removetrack'\n};\n\n// emulate attribute EventHandler support to allow for feature detection\nfor (let event in TextTrackList.prototype.allowedEvents_) {\n TextTrackList.prototype['on' + event] = null;\n}\n\nTextTrackList.prototype.addTrack_ = function(track) {\n let index = this.tracks_.length;\n if (!(''+index in this)) {\n Object.defineProperty(this, index, {\n get: function() {\n return this.tracks_[index];\n }\n });\n }\n\n track.addEventListener('modechange', Fn.bind(this, function() {\n this.trigger('change');\n }));\n this.tracks_.push(track);\n\n this.trigger({\n type: 'addtrack',\n track: track\n });\n};\n\nTextTrackList.prototype.removeTrack_ = function(rtrack) {\n let result = null;\n let track;\n\n for (let i = 0, l = this.length; i < l; i++) {\n track = this[i];\n if (track === rtrack) {\n this.tracks_.splice(i, 1);\n break;\n }\n }\n\n this.trigger({\n type: 'removetrack',\n track: track\n });\n};\n\nTextTrackList.prototype.getTrackById = function(id) {\n let result = null;\n\n for (let i = 0, l = this.length; i < l; i++) {\n let track = this[i];\n if (track.id === id) {\n result = track;\n break;\n }\n }\n\n return result;\n};\n\nexport default TextTrackList;\n","/**\n * @file text-track-settings.js\n */\nimport Component from '../component';\nimport * as Events from '../utils/events.js';\nimport * as Fn from '../utils/fn.js';\nimport log from '../utils/log.js';\nimport safeParseTuple from 'safe-json-parse/tuple';\nimport window from 'global/window';\n\n/**\n * Manipulate settings of texttracks\n *\n * @param {Object} player Main Player\n * @param {Object=} options Object of option names and values\n * @extends Component\n * @class TextTrackSettings\n */\nclass TextTrackSettings extends Component {\n\n constructor(player, options) {\n super(player, options);\n this.hide();\n\n // Grab `persistTextTrackSettings` from the player options if not passed in child options\n if (options.persistTextTrackSettings === undefined) {\n this.options_.persistTextTrackSettings = this.options_.playerOptions.persistTextTrackSettings;\n }\n\n Events.on(this.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function() {\n this.saveSettings();\n this.hide();\n }));\n\n Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function() {\n this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0;\n this.el().querySelector('.window-color > select').selectedIndex = 0;\n this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0;\n this.el().querySelector('.vjs-edge-style select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-family select').selectedIndex = 0;\n this.el().querySelector('.vjs-font-percent select').selectedIndex = 2;\n this.updateDisplay();\n }));\n\n Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay));\n Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay));\n\n if (this.options_.persistTextTrackSettings) {\n this.restoreSettings();\n }\n }\n\n /**\n * Create the component's DOM element\n *\n * @return {Element}\n * @method createEl\n */\n createEl() {\n return super.createEl('div', {\n className: 'vjs-caption-settings vjs-modal-overlay',\n innerHTML: captionOptionsMenuTemplate()\n });\n }\n\n /**\n * Get texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @return {Object} \n * @method getValues\n */\n getValues() {\n const el = this.el();\n\n const textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select'));\n const fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select'));\n const fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select'));\n const textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select'));\n const bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select'));\n const bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select'));\n const windowColor = getSelectedOptionValue(el.querySelector('.window-color > select'));\n const windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select'));\n const fontPercent = window['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select')));\n\n let result = {\n 'backgroundOpacity': bgOpacity,\n 'textOpacity': textOpacity,\n 'windowOpacity': windowOpacity,\n 'edgeStyle': textEdge,\n 'fontFamily': fontFamily,\n 'color': fgColor,\n 'backgroundColor': bgColor,\n 'windowColor': windowColor,\n 'fontPercent': fontPercent\n };\n for (let name in result) {\n if (result[name] === '' || result[name] === 'none' || (name === 'fontPercent' && result[name] === 1.00)) {\n delete result[name];\n }\n }\n return result;\n }\n\n /**\n * Set texttrack settings \n * Settings are\n * .vjs-edge-style\n * .vjs-font-family\n * .vjs-fg-color\n * .vjs-text-opacity\n * .vjs-bg-color\n * .vjs-bg-opacity\n * .window-color\n * .vjs-window-opacity \n *\n * @param {Object} values Object with texttrack setting values\n * @method setValues\n */\n setValues(values) {\n const el = this.el();\n\n setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle);\n setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily);\n setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color);\n setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity);\n setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor);\n setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity);\n setSelectedOption(el.querySelector('.window-color > select'), values.windowColor);\n setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity);\n\n let fontPercent = values.fontPercent;\n\n if (fontPercent) {\n fontPercent = fontPercent.toFixed(2);\n }\n\n setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent);\n }\n\n /**\n * Restore texttrack settings \n *\n * @method restoreSettings\n */\n restoreSettings() {\n let [err, values] = safeParseTuple(window.localStorage.getItem('vjs-text-track-settings'));\n\n if (err) {\n log.error(err);\n }\n\n if (values) {\n this.setValues(values);\n }\n }\n\n /**\n * Save texttrack settings to local storage \n *\n * @method saveSettings\n */\n saveSettings() {\n if (!this.options_.persistTextTrackSettings) {\n return;\n }\n\n let values = this.getValues();\n try {\n if (Object.getOwnPropertyNames(values).length > 0) {\n window.localStorage.setItem('vjs-text-track-settings', JSON.stringify(values));\n } else {\n window.localStorage.removeItem('vjs-text-track-settings');\n }\n } catch (e) {}\n }\n\n /**\n * Update display of texttrack settings \n *\n * @method updateDisplay\n */\n updateDisplay() {\n let ttDisplay = this.player_.getChild('textTrackDisplay');\n if (ttDisplay) {\n ttDisplay.updateDisplay();\n }\n }\n\n}\n\nComponent.registerComponent('TextTrackSettings', TextTrackSettings);\n\nfunction getSelectedOptionValue(target) {\n let selectedOption;\n // not all browsers support selectedOptions, so, fallback to options\n if (target.selectedOptions) {\n selectedOption = target.selectedOptions[0];\n } else if (target.options) {\n selectedOption = target.options[target.options.selectedIndex];\n }\n\n return selectedOption.value;\n}\n\nfunction setSelectedOption(target, value) {\n if (!value) {\n return;\n }\n\n let i;\n for (i = 0; i < target.options.length; i++) {\n const option = target.options[i];\n if (option.value === value) {\n break;\n }\n }\n\n target.selectedIndex = i;\n}\n\nfunction captionOptionsMenuTemplate() {\n let template = `
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    `;\n\n return template;\n}\n\nexport default TextTrackSettings;\n","/**\n * @file text-track.js\n */\nimport TextTrackCueList from './text-track-cue-list';\nimport * as Fn from '../utils/fn.js';\nimport * as Guid from '../utils/guid.js';\nimport * as browser from '../utils/browser.js';\nimport * as TextTrackEnum from './text-track-enums';\nimport log from '../utils/log.js';\nimport EventTarget from '../event-target';\nimport document from 'global/document';\nimport window from 'global/window';\nimport { isCrossOrigin } from '../utils/url.js';\nimport XHR from 'xhr';\n\n/*\n * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack\n *\n * interface TextTrack : EventTarget {\n * readonly attribute TextTrackKind kind;\n * readonly attribute DOMString label;\n * readonly attribute DOMString language;\n *\n * readonly attribute DOMString id;\n * readonly attribute DOMString inBandMetadataTrackDispatchType;\n *\n * attribute TextTrackMode mode;\n *\n * readonly attribute TextTrackCueList? cues;\n * readonly attribute TextTrackCueList? activeCues;\n *\n * void addCue(TextTrackCue cue);\n * void removeCue(TextTrackCue cue);\n *\n * attribute EventHandler oncuechange;\n * };\n */\nlet TextTrack = function(options={}) {\n if (!options.tech) {\n throw new Error('A tech was not provided.');\n }\n\n let tt = this;\n if (browser.IS_IE8) {\n tt = document.createElement('custom');\n\n for (let prop in TextTrack.prototype) {\n tt[prop] = TextTrack.prototype[prop];\n }\n }\n\n tt.tech_ = options.tech;\n\n let mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled';\n let kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles';\n let label = options['label'] || '';\n let language = options['language'] || options['srclang'] || '';\n let id = options['id'] || 'vjs_text_track_' + Guid.newGUID();\n\n if (kind === 'metadata' || kind === 'chapters') {\n mode = 'hidden';\n }\n\n tt.cues_ = [];\n tt.activeCues_ = [];\n\n let cues = new TextTrackCueList(tt.cues_);\n let activeCues = new TextTrackCueList(tt.activeCues_);\n\n let changed = false;\n let timeupdateHandler = Fn.bind(tt, function() {\n this['activeCues'];\n if (changed) {\n this['trigger']('cuechange');\n changed = false;\n }\n });\n if (mode !== 'disabled') {\n tt.tech_.on('timeupdate', timeupdateHandler);\n }\n\n Object.defineProperty(tt, 'kind', {\n get: function() {\n return kind;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'label', {\n get: function() {\n return label;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'language', {\n get: function() {\n return language;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'id', {\n get: function() {\n return id;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'mode', {\n get: function() {\n return mode;\n },\n set: function(newMode) {\n if (!TextTrackEnum.TextTrackMode[newMode]) {\n return;\n }\n mode = newMode;\n if (mode === 'showing') {\n this.tech_.on('timeupdate', timeupdateHandler);\n }\n this.trigger('modechange');\n }\n });\n\n Object.defineProperty(tt, 'cues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n return cues;\n },\n set: Function.prototype\n });\n\n Object.defineProperty(tt, 'activeCues', {\n get: function() {\n if (!this.loaded_) {\n return null;\n }\n\n if (this['cues'].length === 0) {\n return activeCues; // nothing to do\n }\n\n let ct = this.tech_.currentTime();\n let active = [];\n\n for (let i = 0, l = this['cues'].length; i < l; i++) {\n let cue = this['cues'][i];\n if (cue['startTime'] <= ct && cue['endTime'] >= ct) {\n active.push(cue);\n } else if (cue['startTime'] === cue['endTime'] && cue['startTime'] <= ct && cue['startTime'] + 0.5 >= ct) {\n active.push(cue);\n }\n }\n\n changed = false;\n\n if (active.length !== this.activeCues_.length) {\n changed = true;\n } else {\n for (let i = 0; i < active.length; i++) {\n if (indexOf.call(this.activeCues_, active[i]) === -1) {\n changed = true;\n }\n }\n }\n\n this.activeCues_ = active;\n activeCues.setCues_(this.activeCues_);\n\n return activeCues;\n },\n set: Function.prototype\n });\n\n if (options.src) {\n tt.src = options.src;\n loadTrack(options.src, tt);\n } else {\n tt.loaded_ = true;\n }\n\n if (browser.IS_IE8) {\n return tt;\n }\n};\n\nTextTrack.prototype = Object.create(EventTarget.prototype);\nTextTrack.prototype.constructor = TextTrack;\n\n/*\n * cuechange - One or more cues in the track have become active or stopped being active.\n */\nTextTrack.prototype.allowedEvents_ = {\n 'cuechange': 'cuechange'\n};\n\nTextTrack.prototype.addCue = function(cue) {\n let tracks = this.tech_.textTracks();\n\n if (tracks) {\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i] !== this) {\n tracks[i].removeCue(cue);\n }\n }\n }\n\n this.cues_.push(cue);\n this['cues'].setCues_(this.cues_);\n};\n\nTextTrack.prototype.removeCue = function(removeCue) {\n let removed = false;\n\n for (let i = 0, l = this.cues_.length; i < l; i++) {\n let cue = this.cues_[i];\n if (cue === removeCue) {\n this.cues_.splice(i, 1);\n removed = true;\n }\n }\n\n if (removed) {\n this.cues.setCues_(this.cues_);\n }\n};\n\n/*\n* Downloading stuff happens below this point\n*/\nvar parseCues = function(srcContent, track) {\n if (typeof window['WebVTT'] !== 'function') {\n //try again a bit later\n return window.setTimeout(function() {\n parseCues(srcContent, track);\n }, 25);\n }\n\n let parser = new window['WebVTT']['Parser'](window, window['vttjs'], window['WebVTT']['StringDecoder']());\n\n parser['oncue'] = function(cue) {\n track.addCue(cue);\n };\n parser['onparsingerror'] = function(error) {\n log.error(error);\n };\n\n parser['parse'](srcContent);\n parser['flush']();\n};\n\nvar loadTrack = function(src, track) {\n let opts = {\n uri: src\n };\n\n let crossOrigin = isCrossOrigin(src);\n if (crossOrigin) {\n opts.cors = crossOrigin;\n }\n\n XHR(opts, Fn.bind(this, function(err, response, responseBody){\n if (err) {\n return log.error(err, response);\n }\n\n track.loaded_ = true;\n parseCues(responseBody, track);\n }));\n};\n\nvar indexOf = function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n let O = Object(this);\n\n let len = O.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n let n = +fromIndex || 0;\n\n if (Math.abs(n) === Infinity) {\n n = 0;\n }\n\n if (n >= len) {\n return -1;\n }\n\n let k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n while (k < len) {\n if (k in O && O[k] === searchElement) {\n return k;\n }\n k++;\n }\n return -1;\n};\n\nexport default TextTrack;\n","/**\n * @file browser.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\nconst USER_AGENT = window.navigator.userAgent;\nconst webkitVersionMap = (/AppleWebKit\\/([\\d.]+)/i).exec(USER_AGENT);\nconst appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null;\n\n/*\n * Device is an iPhone\n *\n * @type {Boolean}\n * @constant\n * @private\n */\nexport const IS_IPHONE = (/iPhone/i).test(USER_AGENT);\nexport const IS_IPAD = (/iPad/i).test(USER_AGENT);\nexport const IS_IPOD = (/iPod/i).test(USER_AGENT);\nexport const IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\n\nexport const IOS_VERSION = (function(){\n var match = USER_AGENT.match(/OS (\\d+)_/i);\n if (match && match[1]) { return match[1]; }\n})();\n\nexport const IS_ANDROID = (/Android/i).test(USER_AGENT);\nexport const ANDROID_VERSION = (function() {\n // This matches Android Major.Minor.Patch versions\n // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned\n var match = USER_AGENT.match(/Android (\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))*/i),\n major,\n minor;\n\n if (!match) {\n return null;\n }\n\n major = match[1] && parseFloat(match[1]);\n minor = match[2] && parseFloat(match[2]);\n\n if (major && minor) {\n return parseFloat(match[1] + '.' + match[2]);\n } else if (major) {\n return major;\n } else {\n return null;\n }\n})();\n// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser\nexport const IS_OLD_ANDROID = IS_ANDROID && (/webkit/i).test(USER_AGENT) && ANDROID_VERSION < 2.3;\nexport const IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537;\n\nexport const IS_FIREFOX = (/Firefox/i).test(USER_AGENT);\nexport const IS_CHROME = (/Chrome/i).test(USER_AGENT);\nexport const IS_IE8 = (/MSIE\\s8\\.0/).test(USER_AGENT);\n\nexport const TOUCH_ENABLED = !!(('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch);\nexport const BACKGROUND_SIZE_SUPPORTED = 'backgroundSize' in document.createElement('video').style;\n","/**\n * @file buffer.js\n */\nimport { createTimeRange } from './time-ranges.js';\n\n/**\n * Compute how much your video has been buffered\n *\n * @param {Object} Buffered object\n * @param {Number} Total duration\n * @return {Number} Percent buffered of the total duration\n * @private\n * @function bufferedPercent\n */\nexport function bufferedPercent(buffered, duration) {\n var bufferedDuration = 0,\n start, end;\n\n if (!duration) {\n return 0;\n }\n\n if (!buffered || !buffered.length) {\n buffered = createTimeRange(0, 0);\n }\n\n for (let i = 0; i < buffered.length; i++){\n start = buffered.start(i);\n end = buffered.end(i);\n\n // buffered end can be bigger than duration by a very small fraction\n if (end > duration) {\n end = duration;\n }\n\n bufferedDuration += end - start;\n }\n\n return bufferedDuration / duration;\n}\n","import log from './log.js';\n\n/**\n * Object containing the default behaviors for available handler methods.\n *\n * @private\n * @type {Object}\n */\nconst defaultBehaviors = {\n get(obj, key) {\n return obj[key];\n },\n set(obj, key, value) {\n obj[key] = value;\n return true;\n }\n};\n\n/**\n * Expose private objects publicly using a Proxy to log deprecation warnings.\n *\n * Browsers that do not support Proxy objects will simply return the `target`\n * object, so it can be directly exposed.\n *\n * @param {Object} target The target object.\n * @param {Object} messages Messages to display from a Proxy. Only operations\n * with an associated message will be proxied.\n * @param {String} [messages.get]\n * @param {String} [messages.set]\n * @return {Object} A Proxy if supported or the `target` argument.\n */\nexport default (target, messages={}) => {\n if (typeof Proxy === 'function') {\n let handler = {};\n\n // Build a handler object based on those keys that have both messages\n // and default behaviors.\n Object.keys(messages).forEach(key => {\n if (defaultBehaviors.hasOwnProperty(key)) {\n handler[key] = function() {\n log.warn(messages[key]);\n return defaultBehaviors[key].apply(this, arguments);\n };\n }\n });\n\n return new Proxy(target, handler);\n }\n return target;\n};\n","/**\n * @file dom.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\nimport * as Guid from './guid.js';\nimport log from './log.js';\nimport tsml from 'tsml';\n\n/**\n * Shorthand for document.getElementById()\n * Also allows for CSS (jQuery) ID syntax. But nothing other than IDs.\n *\n * @param {String} id Element ID\n * @return {Element} Element with supplied ID\n * @function getEl\n */\nexport function getEl(id){\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n return document.getElementById(id);\n}\n\n/**\n * Creates an element and applies properties.\n *\n * @param {String=} tagName Name of tag to be created.\n * @param {Object=} properties Element properties to be applied.\n * @return {Element}\n * @function createEl\n */\nexport function createEl(tagName='div', properties={}, attributes={}){\n let el = document.createElement(tagName);\n\n Object.getOwnPropertyNames(properties).forEach(function(propName){\n let val = properties[propName];\n\n // See #2176\n // We originally were accepting both properties and attributes in the\n // same object, but that doesn't work so well.\n if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') {\n log.warn(tsml`Setting attributes in the second argument of createEl()\n has been deprecated. Use the third argument instead.\n createEl(type, properties, attributes). Attempting to set ${propName} to ${val}.`);\n el.setAttribute(propName, val);\n } else {\n el[propName] = val;\n }\n });\n\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let val = attributes[attrName];\n el.setAttribute(attrName, attributes[attrName]);\n });\n\n return el;\n}\n\n/**\n * Insert an element as the first child node of another\n *\n * @param {Element} child Element to insert\n * @param {Element} parent Element to insert child into\n * @private\n * @function insertElFirst\n */\nexport function insertElFirst(child, parent){\n if (parent.firstChild) {\n parent.insertBefore(child, parent.firstChild);\n } else {\n parent.appendChild(child);\n }\n}\n\n/**\n * Element Data Store. Allows for binding data to an element without putting it directly on the element.\n * Ex. Event listeners are stored here.\n * (also from jsninja.com, slightly modified and updated for closure compiler)\n *\n * @type {Object}\n * @private\n */\nconst elData = {};\n\n/*\n * Unique attribute name to store an element's guid in\n *\n * @type {String}\n * @constant\n * @private\n */\nconst elIdAttr = 'vdata' + (new Date()).getTime();\n\n/**\n * Returns the cache object where data for an element is stored\n *\n * @param {Element} el Element to store data for.\n * @return {Object}\n * @function getElData\n */\nexport function getElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n id = el[elIdAttr] = Guid.newGUID();\n }\n\n if (!elData[id]) {\n elData[id] = {};\n }\n\n return elData[id];\n}\n\n/**\n * Returns whether or not an element has cached data\n *\n * @param {Element} el A dom element\n * @return {Boolean}\n * @private\n * @function hasElData\n */\nexport function hasElData(el) {\n const id = el[elIdAttr];\n\n if (!id) {\n return false;\n }\n\n return !!Object.getOwnPropertyNames(elData[id]).length;\n}\n\n/**\n * Delete data for the element from the cache and the guid attr from getElementById\n *\n * @param {Element} el Remove data for an element\n * @private\n * @function removeElData\n */\nexport function removeElData(el) {\n let id = el[elIdAttr];\n\n if (!id) {\n return;\n }\n\n // Remove all stored data\n delete elData[id];\n\n // Remove the elIdAttr property from the DOM node\n try {\n delete el[elIdAttr];\n } catch(e) {\n if (el.removeAttribute) {\n el.removeAttribute(elIdAttr);\n } else {\n // IE doesn't appear to support removeAttribute on the document element\n el[elIdAttr] = null;\n }\n }\n}\n\n/**\n * Check if an element has a CSS class\n *\n * @param {Element} element Element to check\n * @param {String} classToCheck Classname to check\n * @function hasElClass\n */\nexport function hasElClass(element, classToCheck) {\n return ((' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1);\n}\n\n/**\n * Add a CSS class name to an element\n *\n * @param {Element} element Element to add class name to\n * @param {String} classToAdd Classname to add\n * @function addElClass\n */\nexport function addElClass(element, classToAdd) {\n if (!hasElClass(element, classToAdd)) {\n element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd;\n }\n}\n\n/**\n * Remove a CSS class name from an element\n *\n * @param {Element} element Element to remove from class name\n * @param {String} classToRemove Classname to remove\n * @function removeElClass\n */\nexport function removeElClass(element, classToRemove) {\n if (!hasElClass(element, classToRemove)) {return;}\n\n let classNames = element.className.split(' ');\n\n // no arr.indexOf in ie8, and we don't want to add a big shim\n for (let i = classNames.length - 1; i >= 0; i--) {\n if (classNames[i] === classToRemove) {\n classNames.splice(i,1);\n }\n }\n\n element.className = classNames.join(' ');\n}\n\n/**\n * Apply attributes to an HTML element.\n *\n * @param {Element} el Target element.\n * @param {Object=} attributes Element attributes to be applied.\n * @private\n * @function setElAttributes\n */\nexport function setElAttributes(el, attributes) {\n Object.getOwnPropertyNames(attributes).forEach(function(attrName){\n let attrValue = attributes[attrName];\n\n if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) {\n el.removeAttribute(attrName);\n } else {\n el.setAttribute(attrName, (attrValue === true ? '' : attrValue));\n }\n });\n}\n\n/**\n * Get an element's attribute values, as defined on the HTML tag\n * Attributes are not the same as properties. They're defined on the tag\n * or with setAttribute (which shouldn't be used with HTML)\n * This will return true or false for boolean attributes.\n *\n * @param {Element} tag Element from which to get tag attributes\n * @return {Object}\n * @private\n * @function getElAttributes\n */\nexport function getElAttributes(tag) {\n var obj, knownBooleans, attrs, attrName, attrVal;\n\n obj = {};\n\n // known boolean attributes\n // we can check for matching boolean properties, but older browsers\n // won't know about HTML5 boolean attributes that we still read from\n knownBooleans = ','+'autoplay,controls,loop,muted,default'+',';\n\n if (tag && tag.attributes && tag.attributes.length > 0) {\n attrs = tag.attributes;\n\n for (var i = attrs.length - 1; i >= 0; i--) {\n attrName = attrs[i].name;\n attrVal = attrs[i].value;\n\n // check for known booleans\n // the matching element property will return a value for typeof\n if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(','+attrName+',') !== -1) {\n // the value of an included boolean attribute is typically an empty\n // string ('') which would equal false if we just check for a false value.\n // we also don't want support bad code like autoplay='false'\n attrVal = (attrVal !== null) ? true : false;\n }\n\n obj[attrName] = attrVal;\n }\n }\n\n return obj;\n}\n\n/**\n * Attempt to block the ability to select text while dragging controls\n *\n * @return {Boolean}\n * @method blockTextSelection\n */\nexport function blockTextSelection() {\n document.body.focus();\n document.onselectstart = function() {\n return false;\n };\n}\n\n/**\n * Turn off text selection blocking\n *\n * @return {Boolean}\n * @method unblockTextSelection\n */\nexport function unblockTextSelection() {\n document.onselectstart = function() {\n return true;\n };\n}\n\n/**\n * Offset Left\n * getBoundingClientRect technique from\n * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/\n *\n * @param {Element} el Element from which to get offset\n * @return {Object=}\n * @method findElPosition\n */\nexport function findElPosition(el) {\n let box;\n\n if (el.getBoundingClientRect && el.parentNode) {\n box = el.getBoundingClientRect();\n }\n\n if (!box) {\n return {\n left: 0,\n top: 0\n };\n }\n\n const docEl = document.documentElement;\n const body = document.body;\n\n const clientLeft = docEl.clientLeft || body.clientLeft || 0;\n const scrollLeft = window.pageXOffset || body.scrollLeft;\n const left = box.left + scrollLeft - clientLeft;\n\n const clientTop = docEl.clientTop || body.clientTop || 0;\n const scrollTop = window.pageYOffset || body.scrollTop;\n const top = box.top + scrollTop - clientTop;\n\n // Android sometimes returns slightly off decimal values, so need to round\n return {\n left: Math.round(left),\n top: Math.round(top)\n };\n}\n\n/**\n * Get pointer position in element\n * Returns an object with x and y coordinates.\n * The base on the coordinates are the bottom left of the element.\n *\n * @param {Element} el Element on which to get the pointer position on\n * @param {Event} event Event object\n * @return {Object=} position This object will have x and y coordinates corresponding to the mouse position\n * @metho getPointerPosition\n */\nexport function getPointerPosition(el, event) {\n let position = {};\n let box = findElPosition(el);\n let boxW = el.offsetWidth;\n let boxH = el.offsetHeight;\n\n let boxY = box.top;\n let boxX = box.left;\n let pageY = event.pageY;\n let pageX = event.pageX;\n\n if (event.changedTouches) {\n pageX = event.changedTouches[0].pageX;\n pageY = event.changedTouches[0].pageY;\n }\n\n position.y = Math.max(0, Math.min(1, ((boxY - pageY) + boxH) / boxH));\n position.x = Math.max(0, Math.min(1, (pageX - boxX) / boxW));\n\n return position;\n}\n","/**\n * @file events.js\n *\n * Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/)\n * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible)\n * This should work very similarly to jQuery's events, however it's based off the book version which isn't as\n * robust as jquery's, so there's probably some differences.\n */\n\nimport * as Dom from './dom.js';\nimport * as Guid from './guid.js';\nimport window from 'global/window';\nimport document from 'global/document';\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nexport function on(elem, type, fn){\n if (Array.isArray(type)) {\n return _handleMultipleEvents(on, elem, type, fn);\n }\n\n let data = Dom.getElData(elem);\n\n // We need a place to store all our handler data\n if (!data.handlers) data.handlers = {};\n\n if (!data.handlers[type]) data.handlers[type] = [];\n\n if (!fn.guid) fn.guid = Guid.newGUID();\n\n data.handlers[type].push(fn);\n\n if (!data.dispatcher) {\n data.disabled = false;\n\n data.dispatcher = function (event, hash){\n\n if (data.disabled) return;\n event = fixEvent(event);\n\n var handlers = data.handlers[event.type];\n\n if (handlers) {\n // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off.\n var handlersCopy = handlers.slice(0);\n\n for (var m = 0, n = handlersCopy.length; m < n; m++) {\n if (event.isImmediatePropagationStopped()) {\n break;\n } else {\n handlersCopy[m].call(elem, event, hash);\n }\n }\n }\n };\n }\n\n if (data.handlers[type].length === 1) {\n if (elem.addEventListener) {\n elem.addEventListener(type, data.dispatcher, false);\n } else if (elem.attachEvent) {\n elem.attachEvent('on' + type, data.dispatcher);\n }\n }\n}\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nexport function off(elem, type, fn) {\n // Don't want to add a cache object through getElData if not needed\n if (!Dom.hasElData(elem)) return;\n\n let data = Dom.getElData(elem);\n\n // If no events exist, nothing to unbind\n if (!data.handlers) { return; }\n\n if (Array.isArray(type)) {\n return _handleMultipleEvents(off, elem, type, fn);\n }\n\n // Utility function\n var removeType = function(t){\n data.handlers[t] = [];\n _cleanUpEvents(elem,t);\n };\n\n // Are we removing all bound events?\n if (!type) {\n for (let t in data.handlers) removeType(t);\n return;\n }\n\n var handlers = data.handlers[type];\n\n // If no handlers exist, nothing to unbind\n if (!handlers) return;\n\n // If no listener was provided, remove all listeners for type\n if (!fn) {\n removeType(type);\n return;\n }\n\n // We're only removing a single handler\n if (fn.guid) {\n for (let n = 0; n < handlers.length; n++) {\n if (handlers[n].guid === fn.guid) {\n handlers.splice(n--, 1);\n }\n }\n }\n\n _cleanUpEvents(elem, type);\n}\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nexport function trigger(elem, event, hash) {\n // Fetches element data and a reference to the parent (for bubbling).\n // Don't want to add a data object to cache for every parent,\n // so checking hasElData first.\n var elemData = (Dom.hasElData(elem)) ? Dom.getElData(elem) : {};\n var parent = elem.parentNode || elem.ownerDocument;\n // type = event.type || event,\n // handler;\n\n // If an event name was passed as a string, creates an event out of it\n if (typeof event === 'string') {\n event = { type:event, target:elem };\n }\n // Normalizes the event properties.\n event = fixEvent(event);\n\n // If the passed element has a dispatcher, executes the established handlers.\n if (elemData.dispatcher) {\n elemData.dispatcher.call(elem, event, hash);\n }\n\n // Unless explicitly stopped or the event does not bubble (e.g. media events)\n // recursively calls this function to bubble the event up the DOM.\n if (parent && !event.isPropagationStopped() && event.bubbles === true) {\n trigger.call(null, parent, event, hash);\n\n // If at the top of the DOM, triggers the default action unless disabled.\n } else if (!parent && !event.defaultPrevented) {\n var targetData = Dom.getElData(event.target);\n\n // Checks if the target has a default action for this event.\n if (event.target[event.type]) {\n // Temporarily disables event dispatching on the target as we have already executed the handler.\n targetData.disabled = true;\n // Executes the default action.\n if (typeof event.target[event.type] === 'function') {\n event.target[event.type]();\n }\n // Re-enables event dispatching.\n targetData.disabled = false;\n }\n }\n\n // Inform the triggerer if the default was prevented by returning false\n return !event.defaultPrevented;\n}\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nexport function one(elem, type, fn) {\n if (Array.isArray(type)) {\n return _handleMultipleEvents(one, elem, type, fn);\n }\n var func = function(){\n off(elem, type, func);\n fn.apply(this, arguments);\n };\n // copy the guid to the new function so it can removed using the original function's ID\n func.guid = fn.guid = fn.guid || Guid.newGUID();\n on(elem, type, func);\n}\n\n/**\n * Fix a native event to have standard property values\n *\n * @param {Object} event Event object to fix\n * @return {Object}\n * @private\n * @method fixEvent\n */\nexport function fixEvent(event) {\n\n function returnTrue() { return true; }\n function returnFalse() { return false; }\n\n // Test if fixing up is needed\n // Used to check if !event.stopPropagation instead of isPropagationStopped\n // But native events return true for stopPropagation, but don't have\n // other expected methods like isPropagationStopped. Seems to be a problem\n // with the Javascript Ninja code. So we're just overriding all events now.\n if (!event || !event.isPropagationStopped) {\n var old = event || window.event;\n\n event = {};\n // Clone the old object so that we can modify the values event = {};\n // IE8 Doesn't like when you mess with native event properties\n // Firefox returns false for event.hasOwnProperty('type') and other props\n // which makes copying more difficult.\n // TODO: Probably best to create a whitelist of event props\n for (var key in old) {\n // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y\n // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation\n // and webkitMovementX/Y\n if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' &&\n key !== 'webkitMovementX' && key !== 'webkitMovementY') {\n // Chrome 32+ warns if you try to copy deprecated returnValue, but\n // we still want to if preventDefault isn't supported (IE8).\n if (!(key === 'returnValue' && old.preventDefault)) {\n event[key] = old[key];\n }\n }\n }\n\n // The event occurred on this element\n if (!event.target) {\n event.target = event.srcElement || document;\n }\n\n // Handle which other element the event is related to\n if (!event.relatedTarget) {\n event.relatedTarget = event.fromElement === event.target ?\n event.toElement :\n event.fromElement;\n }\n\n // Stop the default browser action\n event.preventDefault = function () {\n if (old.preventDefault) {\n old.preventDefault();\n }\n event.returnValue = false;\n old.returnValue = false;\n event.defaultPrevented = true;\n };\n\n event.defaultPrevented = false;\n\n // Stop the event from bubbling\n event.stopPropagation = function () {\n if (old.stopPropagation) {\n old.stopPropagation();\n }\n event.cancelBubble = true;\n old.cancelBubble = true;\n event.isPropagationStopped = returnTrue;\n };\n\n event.isPropagationStopped = returnFalse;\n\n // Stop the event from bubbling and executing other handlers\n event.stopImmediatePropagation = function () {\n if (old.stopImmediatePropagation) {\n old.stopImmediatePropagation();\n }\n event.isImmediatePropagationStopped = returnTrue;\n event.stopPropagation();\n };\n\n event.isImmediatePropagationStopped = returnFalse;\n\n // Handle mouse position\n if (event.clientX != null) {\n var doc = document.documentElement, body = document.body;\n\n event.pageX = event.clientX +\n (doc && doc.scrollLeft || body && body.scrollLeft || 0) -\n (doc && doc.clientLeft || body && body.clientLeft || 0);\n event.pageY = event.clientY +\n (doc && doc.scrollTop || body && body.scrollTop || 0) -\n (doc && doc.clientTop || body && body.clientTop || 0);\n }\n\n // Handle key presses\n event.which = event.charCode || event.keyCode;\n\n // Fix button for mouse clicks:\n // 0 == left; 1 == middle; 2 == right\n if (event.button != null) {\n event.button = (event.button & 1 ? 0 :\n (event.button & 4 ? 1 :\n (event.button & 2 ? 2 : 0)));\n }\n }\n\n // Returns fixed-up instance\n return event;\n}\n\n/**\n * Clean up the listener cache and dispatchers\n*\n * @param {Element|Object} elem Element to clean up\n * @param {String} type Type of event to clean up\n * @private\n * @method _cleanUpEvents\n */\nfunction _cleanUpEvents(elem, type) {\n var data = Dom.getElData(elem);\n\n // Remove the events of a particular type if there are none left\n if (data.handlers[type].length === 0) {\n delete data.handlers[type];\n // data.handlers[type] = null;\n // Setting to null was causing an error with data.handlers\n\n // Remove the meta-handler from the element\n if (elem.removeEventListener) {\n elem.removeEventListener(type, data.dispatcher, false);\n } else if (elem.detachEvent) {\n elem.detachEvent('on' + type, data.dispatcher);\n }\n }\n\n // Remove the events object if there are no types left\n if (Object.getOwnPropertyNames(data.handlers).length <= 0) {\n delete data.handlers;\n delete data.dispatcher;\n delete data.disabled;\n }\n\n // Finally remove the element data if there is no data left\n if (Object.getOwnPropertyNames(data).length === 0) {\n Dom.removeElData(elem);\n }\n}\n\n/**\n * Loops through an array of event types and calls the requested method for each type.\n *\n * @param {Function} fn The event method we want to use.\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String} type Type of event to bind to.\n * @param {Function} callback Event listener.\n * @private\n * @function _handleMultipleEvents\n */\nfunction _handleMultipleEvents(fn, elem, types, callback) {\n types.forEach(function(type) {\n //Call the event method for each one of the types\n fn(elem, type, callback);\n });\n}\n","/**\n * @file fn.js\n */\nimport { newGUID } from './guid.js';\n\n/**\n * Bind (a.k.a proxy or Context). A simple method for changing the context of a function\n * It also stores a unique id on the function so it can be easily removed from events\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n * @private\n * @method bind\n */\nexport const bind = function(context, fn, uid) {\n // Make sure the function has a unique ID\n if (!fn.guid) { fn.guid = newGUID(); }\n\n // Create the new function that changes the context\n let ret = function() {\n return fn.apply(context, arguments);\n };\n\n // Allow for the ability to individualize this function\n // Needed in the case where multiple objects might share the same prototype\n // IF both items add an event listener with the same function, then you try to remove just one\n // it will remove both because they both have the same guid.\n // when using this, you need to use the bind method when you remove the listener as well.\n // currently used in text tracks\n ret.guid = (uid) ? uid + '_' + fn.guid : fn.guid;\n\n return ret;\n};\n","/**\n * @file format-time.js\n *\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @private\n * @function formatTime\n */\nfunction formatTime(seconds, guide=seconds) {\n let s = Math.floor(seconds % 60);\n let m = Math.floor(seconds / 60 % 60);\n let h = Math.floor(seconds / 3600);\n const gm = Math.floor(guide / 60 % 60);\n const gh = Math.floor(guide / 3600);\n\n // handle invalid times\n if (isNaN(seconds) || seconds === Infinity) {\n // '-' is false for all relational operators (e.g. <, >=) so this setting\n // will add the minimum number of fields specified by the guide\n h = m = s = '-';\n }\n\n // Check if we need to show hours\n h = (h > 0 || gh > 0) ? h + ':' : '';\n\n // If hours are showing, we may need to add a leading zero.\n // Always show at least one digit of minutes.\n m = (((h || gm >= 10) && m < 10) ? '0' + m : m) + ':';\n\n // Check if leading zero is need for seconds\n s = (s < 10) ? '0' + s : s;\n\n return h + m + s;\n}\n\nexport default formatTime;\n","/**\n * @file guid.js\n *\n * Unique ID for an element or function\n * @type {Number}\n * @private\n */\nlet _guid = 1;\n\n/**\n * Get the next unique ID\n *\n * @return {String} \n * @function newGUID\n */\nexport function newGUID() {\n return _guid++;\n}\n","/**\n * @file log.js\n */\nimport window from 'global/window';\n\n/**\n * Log plain debug messages\n */\nconst log = function(){\n _logType(null, arguments);\n};\n\n/**\n * Keep a history of log messages\n * @type {Array}\n */\nlog.history = [];\n\n/**\n * Log error messages\n */\nlog.error = function(){\n _logType('error', arguments);\n};\n\n/**\n * Log warning messages\n */\nlog.warn = function(){\n _logType('warn', arguments);\n};\n\n/**\n * Log messages to the console and history based on the type of message\n *\n * @param {String} type The type of message, or `null` for `log`\n * @param {Object} args The args to be passed to the log\n * @private\n * @method _logType\n */\nfunction _logType(type, args){\n // convert args to an array to get array functions\n let argsArray = Array.prototype.slice.call(args);\n // if there's no console then don't try to output messages\n // they will still be stored in log.history\n // Was setting these once outside of this function, but containing them\n // in the function makes it easier to test cases where console doesn't exist\n let noop = function(){};\n\n let console = window['console'] || {\n 'log': noop,\n 'warn': noop,\n 'error': noop\n };\n\n if (type) {\n // add the type to the front of the message\n argsArray.unshift(type.toUpperCase()+':');\n } else {\n // default to log with no prefix\n type = 'log';\n }\n\n // add to history\n log.history.push(argsArray);\n\n // add console prefix after adding to history\n argsArray.unshift('VIDEOJS:');\n\n // call appropriate log function\n if (console[type].apply) {\n console[type].apply(console, argsArray);\n } else {\n // ie8 doesn't allow error.apply, but it will just join() the array anyway\n console[type](argsArray.join(' '));\n }\n}\n\nexport default log;\n","/**\n * @file merge-options.js\n */\nimport merge from 'lodash-compat/object/merge';\n\nfunction isPlain(obj) {\n return !!obj\n && typeof obj === 'object'\n && obj.toString() === '[object Object]'\n && obj.constructor === Object;\n}\n\n/**\n * Merge customizer. video.js simply overwrites non-simple objects\n * (like arrays) instead of attempting to overlay them.\n * @see https://lodash.com/docs#merge\n */\nconst customizer = function(destination, source) {\n // If we're not working with a plain object, copy the value as is\n // If source is an array, for instance, it will replace destination\n if (!isPlain(source)) {\n return source;\n }\n\n // If the new value is a plain object but the first object value is not\n // we need to create a new object for the first object to merge with.\n // This makes it consistent with how merge() works by default\n // and also protects from later changes the to first object affecting\n // the second object's values.\n if (!isPlain(destination)) {\n return mergeOptions(source);\n }\n};\n\n/**\n * Merge one or more options objects, recursively merging **only**\n * plain object properties. Previously `deepMerge`.\n *\n * @param {...Object} source One or more objects to merge\n * @returns {Object} a new object that is the union of all\n * provided objects\n * @function mergeOptions\n */\nexport default function mergeOptions() {\n // contruct the call dynamically to handle the variable number of\n // objects to merge\n let args = Array.prototype.slice.call(arguments);\n\n // unshift an empty object into the front of the call as the target\n // of the merge\n args.unshift({});\n\n // customize conflict resolution to match our historical merge behavior\n args.push(customizer);\n\n merge.apply(null, args);\n\n // return the mutated result object\n return args[0];\n}\n","import document from 'global/document';\n\nexport let createStyleElement = function(className) {\n let style = document.createElement('style');\n style.className = className;\n\n return style;\n};\n\nexport let setTextContent = function(el, content) {\n if (el.styleSheet) {\n el.styleSheet.cssText = content;\n } else {\n el.textContent = content;\n }\n};\n","import log from './log.js';\n\n/**\n * @file time-ranges.js\n *\n * Should create a fake TimeRange object\n * Mimics an HTML5 time range instance, which has functions that\n * return the start and end times for a range\n * TimeRanges are returned by the buffered() method\n *\n * @param {(Number|Array)} Start of a single range or an array of ranges\n * @param {Number} End of a single range\n * @private\n * @method createTimeRanges\n */\nexport function createTimeRanges(start, end){\n if (Array.isArray(start)) {\n return createTimeRangesObj(start);\n } else if (start === undefined || end === undefined) {\n return createTimeRangesObj();\n }\n return createTimeRangesObj([[start, end]]);\n}\n\nexport { createTimeRanges as createTimeRange };\n\nfunction createTimeRangesObj(ranges){\n if (ranges === undefined || ranges.length === 0) {\n return {\n length: 0,\n start: function() {\n throw new Error('This TimeRanges object is empty');\n },\n end: function() {\n throw new Error('This TimeRanges object is empty');\n }\n };\n }\n return {\n length: ranges.length,\n start: getRange.bind(null, 'start', 0, ranges),\n end: getRange.bind(null, 'end', 1, ranges)\n };\n}\n\nfunction getRange(fnName, valueIndex, ranges, rangeIndex){\n if (rangeIndex === undefined) {\n log.warn(`DEPRECATED: Function '${fnName}' on 'TimeRanges' called without an index argument.`);\n rangeIndex = 0;\n }\n rangeCheck(fnName, rangeIndex, ranges.length - 1);\n return ranges[rangeIndex][valueIndex];\n}\n\nfunction rangeCheck(fnName, index, maxIndex){\n if (index < 0 || index > maxIndex) {\n throw new Error(`Failed to execute '${fnName}' on 'TimeRanges': The index provided (${index}) is greater than or equal to the maximum bound (${maxIndex}).`);\n }\n}\n","/**\n * @file to-title-case.js\n *\n * Uppercase the first letter of a string\n *\n * @param {String} string String to be uppercased\n * @return {String}\n * @private\n * @method toTitleCase\n */\nfunction toTitleCase(string){\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n\nexport default toTitleCase;\n","/**\n * @file url.js\n */\nimport document from 'global/document';\nimport window from 'global/window';\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nexport const parseUrl = function(url) {\n const props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'];\n\n // add the url to an anchor and let the browser parse the URL\n let a = document.createElement('a');\n a.href = url;\n\n // IE8 (and 9?) Fix\n // ie8 doesn't parse the URL correctly until the anchor is actually\n // added to the body, and an innerHTML is needed to trigger the parsing\n let addToBody = (a.host === '' && a.protocol !== 'file:');\n let div;\n if (addToBody) {\n div = document.createElement('div');\n div.innerHTML = ``;\n a = div.firstChild;\n // prevent the div from affecting layout\n div.setAttribute('style', 'display:none; position:absolute;');\n document.body.appendChild(div);\n }\n\n // Copy the specific URL properties to a new object\n // This is also needed for IE8 because the anchor loses its\n // properties when it's removed from the dom\n let details = {};\n for (var i = 0; i < props.length; i++) {\n details[props[i]] = a[props[i]];\n }\n\n // IE9 adds the port to the host property unlike everyone else. If\n // a port identifier is added for standard ports, strip it.\n if (details.protocol === 'http:') {\n details.host = details.host.replace(/:80$/, '');\n }\n if (details.protocol === 'https:') {\n details.host = details.host.replace(/:443$/, '');\n }\n\n if (addToBody) {\n document.body.removeChild(div);\n }\n\n return details;\n};\n\n/**\n * Get absolute version of relative URL. Used to tell flash correct URL.\n * http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue\n *\n * @param {String} url URL to make absolute\n * @return {String} Absolute URL\n * @private\n * @method getAbsoluteURL\n */\nexport const getAbsoluteURL = function(url){\n // Check if absolute URL\n if (!url.match(/^https?:\\/\\//)) {\n // Convert to absolute URL. Flash hosted off-site needs an absolute URL.\n let div = document.createElement('div');\n div.innerHTML = `x`;\n url = div.firstChild.href;\n }\n\n return url;\n};\n\n/**\n * Returns the extension of the passed file name. It will return an empty string if you pass an invalid path\n *\n * @param {String} path The fileName path like '/path/to/file.mp4'\n * @returns {String} The extension in lower case or an empty string if no extension could be found.\n * @method getFileExtension\n */\nexport const getFileExtension = function(path) {\n if(typeof path === 'string'){\n let splitPathRe = /^(\\/?)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?)(\\.([^\\.\\/\\?]+)))(?:[\\/]*|[\\?].*)$/i;\n let pathParts = splitPathRe.exec(path);\n\n if (pathParts) {\n return pathParts.pop().toLowerCase();\n }\n }\n\n return '';\n};\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nexport const isCrossOrigin = function(url) {\n let urlInfo = parseUrl(url);\n let winLoc = window.location;\n\n // IE8 protocol relative urls will return ':' for protocol\n let srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol;\n\n // Check if url is for another domain/origin\n // IE8 doesn't know location.origin, so we won't rely on it here\n let crossOrigin = (srcProtocol + urlInfo.host) !== (winLoc.protocol + winLoc.host);\n\n return crossOrigin;\n};\n","/**\n * @file video.js\n */\nimport document from 'global/document';\nimport * as setup from './setup';\nimport * as stylesheet from './utils/stylesheet.js';\nimport Component from './component';\nimport EventTarget from './event-target';\nimport * as Events from './utils/events.js';\nimport Player from './player';\nimport plugin from './plugins.js';\nimport mergeOptions from '../../src/js/utils/merge-options.js';\nimport * as Fn from './utils/fn.js';\nimport TextTrack from './tracks/text-track.js';\n\nimport assign from 'object.assign';\nimport { createTimeRanges } from './utils/time-ranges.js';\nimport formatTime from './utils/format-time.js';\nimport log from './utils/log.js';\nimport * as Dom from './utils/dom.js';\nimport * as browser from './utils/browser.js';\nimport * as Url from './utils/url.js';\nimport extendFn from './extend.js';\nimport merge from 'lodash-compat/object/merge';\nimport createDeprecationProxy from './utils/create-deprecation-proxy.js';\nimport xhr from 'xhr';\n\n// Include the built-in techs\nimport Html5 from './tech/html5.js';\nimport Flash from './tech/flash.js';\n\n// HTML5 Element Shim for IE8\nif (typeof HTMLVideoElement === 'undefined') {\n document.createElement('video');\n document.createElement('audio');\n document.createElement('track');\n}\n\n/**\n * Doubles as the main function for users to create a player instance and also\n * the main library object.\n * The `videojs` function can be used to initialize or retrieve a player.\n * ```js\n * var myPlayer = videojs('my_video_id');\n * ```\n *\n * @param {String|Element} id Video element or video element ID\n * @param {Object=} options Optional options object for config/settings\n * @param {Function=} ready Optional ready callback\n * @return {Player} A player instance\n * @mixes videojs\n * @method videojs\n */\nvar videojs = function(id, options, ready){\n var tag; // Element of ID\n\n // Allow for element or ID to be passed in\n // String ID\n if (typeof id === 'string') {\n\n // Adjust for jQuery ID syntax\n if (id.indexOf('#') === 0) {\n id = id.slice(1);\n }\n\n // If a player instance has already been created for this ID return it.\n if (videojs.getPlayers()[id]) {\n\n // If options or ready funtion are passed, warn\n if (options) {\n log.warn(`Player \"${id}\" is already initialised. Options will not be applied.`);\n }\n\n if (ready) {\n videojs.getPlayers()[id].ready(ready);\n }\n\n return videojs.getPlayers()[id];\n\n // Otherwise get element for ID\n } else {\n tag = Dom.getEl(id);\n }\n\n // ID is a media element\n } else {\n tag = id;\n }\n\n // Check for a useable element\n if (!tag || !tag.nodeName) { // re: nodeName, could be a box div also\n throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns\n }\n\n // Element may have a player attr referring to an already created player instance.\n // If not, set up a new player and return the instance.\n return tag['player'] || new Player(tag, options, ready);\n};\n\n// Add default styles\nlet style = document.querySelector('.vjs-styles-defaults');\nif (!style) {\n style = stylesheet.createStyleElement('vjs-styles-defaults');\n let head = document.querySelector('head');\n head.insertBefore(style, head.firstChild);\n stylesheet.setTextContent(style, `\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n `);\n}\n\n// Run Auto-load players\n// You have to wait at least once in case this script is loaded after your video in the DOM (weird behavior only with minified version)\nsetup.autoSetupTimeout(1, videojs);\n\n/*\n * Current software version (semver)\n *\n * @type {String}\n */\nvideojs.VERSION = '__VERSION__';\n\n/**\n * The global options object. These are the settings that take effect\n * if no overrides are specified when the player is created.\n *\n * ```js\n * videojs.options.autoplay = true\n * // -> all players will autoplay by default\n * ```\n *\n * @type {Object}\n */\nvideojs.options = Player.prototype.options_;\n\n/**\n * Get an object with the currently created players, keyed by player ID\n *\n * @return {Object} The created players\n * @mixes videojs\n * @method getPlayers\n */\nvideojs.getPlayers = function() {\n return Player.players;\n};\n\n/**\n * For backward compatibility, expose players object.\n *\n * @deprecated\n * @memberOf videojs\n * @property {Object|Proxy} players\n */\nvideojs.players = createDeprecationProxy(Player.players, {\n get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead',\n set: 'Modification of videojs.players is deprecated'\n});\n\n/**\n * Get a component class object by name\n * ```js\n * var VjsButton = videojs.getComponent('Button');\n * // Create a new instance of the component\n * var myButton = new VjsButton(myPlayer);\n * ```\n *\n * @return {Component} Component identified by name\n * @mixes videojs\n * @method getComponent\n */\nvideojs.getComponent = Component.getComponent;\n\n/**\n * Register a component so it can referred to by name\n * Used when adding to other\n * components, either through addChild\n * `component.addChild('myComponent')`\n * or through default children options\n * `{ children: ['myComponent'] }`.\n * ```js\n * // Get a component to subclass\n * var VjsButton = videojs.getComponent('Button');\n * // Subclass the component (see 'extend' doc for more info)\n * var MySpecialButton = videojs.extend(VjsButton, {});\n * // Register the new component\n * VjsButton.registerComponent('MySepcialButton', MySepcialButton);\n * // (optionally) add the new component as a default player child\n * myPlayer.addChild('MySepcialButton');\n * ```\n * NOTE: You could also just initialize the component before adding.\n * `component.addChild(new MyComponent());`\n *\n * @param {String} The class name of the component\n * @param {Component} The component class\n * @return {Component} The newly registered component\n * @mixes videojs\n * @method registerComponent\n */\nvideojs.registerComponent = Component.registerComponent;\n\n/**\n * A suite of browser and device tests\n *\n * @type {Object}\n * @private\n */\nvideojs.browser = browser;\n\n/**\n * Whether or not the browser supports touch events. Included for backward\n * compatibility with 4.x, but deprecated. Use `videojs.browser.TOUCH_ENABLED`\n * instead going forward.\n *\n * @deprecated\n * @type {Boolean}\n */\nvideojs.TOUCH_ENABLED = browser.TOUCH_ENABLED;\n\n/**\n * Subclass an existing class\n * Mimics ES6 subclassing with the `extend` keyword\n * ```js\n * // Create a basic javascript 'class'\n * function MyClass(name){\n * // Set a property at initialization\n * this.myName = name;\n * }\n * // Create an instance method\n * MyClass.prototype.sayMyName = function(){\n * alert(this.myName);\n * };\n * // Subclass the exisitng class and change the name\n * // when initializing\n * var MySubClass = videojs.extend(MyClass, {\n * constructor: function(name) {\n * // Call the super class constructor for the subclass\n * MyClass.call(this, name)\n * }\n * });\n * // Create an instance of the new sub class\n * var myInstance = new MySubClass('John');\n * myInstance.sayMyName(); // -> should alert \"John\"\n * ```\n *\n * @param {Function} The Class to subclass\n * @param {Object} An object including instace methods for the new class\n * Optionally including a `constructor` function\n * @return {Function} The newly created subclass\n * @mixes videojs\n * @method extend\n */\nvideojs.extend = extendFn;\n\n/**\n * Merge two options objects recursively\n * Performs a deep merge like lodash.merge but **only merges plain objects**\n * (not arrays, elements, anything else)\n * Other values will be copied directly from the second object.\n * ```js\n * var defaultOptions = {\n * foo: true,\n * bar: {\n * a: true,\n * b: [1,2,3]\n * }\n * };\n * var newOptions = {\n * foo: false,\n * bar: {\n * b: [4,5,6]\n * }\n * };\n * var result = videojs.mergeOptions(defaultOptions, newOptions);\n * // result.foo = false;\n * // result.bar.a = true;\n * // result.bar.b = [4,5,6];\n * ```\n *\n * @param {Object} The options object whose values will be overriden\n * @param {Object} The options object with values to override the first\n * @param {Object} Any number of additional options objects\n *\n * @return {Object} a new object with the merged values\n * @mixes videojs\n * @method mergeOptions\n */\nvideojs.mergeOptions = mergeOptions;\n\n/**\n * Change the context (this) of a function\n *\n * videojs.bind(newContext, function(){\n * this === newContext\n * });\n *\n * NOTE: as of v5.0 we require an ES5 shim, so you should use the native\n * `function(){}.bind(newContext);` instead of this.\n *\n * @param {*} context The object to bind as scope\n * @param {Function} fn The function to be bound to a scope\n * @param {Number=} uid An optional unique ID for the function to be set\n * @return {Function}\n */\nvideojs.bind = Fn.bind;\n\n/**\n * Create a Video.js player plugin\n * Plugins are only initialized when options for the plugin are included\n * in the player options, or the plugin function on the player instance is\n * called.\n * **See the plugin guide in the docs for a more detailed example**\n * ```js\n * // Make a plugin that alerts when the player plays\n * videojs.plugin('myPlugin', function(myPluginOptions) {\n * myPluginOptions = myPluginOptions || {};\n *\n * var player = this;\n * var alertText = myPluginOptions.text || 'Player is playing!'\n *\n * player.on('play', function(){\n * alert(alertText);\n * });\n * });\n * // USAGE EXAMPLES\n * // EXAMPLE 1: New player with plugin options, call plugin immediately\n * var player1 = videojs('idOne', {\n * myPlugin: {\n * text: 'Custom text!'\n * }\n * });\n * // Click play\n * // --> Should alert 'Custom text!'\n * // EXAMPLE 3: New player, initialize plugin later\n * var player3 = videojs('idThree');\n * // Click play\n * // --> NO ALERT\n * // Click pause\n * // Initialize plugin using the plugin function on the player instance\n * player3.myPlugin({\n * text: 'Plugin added later!'\n * });\n * // Click play\n * // --> Should alert 'Plugin added later!'\n * ```\n *\n * @param {String} The plugin name\n * @param {Function} The plugin function that will be called with options\n * @mixes videojs\n * @method plugin\n */\nvideojs.plugin = plugin;\n\n/**\n * Adding languages so that they're available to all players.\n * ```js\n * videojs.addLanguage('es', { 'Hello': 'Hola' });\n * ```\n *\n * @param {String} code The language code or dictionary property\n * @param {Object} data The data values to be translated\n * @return {Object} The resulting language dictionary object\n * @mixes videojs\n * @method addLanguage\n */\nvideojs.addLanguage = function(code, data){\n code = ('' + code).toLowerCase();\n return merge(videojs.options.languages, { [code]: data })[code];\n};\n\n/**\n * Log debug messages.\n *\n * @param {...Object} messages One or more messages to log\n */\nvideojs.log = log;\n\n/**\n * Creates an emulated TimeRange object.\n *\n * @param {Number|Array} start Start time in seconds or an array of ranges\n * @param {Number} end End time in seconds\n * @return {Object} Fake TimeRange object\n * @method createTimeRange\n */\nvideojs.createTimeRange = videojs.createTimeRanges = createTimeRanges;\n\n/**\n * Format seconds as a time string, H:MM:SS or M:SS\n * Supplying a guide (in seconds) will force a number of leading zeros\n * to cover the length of the guide\n *\n * @param {Number} seconds Number of seconds to be turned into a string\n * @param {Number} guide Number (in seconds) to model the string after\n * @return {String} Time formatted as H:MM:SS or M:SS\n * @method formatTime\n */\nvideojs.formatTime = formatTime;\n\n/**\n * Resolve and parse the elements of a URL\n *\n * @param {String} url The url to parse\n * @return {Object} An object of url details\n * @method parseUrl\n */\nvideojs.parseUrl = Url.parseUrl;\n\n/**\n * Returns whether the url passed is a cross domain request or not.\n *\n * @param {String} url The url to check\n * @return {Boolean} Whether it is a cross domain request or not\n * @method isCrossOrigin\n */\nvideojs.isCrossOrigin = Url.isCrossOrigin;\n\n/**\n * Event target class.\n *\n * @type {Function}\n */\nvideojs.EventTarget = EventTarget;\n\n/**\n * Add an event listener to element\n * It stores the handler function in a separate cache object\n * and adds a generic handler to the element's event,\n * along with a unique id (guid) to the element.\n *\n * @param {Element|Object} elem Element or object to bind listeners to\n * @param {String|Array} type Type of event to bind to.\n * @param {Function} fn Event listener.\n * @method on\n */\nvideojs.on = Events.on;\n\n/**\n * Trigger a listener only once for an event\n *\n * @param {Element|Object} elem Element or object to\n * @param {String|Array} type Name/type of event\n * @param {Function} fn Event handler function\n * @method one\n */\nvideojs.one = Events.one;\n\n/**\n * Removes event listeners from an element\n *\n * @param {Element|Object} elem Object to remove listeners from\n * @param {String|Array=} type Type of listener to remove. Don't include to remove all events from element.\n * @param {Function} fn Specific listener to remove. Don't include to remove listeners for an event type.\n * @method off\n */\nvideojs.off = Events.off;\n\n/**\n * Trigger an event for an element\n *\n * @param {Element|Object} elem Element to trigger an event on\n * @param {Event|Object|String} event A string (the type) or an event object with a type attribute\n * @param {Object} [hash] data hash to pass along with the event\n * @return {Boolean=} Returned only if default was prevented\n * @method trigger\n */\nvideojs.trigger = Events.trigger;\n\n/**\n * A cross-browser XMLHttpRequest wrapper. Here's a simple example:\n *\n * videojs.xhr({\n * body: someJSONString,\n * uri: \"/foo\",\n * headers: {\n * \"Content-Type\": \"application/json\"\n * }\n * }, function (err, resp, body) {\n * // check resp.statusCode\n * });\n *\n * Check out the [full\n * documentation](https://github.com/Raynos/xhr/blob/v2.1.0/README.md)\n * for more options.\n *\n * @param {Object} options settings for the request.\n * @return {XMLHttpRequest|XDomainRequest} the request object.\n * @see https://github.com/Raynos/xhr\n */\nvideojs.xhr = xhr;\n\n/**\n * TextTrack class\n *\n * @type {Function}\n */\nvideojs.TextTrack = TextTrack;\n\n// REMOVING: We probably should add this to the migration plugin\n// // Expose but deprecate the window[componentName] method for accessing components\n// Object.getOwnPropertyNames(Component.components).forEach(function(name){\n// let component = Component.components[name];\n//\n// // A deprecation warning as the constuctor\n// module.exports[name] = function(player, options, ready){\n// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent(\"componentName\")');\n//\n// return new Component(player, options, ready);\n// };\n//\n// // Allow the prototype and class methods to be accessible still this way\n// // Though anything that attempts to override class methods will no longer work\n// assign(module.exports[name], component);\n// });\n\n/*\n * Custom Universal Module Definition (UMD)\n *\n * Video.js will never be a non-browser lib so we can simplify UMD a bunch and\n * still support requirejs and browserify. This also needs to be closure\n * compiler compatible, so string keys are used.\n */\nif (typeof define === 'function' && define['amd']) {\n define('videojs', [], function(){ return videojs; });\n\n// checking that module is an object too because of umdjs/umd#35\n} else if (typeof exports === 'object' && typeof module === 'object') {\n module['exports'] = videojs;\n}\n\nexport default videojs;\n"]} \ No newline at end of file diff --git a/node_modules/video.js/dist/video.novtt.js b/node_modules/video.js/dist/video.novtt.js deleted file mode 100644 index 38f5168..0000000 --- a/node_modules/video.js/dist/video.novtt.js +++ /dev/null @@ -1,16909 +0,0 @@ -(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 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; - -},{}],5:[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; - -},{}],6:[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; - -},{}],7:[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; - -},{}],8:[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":15}],9:[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":36,"./baseFor":8}],10:[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":27,"../lang/isObject":30,"../lang/isTypedArray":33,"../object/keys":35,"./arrayEach":6,"./baseMergeDeep":11,"./isArrayLike":18,"./isObjectLike":23}],11:[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":26,"../lang/isArray":27,"../lang/isPlainObject":31,"../lang/isTypedArray":33,"../lang/toPlainObject":34,"./arrayCopy":5,"./isArrayLike":18}],12:[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":25}],13:[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":39}],14:[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":4,"./bindCallback":13,"./isIterateeCall":21}],15:[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":25}],16:[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":12}],17:[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":29}],18:[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":16,"./isLength":22}],19:[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; - -},{}],20:[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; - -},{}],21:[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":30,"./isArrayLike":18,"./isIndex":20}],22:[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; - -},{}],23:[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; - -},{}],24:[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":26,"../lang/isArray":27,"../lang/isString":32,"../object/keysIn":36,"./isIndex":20,"./isLength":22}],25:[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":30,"../lang/isString":32,"../support":38}],26:[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":18,"../internal/isObjectLike":23}],27:[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":17,"../internal/isLength":22,"../internal/isObjectLike":23}],28:[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":30}],29:[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":19,"../internal/isObjectLike":23,"./isFunction":28}],30:[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; - -},{}],31:[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":9,"../internal/isHostObject":19,"../internal/isObjectLike":23,"../support":38,"./isArguments":26}],32:[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":23}],33:[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":22,"../internal/isObjectLike":23}],34:[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":7,"../object/keysIn":36}],35:[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":17,"../internal/isArrayLike":18,"../internal/shimKeys":24,"../lang/isObject":30,"../support":38}],36:[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":6,"../internal/isIndex":20,"../internal/isLength":22,"../lang/isArguments":26,"../lang/isArray":27,"../lang/isFunction":28,"../lang/isObject":30,"../lang/isString":32,"../support":38}],37:[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":10,"../internal/createAssigner":14}],38:[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; - -},{}],39:[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; - -},{}],40:[function(_dereq_,module,exports){ -'use strict'; - -// modified from https://github.com/es-shims/es6-shim -var keys = _dereq_('object-keys'); -var canBeObject = function (obj) { - return typeof obj !== 'undefined' && obj !== null; -}; -var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol'; -var defineProperties = _dereq_('define-properties'); -var toObject = Object; -var push = Array.prototype.push; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -var assignShim = 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; - 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) { - if (propIsEnumerable.call(source, syms[i])) { - push.call(props, syms[i]); - } - } - } - for (i = 0; i < props.length; ++i) { - objTarget[props[i]] = source[props[i]]; - } - } - return objTarget; -}; - -defineProperties(assignShim, { - shim: function shimObjectAssign() { - 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'; - } - }; - defineProperties( - Object, - { assign: assignShim }, - { assign: assignHasPendingExceptions } - ); - return Object.assign || assignShim; - } -}); - -module.exports = assignShim; - -},{"define-properties":41,"object-keys":43}],41:[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', { value: obj, enumerable: false }); - /* eslint-disable no-unused-vars */ - for (var _ in obj) { return false; } - /* eslint-enable no-unused-vars */ - 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, - writable: true, - value: value - }); - } 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":42,"object-keys":43}],42:[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); - } - } - } -}; - - -},{}],43:[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 hasDontEnumBug = !({ 'toString': null }).propertyIsEnumerable('toString'); -var hasProtoEnumBug = function () {}.propertyIsEnumerable('prototype'); -var dontEnums = [ - 'toString', - 'toLocaleString', - 'valueOf', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'constructor' -]; -var equalsConstructorPrototype = function (o) { - var ctor = o.constructor; - return ctor && ctor.prototype === o; -}; -var blacklistedKeys = { - $window: true, - $console: true, - $parent: true, - $self: true, - $frames: true, - $webkitIndexedDB: true, - $webkitStorageInfo: true -}; -var hasAutomationEqualityBug = (function () { - /* global window */ - if (typeof window === 'undefined') { return false; } - for (var k in window) { - if (!blacklistedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') { - try { - equalsConstructorPrototype(window[k]); - } 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) { - Object.keys = keysShim; - } else { - 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); - } - }; - } - } - return Object.keys || keysShim; -}; - -module.exports = keysShim; - -},{"./isArguments":44}],44:[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; -}; - -},{}],45:[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] -} - -},{}],46:[function(_dereq_,module,exports){ -/** - * @file big-play-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('./button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('./component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _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; -})(_buttonJs2['default']); - -BigPlayButton.prototype.controlText_ = 'Play Video'; - -_componentJs2['default'].registerComponent('BigPlayButton', BigPlayButton); -exports['default'] = BigPlayButton; -module.exports = exports['default']; - -},{"./button.js":47,"./component.js":48}],47:[function(_dereq_,module,exports){ -/** - * @file button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('./component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _utilsFnJs = _dereq_('./utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -/** - * Base class for all buttons - * - * @param {Object} player Main Player - * @param {Object=} options Object of option names and values - * @extends Component - * @class Button - */ - -var Button = (function (_Component) { - _inherits(Button, _Component); - - function Button(player, options) { - _classCallCheck(this, Button); - - _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); - } - - /** - * Create the component's DOM element - * - * @param {String=} type Element's node type. e.g. 'div' - * @param {Object=} props An object of element attributes that should be set on the element Tag name - * @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]; - - // Add standard Aria and Tabindex info - props = _objectAssign2['default']({ - className: this.buildCSSClass(), - 'role': 'button', - 'type': 'button', // Necessary since the default button type is "submit" - 'aria-live': 'polite', // let the screen reader user know that the text of the button may change - tabIndex: 0 - }, props); - - var el = _Component.prototype.createEl.call(this, tag, props); - - this.controlTextEl_ = Dom.createEl('span', { - className: 'vjs-control-text' - }); - - el.appendChild(this.controlTextEl_); - - this.controlText(this.controlText_); - - return el; - }; - - /** - * Controls text - both request and localize - * - * @param {String} text Text for button - * @return {String} - * @method controlText - */ - - Button.prototype.controlText = function controlText(text) { - if (!text) return this.controlText_ || 'Need Text'; - - this.controlText_ = text; - this.controlTextEl_.innerHTML = this.localize(this.controlText_); - - return this; - }; - - /** - * Allows sub components to stack CSS class names - * - * @return {String} - * @method buildCSSClass - */ - - Button.prototype.buildCSSClass = function buildCSSClass() { - return 'vjs-control vjs-button ' + _Component.prototype.buildCSSClass.call(this); - }; - - /** - * Handle Click - Override with specific functionality for button - * - * @method handleClick - */ - - Button.prototype.handleClick = function handleClick() {}; - - /** - * Handle Focus - Add keyboard functionality to element - * - * @method handleFocus - */ - - Button.prototype.handleFocus = function handleFocus() { - Events.on(_globalDocument2['default'], 'keydown', Fn.bind(this, this.handleKeyPress)); - }; - - /** - * Handle KeyPress (document level) - Trigger click when keys are pressed - * - * @method handleKeyPress - */ - - Button.prototype.handleKeyPress = function handleKeyPress(event) { - // Check for space bar (32) or enter (13) keys - if (event.which === 32 || event.which === 13) { - event.preventDefault(); - this.handleClick(); - } - }; - - /** - * Handle Blur - Remove keyboard triggers - * - * @method handleBlur - */ - - Button.prototype.handleBlur = function handleBlur() { - Events.off(_globalDocument2['default'], 'keydown', Fn.bind(this, this.handleKeyPress)); - }; - - return Button; -})(_component2['default']); - -_component2['default'].registerComponent('Button', Button); -exports['default'] = Button; -module.exports = exports['default']; - -},{"./component":48,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"global/document":1,"object.assign":40}],48:[function(_dereq_,module,exports){ -/** - * @file component.js - * - * Player Component - Base class for all UI objects - */ - -'use strict'; - -exports.__esModule = true; - -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'); } } - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFnJs = _dereq_('./utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsGuidJs = _dereq_('./utils/guid.js'); - -var Guid = _interopRequireWildcard(_utilsGuidJs); - -var _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsToTitleCaseJs = _dereq_('./utils/to-title-case.js'); - -var _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -var _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -/** - * 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 - *
    - *
    Button
    - *
    - * ``` - * 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_ = _utilsMergeOptionsJs2['default']({}, this.options_); - - // Updated options with supplied options - options = this.options_ = _utilsMergeOptionsJs2['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. - * This is used for merging options for child components. We - * want it to be easy to override individual options on a child - * component without having to rewrite all the other default options. - * ```js - * Parent.prototype.options_ = { - * children: { - * 'childOne': { 'foo': 'bar', 'asdf': 'fdsa' }, - * 'childTwo': {}, - * 'childThree': {} - * } - * } - * newOptions = { - * children: { - * 'childOne': { 'foo': 'baz', 'abc': '123' } - * 'childTwo': null, - * 'childFour': {} - * } - * } - * - * this.options(newOptions); - * ``` - * RESULT - * ```js - * { - * children: { - * '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) { - _utilsLogJs2['default'].warn('this.options() has been deprecated and will be moved to the constructor in 6.0'); - - if (!obj) { - return this.options_; - } - - this.options_ = _utilsMergeOptionsJs2['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=} attributes An object of element attributes that should be set on the element - * @return {Element} - * @method createEl - */ - - Component.prototype.createEl = function createEl(tagName, attributes) { - return Dom.createEl(tagName, 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(); - * // ->
    - * myComponent.children(); - * // [empty array] - * - * var myButton = myComponent.addChild('MyButton'); - * // ->
    myButton
    - * // -> myButton === myComonent.children()[0]; - * ``` - * Pass in options for child constructors and options for children of the child - * ```js - * var myButton = myComponent.addChild('MyButton', { - * text: 'Press Me', - * children: { - * 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. - * @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 component = undefined; - var componentName = undefined; - - // 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) { - _utilsLogJs2['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 || _utilsToTitleCaseJs2['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); - - component = new ComponentClass(this.player_ || this, options); - - // child is a component instance - } else { - component = child; - } - - this.children_.push(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()) { - this.contentEl().appendChild(component.el()); - } - - // 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: { - * myChildOption: true - * } - * } - * ``` - * // Or when creating the component - * ```js - * var myComp = new MyComponent(player, { - * children: { - * myChildComponent: { - * myChildOption: true - * } - * } - * }); - * ``` - * The children option can also be an Array of child names or - * child options objects (that also include a 'name' key). - * ```js - * var myComp = new MyComponent(player, { - * children: [ - * 'button', - * { - * name: 'button', - * someOtherOption: true - * } - * ] - * }); - * ``` - * - * @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(name, 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 - _this[name] = _this.addChild(name, opts); - }; - - // Allow for an array of children details to passed in the options - if (Array.isArray(children)) { - for (var i = 0; i < children.length; i++) { - var child = children[i]; - var _name = undefined; - var opts = undefined; - - if (typeof child === 'string') { - // ['myComponent'] - _name = child; - opts = {}; - } else { - // [{ name: 'myComponent', otherOption: true }] - _name = child.name; - opts = child; - } - - handleAdd(_name, opts); - } - } else { - Object.getOwnPropertyNames(children).forEach(function (name) { - handleAdd(name, children[name]); - }); - } - })(); - } - }; - - /** - * 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_; - - if (readyQueue && readyQueue.length > 0) { - readyQueue.forEach(function (fn) { - fn.call(this); - }, this); - - // Reset Ready Queue - this.readyQueue_ = []; - } - - // Allow for using event listeners also - this.trigger('ready'); - }, 1); - }; - - /** - * 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 and return 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; - }; - - /** - * 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' + _utilsToTitleCaseJs2['default'](widthOrHeight)], 10); - }; - - /** - * 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 = undefined; - - this.on('touchstart', function (event) { - // If more than one finger, don't consider treating this as a click - if (event.touches.length === 1) { - // Copy the touches object to prevent modifying the original - firstTouch = _objectAssign2['default']({}, event.touches[0]); - // 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 = undefined; - - 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 = _globalWindow2['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) { - _globalWindow2['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 = _globalWindow2['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) { - _globalWindow2['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 (_globalWindow2['default'] && _globalWindow2['default'].videojs && _globalWindow2['default'].videojs[name]) { - _utilsLogJs2['default'].warn('The ' + name + ' component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)'); - return _globalWindow2['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 || {}; - - _utilsLogJs2['default'].warn('Component.extend({}) has been deprecated, use videojs.extends(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 _name2 in props) { - if (props.hasOwnProperty(_name2)) { - subObj.prototype[_name2] = props[_name2]; - } - } - - return subObj; - }; - - return Component; -})(); - -Component.registerComponent('Component', Component); -exports['default'] = Component; -module.exports = exports['default']; - -},{"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/to-title-case.js":116,"global/window":2,"object.assign":40}],49:[function(_dereq_,module,exports){ -/** - * @file control-bar.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -// Required children - -var _playToggleJs = _dereq_('./play-toggle.js'); - -var _playToggleJs2 = _interopRequireDefault(_playToggleJs); - -var _timeControlsCurrentTimeDisplayJs = _dereq_('./time-controls/current-time-display.js'); - -var _timeControlsCurrentTimeDisplayJs2 = _interopRequireDefault(_timeControlsCurrentTimeDisplayJs); - -var _timeControlsDurationDisplayJs = _dereq_('./time-controls/duration-display.js'); - -var _timeControlsDurationDisplayJs2 = _interopRequireDefault(_timeControlsDurationDisplayJs); - -var _timeControlsTimeDividerJs = _dereq_('./time-controls/time-divider.js'); - -var _timeControlsTimeDividerJs2 = _interopRequireDefault(_timeControlsTimeDividerJs); - -var _timeControlsRemainingTimeDisplayJs = _dereq_('./time-controls/remaining-time-display.js'); - -var _timeControlsRemainingTimeDisplayJs2 = _interopRequireDefault(_timeControlsRemainingTimeDisplayJs); - -var _liveDisplayJs = _dereq_('./live-display.js'); - -var _liveDisplayJs2 = _interopRequireDefault(_liveDisplayJs); - -var _progressControlProgressControlJs = _dereq_('./progress-control/progress-control.js'); - -var _progressControlProgressControlJs2 = _interopRequireDefault(_progressControlProgressControlJs); - -var _fullscreenToggleJs = _dereq_('./fullscreen-toggle.js'); - -var _fullscreenToggleJs2 = _interopRequireDefault(_fullscreenToggleJs); - -var _volumeControlVolumeControlJs = _dereq_('./volume-control/volume-control.js'); - -var _volumeControlVolumeControlJs2 = _interopRequireDefault(_volumeControlVolumeControlJs); - -var _volumeMenuButtonJs = _dereq_('./volume-menu-button.js'); - -var _volumeMenuButtonJs2 = _interopRequireDefault(_volumeMenuButtonJs); - -var _muteToggleJs = _dereq_('./mute-toggle.js'); - -var _muteToggleJs2 = _interopRequireDefault(_muteToggleJs); - -var _textTrackControlsChaptersButtonJs = _dereq_('./text-track-controls/chapters-button.js'); - -var _textTrackControlsChaptersButtonJs2 = _interopRequireDefault(_textTrackControlsChaptersButtonJs); - -var _textTrackControlsSubtitlesButtonJs = _dereq_('./text-track-controls/subtitles-button.js'); - -var _textTrackControlsSubtitlesButtonJs2 = _interopRequireDefault(_textTrackControlsSubtitlesButtonJs); - -var _textTrackControlsCaptionsButtonJs = _dereq_('./text-track-controls/captions-button.js'); - -var _textTrackControlsCaptionsButtonJs2 = _interopRequireDefault(_textTrackControlsCaptionsButtonJs); - -var _playbackRateMenuPlaybackRateMenuButtonJs = _dereq_('./playback-rate-menu/playback-rate-menu-button.js'); - -var _playbackRateMenuPlaybackRateMenuButtonJs2 = _interopRequireDefault(_playbackRateMenuPlaybackRateMenuButtonJs); - -var _spacerControlsCustomControlSpacerJs = _dereq_('./spacer-controls/custom-control-spacer.js'); - -var _spacerControlsCustomControlSpacerJs2 = _interopRequireDefault(_spacerControlsCustomControlSpacerJs); - -/** - * Container of main controls - * - * @extends Component - * @class ControlBar - */ - -var ControlBar = (function (_Component) { - _inherits(ControlBar, _Component); - - function ControlBar() { - _classCallCheck(this, ControlBar); - - _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' - }); - }; - - return ControlBar; -})(_componentJs2['default']); - -ControlBar.prototype.options_ = { - loadEvent: 'play', - children: ['playToggle', 'volumeMenuButton', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'muteToggle', 'volumeControl', 'chaptersButton', 'subtitlesButton', 'captionsButton', 'fullscreenToggle'] -}; - -_componentJs2['default'].registerComponent('ControlBar', ControlBar); -exports['default'] = ControlBar; -module.exports = exports['default']; - -},{"../component.js":48,"./fullscreen-toggle.js":50,"./live-display.js":51,"./mute-toggle.js":52,"./play-toggle.js":53,"./playback-rate-menu/playback-rate-menu-button.js":54,"./progress-control/progress-control.js":58,"./spacer-controls/custom-control-spacer.js":60,"./text-track-controls/captions-button.js":63,"./text-track-controls/chapters-button.js":64,"./text-track-controls/subtitles-button.js":67,"./time-controls/current-time-display.js":70,"./time-controls/duration-display.js":71,"./time-controls/remaining-time-display.js":72,"./time-controls/time-divider.js":73,"./volume-control/volume-control.js":75,"./volume-menu-button.js":77}],50:[function(_dereq_,module,exports){ -/** - * @file fullscreen-toggle.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('../button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * Toggle fullscreen video - * - * @extends Button - * @class FullscreenToggle - */ - -var FullscreenToggle = (function (_Button) { - _inherits(FullscreenToggle, _Button); - - function FullscreenToggle() { - _classCallCheck(this, FullscreenToggle); - - _Button.apply(this, arguments); - } - - /** - * 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 click for full screen - * - * @method handleClick - */ - - FullscreenToggle.prototype.handleClick = function handleClick() { - if (!this.player_.isFullscreen()) { - this.player_.requestFullscreen(); - this.controlText('Non-Fullscreen'); - } else { - this.player_.exitFullscreen(); - this.controlText('Fullscreen'); - } - }; - - return FullscreenToggle; -})(_buttonJs2['default']); - -FullscreenToggle.prototype.controlText_ = 'Fullscreen'; - -_componentJs2['default'].registerComponent('FullscreenToggle', FullscreenToggle); -exports['default'] = FullscreenToggle; -module.exports = exports['default']; - -},{"../button.js":47,"../component.js":48}],51:[function(_dereq_,module,exports){ -/** - * @file live-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -/** - * 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() { - _classCallCheck(this, LiveDisplay); - - _Component.apply(this, arguments); - } - - /** - * 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: '' + this.localize('Stream Type') + '' + this.localize('LIVE'), - 'aria-live': 'off' - }); - - el.appendChild(this.contentEl_); - - return el; - }; - - return LiveDisplay; -})(_component2['default']); - -_component2['default'].registerComponent('LiveDisplay', LiveDisplay); -exports['default'] = LiveDisplay; -module.exports = exports['default']; - -},{"../component":48,"../utils/dom.js":107}],52:[function(_dereq_,module,exports){ -/** - * @file mute-toggle.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _button = _dereq_('../button'); - -var _button2 = _interopRequireDefault(_button); - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -/** - * 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); - - _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 () { - this.update(); // We need to update the button to account for a default muted state. - - if (player.tech['featuresVolumeControl'] === false) { - this.addClass('vjs-hidden'); - } else { - this.removeClass('vjs-hidden'); - } - }); - } - - /** - * 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(), - 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'; - var localizedMute = this.localize(toMute); - if (this.controlText() !== localizedMute) { - this.controlText(localizedMute); - } - - /* 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; -module.exports = exports['default']; - -},{"../button":47,"../component":48,"../utils/dom.js":107}],53:[function(_dereq_,module,exports){ -/** - * @file play-toggle.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('../button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _Button.call(this, player, options); - - this.on(player, 'play', this.handlePlay); - this.on(player, 'pause', this.handlePause); - } - - /** - * 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'); - this.controlText('Pause'); // change the button text to "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'); - this.controlText('Play'); // change the button text to "Play" - }; - - return PlayToggle; -})(_buttonJs2['default']); - -PlayToggle.prototype.controlText_ = 'Play'; - -_componentJs2['default'].registerComponent('PlayToggle', PlayToggle); -exports['default'] = PlayToggle; -module.exports = exports['default']; - -},{"../button.js":47,"../component.js":48}],54:[function(_dereq_,module,exports){ -/** - * @file playback-rate-menu-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _menuMenuButtonJs = _dereq_('../../menu/menu-button.js'); - -var _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs); - -var _menuMenuJs = _dereq_('../../menu/menu.js'); - -var _menuMenuJs2 = _interopRequireDefault(_menuMenuJs); - -var _playbackRateMenuItemJs = _dereq_('./playback-rate-menu-item.js'); - -var _playbackRateMenuItemJs2 = _interopRequireDefault(_playbackRateMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -/** - * 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); - - _MenuButton.call(this, player, options); - - this.updateVisibility(); - this.updateLabel(); - - this.on(player, 'loadstart', this.updateVisibility); - this.on(player, 'ratechange', this.updateLabel); - } - - /** - * 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 _menuMenuJs2['default'](this.player()); - var rates = this.playbackRates(); - - if (rates) { - for (var i = rates.length - 1; i >= 0; i--) { - menu.addChild(new _playbackRateMenuItemJs2['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 supported playback rates - * - * @return {Array} Supported playback rates - * @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; -})(_menuMenuButtonJs2['default']); - -PlaybackRateMenuButton.prototype.controlText_ = 'Playback Rate'; - -_componentJs2['default'].registerComponent('PlaybackRateMenuButton', PlaybackRateMenuButton); -exports['default'] = PlaybackRateMenuButton; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../menu/menu.js":86,"../../utils/dom.js":107,"./playback-rate-menu-item.js":55}],55:[function(_dereq_,module,exports){ -/** - * @file playback-rate-menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _menuMenuItemJs = _dereq_('../../menu/menu-item.js'); - -var _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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; - _MenuItem.call(this, player, options); - - this.label = label; - this.rate = rate; - - this.on(player, 'ratechange', this.update); - } - - /** - * 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; -})(_menuMenuItemJs2['default']); - -PlaybackRateMenuItem.prototype.contentElType = 'button'; - -_componentJs2['default'].registerComponent('PlaybackRateMenuItem', PlaybackRateMenuItem); -exports['default'] = PlaybackRateMenuItem; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu-item.js":85}],56:[function(_dereq_,module,exports){ -/** - * @file load-progress-bar.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -/** - * 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); - - _Component.call(this, player, options); - this.on(player, 'progress', this.update); - } - - /** - * 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: '' + this.localize('Loaded') + ': 0%' - }); - }; - - /** - * 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) { - var percent = time / end || 0; // no NaN - 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; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('LoadProgressBar', LoadProgressBar); -exports['default'] = LoadProgressBar; -module.exports = exports['default']; - -},{"../../component.js":48,"../../utils/dom.js":107}],57:[function(_dereq_,module,exports){ -/** - * @file play-progress-bar.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -/** - * 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); - - _Component.call(this, player, options); - this.on(player, 'timeupdate', this.updateDataAttr); - player.ready(Fn.bind(this, this.updateDataAttr)); - } - - /** - * 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', - innerHTML: '' + this.localize('Progress') + ': 0%' - }); - }; - - PlayProgressBar.prototype.updateDataAttr = function updateDataAttr() { - var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); - this.el_.setAttribute('data-current-time', _utilsFormatTimeJs2['default'](time, this.player_.duration())); - }; - - return PlayProgressBar; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('PlayProgressBar', PlayProgressBar); -exports['default'] = PlayProgressBar; -module.exports = exports['default']; - -},{"../../component.js":48,"../../utils/fn.js":109,"../../utils/format-time.js":110}],58:[function(_dereq_,module,exports){ -/** - * @file progress-control.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _seekBarJs = _dereq_('./seek-bar.js'); - -var _seekBarJs2 = _interopRequireDefault(_seekBarJs); - -/** - * 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); - - _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; -})(_componentJs2['default']); - -ProgressControl.prototype.options_ = { - children: { - 'seekBar': {} - } -}; - -_componentJs2['default'].registerComponent('ProgressControl', ProgressControl); -exports['default'] = ProgressControl; -module.exports = exports['default']; - -},{"../../component.js":48,"./seek-bar.js":59}],59:[function(_dereq_,module,exports){ -/** - * @file seek-bar.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _sliderSliderJs = _dereq_('../../slider/slider.js'); - -var _sliderSliderJs2 = _interopRequireDefault(_sliderSliderJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _loadProgressBarJs = _dereq_('./load-progress-bar.js'); - -var _loadProgressBarJs2 = _interopRequireDefault(_loadProgressBarJs); - -var _playProgressBarJs = _dereq_('./play-progress-bar.js'); - -var _playProgressBarJs2 = _interopRequireDefault(_playProgressBarJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -/** - * 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); - - _Slider.call(this, player, options); - this.on(player, 'timeupdate', this.updateARIAAttributes); - player.ready(Fn.bind(this, this.updateARIAAttributes)); - } - - /** - * 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': 'video progress bar' - }); - }; - - /** - * Update ARIA accessibility attributes - * - * @method updateARIAAttributes - */ - - SeekBar.prototype.updateARIAAttributes = function updateARIAAttributes() { - // Allows for smooth scrubbing, when player can't keep up. - var time = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); - this.el_.setAttribute('aria-valuenow', (this.getPercent() * 100).toFixed(2)); // machine readable value of progress bar (percentage complete) - this.el_.setAttribute('aria-valuetext', _utilsFormatTimeJs2['default'](time, this.player_.duration())); // human readable value of progress bar (time complete) - }; - - /** - * 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() { - this.player_.currentTime(this.player_.currentTime() + 5); // more quickly fast forward for keyboard-only users - }; - - /** - * Move more quickly rewind for keyboard-only users - * - * @method stepBack - */ - - SeekBar.prototype.stepBack = function stepBack() { - this.player_.currentTime(this.player_.currentTime() - 5); // more quickly rewind for keyboard-only users - }; - - return SeekBar; -})(_sliderSliderJs2['default']); - -SeekBar.prototype.options_ = { - children: { - 'loadProgressBar': {}, - 'playProgressBar': {} - }, - 'barName': 'playProgressBar' -}; - -SeekBar.prototype.playerEvent = 'timeupdate'; - -_componentJs2['default'].registerComponent('SeekBar', SeekBar); -exports['default'] = SeekBar; -module.exports = exports['default']; - -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"../../utils/format-time.js":110,"./load-progress-bar.js":56,"./play-progress-bar.js":57}],60:[function(_dereq_,module,exports){ -/** - * @file custom-control-spacer.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _spacerJs = _dereq_('./spacer.js'); - -var _spacerJs2 = _interopRequireDefault(_spacerJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _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() { - return _Spacer.prototype.createEl.call(this, { - className: this.buildCSSClass() - }); - }; - - return CustomControlSpacer; -})(_spacerJs2['default']); - -_componentJs2['default'].registerComponent('CustomControlSpacer', CustomControlSpacer); -exports['default'] = CustomControlSpacer; -module.exports = exports['default']; - -},{"../../component.js":48,"./spacer.js":61}],61:[function(_dereq_,module,exports){ -/** - * @file spacer.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _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 - * - * @param {Object} props An object of properties - * @return {Element} - * @method createEl - */ - - Spacer.prototype.createEl = function createEl(props) { - return _Component.prototype.createEl.call(this, 'div', { - className: this.buildCSSClass() - }); - }; - - return Spacer; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('Spacer', Spacer); - -exports['default'] = Spacer; -module.exports = exports['default']; - -},{"../../component.js":48}],62:[function(_dereq_,module,exports){ -/** - * @file caption-settings-menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js'); - -var _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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'] = { - 'kind': options['kind'], - 'player': player, - 'label': options['kind'] + ' settings', - 'default': false, - mode: 'disabled' - }; - - _TextTrackMenuItem.call(this, player, options); - this.addClass('vjs-texttrack-settings'); - } - - /** - * Handle click on menu item - * - * @method handleClick - */ - - CaptionSettingsMenuItem.prototype.handleClick = function handleClick() { - this.player().getChild('textTrackSettings').show(); - }; - - return CaptionSettingsMenuItem; -})(_textTrackMenuItemJs2['default']); - -_componentJs2['default'].registerComponent('CaptionSettingsMenuItem', CaptionSettingsMenuItem); -exports['default'] = CaptionSettingsMenuItem; -module.exports = exports['default']; - -},{"../../component.js":48,"./text-track-menu-item.js":69}],63:[function(_dereq_,module,exports){ -/** - * @file captions-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _textTrackButtonJs = _dereq_('./text-track-button.js'); - -var _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _captionSettingsMenuItemJs = _dereq_('./caption-settings-menu-item.js'); - -var _captionSettingsMenuItemJs2 = _interopRequireDefault(_captionSettingsMenuItemJs); - -/** - * 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); - - _TextTrackButton.call(this, player, options, ready); - this.el_.setAttribute('aria-label', 'Captions Menu'); - } - - /** - * 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 _captionSettingsMenuItemJs2['default'](this.player_, { 'kind': this.kind_ })); - } - - return _TextTrackButton.prototype.createItems.call(this, items); - }; - - return CaptionsButton; -})(_textTrackButtonJs2['default']); - -CaptionsButton.prototype.kind_ = 'captions'; -CaptionsButton.prototype.controlText_ = 'Captions'; - -_componentJs2['default'].registerComponent('CaptionsButton', CaptionsButton); -exports['default'] = CaptionsButton; -module.exports = exports['default']; - -},{"../../component.js":48,"./caption-settings-menu-item.js":62,"./text-track-button.js":68}],64:[function(_dereq_,module,exports){ -/** - * @file chapters-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _textTrackButtonJs = _dereq_('./text-track-button.js'); - -var _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js'); - -var _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs); - -var _chaptersTrackMenuItemJs = _dereq_('./chapters-track-menu-item.js'); - -var _chaptersTrackMenuItemJs2 = _interopRequireDefault(_chaptersTrackMenuItemJs); - -var _menuMenuJs = _dereq_('../../menu/menu.js'); - -var _menuMenuJs2 = _interopRequireDefault(_menuMenuJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsToTitleCaseJs = _dereq_('../../utils/to-title-case.js'); - -var _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/** - * 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); - - _TextTrackButton.call(this, player, options, ready); - this.el_.setAttribute('aria-label', 'Chapters Menu'); - } - - /** - * 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 _textTrackMenuItemJs2['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 tracks = this.player_.textTracks() || []; - var chaptersTrack = undefined; - var items = this.items = []; - - for (var i = 0, l = tracks.length; i < l; i++) { - var track = tracks[i]; - if (track['kind'] === this.kind_) { - if (!track.cues) { - track['mode'] = 'hidden'; - /* jshint loopfunc:true */ - // TODO see if we can figure out a better way of doing this https://github.com/videojs/video.js/issues/1864 - _globalWindow2['default'].setTimeout(Fn.bind(this, function () { - this.createMenu(); - }), 100); - /* jshint loopfunc:false */ - } else { - chaptersTrack = track; - break; - } - } - } - - var menu = this.menu; - if (menu === undefined) { - menu = new _menuMenuJs2['default'](this.player_); - menu.contentEl().appendChild(Dom.createEl('li', { - className: 'vjs-menu-title', - innerHTML: _utilsToTitleCaseJs2['default'](this.kind_), - tabIndex: -1 - })); - } - - if (chaptersTrack) { - var cues = chaptersTrack['cues'], - cue = undefined; - - for (var i = 0, l = cues.length; i < l; i++) { - cue = cues[i]; - - var mi = new _chaptersTrackMenuItemJs2['default'](this.player_, { - 'track': chaptersTrack, - 'cue': cue - }); - - items.push(mi); - - menu.addChild(mi); - } - this.addChild(menu); - } - - if (this.items.length > 0) { - this.show(); - } - - return menu; - }; - - return ChaptersButton; -})(_textTrackButtonJs2['default']); - -ChaptersButton.prototype.kind_ = 'chapters'; -ChaptersButton.prototype.controlText_ = 'Chapters'; - -_componentJs2['default'].registerComponent('ChaptersButton', ChaptersButton); -exports['default'] = ChaptersButton; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu.js":86,"../../utils/dom.js":107,"../../utils/fn.js":109,"../../utils/to-title-case.js":116,"./chapters-track-menu-item.js":65,"./text-track-button.js":68,"./text-track-menu-item.js":69,"global/window":2}],65:[function(_dereq_,module,exports){ -/** - * @file chapters-track-menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _menuMenuItemJs = _dereq_('../../menu/menu-item.js'); - -var _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -/** - * 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']; - _MenuItem.call(this, player, options); - - this.track = track; - this.cue = cue; - track.addEventListener('cuechange', Fn.bind(this, this.update)); - } - - /** - * 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; -})(_menuMenuItemJs2['default']); - -_componentJs2['default'].registerComponent('ChaptersTrackMenuItem', ChaptersTrackMenuItem); -exports['default'] = ChaptersTrackMenuItem; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109}],66:[function(_dereq_,module,exports){ -/** - * @file off-text-track-menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js'); - -var _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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'] = { - 'kind': options['kind'], - 'player': player, - 'label': options['kind'] + ' off', - 'default': false, - 'mode': 'disabled' - }; - - _TextTrackMenuItem.call(this, player, options); - this.selected(true); - } - - /** - * 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; -})(_textTrackMenuItemJs2['default']); - -_componentJs2['default'].registerComponent('OffTextTrackMenuItem', OffTextTrackMenuItem); -exports['default'] = OffTextTrackMenuItem; -module.exports = exports['default']; - -},{"../../component.js":48,"./text-track-menu-item.js":69}],67:[function(_dereq_,module,exports){ -/** - * @file subtitles-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _textTrackButtonJs = _dereq_('./text-track-button.js'); - -var _textTrackButtonJs2 = _interopRequireDefault(_textTrackButtonJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _TextTrackButton.call(this, player, options, ready); - this.el_.setAttribute('aria-label', 'Subtitles Menu'); - } - - /** - * 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; -})(_textTrackButtonJs2['default']); - -SubtitlesButton.prototype.kind_ = 'subtitles'; -SubtitlesButton.prototype.controlText_ = 'Subtitles'; - -_componentJs2['default'].registerComponent('SubtitlesButton', SubtitlesButton); -exports['default'] = SubtitlesButton; -module.exports = exports['default']; - -},{"../../component.js":48,"./text-track-button.js":68}],68:[function(_dereq_,module,exports){ -/** - * @file text-track-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _menuMenuButtonJs = _dereq_('../../menu/menu-button.js'); - -var _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _textTrackMenuItemJs = _dereq_('./text-track-menu-item.js'); - -var _textTrackMenuItemJs2 = _interopRequireDefault(_textTrackMenuItemJs); - -var _offTextTrackMenuItemJs = _dereq_('./off-text-track-menu-item.js'); - -var _offTextTrackMenuItemJs2 = _interopRequireDefault(_offTextTrackMenuItemJs); - -/** - * 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 (_MenuButton) { - _inherits(TextTrackButton, _MenuButton); - - function TextTrackButton(player, options) { - _classCallCheck(this, TextTrackButton); - - _MenuButton.call(this, player, options); - - var tracks = this.player_.textTracks(); - - if (this.items.length <= 1) { - this.hide(); - } - - if (!tracks) { - return; - } - - 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); - }); - } - - // Create a menu item for each text track - - 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 _offTextTrackMenuItemJs2['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 _textTrackMenuItemJs2['default'](this.player_, { - 'track': track - })); - } - } - - return items; - }; - - return TextTrackButton; -})(_menuMenuButtonJs2['default']); - -_componentJs2['default'].registerComponent('TextTrackButton', TextTrackButton); -exports['default'] = TextTrackButton; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu-button.js":84,"../../utils/fn.js":109,"./off-text-track-menu-item.js":66,"./text-track-menu-item.js":69}],69:[function(_dereq_,module,exports){ -/** - * @file text-track-menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _menuMenuItemJs = _dereq_('../../menu/menu-item.js'); - -var _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/** - * 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) { - var _this = this; - - _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'; - _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 = undefined; - - _this.on(['tap', 'click'], function () { - if (typeof _globalWindow2['default'].Event !== 'object') { - // Android 2.3 throws an Illegal Constructor error for window.Event - try { - event = new _globalWindow2['default'].Event('change'); - } catch (err) {} - } - - if (!event) { - event = _globalDocument2['default'].createEvent('Event'); - event.initEvent('change', true, true); - } - - tracks.dispatchEvent(event); - }); - })(); - } - } - - /** - * 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; -})(_menuMenuItemJs2['default']); - -_componentJs2['default'].registerComponent('TextTrackMenuItem', TextTrackMenuItem); -exports['default'] = TextTrackMenuItem; -module.exports = exports['default']; - -},{"../../component.js":48,"../../menu/menu-item.js":85,"../../utils/fn.js":109,"global/document":1,"global/window":2}],70:[function(_dereq_,module,exports){ -/** - * @file current-time-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -/** - * 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); - - _Component.call(this, player, options); - - this.on(player, 'timeupdate', this.updateContent); - } - - /** - * 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', - innerHTML: 'Current Time ' + '0:00', // label the current time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes - }); - - 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 = _utilsFormatTimeJs2['default'](time, this.player_.duration()); - this.contentEl_.innerHTML = '' + localizedText + ' ' + formattedTime; - }; - - return CurrentTimeDisplay; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('CurrentTimeDisplay', CurrentTimeDisplay); -exports['default'] = CurrentTimeDisplay; -module.exports = exports['default']; - -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],71:[function(_dereq_,module,exports){ -/** - * @file duration-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -/** - * 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); - - _Component.call(this, player, options); - - // this might need to be changed to 'durationchange' instead of 'timeupdate' eventually, - // however the durationchange event fires before this.player_.duration() is set, - // so the value cannot be written out using this method. - // Once the order of durationchange and this.player_.duration() being set is figured out, - // this can be updated. - this.on(player, 'timeupdate', this.updateContent); - this.on(player, 'loadedmetadata', this.updateContent); - } - - /** - * 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', - innerHTML: '' + this.localize('Duration Time') + ' 0:00', // label the duration time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes - }); - - el.appendChild(this.contentEl_); - return el; - }; - - /** - * Update duration time display - * - * @method updateContent - */ - - DurationDisplay.prototype.updateContent = function updateContent() { - var duration = this.player_.duration(); - if (duration) { - var localizedText = this.localize('Duration Time'); - var formattedTime = _utilsFormatTimeJs2['default'](duration); - this.contentEl_.innerHTML = '' + localizedText + ' ' + formattedTime; // label the duration time for screen reader users - } - }; - - return DurationDisplay; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('DurationDisplay', DurationDisplay); -exports['default'] = DurationDisplay; -module.exports = exports['default']; - -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],72:[function(_dereq_,module,exports){ -/** - * @file remaining-time-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFormatTimeJs = _dereq_('../../utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -/** - * 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); - - _Component.call(this, player, options); - - this.on(player, 'timeupdate', this.updateContent); - } - - /** - * 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', - innerHTML: '' + this.localize('Remaining Time') + ' -0:00', // label the remaining time for screen reader users - 'aria-live': 'off' // tell screen readers not to automatically read the time as it changes - }); - - 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 = _utilsFormatTimeJs2['default'](this.player_.remainingTime()); - this.contentEl_.innerHTML = '' + localizedText + ' -' + 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; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('RemainingTimeDisplay', RemainingTimeDisplay); -exports['default'] = RemainingTimeDisplay; -module.exports = exports['default']; - -},{"../../component.js":48,"../../utils/dom.js":107,"../../utils/format-time.js":110}],73:[function(_dereq_,module,exports){ -/** - * @file time-divider.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _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: '
    /
    ' - }); - }; - - return TimeDivider; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('TimeDivider', TimeDivider); -exports['default'] = TimeDivider; -module.exports = exports['default']; - -},{"../../component.js":48}],74:[function(_dereq_,module,exports){ -/** - * @file volume-bar.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _sliderSliderJs = _dereq_('../../slider/slider.js'); - -var _sliderSliderJs2 = _interopRequireDefault(_sliderSliderJs); - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('../../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -// Required children - -var _volumeLevelJs = _dereq_('./volume-level.js'); - -var _volumeLevelJs2 = _interopRequireDefault(_volumeLevelJs); - -/** - * 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); - - _Slider.call(this, player, options); - this.on(player, 'volumechange', this.updateARIAAttributes); - player.ready(Fn.bind(this, this.updateARIAAttributes)); - } - - /** - * 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', - 'aria-label': 'volume level' - }); - }; - - /** - * Handle mouse move on volume bar - * - * @method handleMouseMove - */ - - VolumeBar.prototype.handleMouseMove = function handleMouseMove(event) { - if (this.player_.muted()) { - this.player_.muted(false); - } - - this.player_.volume(this.calculateDistance(event)); - }; - - /** - * Get percent of volume level - * - * @retun {Number} Volume level percent - * @method getPercent - */ - - VolumeBar.prototype.getPercent = function getPercent() { - if (this.player_.muted()) { - return 0; - } else { - return this.player_.volume(); - } - }; - - /** - * Increase volume level for keyboard users - * - * @method stepForward - */ - - VolumeBar.prototype.stepForward = function stepForward() { - this.player_.volume(this.player_.volume() + 0.1); - }; - - /** - * Decrease volume level for keyboard users - * - * @method stepBack - */ - - VolumeBar.prototype.stepBack = function stepBack() { - 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; -})(_sliderSliderJs2['default']); - -VolumeBar.prototype.options_ = { - children: { - 'volumeLevel': {} - }, - 'barName': 'volumeLevel' -}; - -VolumeBar.prototype.playerEvent = 'volumechange'; - -_componentJs2['default'].registerComponent('VolumeBar', VolumeBar); -exports['default'] = VolumeBar; -module.exports = exports['default']; - -},{"../../component.js":48,"../../slider/slider.js":91,"../../utils/fn.js":109,"./volume-level.js":76}],75:[function(_dereq_,module,exports){ -/** - * @file volume-control.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -// Required children - -var _volumeBarJs = _dereq_('./volume-bar.js'); - -var _volumeBarJs2 = _interopRequireDefault(_volumeBarJs); - -/** - * 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); - - _Component.call(this, player, options); - - // hide volume controls when they're not supported by the current tech - 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'); - } - }); - } - - /** - * 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; -})(_componentJs2['default']); - -VolumeControl.prototype.options_ = { - children: { - 'volumeBar': {} - } -}; - -_componentJs2['default'].registerComponent('VolumeControl', VolumeControl); -exports['default'] = VolumeControl; -module.exports = exports['default']; - -},{"../../component.js":48,"./volume-bar.js":74}],76:[function(_dereq_,module,exports){ -/** - * @file volume-level.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -/** - * 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); - - _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: '' - }); - }; - - return VolumeLevel; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('VolumeLevel', VolumeLevel); -exports['default'] = VolumeLevel; -module.exports = exports['default']; - -},{"../../component.js":48}],77:[function(_dereq_,module,exports){ -/** - * @file volume-menu-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('../button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _menuMenuJs = _dereq_('../menu/menu.js'); - -var _menuMenuJs2 = _interopRequireDefault(_menuMenuJs); - -var _menuMenuButtonJs = _dereq_('../menu/menu-button.js'); - -var _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs); - -var _muteToggleJs = _dereq_('./mute-toggle.js'); - -var _muteToggleJs2 = _interopRequireDefault(_muteToggleJs); - -var _volumeControlVolumeBarJs = _dereq_('./volume-control/volume-bar.js'); - -var _volumeControlVolumeBarJs2 = _interopRequireDefault(_volumeControlVolumeBarJs); - -/** - * Button for volume menu - * - * @param {Player|Object} player - * @param {Object=} options - * @extends MenuButton - * @class VolumeMenuButton - */ - -var VolumeMenuButton = (function (_MenuButton) { - _inherits(VolumeMenuButton, _MenuButton); - - function VolumeMenuButton(player) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - _classCallCheck(this, VolumeMenuButton); - - // 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; - - _MenuButton.call(this, player, options); - - // Same listeners as MuteToggle - this.on(player, 'volumechange', this.volumeUpdate); - this.on(player, 'loadstart', this.volumeUpdate); - - // 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 () { - if (player.tech['featuresVolumeControl'] === false) { - this.addClass('vjs-hidden'); - } else { - this.removeClass('vjs-hidden'); - } - }); - this.addClass('vjs-menu-button'); - } - - /** - * 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 ' + _MenuButton.prototype.buildCSSClass.call(this) + ' ' + orientationClass; - }; - - /** - * Allow sub components to stack CSS class names - * - * @return {Menu} The volume menu button - * @method createMenu - */ - - VolumeMenuButton.prototype.createMenu = function createMenu() { - var menu = new _menuMenuJs2['default'](this.player_, { - contentElType: 'div' - }); - - var vc = new _volumeControlVolumeBarJs2['default'](this.player_, this.options_.volumeBar); - - vc.on('focus', function () { - menu.lockShowing(); - }); - vc.on('blur', function () { - menu.unlockShowing(); - }); - menu.addChild(vc); - return menu; - }; - - /** - * Handle click on volume menu and calls super - * - * @method handleClick - */ - - VolumeMenuButton.prototype.handleClick = function handleClick() { - _muteToggleJs2['default'].prototype.handleClick.call(this); - _MenuButton.prototype.handleClick.call(this); - }; - - return VolumeMenuButton; -})(_menuMenuButtonJs2['default']); - -VolumeMenuButton.prototype.volumeUpdate = _muteToggleJs2['default'].prototype.update; -VolumeMenuButton.prototype.controlText_ = 'Mute'; - -_componentJs2['default'].registerComponent('VolumeMenuButton', VolumeMenuButton); -exports['default'] = VolumeMenuButton; -module.exports = exports['default']; - -},{"../button.js":47,"../component.js":48,"../menu/menu-button.js":84,"../menu/menu.js":86,"./mute-toggle.js":52,"./volume-control/volume-bar.js":74}],78:[function(_dereq_,module,exports){ -/** - * @file error-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('./component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -/** - * Display that an error has occurred making the video unplayable - * - * @param {Object} player Main Player - * @param {Object=} options Object of option names and values - * @extends Component - * @class ErrorDisplay - */ - -var ErrorDisplay = (function (_Component) { - _inherits(ErrorDisplay, _Component); - - function ErrorDisplay(player, options) { - _classCallCheck(this, ErrorDisplay); - - _Component.call(this, player, options); - - this.update(); - this.on(player, 'error', this.update); - } - - /** - * Create the component's DOM element - * - * @return {Element} - * @method createEl - */ - - ErrorDisplay.prototype.createEl = function createEl() { - var el = _Component.prototype.createEl.call(this, 'div', { - className: 'vjs-error-display' - }); - - this.contentEl_ = Dom.createEl('div'); - el.appendChild(this.contentEl_); - - return el; - }; - - /** - * Update the error message in localized language - * - * @method update - */ - - ErrorDisplay.prototype.update = function update() { - if (this.player().error()) { - this.contentEl_.innerHTML = this.localize(this.player().error().message); - } - }; - - return ErrorDisplay; -})(_component2['default']); - -_component2['default'].registerComponent('ErrorDisplay', ErrorDisplay); -exports['default'] = ErrorDisplay; -module.exports = exports['default']; - -},{"./component":48,"./utils/dom.js":107}],79:[function(_dereq_,module,exports){ -/** - * @file event-target.js - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var EventTarget = function EventTarget() {}; - -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.prototype; - 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) { - Events.one(this, type, fn); -}; - -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; -module.exports = exports['default']; - -},{"./utils/events.js":108}],80:[function(_dereq_,module,exports){ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _utilsLog = _dereq_('./utils/log'); - -var _utilsLog2 = _interopRequireDefault(_utilsLog); - -/* - * @file extends.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); - } - - 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.extends(Button, { - * constructor: function(player, options) { - * Button.call(this, player, options); - * }, - * onClick: function() { - * // doSomething - * } - * }); - * ``` - */ -var extendsFn = function extendsFn(superClass) { - var subClassMethods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var subClass = function subClass() { - superClass.apply(this, arguments); - }; - var methods = {}; - - if (typeof subClassMethods === 'object') { - if (typeof subClassMethods.init === 'function') { - _utilsLog2['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'] = extendsFn; -module.exports = exports['default']; - -},{"./utils/log":112}],81:[function(_dereq_,module,exports){ -/** - * @file fullscreen-api.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/* - * 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 -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 = undefined; - -// determine the supported set of functions -for (var i = 0; i < apiMap.length; i++) { - // check for exitFullscreen function - if (apiMap[i][1] in _globalDocument2['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; -module.exports = exports['default']; - -},{"global/document":1}],82:[function(_dereq_,module,exports){ -/** - * @file loading-spinner.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('./component'); - -var _component2 = _interopRequireDefault(_component); - -/* Loading Spinner -================================================================================ */ -/** - * Loading spinner for waiting events - * - * @extends Component - * @class LoadingSpinner - */ - -var LoadingSpinner = (function (_Component) { - _inherits(LoadingSpinner, _Component); - - function LoadingSpinner() { - _classCallCheck(this, LoadingSpinner); - - _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' - }); - }; - - return LoadingSpinner; -})(_component2['default']); - -_component2['default'].registerComponent('LoadingSpinner', LoadingSpinner); -exports['default'] = LoadingSpinner; -module.exports = exports['default']; - -},{"./component":48}],83:[function(_dereq_,module,exports){ -/** - * @file media-error.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -/* - * Custom MediaError to mimic the HTML5 MediaError - * - * @param {Number} code The media error code - */ -var MediaError = function MediaError(code) { - if (typeof code === 'number') { - this.code = code; - } else if (typeof code === 'string') { - // default code is zero, so this is a custom error - this.message = code; - } else if (typeof code === 'object') { - // object - _objectAssign2['default'](this, code); - } - - 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; - -MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', // = 0 -'MEDIA_ERR_ABORTED', // = 1 -'MEDIA_ERR_NETWORK', // = 2 -'MEDIA_ERR_DECODE', // = 3 -'MEDIA_ERR_SRC_NOT_SUPPORTED', // = 4 -'MEDIA_ERR_ENCRYPTED' // = 5 -]; - -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; -module.exports = exports['default']; - -},{"object.assign":40}],84:[function(_dereq_,module,exports){ -/** - * @file menu-button.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('../button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _menuJs = _dereq_('./menu.js'); - -var _menuJs2 = _interopRequireDefault(_menuJs); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js'); - -var _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs); - -/** - * A button class with a popup menu - * - * @param {Player|Object} player - * @param {Object=} options - * @extends Button - * @class MenuButton - */ - -var MenuButton = (function (_Button) { - _inherits(MenuButton, _Button); - - function MenuButton(player) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - _classCallCheck(this, MenuButton); - - _Button.call(this, player, options); - - this.update(); - - this.on('keydown', this.handleKeyPress); - this.el_.setAttribute('aria-haspopup', true); - this.el_.setAttribute('role', 'button'); - } - - /** - * 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; - - 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 _menuJs2['default'](this.player_); - - // Add a title list item to the top - if (this.options_.title) { - menu.contentEl().appendChild(Dom.createEl('li', { - className: 'vjs-menu-title', - innerHTML: _utilsToTitleCaseJs2['default'](this.options_.title), - tabIndex: -1 - })); - } - - 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 _Button.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 + ' ' + _Button.prototype.buildCSSClass.call(this); - }; - - /** - * Focus - Add keyboard functionality to element - * This function is not needed anymore. Instead, the - * keyboard functionality is handled by - * treating the button as triggering a submenu. - * When the button is pressed, the submenu - * appears. Pressing the button again makes - * the submenu disappear. - * - * @method handleFocus - */ - - MenuButton.prototype.handleFocus = function handleFocus() {}; - - /** - * Can't turn off list display that we turned - * on with focus, because list would go away. - * - * @method handleBlur - */ - - MenuButton.prototype.handleBlur = function handleBlur() {}; - - /** - * 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('mouseout', Fn.bind(this, function () { - this.menu.unlockShowing(); - this.el_.blur(); - })); - if (this.buttonPressed_) { - this.unpressButton(); - } else { - this.pressButton(); - } - }; - - /** - * Handle key press on menu - * - * @param {Object} Key press event - * @method handleKeyPress - */ - - MenuButton.prototype.handleKeyPress = function handleKeyPress(event) { - - // Check for space bar (32) or enter (13) keys - if (event.which === 32 || event.which === 13) { - if (this.buttonPressed_) { - this.unpressButton(); - } else { - this.pressButton(); - } - event.preventDefault(); - // Check for escape (27) key - } else if (event.which === 27) { - if (this.buttonPressed_) { - this.unpressButton(); - } - event.preventDefault(); - } - }; - - /** - * Makes changes based on button pressed - * - * @method pressButton - */ - - MenuButton.prototype.pressButton = function pressButton() { - this.buttonPressed_ = true; - this.menu.lockShowing(); - this.el_.setAttribute('aria-pressed', true); - if (this.items && this.items.length > 0) { - this.items[0].el().focus(); // set the focus to the title of the submenu - } - }; - - /** - * Makes changes based on button unpressed - * - * @method unpressButton - */ - - MenuButton.prototype.unpressButton = function unpressButton() { - this.buttonPressed_ = false; - this.menu.unlockShowing(); - this.el_.setAttribute('aria-pressed', false); - }; - - return MenuButton; -})(_buttonJs2['default']); - -_componentJs2['default'].registerComponent('MenuButton', MenuButton); -exports['default'] = MenuButton; -module.exports = exports['default']; - -},{"../button.js":47,"../component.js":48,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/to-title-case.js":116,"./menu.js":86}],85:[function(_dereq_,module,exports){ -/** - * @file menu-item.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('../button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -/** - * The component for a menu item. `
  • ` - * - * @param {Player|Object} player - * @param {Object=} options - * @extends Button - * @class MenuItem - */ - -var MenuItem = (function (_Button) { - _inherits(MenuItem, _Button); - - function MenuItem(player, options) { - _classCallCheck(this, MenuItem); - - _Button.call(this, player, options); - this.selected(options['selected']); - } - - /** - * 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) { - return _Button.prototype.createEl.call(this, 'li', _objectAssign2['default']({ - className: 'vjs-menu-item', - innerHTML: this.localize(this.options_['label']) - }, props)); - }; - - /** - * 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 (_selected) { - this.addClass('vjs-selected'); - this.el_.setAttribute('aria-selected', true); - } else { - this.removeClass('vjs-selected'); - this.el_.setAttribute('aria-selected', false); - } - }; - - return MenuItem; -})(_buttonJs2['default']); - -_componentJs2['default'].registerComponent('MenuItem', MenuItem); -exports['default'] = MenuItem; -module.exports = exports['default']; - -},{"../button.js":47,"../component.js":48,"object.assign":40}],86:[function(_dereq_,module,exports){ -/** - * @file menu.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsEventsJs = _dereq_('../utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -/** - * 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() { - _classCallCheck(this, Menu); - - _Component.apply(this, arguments); - } - - /** - * 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(); - })); - }; - - /** - * 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' - }); - 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 Menu Buttons, - // where a click on the parent is significant - Events.on(el, 'click', function (event) { - event.preventDefault(); - event.stopImmediatePropagation(); - }); - - return el; - }; - - return Menu; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('Menu', Menu); -exports['default'] = Menu; -module.exports = exports['default']; - -},{"../component.js":48,"../utils/dom.js":107,"../utils/events.js":108,"../utils/fn.js":109}],87:[function(_dereq_,module,exports){ -/** - * @file player.js - */ -// Subclasses Component -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('./component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsFnJs = _dereq_('./utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsGuidJs = _dereq_('./utils/guid.js'); - -var Guid = _interopRequireWildcard(_utilsGuidJs); - -var _utilsBrowserJs = _dereq_('./utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsToTitleCaseJs = _dereq_('./utils/to-title-case.js'); - -var _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs); - -var _utilsTimeRangesJs = _dereq_('./utils/time-ranges.js'); - -var _utilsBufferJs = _dereq_('./utils/buffer.js'); - -var _utilsStylesheetJs = _dereq_('./utils/stylesheet.js'); - -var stylesheet = _interopRequireWildcard(_utilsStylesheetJs); - -var _fullscreenApiJs = _dereq_('./fullscreen-api.js'); - -var _fullscreenApiJs2 = _interopRequireDefault(_fullscreenApiJs); - -var _mediaErrorJs = _dereq_('./media-error.js'); - -var _mediaErrorJs2 = _interopRequireDefault(_mediaErrorJs); - -var _safeJsonParseTuple = _dereq_('safe-json-parse/tuple'); - -var _safeJsonParseTuple2 = _interopRequireDefault(_safeJsonParseTuple); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -var _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -var _tracksTextTrackListConverterJs = _dereq_('./tracks/text-track-list-converter.js'); - -var _tracksTextTrackListConverterJs2 = _interopRequireDefault(_tracksTextTrackListConverterJs); - -// Include required child components (importing also registers them) - -var _techLoaderJs = _dereq_('./tech/loader.js'); - -var _techLoaderJs2 = _interopRequireDefault(_techLoaderJs); - -var _posterImageJs = _dereq_('./poster-image.js'); - -var _posterImageJs2 = _interopRequireDefault(_posterImageJs); - -var _tracksTextTrackDisplayJs = _dereq_('./tracks/text-track-display.js'); - -var _tracksTextTrackDisplayJs2 = _interopRequireDefault(_tracksTextTrackDisplayJs); - -var _loadingSpinnerJs = _dereq_('./loading-spinner.js'); - -var _loadingSpinnerJs2 = _interopRequireDefault(_loadingSpinnerJs); - -var _bigPlayButtonJs = _dereq_('./big-play-button.js'); - -var _bigPlayButtonJs2 = _interopRequireDefault(_bigPlayButtonJs); - -var _controlBarControlBarJs = _dereq_('./control-bar/control-bar.js'); - -var _controlBarControlBarJs2 = _interopRequireDefault(_controlBarControlBarJs); - -var _errorDisplayJs = _dereq_('./error-display.js'); - -var _errorDisplayJs2 = _interopRequireDefault(_errorDisplayJs); - -var _tracksTextTrackSettingsJs = _dereq_('./tracks/text-track-settings.js'); - -var _tracksTextTrackSettingsJs2 = _interopRequireDefault(_tracksTextTrackSettingsJs); - -// Require html5 tech, at least for disposing the original video tag - -var _techHtml5Js = _dereq_('./tech/html5.js'); - -var _techHtml5Js2 = _interopRequireDefault(_techHtml5Js); - -/** - * 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 - * - * ``` - * 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) { - var _this = this; - - _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 = _objectAssign2['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; - - // Run base component initializing with new options - _Component.call(this, null, options, ready); - - // if the global option object was accidentally blown away by - // someone, bail early with an informative error - 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?'); - } - - this.tag = tag; // Store the original tag used to set options - - // 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 = _utilsMergeOptionsJs2['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 { - _utilsLogJs2['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'); - } - - 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'); - // } - - // 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); - } - - /* - * Global player list - * - * @type {Object} - */ - - /** - * 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.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.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 - this.styleEl_ = stylesheet.createStyleElement('vjs-styles-dimensions'); - var defaultsStyleEl = _globalDocument2['default'].querySelector('.vjs-styles-defaults'); - var head = _globalDocument2['default'].querySelector('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); - - // 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); - } - Dom.insertElFirst(tag, el); // Breaks iPhone, fixed in HTML5 setup. - - 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)) { - _utilsLogJs2['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_() { - var width = undefined; - var height = undefined; - var aspectRatio = undefined; - - // 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; - } - - var 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 - */ - - 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) { - _componentJs2['default'].getComponent('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; - - var techReady = Fn.bind(this, function () { - this.triggerReady(); - }); - - // Grab tech-specific options from player options and add source and parent element to use. - var techOptions = _objectAssign2['default']({ - 'nativeControlsForTouch': this.options_.nativeControlsForTouch, - 'source': source, - 'playerId': this.id(), - 'techId': this.id() + '_' + techName + '_api', - 'textTracks': this.textTracks_, - '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 = _componentJs2['default'].getComponent(techName); - this.tech = new techComponent(techOptions); - - _tracksTextTrackListConverterJs2['default'].jsonToTextTracks(this.textTracksJson_ || [], this.tech); - - this.on(this.tech, 'ready', this.handleTechReady); - - // Listen to every HTML5 events and trigger them back on the player for the plugins - 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.onTextTrackChange); - this.on(this.tech, 'loadedmetadata', this.updateStyleEl_); - - 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; - } - - // player.triggerReady is always async, so don't need this to be async - this.tech.ready(techReady, true); - }; - - /** - * Unload playback technology - * - * @method unloadTech - */ - - Player.prototype.unloadTech = function unloadTech() { - // Save the current text tracks so that we can reuse the same text tracks with the next tech - this.textTracks_ = this.textTracks(); - this.textTracksJson_ = _tracksTextTrackListConverterJs2['default'].textTracksToJson(this); - - this.isReady_ = false; - - this.tech.dispose(); - - this.tech = false; - }; - - /** - * Add playback technology listeners - * - * @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 - */ - - 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 - * - * @private - * @method handleTechReady - */ - - Player.prototype.handleTechReady = function handleTechReady() { - this.triggerReady(); - - // Keep the same volume as before - if (this.cache_.volume) { - this.techCall('setVolume', this.cache_.volume); - } - - // 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.tag && this.options_.autoplay && this.paused()) { - delete this.tag.poster; // Chrome Fix. Fixed in Chrome v16. - this.play(); - } - }; - - /** - * Fired when the user agent begins looking for media data - * - * @event loadstart - */ - - 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 - * @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 - * - * @event play - */ - - 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 - * - * @event waiting - */ - - Player.prototype.handleTechWaiting = function handleTechWaiting() { - this.addClass('vjs-waiting'); - this.trigger('waiting'); - }; - - /** - * A handler for events that signal that waiting has ended - * which is not consistent between browsers. See #1351 - * - * @event canplay - */ - - 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 - * - * @event canplaythrough - */ - - 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 - * - * @event playing - */ - - Player.prototype.handleTechPlaying = function handleTechPlaying() { - this.removeClass('vjs-waiting'); - this.trigger('playing'); - }; - - /** - * Fired whenever the player is jumping to a new time - * - * @event seeking - */ - - Player.prototype.handleTechSeeking = function handleTechSeeking() { - this.addClass('vjs-seeking'); - this.trigger('seeking'); - }; - - /** - * Fired when the player has finished jumping to a new time - * - * @event seeked - */ - - 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. - * - * @event firstplay - */ - - 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 - * - * @event pause - */ - - 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 - * - * @event progress - */ - - Player.prototype.handleTechProgress = function handleTechProgress() { - this.trigger('progress'); - - // Add custom event for when source is finished downloading. - if (this.bufferedPercent() === 1) { - this.trigger('loadedalldata'); - } - }; - - /** - * Fired when the end of the media resource is reached (currentTime == duration) - * - * @event ended - */ - - 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 - * - * @event durationchange - */ - - Player.prototype.handleTechDurationChange = function handleTechDurationChange() { - this.updateDuration(); - this.trigger('durationchange'); - }; - - /** - * Handle a click on the media element to play/pause - * - * @param {Object=} event Event object - * @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. - * - * @method handleTechTap - */ - - Player.prototype.handleTechTap = function handleTechTap() { - this.userActive(!this.userActive()); - }; - - /** - * Handle touch to start - * - * @method handleTechTouchStart - */ - - Player.prototype.handleTechTouchStart = function handleTechTouchStart() { - this.userWasActive = this.userActive(); - }; - - /** - * Handle touch to move - * - * @method handleTechTouchMove - */ - - Player.prototype.handleTechTouchMove = function handleTechTouchMove() { - if (this.userWasActive) { - this.reportUserActivity(); - } - }; - - /** - * Handle touch to end - * - * @method handleTechTouchEnd - */ - - Player.prototype.handleTechTouchEnd = function handleTechTouchEnd(event) { - // Stop the mouse events from also happening - event.preventDefault(); - }; - - /** - * Update the duration of the player using the tech - * - * @private - * @method updateDuration - */ - - Player.prototype.updateDuration = function updateDuration() { - // Allows for caching value instead of asking player each time. - // We need to get the techGet response and check for a value so we don't - // accidentally cause the stack to blow up. - var duration = this.techGet('duration'); - if (duration) { - if (duration < 0) { - duration = Infinity; - } - this.duration(duration); - // Determine if the stream is live and propagate styles down to UI. - if (duration === Infinity) { - this.addClass('vjs-live'); - } else { - this.removeClass('vjs-live'); - } - } - }; - - /** - * Fired when the player switches in or out of fullscreen mode - * - * @event fullscreenchange - */ - - 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 - * - * @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 - * - * @event error - */ - - Player.prototype.handleTechError = function handleTechError() { - var error = this.tech.error(); - this.error(error && error.code); - }; - - /** - * Fires when the browser is intentionally not getting media data - * - * @event suspend - */ - - Player.prototype.handleTechSuspend = function handleTechSuspend() { - this.trigger('suspend'); - }; - - /** - * Fires when the loading of an audio/video is aborted - * - * @event abort - */ - - Player.prototype.handleTechAbort = function handleTechAbort() { - this.trigger('abort'); - }; - - /** - * Fires when the current playlist is empty - * - * @event emptied - */ - - Player.prototype.handleTechEmptied = function handleTechEmptied() { - this.trigger('emptied'); - }; - - /** - * Fires when the browser is trying to get media data, but data is not available - * - * @event stalled - */ - - Player.prototype.handleTechStalled = function handleTechStalled() { - this.trigger('stalled'); - }; - - /** - * Fires when the browser has loaded meta data for the audio/video - * - * @event loadedmetadata - */ - - Player.prototype.handleTechLoadedMetaData = function handleTechLoadedMetaData() { - this.trigger('loadedmetadata'); - }; - - /** - * Fires when the browser has loaded the current frame of the audio/video - * - * @event loaddata - */ - - Player.prototype.handleTechLoadedData = function handleTechLoadedData() { - this.trigger('loadeddata'); - }; - - /** - * Fires when the current playback position has changed - * - * @event timeupdate - */ - - Player.prototype.handleTechTimeUpdate = function handleTechTimeUpdate() { - this.trigger('timeupdate'); - }; - - /** - * Fires when the playing speed of the audio/video is changed - * - * @event ratechange - */ - - Player.prototype.handleTechRateChange = function handleTechRateChange() { - this.trigger('ratechange'); - }; - - /** - * Fires when the volume has been changed - * - * @event volumechange - */ - - Player.prototype.handleTechVolumeChange = function handleTechVolumeChange() { - this.trigger('volumechange'); - }; - - /** - * Fires when the text track has been changed - * - * @event texttrackchange - */ - - Player.prototype.onTextTrackChange = function onTextTrackChange() { - 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 - * @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 { - this.tech[method](arg); - } catch (e) { - _utilsLogJs2['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} - * @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) { - _utilsLogJs2['default']('Video.js: ' + method + ' method not defined for ' + this.techName + ' playback technology.', e); - } else { - // When a method isn't available on the object it throws a TypeError - if (e.name === 'TypeError') { - _utilsLogJs2['default']('Video.js: ' + method + ' unavailable on ' + this.techName + ' playback technology element.', e); - this.tech.isReady_ = false; - } else { - _utilsLogJs2['default'](e); - } - } - throw e; - } - } - - return; - }; - - /** - * start media playback - * ```js - * myPlayer.play(); - * ``` - * - * @return {Player} self - * @method play - */ - - Player.prototype.play = function play() { - this.techCall('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. - return this.cache_.currentTime = this.techGet('currentTime') || 0; - }; - - /** - * Get the length in time of the video in seconds - * ```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) { - - // cache the last set value for optimized scrubbing (esp. Flash) - this.cache_.duration = parseFloat(seconds); - - return this; - } - - if (this.cache_.duration === undefined) { - this.updateDuration(); - } - - return this.cache_.duration || 0; - }; - - /** - * 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 = _utilsTimeRangesJs.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 _utilsBufferJs.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(), - duration = this.duration(), - 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 = undefined; - - if (percentAsDecimal !== undefined) { - vol = Math.max(0, Math.min(1, parseFloat(percentAsDecimal))); // Force value to between 0 and 1 - 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; // Default to 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 = _fullscreenApiJs2['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(_globalDocument2['default'], fsApi.fullscreenchange, Fn.bind(this, function documentFullscreenChange(e) { - this.isFullscreen(_globalDocument2['default'][fsApi.fullscreenElement]); - - // If cancelling fullscreen, remove event listener. - if (this.isFullscreen() === false) { - Events.off(_globalDocument2['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 = _fullscreenApiJs2['default']; - this.isFullscreen(false); - - // Check for browser element fullscreen support - if (fsApi.requestFullscreen) { - _globalDocument2['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 = _globalDocument2['default'].documentElement.style.overflow; - - // Add listener for esc key to exit fullscreen - Events.on(_globalDocument2['default'], 'keydown', Fn.bind(this, this.fullWindowOnEscKey)); - - // Hide any scroll bars - _globalDocument2['default'].documentElement.style.overflow = 'hidden'; - - // Apply fullscreen styles - Dom.addElClass(_globalDocument2['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(_globalDocument2['default'], 'keydown', this.fullWindowOnEscKey); - - // Unhide scroll bars. - _globalDocument2['default'].documentElement.style.overflow = this.docOrigOverflow; - - // Remove fullscreen styles - Dom.removeElClass(_globalDocument2['default'].body, 'vjs-full-window'); - - // Resize the box, controller, and poster to original sizes - // this.positionAll(); - this.trigger('exitFullWindow'); - }; - - /** - * Select source based on tech order - * - * @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) { - // Loop through each playback technology in the options order - for (var i = 0, j = this.options_.techOrder; i < j.length; i++) { - var techName = _utilsToTitleCaseJs2['default'](j[i]); - var tech = _componentJs2['default'].getComponent(techName); - - // Check if the current tech is defined before continuing - if (!tech) { - _utilsLogJs2['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()) { - // Loop through each source object - for (var a = 0, b = sources; a < b.length; a++) { - var source = b[a]; - - // Check if source can be played with this technology - if (tech.canPlaySource(source)) { - return { source: source, tech: techName }; - } - } - } - } - - return 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 = _componentJs2['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)) { - // 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; - }; - - /** - * 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 preload should be used - * @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 preload should be used - * @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; - }; - - /** - * 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; // force boolean - // 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; // force boolean - // 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'); - return this; - } - - // error instance - if (err instanceof _mediaErrorJs2['default']) { - this.error_ = err; - } else { - this.error_ = new _mediaErrorJs2['default'](err); - } - - // fire an error event on the player - this.trigger('error'); - - // 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 - _utilsLogJs2['default'].error('(CODE:' + this.error_.code + ' ' + _mediaErrorJs2['default'].errorTypes[this.error_.code] + ')', this.error_.message, this.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 - * - * @method listenForUserActivity - */ - - Player.prototype.listenForUserActivity = function listenForUserActivity() { - var mouseInProgress = undefined, - lastMoveX = undefined, - lastMoveY = undefined; - - 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 = undefined; - var activityCheck = 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 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 activityCheck 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'); - } else { - 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'); - }; - - /* - * 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. - return this.tech && this.tech['textTracks'](); - }; - - /** - * Get an array of remote text tracks - * - * @return {Array} - * @method remoteTextTracks - */ - - Player.prototype.remoteTextTracks = function remoteTextTracks() { - return this.tech && this.tech['remoteTextTracks'](); - }; - - /** - * 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) { - return this.tech && 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) { - return this.tech && this.tech['addRemoteTextTrack'](options); - }; - - /** - * Remove a remote text track - * - * @param {Object} track Remote text track to remove - * @method removeRemoteTextTrack - */ - - Player.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { - this.tech && 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'); }, - // seekable: function(){ return this.techCall('seekable'); }, - // videoTracks: function(){ return this.techCall('videoTracks'); }, - // audioTracks: function(){ return this.techCall('audioTracks'); }, - // defaultPlaybackRate: function(){ return this.techCall('defaultPlaybackRate'); }, - // mediaGroup: function(){ return this.techCall('mediaGroup'); }, - // controller: function(){ return this.techCall('controller'); }, - // defaultMuted: function(){ return this.techCall('defaultMuted'); } - - // TODO - // currentSrcList: the array of sources including other formats and bitrates - // playList: array of source lists in order of playback - - /** - * 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_ = ('' + 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 _utilsMergeOptionsJs2['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 = _utilsMergeOptionsJs2['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 = _utilsMergeOptionsJs2['default'](track); - track.player = undefined; - options.tracks[i] = track; - } - - return options; - }; - - /** - * 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 - - var _safeParseTuple = _safeJsonParseTuple2['default'](dataSetup || '{}'); - - var err = _safeParseTuple[0]; - var data = _safeParseTuple[1]; - - if (err) { - _utilsLogJs2['default'].error(err); - } - _objectAssign2['default'](tagOptions, data); - } - - _objectAssign2['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; -})(_componentJs2['default']); - -Player.players = {}; - -var navigator = _globalWindow2['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, // The freakin seaguls are driving me crazy! - - // 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: _globalDocument2['default'].getElementsByTagName('html')[0].getAttribute('lang') || 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 video.' -}; - -/** - * Fired when the player has initial duration and dimension information - * - * @event loadedmetadata - */ -Player.prototype.handleLoadedMetaData; - -/** - * Fired when the player has downloaded data at the current playback position - * - * @event loadeddata - */ -Player.prototype.handleLoadedData; - -/** - * Fired when the player has finished downloading the source data - * - * @event loadedalldata - */ -Player.prototype.handleLoadedAllData; - -/** - * Fired when the user is active, e.g. moves the mouse over the player - * - * @event useractive - */ -Player.prototype.handleUserActive; - -/** - * Fired when the user is inactive, e.g. a short delay after the last mouse move or control interaction - * - * @event userinactive - */ -Player.prototype.handleUserInactive; - -/** - * 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; - -/** - * Fired when the volume changes - * - * @event volumechange - */ -Player.prototype.handleVolumeChange; - -/** - * Fired when an error occurs - * - * @event error - */ -Player.prototype.handleError; - -Player.prototype.flexNotSupported_ = function () { - var elem = _globalDocument2['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 || 'msFlexOrder' in elem.style) /* IE10-specific (2012 flex spec) */; -}; - -_componentJs2['default'].registerComponent('Player', Player); -exports['default'] = Player; -module.exports = exports['default']; -// If empty string, make it a parsable json object. - -},{"./big-play-button.js":46,"./component.js":48,"./control-bar/control-bar.js":49,"./error-display.js":78,"./fullscreen-api.js":81,"./loading-spinner.js":82,"./media-error.js":83,"./poster-image.js":89,"./tech/html5.js":94,"./tech/loader.js":95,"./tracks/text-track-display.js":98,"./tracks/text-track-list-converter.js":100,"./tracks/text-track-settings.js":102,"./utils/browser.js":104,"./utils/buffer.js":105,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/guid.js":111,"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/to-title-case.js":116,"global/document":1,"global/window":2,"object.assign":40,"safe-json-parse/tuple":45}],88:[function(_dereq_,module,exports){ -/** - * @file plugins.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _playerJs = _dereq_('./player.js'); - -var _playerJs2 = _interopRequireDefault(_playerJs); - -/** - * 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) { - _playerJs2['default'].prototype[name] = init; -}; - -exports['default'] = plugin; -module.exports = exports['default']; - -},{"./player.js":87}],89:[function(_dereq_,module,exports){ -/** - * @file poster-image.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _buttonJs = _dereq_('./button.js'); - -var _buttonJs2 = _interopRequireDefault(_buttonJs); - -var _componentJs = _dereq_('./component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsFnJs = _dereq_('./utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsBrowserJs = _dereq_('./utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -/** - * The component that handles showing the poster image. - * - * @param {Player|Object} player - * @param {Object=} options - * @extends Button - * @class PosterImage - */ - -var PosterImage = (function (_Button) { - _inherits(PosterImage, _Button); - - function PosterImage(player, options) { - _classCallCheck(this, PosterImage); - - _Button.call(this, player, options); - - this.update(); - player.on('posterchange', Fn.bind(this, this.update)); - } - - /** - * Clean up the poster image - * - * @method dispose - */ - - PosterImage.prototype.dispose = function dispose() { - this.player().off('posterchange', this.update); - _Button.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; -})(_buttonJs2['default']); - -_componentJs2['default'].registerComponent('PosterImage', PosterImage); -exports['default'] = PosterImage; -module.exports = exports['default']; - -},{"./button.js":47,"./component.js":48,"./utils/browser.js":104,"./utils/dom.js":107,"./utils/fn.js":109}],90:[function(_dereq_,module,exports){ -/** - * @file setup.js - * - * Functions for automatically setting up a player - * based on the data-setup attribute of the video tag - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _windowLoaded = false; -var videojs = undefined; - -// 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 = _globalDocument2['default'].getElementsByTagName('video'); - var audios = _globalDocument2['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 i = 0, e = mediaEls.length; i < e; i++) { - var mediaEl = mediaEls[i]; - - // 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. - var player = 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 -var autoSetupTimeout = function autoSetupTimeout(wait, vjs) { - videojs = vjs; - setTimeout(autoSetup, wait); -}; - -if (_globalDocument2['default'].readyState === 'complete') { - _windowLoaded = true; -} else { - Events.one(_globalWindow2['default'], 'load', function () { - _windowLoaded = true; - }); -} - -var hasLoaded = function hasLoaded() { - return _windowLoaded; -}; - -exports.autoSetup = autoSetup; -exports.autoSetupTimeout = autoSetupTimeout; -exports.hasLoaded = hasLoaded; - -},{"./utils/events.js":108,"global/document":1,"global/window":2}],91:[function(_dereq_,module,exports){ -/** - * @file slider.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _componentJs = _dereq_('../component.js'); - -var _componentJs2 = _interopRequireDefault(_componentJs); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -/** - * 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); - - _Component.call(this, player, options); - - // Set property names to bar to match with the child Slider class is looking for - 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); - } - - /** - * 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]; - - // Add the slider element class to all sub classes - props.className = props.className + ' vjs-slider'; - props = _objectAssign2['default']({ - 'role': 'slider', - 'aria-valuenow': 0, - 'aria-valuemin': 0, - 'aria-valuemax': 100, - tabIndex: 0 - }, props); - - return _Component.prototype.createEl.call(this, type, props); - }; - - /** - * Handle mouse down on slider - * - * @param {Object} event Mouse down event object - * @method handleMouseDown - */ - - Slider.prototype.handleMouseDown = function handleMouseDown(event) { - event.preventDefault(); - Dom.blockTextSelection(); - this.addClass('vjs-sliding'); - - this.on(_globalDocument2['default'], 'mousemove', this.handleMouseMove); - this.on(_globalDocument2['default'], 'mouseup', this.handleMouseUp); - this.on(_globalDocument2['default'], 'touchmove', this.handleMouseMove); - this.on(_globalDocument2['default'], '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() { - Dom.unblockTextSelection(); - this.removeClass('vjs-sliding'); - - this.off(_globalDocument2['default'], 'mousemove', this.handleMouseMove); - this.off(_globalDocument2['default'], 'mouseup', this.handleMouseUp); - this.off(_globalDocument2['default'], 'touchmove', this.handleMouseMove); - this.off(_globalDocument2['default'], '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 el = this.el_; - var box = Dom.findElPosition(el); - var boxW = el.offsetWidth; - var boxH = el.offsetHeight; - - if (this.vertical()) { - var boxY = box.top; - - var pageY = undefined; - if (event.changedTouches) { - pageY = event.changedTouches[0].pageY; - } else { - pageY = event.pageY; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (boxY - pageY + boxH) / boxH)); - } else { - var boxX = box.left; - - var pageX = undefined; - if (event.changedTouches) { - pageX = event.changedTouches[0].pageX; - } else { - pageX = event.pageX; - } - - // Percent that the click is through the adjusted area - return Math.max(0, Math.min(1, (pageX - boxX) / boxW)); - } - }; - - /** - * Handle on focus for slider - * - * @method handleFocus - */ - - Slider.prototype.handleFocus = function handleFocus() { - this.on(_globalDocument2['default'], 'keydown', this.handleKeyPress); - }; - - /** - * Handle key press for slider - * - * @param {Object} event Event object - * @method handleKeyPress - */ - - Slider.prototype.handleKeyPress = function handleKeyPress(event) { - if (event.which === 37 || event.which === 40) { - // Left and Down Arrows - event.preventDefault(); - this.stepBack(); - } else if (event.which === 38 || event.which === 39) { - // Up and Right Arrows - event.preventDefault(); - this.stepForward(); - } - }; - - /** - * Handle on blur for slider - * - * @method handleBlur - */ - - Slider.prototype.handleBlur = function handleBlur() { - this.off(_globalDocument2['default'], '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; -})(_componentJs2['default']); - -_componentJs2['default'].registerComponent('Slider', Slider); -exports['default'] = Slider; -module.exports = exports['default']; - -},{"../component.js":48,"../utils/dom.js":107,"global/document":1,"object.assign":40}],92:[function(_dereq_,module,exports){ -/** - * @file flash-rtmp.js - */ -'use strict'; - -exports.__esModule = true; -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.indexOf('&'); - var streamBegin = undefined; - 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 Flash can handle the source natively - * @param {Object} source The source object - * @return {String} 'probably', 'maybe', or '' (empty string) - */ - Flash.rtmpSourceHandler.canHandleSource = function (source) { - if (Flash.isStreamingType(source.type) || 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 - */ - Flash.rtmpSourceHandler.handleSource = function (source, tech) { - 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; -module.exports = exports['default']; - -},{}],93:[function(_dereq_,module,exports){ -/** - * @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 - */ - -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _tech = _dereq_('./tech'); - -var _tech2 = _interopRequireDefault(_tech); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsUrlJs = _dereq_('../utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _utilsTimeRangesJs = _dereq_('../utils/time-ranges.js'); - -var _flashRtmp = _dereq_('./flash-rtmp'); - -var _flashRtmp2 = _interopRequireDefault(_flashRtmp); - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -var navigator = _globalWindow2['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); - - _Tech.call(this, options, ready); - - // Set the source when 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 - _globalWindow2['default'].videojs = _globalWindow2['default'].videojs || {}; - _globalWindow2['default'].videojs.Flash = _globalWindow2['default'].videojs.Flash || {}; - _globalWindow2['default'].videojs.Flash.onReady = Flash.onReady; - _globalWindow2['default'].videojs.Flash.onEvent = Flash.onEvent; - _globalWindow2['default'].videojs.Flash.onError = Flash.onError; - - this.on('seeked', function () { - this.lastSeekTarget_ = undefined; - }); - } - - // Create setters and getters for attributes - - /** - * Create the component's DOM element - * - * @return {Element} - * @method createEl - */ - - Flash.prototype.createEl = function createEl() { - var options = this.options_; - - // Generate ID for swf object - var objId = options.techId; - - // Merge default flashvars with ones passed in to init - var flashVars = _objectAssign2['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 = _objectAssign2['default']({ - 'wmode': 'opaque', // Opaque is needed to overlay controls, but can affect playback performance - 'bgcolor': '#000000' // Using bgcolor prevents a white flash when the object is loading - }, options.params); - - // Merge default attributes with ones passed in - var attributes = _objectAssign2['default']({ - 'id': objId, - 'name': objId, // Both ID and Name needed or swf to identify itself - '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) { - // 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()) { - var tech = this; - this.setTimeout(function () { - tech.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; - } else { - return this.el_.vjs_getProperty('currentSrc'); - } - }; - - /** - * 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 _utilsTimeRangesJs.createTimeRange(); - } - return _utilsTimeRangesJs.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 _utilsTimeRangesJs.createTimeRange(); - } - return _utilsTimeRangesJs.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() { - return false; // Flash does not allow fullscreen through javascript - }; - - /** - * 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']); - -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,duration,startOffsetTime,paused,ended,videoTracks,audioTracks,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 Flash can handle the source natively - * - * @param {Object} source The source object - * @return {String} 'probably', 'maybe', or '' (empty string) - */ -Flash.nativeSourceHandler.canHandleSource = function (source) { - var type; - - 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(); - } - - if (type in Flash.formats) { - 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 - */ -Flash.nativeSourceHandler.handleSource = function (source, tech) { - 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); -}; - -// 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 _globalWindow2['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) {} - } - 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 = ''; - }); - - attributes = _objectAssign2['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 + ''; -}; - -// Run Flash through the RTMP decorator -_flashRtmp2['default'](Flash); - -_component2['default'].registerComponent('Flash', Flash); -exports['default'] = Flash; -module.exports = exports['default']; - -},{"../component":48,"../utils/dom.js":107,"../utils/time-ranges.js":115,"../utils/url.js":117,"./flash-rtmp":92,"./tech":96,"global/window":2,"object.assign":40}],94:[function(_dereq_,module,exports){ -/** - * @file html5.js - * HTML5 Media Controller - Wrapper for HTML5 Media API - */ - -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _techJs = _dereq_('./tech.js'); - -var _techJs2 = _interopRequireDefault(_techJs); - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsDomJs = _dereq_('../utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsUrlJs = _dereq_('../utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsLogJs = _dereq_('../utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsBrowserJs = _dereq_('../utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -var _utilsMergeOptionsJs = _dereq_('../utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -/** - * 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); - - _Tech.call(this, options, ready); - - var source = options.source; - - // 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); - } - - 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 { - this.remoteTextTracks().addTrack_(node.track); - } - } - } - - for (var i = 0; i < removeNodes.length; i++) { - this.el_.removeChild(removeNodes[i]); - } - } - - if (this.featuresNativeTextTracks) { - 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 && options.nativeControlsForTouch === true || browser.IS_IPHONE || browser.IS_NATIVE_ANDROID) { - this.setControls(true); - } - - this.triggerReady(); - } - - /* HTML5 Support Testing ---------------------------------------------------- */ - - /* - * Element for testing browser HTML5 video capabilities - * - * @type {Element} - * @constant - * @private - */ - - /** - * Dispose of html5 media element - * - * @method dispose - */ - - Html5.prototype.dispose = function dispose() { - var tt = this.el().textTracks; - var emulatedTt = this.textTracks(); - - // remove native event listeners - if (tt && tt.removeEventListener) { - tt.removeEventListener('change', this.handleTextTrackChange_); - tt.removeEventListener('addtrack', this.handleTextTrackAdd_); - tt.removeEventListener('removetrack', this.handleTextTrackRemove_); - } - - // clearout the emulated text track list. - var i = emulatedTt.length; - - while (i--) { - emulatedTt.removeTrack_(emulatedTt[i]); - } - - Html5.disposeMediaElement(this.el_); - _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 = _globalDocument2['default'].createElement('video'); - - // determine if native controls should be used - var tagAttributes = this.options_.tag && Dom.getElAttributes(this.options_.tag); - var attributes = _utilsMergeOptionsJs2['default']({}, tagAttributes); - if (!browser.TOUCH_ENABLED || this.options_.nativeControlsForTouch !== true) { - delete attributes.controls; - } - - Dom.setElAttributes(el, _objectAssign2['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; - }; - - Html5.prototype.proxyNativeTextTracks_ = function proxyNativeTextTracks_() { - var tt = this.el().textTracks; - - if (tt && tt.addEventListener) { - tt.addEventListener('change', this.handleTextTrackChange_); - tt.addEventListener('addtrack', this.handleTextTrackAdd_); - tt.addEventListener('removetrack', this.handleTextTrackRemove_); - } - }; - - 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); - }; - - /** - * Play for html5 tech - * - * @method play - */ - - Html5.prototype.play = function play() { - this.el_.play(); - }; - - /** - * 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) { - _utilsLogJs2['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 = _globalWindow2['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; - } else { - // 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(); - }; - - /** - * Get current source - * - * @return {Object} - * @method currentSrc - */ - - Html5.prototype.currentSrc = function currentSrc() { - 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 and returns a remote text track object - * - * @param {Object} options The object should contain values for - * kind, language, label and src (location of the WebVTT file) - * @return {TextTrackObject} - * @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 track = _globalDocument2['default'].createElement('track'); - - if (options['kind']) { - track['kind'] = options['kind']; - } - if (options['label']) { - track['label'] = options['label']; - } - if (options['language'] || options['srclang']) { - track['srclang'] = options['language'] || options['srclang']; - } - if (options['default']) { - track['default'] = options['default']; - } - if (options['id']) { - track['id'] = options['id']; - } - if (options['src']) { - track['src'] = options['src']; - } - - this.el().appendChild(track); - - this.remoteTextTracks().addTrack_(track.track); - - return track; - }; - - /** - * 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 tracks, i; - - this.remoteTextTracks().removeTrack_(track); - - tracks = this.el().querySelectorAll('track'); - - i = tracks.length; - while (i--) { - if (track === tracks[i] || track === tracks[i].track) { - this.el().removeChild(tracks[i]); - } - } - }; - - return Html5; -})(_techJs2['default']); - -Html5.TEST_VID = _globalDocument2['default'].createElement('video'); -var track = _globalDocument2['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 -_techJs2['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 handle the source natively - * - * @param {Object} source The source object - * @return {String} 'probably', 'maybe', or '' (empty string) - */ -Html5.nativeSourceHandler.canHandleSource = function (source) { - var match, ext; - - function canPlayType(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 ''; - } - } - - // If a type was provided we should rely on that - if (source.type) { - return canPlayType(source.type); - } else if (source.src) { - // If no type, fall back to checking 'video/[EXTENSION]' - ext = Url.getFileExtension(source.src); - - return 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 - */ -Html5.nativeSourceHandler.handleSource = function (source, tech) { - 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 () { - var volume = Html5.TEST_VID.volume; - Html5.TEST_VID.volume = volume / 2 + 0.1; - return volume !== Html5.TEST_VID.volume; -}; - -/* - * Check if playbackRate is supported in this browser/device. - * - * @return {Number} [description] - */ -Html5.canControlPlaybackRate = function () { - var playbackRate = Html5.TEST_VID.playbackRate; - Html5.TEST_VID.playbackRate = playbackRate / 2 + 0.1; - return playbackRate !== Html5.TEST_VID.playbackRate; -}; - -/* - * Check to see if native text tracks are supported by this browser/device - * - * @return {Boolean} - */ -Html5.supportsNativeTextTracks = function () { - var supportsTextTracks; - - // 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; -}; - -/** - * 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(); - -// HTML5 Feature detection and Device Fixes --------------------------------- // -var canPlayType = undefined; -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 - } - })(); - } -}; - -_component2['default'].registerComponent('Html5', Html5); -exports['default'] = Html5; -module.exports = exports['default']; - -},{"../component":48,"../utils/browser.js":104,"../utils/dom.js":107,"../utils/fn.js":109,"../utils/log.js":112,"../utils/merge-options.js":113,"../utils/url.js":117,"./tech.js":96,"global/document":1,"global/window":2,"object.assign":40}],95:[function(_dereq_,module,exports){ -/** - * @file loader.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _utilsToTitleCaseJs = _dereq_('../utils/to-title-case.js'); - -var _utilsToTitleCaseJs2 = _interopRequireDefault(_utilsToTitleCaseJs); - -/** - * 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); - - _Component.call(this, player, options, ready); - - // If there are no sources when the player is initialized, - // load the first supported playback technology. - - if (!options.playerOptions['sources'] || options.playerOptions['sources'].length === 0) { - for (var i = 0, j = options.playerOptions['techOrder']; i < j.length; i++) { - var techName = _utilsToTitleCaseJs2['default'](j[i]); - var 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 MediaLoader; -})(_component2['default']); - -_component2['default'].registerComponent('MediaLoader', MediaLoader); -exports['default'] = MediaLoader; -module.exports = exports['default']; - -},{"../component":48,"../utils/to-title-case.js":116,"global/window":2}],96:[function(_dereq_,module,exports){ -/** - * @file tech.js - * Media Technology Controller - Base class for media playback - * technology controllers like Flash and HTML5 - */ - -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _tracksTextTrack = _dereq_('../tracks/text-track'); - -var _tracksTextTrack2 = _interopRequireDefault(_tracksTextTrack); - -var _tracksTextTrackList = _dereq_('../tracks/text-track-list'); - -var _tracksTextTrackList2 = _interopRequireDefault(_tracksTextTrackList); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsLogJs = _dereq_('../utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsTimeRangesJs = _dereq_('../utils/time-ranges.js'); - -var _utilsBufferJs = _dereq_('../utils/buffer.js'); - -var _mediaErrorJs = _dereq_('../media-error.js'); - -var _mediaErrorJs2 = _interopRequireDefault(_mediaErrorJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/** - * 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; - _Component.call(this, null, options, ready); - - // keep track of whether the current source has played at all to - // implement a very limited played() - this.hasStarted_ = false; - this.on('playing', function () { - this.hasStarted_ = true; - }); - this.on('loadstart', function () { - this.hasStarted_ = false; - }); - - this.textTracks_ = options.textTracks; - - // 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(); - } - - this.initControlsListeners(); - - if (options.nativeCaptions === false || options.nativeTextTracks === false) { - this.featuresNativeTextTracks = false; - } - - if (!this.featuresNativeTextTracks) { - this.emulateTextTracks(); - } - - this.initTextTrackListeners(); - - // Turn on component tap events - this.emitTapEvents(); - } - - /* - * List of associated text tracks - * - * @type {Array} - * @private - */ - - /** - * 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 - * - * @method initControlsListeners - */ - - Tech.prototype.initControlsListeners = function initControlsListeners() { - // 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. - // Long term we might consider how we would do this for other events like 'canplay' - // that may also have fired. - this.ready(function () { - if (this.networkState && this.networkState() > 0) { - this.trigger('loadstart'); - } - // Allow the tech ready event to handle synchronisity - }, true); - }; - - /* 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 _utilsTimeRangesJs.createTimeRange(0, 0); - }; - - /** - * Get buffered percent - * - * @return {Number} - * @method bufferedPercent - */ - - Tech.prototype.bufferedPercent = function bufferedPercent() { - return _utilsBufferJs.bufferedPercent(this.buffered(), this.duration_); - }; - - /** - * Stops tracking progress by clearing progress interval - * - * @method stopTrackingProgress - */ - - Tech.prototype.stopTrackingProgress = function stopTrackingProgress() { - this.clearInterval(this.progressInterval); - }; - - /*! Time Tracking -------------------------------------------------------------- */ - /** - * 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 }); - }, 250); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15 - }; - - /** - * 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 text tracks because we can't reuse them between techs - var textTracks = this.textTracks(); - - if (textTracks) { - var i = textTracks.length; - while (i--) { - this.removeRemoteTextTrack(textTracks[i]); - } - } - - // Turn off any manual progress or timeupdate tracking - if (this.manualProgress) { - this.manualProgressOff(); - } - - if (this.manualTimeUpdates) { - this.manualTimeUpdatesOff(); - } - - _Component.prototype.dispose.call(this); - }; - - /** - * 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) { - if (err instanceof _mediaErrorJs2['default']) { - this.error_ = err; - } else { - this.error_ = new _mediaErrorJs2['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 _utilsTimeRangesJs.createTimeRange(0, 0); - } - return _utilsTimeRangesJs.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); - })); - }; - - /** - * Emulate texttracks - * - * @method emulateTextTracks - */ - - Tech.prototype.emulateTextTracks = function emulateTextTracks() { - if (!_globalWindow2['default']['WebVTT'] && this.el().parentNode != null) { - var script = _globalDocument2['default'].createElement('script'); - script.src = this.options_['vtt.js'] || '../node_modules/vtt.js/dist/vtt.js'; - this.el().parentNode.appendChild(script); - _globalWindow2['default']['WebVTT'] = true; - } - - var tracks = this.textTracks(); - if (!tracks) { - return; - } - - var textTracksChanges = Fn.bind(this, function () { - var _this = this; - - var updateDisplay = function updateDisplay() { - return _this.trigger('texttrackchange'); - }; - - 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); - } - } - }); - - tracks.addEventListener('change', textTracksChanges); - - this.on('dispose', function () { - tracks.removeEventListener('change', textTracksChanges); - }); - }; - - /* - * 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 _tracksTextTrackList2['default'](); - return this.textTracks_; - }; - - /** - * Get remote texttracks - * - * @returns {TextTrackList} - * @method remoteTextTracks - */ - - Tech.prototype.remoteTextTracks = function remoteTextTracks() { - this.remoteTextTracks_ = this.remoteTextTracks_ || new _tracksTextTrackList2['default'](); - return this.remoteTextTracks_; - }; - - /** - * 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 and returns a remote text track object - * - * @param {Object} options The object should contain values for - * kind, language, label and src (location of the WebVTT file) - * @return {TextTrackObject} - * @method addRemoteTextTrack - */ - - Tech.prototype.addRemoteTextTrack = function addRemoteTextTrack(options) { - var track = createTrackHelper(this, options.kind, options.label, options.language, options); - this.remoteTextTracks().addTrack_(track); - return { - track: track - }; - }; - - /** - * Remove remote texttrack - * - * @param {TextTrackObject} track Texttrack to remove - * @method removeRemoteTextTrack - */ - - Tech.prototype.removeRemoteTextTrack = function removeRemoteTextTrack(track) { - this.textTracks().removeTrack_(track); - 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() {}; - - return Tech; -})(_component2['default']); - -Tech.prototype.textTracks_; - -var createTrackHelper = 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 _tracksTextTrack2['default'](options); - tracks.addTrack_(track); - - return track; -}; - -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); - }; - - /* - * Return the first source handler that supports the source - * TODO: Answer question: should 'probably' be prioritized over 'maybe' - * @param {Object} source The source object - * @returns {Object} The first source handler that supports the source - * @returns {null} Null if no source handler is found - */ - _Tech.selectSourceHandler = function (source) { - var handlers = _Tech.sourceHandlers || []; - var can = undefined; - - for (var i = 0; i < handlers.length; i++) { - can = handlers[i].canHandleSource(source); - - if (can) { - return handlers[i]; - } - } - - return null; - }; - - /* - * Check if the tech can support the given source - * @param {Object} srcObj The source object - * @return {String} 'probably', 'maybe', or '' (empty string) - */ - _Tech.canPlaySource = function (srcObj) { - var sh = _Tech.selectSourceHandler(srcObj); - - if (sh) { - return sh.canHandleSource(srcObj); - } - - return ''; - }; - - var originalSeekable = _Tech.prototype.seekable; - - // when a source handler is registered, prefer its implementation of - // seekable when present. - _Tech.prototype.seekable = function () { - if (this.sourceHandler_ && this.sourceHandler_.seekable) { - return this.sourceHandler_.seekable(); - } - return originalSeekable.call(this); - }; - - /* - * 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); - - if (!sh) { - // Fall back to a native source hander when unsupported sources are - // deliberately set - if (_Tech.nativeSourceHandler) { - sh = _Tech.nativeSourceHandler; - } else { - _utilsLogJs2['default'].error('No source hander found for the current source.'); - } - } - - // Dispose any existing source handler - this.disposeSourceHandler(); - this.off('dispose', this.disposeSourceHandler); - - this.currentSource_ = source; - this.sourceHandler_ = sh.handleSource(source, this); - this.on('dispose', this.disposeSourceHandler); - - return this; - }; - - /* - * Clean up any existing source handler - */ - _Tech.prototype.disposeSourceHandler = function () { - if (this.sourceHandler_ && this.sourceHandler_.dispose) { - this.sourceHandler_.dispose(); - } - }; -}; - -_component2['default'].registerComponent('Tech', Tech); -// Old name for Tech -_component2['default'].registerComponent('MediaTechController', Tech); -exports['default'] = Tech; -module.exports = exports['default']; - -},{"../component":48,"../media-error.js":83,"../tracks/text-track":103,"../tracks/text-track-list":101,"../utils/buffer.js":105,"../utils/fn.js":109,"../utils/log.js":112,"../utils/time-ranges.js":115,"global/document":1,"global/window":2}],97:[function(_dereq_,module,exports){ -/** - * @file text-track-cue-list.js - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsBrowserJs = _dereq_('../utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/* - * 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); - * }; - */ - -var TextTrackCueList = function TextTrackCueList(cues) { - var list = this; - - if (browser.IS_IE8) { - list = _globalDocument2['default'].createElement('custom'); - - for (var prop in TextTrackCueList.prototype) { - 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; - } -}; - -TextTrackCueList.prototype.setCues_ = function (cues) { - var oldLength = this.length || 0; - var i = 0; - var l = cues.length; - - this.cues_ = cues; - this.length_ = cues.length; - - var defineProp = function defineProp(i) { - if (!('' + i in this)) { - Object.defineProperty(this, '' + i, { - get: function get() { - return this.cues_[i]; - } - }); - } - }; - - if (oldLength < l) { - i = oldLength; - - for (; i < l; i++) { - defineProp.call(this, i); - } - } -}; - -TextTrackCueList.prototype.getCueById = function (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; -}; - -exports['default'] = TextTrackCueList; -module.exports = exports['default']; - -},{"../utils/browser.js":104,"global/document":1}],98:[function(_dereq_,module,exports){ -/** - * @file text-track-display.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _menuMenuJs = _dereq_('../menu/menu.js'); - -var _menuMenuJs2 = _interopRequireDefault(_menuMenuJs); - -var _menuMenuItemJs = _dereq_('../menu/menu-item.js'); - -var _menuMenuItemJs2 = _interopRequireDefault(_menuMenuItemJs); - -var _menuMenuButtonJs = _dereq_('../menu/menu-button.js'); - -var _menuMenuButtonJs2 = _interopRequireDefault(_menuMenuButtonJs); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -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' -}; - -/** - * 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); - - _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++) { - var track = tracks[i]; - this.player_.addRemoteTextTrack(track); - } - })); - } - - /** - * 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 - */ - - /** - * 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' - }); - }; - - /** - * Clear display texttracks - * - * @method clearDisplay - */ - - TextTrackDisplay.prototype.clearDisplay = function clearDisplay() { - if (typeof _globalWindow2['default']['WebVTT'] === 'function') { - _globalWindow2['default']['WebVTT']['processCues'](_globalWindow2['default'], [], this.el_); - } - }; - - /** - * Update display texttracks - * - * @method updateDisplay - */ - - TextTrackDisplay.prototype.updateDisplay = function updateDisplay() { - var tracks = this.player_.textTracks(); - - this.clearDisplay(); - - if (!tracks) { - return; - } - - for (var i = 0; i < tracks.length; i++) { - var track = tracks[i]; - if (track['mode'] === 'showing') { - this.updateForTrack(track); - } - } - }; - - /** - * 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 _globalWindow2['default']['WebVTT'] !== 'function' || !track['activeCues']) { - return; - } - - var overrides = this.player_['textTrackSettings'].getValues(); - - var cues = []; - for (var _i = 0; _i < track['activeCues'].length; _i++) { - cues.push(track['activeCues'][_i]); - } - - _globalWindow2['default']['WebVTT']['processCues'](_globalWindow2['default'], track['activeCues'], this.el_); - - var i = cues.length; - while (i--) { - var cueDiv = cues[i].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 = _globalWindow2['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']); - -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) {} -} - -_component2['default'].registerComponent('TextTrackDisplay', TextTrackDisplay); -exports['default'] = TextTrackDisplay; -module.exports = exports['default']; - -},{"../component":48,"../menu/menu-button.js":84,"../menu/menu-item.js":85,"../menu/menu.js":86,"../utils/fn.js":109,"global/document":1,"global/window":2}],99:[function(_dereq_,module,exports){ -/** - * @file text-track-enums.js - * - * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode - * - * enum TextTrackMode { "disabled", "hidden", "showing" }; - */ -'use strict'; - -exports.__esModule = true; -var TextTrackMode = { - 'disabled': 'disabled', - 'hidden': 'hidden', - 'showing': 'showing' -}; - -/* - * https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackkind - * - * enum TextTrackKind { "subtitles", "captions", "descriptions", "chapters", "metadata" }; - */ -var TextTrackKind = { - 'subtitles': 'subtitles', - 'captions': 'captions', - 'descriptions': 'descriptions', - 'chapters': 'chapters', - 'metadata': 'metadata' -}; - -exports.TextTrackMode = TextTrackMode; -exports.TextTrackKind = TextTrackKind; - -},{}],100:[function(_dereq_,module,exports){ -/** - * 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 - */ -'use strict'; - -exports.__esModule = true; -var trackToJson_ = function trackToJson_(track) { - return { - kind: track.kind, - label: track.label, - language: track.language, - id: track.id, - inBandMetadataTrackDispatchType: track.inBandMetadataTrackDispatchType, - mode: track.mode, - cues: track.cues && Array.prototype.map.call(track.cues, function (cue) { - return { - startTime: cue.startTime, - endTime: cue.endTime, - text: cue.text, - id: cue.id - }; - }), - src: track.src - }; -}; - -/** - * 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.el().querySelectorAll('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); - 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_ }; -module.exports = exports['default']; - -},{}],101:[function(_dereq_,module,exports){ -/** - * @file text-track-list.js - */ -'use strict'; - -exports.__esModule = true; - -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 }; } - -var _eventTarget = _dereq_('../event-target'); - -var _eventTarget2 = _interopRequireDefault(_eventTarget); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsBrowserJs = _dereq_('../utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/* - * 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; - * }; - */ -var TextTrackList = function TextTrackList(tracks) { - var list = this; - - if (browser.IS_IE8) { - list = _globalDocument2['default'].createElement('custom'); - - for (var prop in TextTrackList.prototype) { - list[prop] = TextTrackList.prototype[prop]; - } - } - - tracks = tracks || []; - 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]); - } - - if (browser.IS_IE8) { - return list; - } -}; - -TextTrackList.prototype = Object.create(_eventTarget2['default'].prototype); -TextTrackList.prototype.constructor = TextTrackList; - -/* - * 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. - */ -TextTrackList.prototype.allowedEvents_ = { - 'change': 'change', - 'addtrack': 'addtrack', - 'removetrack': 'removetrack' -}; - -// emulate attribute EventHandler support to allow for feature detection -for (var _event in TextTrackList.prototype.allowedEvents_) { - TextTrackList.prototype['on' + _event] = null; -} - -TextTrackList.prototype.addTrack_ = function (track) { - var index = this.tracks_.length; - if (!('' + index in this)) { - Object.defineProperty(this, index, { - get: function get() { - return this.tracks_[index]; - } - }); - } - - track.addEventListener('modechange', Fn.bind(this, function () { - this.trigger('change'); - })); - this.tracks_.push(track); - - this.trigger({ - type: 'addtrack', - track: track - }); -}; - -TextTrackList.prototype.removeTrack_ = function (rtrack) { - var result = null; - var track = undefined; - - for (var i = 0, l = this.length; i < l; i++) { - track = this[i]; - if (track === rtrack) { - this.tracks_.splice(i, 1); - break; - } - } - - this.trigger({ - type: 'removetrack', - track: track - }); -}; - -TextTrackList.prototype.getTrackById = function (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; -}; - -exports['default'] = TextTrackList; -module.exports = exports['default']; - -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"global/document":1}],102:[function(_dereq_,module,exports){ -/** - * @file text-track-settings.js - */ -'use strict'; - -exports.__esModule = true; - -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 _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; } - -var _component = _dereq_('../component'); - -var _component2 = _interopRequireDefault(_component); - -var _utilsEventsJs = _dereq_('../utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsLogJs = _dereq_('../utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _safeJsonParseTuple = _dereq_('safe-json-parse/tuple'); - -var _safeJsonParseTuple2 = _interopRequireDefault(_safeJsonParseTuple); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/** - * 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); - - _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.el().querySelector('.vjs-done-button'), 'click', Fn.bind(this, function () { - this.saveSettings(); - this.hide(); - })); - - Events.on(this.el().querySelector('.vjs-default-button'), 'click', Fn.bind(this, function () { - this.el().querySelector('.vjs-fg-color > select').selectedIndex = 0; - this.el().querySelector('.vjs-bg-color > select').selectedIndex = 0; - this.el().querySelector('.window-color > select').selectedIndex = 0; - this.el().querySelector('.vjs-text-opacity > select').selectedIndex = 0; - this.el().querySelector('.vjs-bg-opacity > select').selectedIndex = 0; - this.el().querySelector('.vjs-window-opacity > select').selectedIndex = 0; - this.el().querySelector('.vjs-edge-style select').selectedIndex = 0; - this.el().querySelector('.vjs-font-family select').selectedIndex = 0; - this.el().querySelector('.vjs-font-percent select').selectedIndex = 2; - this.updateDisplay(); - })); - - Events.on(this.el().querySelector('.vjs-fg-color > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-bg-color > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.window-color > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-text-opacity > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-bg-opacity > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-window-opacity > select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-font-percent select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-edge-style select'), 'change', Fn.bind(this, this.updateDisplay)); - Events.on(this.el().querySelector('.vjs-font-family select'), 'change', Fn.bind(this, this.updateDisplay)); - - if (this.options_.persistTextTrackSettings) { - this.restoreSettings(); - } - } - - /** - * Create the component's DOM element - * - * @return {Element} - * @method createEl - */ - - TextTrackSettings.prototype.createEl = function createEl() { - return _Component.prototype.createEl.call(this, 'div', { - className: 'vjs-caption-settings vjs-modal-overlay', - innerHTML: captionOptionsMenuTemplate() - }); - }; - - /** - * 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 el = this.el(); - - var textEdge = getSelectedOptionValue(el.querySelector('.vjs-edge-style select')); - var fontFamily = getSelectedOptionValue(el.querySelector('.vjs-font-family select')); - var fgColor = getSelectedOptionValue(el.querySelector('.vjs-fg-color > select')); - var textOpacity = getSelectedOptionValue(el.querySelector('.vjs-text-opacity > select')); - var bgColor = getSelectedOptionValue(el.querySelector('.vjs-bg-color > select')); - var bgOpacity = getSelectedOptionValue(el.querySelector('.vjs-bg-opacity > select')); - var windowColor = getSelectedOptionValue(el.querySelector('.window-color > select')); - var windowOpacity = getSelectedOptionValue(el.querySelector('.vjs-window-opacity > select')); - var fontPercent = _globalWindow2['default']['parseFloat'](getSelectedOptionValue(el.querySelector('.vjs-font-percent > select'))); - - var result = { - 'backgroundOpacity': bgOpacity, - 'textOpacity': textOpacity, - 'windowOpacity': windowOpacity, - 'edgeStyle': textEdge, - 'fontFamily': fontFamily, - 'color': fgColor, - 'backgroundColor': bgColor, - 'windowColor': windowColor, - 'fontPercent': fontPercent - }; - 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) { - var el = this.el(); - - setSelectedOption(el.querySelector('.vjs-edge-style select'), values.edgeStyle); - setSelectedOption(el.querySelector('.vjs-font-family select'), values.fontFamily); - setSelectedOption(el.querySelector('.vjs-fg-color > select'), values.color); - setSelectedOption(el.querySelector('.vjs-text-opacity > select'), values.textOpacity); - setSelectedOption(el.querySelector('.vjs-bg-color > select'), values.backgroundColor); - setSelectedOption(el.querySelector('.vjs-bg-opacity > select'), values.backgroundOpacity); - setSelectedOption(el.querySelector('.window-color > select'), values.windowColor); - setSelectedOption(el.querySelector('.vjs-window-opacity > select'), values.windowOpacity); - - var fontPercent = values.fontPercent; - - if (fontPercent) { - fontPercent = fontPercent.toFixed(2); - } - - setSelectedOption(el.querySelector('.vjs-font-percent > select'), fontPercent); - }; - - /** - * Restore texttrack settings - * - * @method restoreSettings - */ - - TextTrackSettings.prototype.restoreSettings = function restoreSettings() { - var _safeParseTuple = _safeJsonParseTuple2['default'](_globalWindow2['default'].localStorage.getItem('vjs-text-track-settings')); - - var err = _safeParseTuple[0]; - var values = _safeParseTuple[1]; - - if (err) { - _utilsLogJs2['default'].error(err); - } - - 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) { - _globalWindow2['default'].localStorage.setItem('vjs-text-track-settings', JSON.stringify(values)); - } else { - _globalWindow2['default'].localStorage.removeItem('vjs-text-track-settings'); - } - } catch (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); - -function getSelectedOptionValue(target) { - var selectedOption = undefined; - // 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 = undefined; - for (i = 0; i < target.options.length; i++) { - var option = target.options[i]; - if (option.value === value) { - break; - } - } - - target.selectedIndex = i; -} - -function captionOptionsMenuTemplate() { - var template = '
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    '; - - return template; -} - -exports['default'] = TextTrackSettings; -module.exports = exports['default']; - -},{"../component":48,"../utils/events.js":108,"../utils/fn.js":109,"../utils/log.js":112,"global/window":2,"safe-json-parse/tuple":45}],103:[function(_dereq_,module,exports){ -/** - * @file text-track.js - */ -'use strict'; - -exports.__esModule = true; - -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 }; } - -var _textTrackCueList = _dereq_('./text-track-cue-list'); - -var _textTrackCueList2 = _interopRequireDefault(_textTrackCueList); - -var _utilsFnJs = _dereq_('../utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _utilsGuidJs = _dereq_('../utils/guid.js'); - -var Guid = _interopRequireWildcard(_utilsGuidJs); - -var _utilsBrowserJs = _dereq_('../utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _textTrackEnums = _dereq_('./text-track-enums'); - -var TextTrackEnum = _interopRequireWildcard(_textTrackEnums); - -var _utilsLogJs = _dereq_('../utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _eventTarget = _dereq_('../event-target'); - -var _eventTarget2 = _interopRequireDefault(_eventTarget); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _xhrJs = _dereq_('../xhr.js'); - -var _xhrJs2 = _interopRequireDefault(_xhrJs); - -/* - * 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; - * }; - */ -var TextTrack = function TextTrack() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - if (!options.tech) { - throw new Error('A tech was not provided.'); - } - - var tt = this; - if (browser.IS_IE8) { - tt = _globalDocument2['default'].createElement('custom'); - - for (var prop in TextTrack.prototype) { - tt[prop] = TextTrack.prototype[prop]; - } - } - - tt.tech_ = options.tech; - - var mode = TextTrackEnum.TextTrackMode[options['mode']] || 'disabled'; - var kind = TextTrackEnum.TextTrackKind[options['kind']] || 'subtitles'; - var label = options['label'] || ''; - var language = options['language'] || options['srclang'] || ''; - var id = options['id'] || 'vjs_text_track_' + Guid.newGUID(); - - if (kind === 'metadata' || kind === 'chapters') { - mode = 'hidden'; - } - - 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 () { - this['activeCues']; - if (changed) { - this['trigger']('cuechange'); - changed = false; - } - }); - if (mode !== 'disabled') { - tt.tech_.on('timeupdate', timeupdateHandler); - } - - Object.defineProperty(tt, 'kind', { - get: function get() { - return kind; - }, - set: Function.prototype - }); - - Object.defineProperty(tt, 'label', { - get: function get() { - return label; - }, - set: Function.prototype - }); - - Object.defineProperty(tt, 'language', { - get: function get() { - return language; - }, - set: Function.prototype - }); - - Object.defineProperty(tt, 'id', { - get: function get() { - return id; - }, - set: Function.prototype - }); - - Object.defineProperty(tt, 'mode', { - get: function get() { - return mode; - }, - set: function set(newMode) { - if (!TextTrackEnum.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.prototype - }); - - Object.defineProperty(tt, 'activeCues', { - get: function get() { - if (!this.loaded_) { - return null; - } - - if (this['cues'].length === 0) { - return activeCues; // nothing to do - } - - 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 (indexOf.call(this.activeCues_, active[i]) === -1) { - changed = true; - } - } - } - - this.activeCues_ = active; - activeCues.setCues_(this.activeCues_); - - return activeCues; - }, - set: Function.prototype - }); - - if (options.src) { - tt.src = options.src; - loadTrack(options.src, tt); - } else { - tt.loaded_ = true; - } - - if (browser.IS_IE8) { - return tt; - } -}; - -TextTrack.prototype = Object.create(_eventTarget2['default'].prototype); -TextTrack.prototype.constructor = TextTrack; - -/* - * cuechange - One or more cues in the track have become active or stopped being active. - */ -TextTrack.prototype.allowedEvents_ = { - 'cuechange': 'cuechange' -}; - -TextTrack.prototype.addCue = function (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_); -}; - -TextTrack.prototype.removeCue = function (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_); - } -}; - -/* -* Downloading stuff happens below this point -*/ -var parseCues = function parseCues(srcContent, track) { - if (typeof _globalWindow2['default']['WebVTT'] !== 'function') { - //try again a bit later - return _globalWindow2['default'].setTimeout(function () { - parseCues(srcContent, track); - }, 25); - } - - var parser = new _globalWindow2['default']['WebVTT']['Parser'](_globalWindow2['default'], _globalWindow2['default']['vttjs'], _globalWindow2['default']['WebVTT']['StringDecoder']()); - - parser['oncue'] = function (cue) { - track.addCue(cue); - }; - parser['onparsingerror'] = function (error) { - _utilsLogJs2['default'].error(error); - }; - - parser['parse'](srcContent); - parser['flush'](); -}; - -var loadTrack = function loadTrack(src, track) { - _xhrJs2['default'](src, Fn.bind(this, function (err, response, responseBody) { - if (err) { - return _utilsLogJs2['default'].error(err, response); - } - - track.loaded_ = true; - parseCues(responseBody, track); - })); -}; - -var indexOf = function indexOf(searchElement, fromIndex) { - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - var O = Object(this); - - var len = O.length >>> 0; - - if (len === 0) { - return -1; - } - - var n = +fromIndex || 0; - - if (Math.abs(n) === Infinity) { - n = 0; - } - - if (n >= len) { - return -1; - } - - var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); - - while (k < len) { - if (k in O && O[k] === searchElement) { - return k; - } - k++; - } - return -1; -}; - -exports['default'] = TextTrack; -module.exports = exports['default']; - -},{"../event-target":79,"../utils/browser.js":104,"../utils/fn.js":109,"../utils/guid.js":111,"../utils/log.js":112,"../xhr.js":119,"./text-track-cue-list":97,"./text-track-enums":99,"global/document":1,"global/window":2}],104:[function(_dereq_,module,exports){ -/** - * @file browser.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var USER_AGENT = _globalWindow2['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_IPHONE = /iPhone/i.test(USER_AGENT); -exports.IS_IPHONE = IS_IPHONE; -var IS_IPAD = /iPad/i.test(USER_AGENT); -exports.IS_IPAD = IS_IPAD; -var IS_IPOD = /iPod/i.test(USER_AGENT); -exports.IS_IPOD = IS_IPOD; -var IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD; - -exports.IS_IOS = IS_IOS; -var IOS_VERSION = (function () { - var match = USER_AGENT.match(/OS (\d+)_/i); - if (match && match[1]) { - return match[1]; - } -})(); - -exports.IOS_VERSION = IOS_VERSION; -var IS_ANDROID = /Android/i.test(USER_AGENT); -exports.IS_ANDROID = IS_ANDROID; -var 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), - major, - minor; - - if (!match) { - return null; - } - - major = match[1] && parseFloat(match[1]); - minor = match[2] && parseFloat(match[2]); - - if (major && minor) { - return parseFloat(match[1] + '.' + match[2]); - } else if (major) { - return major; - } else { - return null; - } -})(); -exports.ANDROID_VERSION = ANDROID_VERSION; -// Old Android is defined as Version older than 2.3, and requiring a webkit version of the android browser -var IS_OLD_ANDROID = IS_ANDROID && /webkit/i.test(USER_AGENT) && ANDROID_VERSION < 2.3; -exports.IS_OLD_ANDROID = IS_OLD_ANDROID; -var IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537; - -exports.IS_NATIVE_ANDROID = IS_NATIVE_ANDROID; -var IS_FIREFOX = /Firefox/i.test(USER_AGENT); -exports.IS_FIREFOX = IS_FIREFOX; -var IS_CHROME = /Chrome/i.test(USER_AGENT); -exports.IS_CHROME = IS_CHROME; -var IS_IE8 = /MSIE\s8\.0/.test(USER_AGENT); - -exports.IS_IE8 = IS_IE8; -var TOUCH_ENABLED = !!('ontouchstart' in _globalWindow2['default'] || _globalWindow2['default'].DocumentTouch && _globalDocument2['default'] instanceof _globalWindow2['default'].DocumentTouch); -exports.TOUCH_ENABLED = TOUCH_ENABLED; -var BACKGROUND_SIZE_SUPPORTED = ('backgroundSize' in _globalDocument2['default'].createElement('video').style); -exports.BACKGROUND_SIZE_SUPPORTED = BACKGROUND_SIZE_SUPPORTED; - -},{"global/document":1,"global/window":2}],105:[function(_dereq_,module,exports){ -/** - * @file buffer.js - */ -'use strict'; - -exports.__esModule = true; -exports.bufferedPercent = bufferedPercent; - -var _timeRangesJs = _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, - start, - end; - - if (!duration) { - return 0; - } - - if (!buffered || !buffered.length) { - buffered = _timeRangesJs.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; -} - -},{"./time-ranges.js":115}],106:[function(_dereq_,module,exports){ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _logJs = _dereq_('./log.js'); - -var _logJs2 = _interopRequireDefault(_logJs); - -/** - * Object containing the default behaviors for available handler methods. - * - * @private - * @type {Object} - */ -var defaultBehaviors = { - get: function get(obj, key) { - return obj[key]; - }, - set: function set(obj, key, value) { - obj[key] = value; - return true; - } -}; - -/** - * Expose private objects publicly using a Proxy to log deprecation warnings. - * - * Browsers that do not support Proxy objects will simply return the `target` - * object, so it can be directly exposed. - * - * @param {Object} target The target object. - * @param {Object} messages Messages to display from a Proxy. Only operations - * with an associated message will be proxied. - * @param {String} [messages.get] - * @param {String} [messages.set] - * @return {Object} A Proxy if supported or the `target` argument. - */ - -exports['default'] = function (target) { - var messages = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - if (typeof Proxy === 'function') { - var _ret = (function () { - var handler = {}; - - // Build a handler object based on those keys that have both messages - // and default behaviors. - Object.keys(messages).forEach(function (key) { - if (defaultBehaviors.hasOwnProperty(key)) { - handler[key] = function () { - _logJs2['default'].warn(messages[key]); - return defaultBehaviors[key].apply(this, arguments); - }; - } - }); - - return { - v: new Proxy(target, handler) - }; - })(); - - if (typeof _ret === 'object') return _ret.v; - } - return target; -}; - -module.exports = exports['default']; - -},{"./log.js":112}],107:[function(_dereq_,module,exports){ -/** - * @file dom.js - */ -'use strict'; - -exports.__esModule = true; -exports.getEl = getEl; -exports.createEl = createEl; -exports.insertElFirst = insertElFirst; -exports.getElData = getElData; -exports.hasElData = hasElData; -exports.removeElData = removeElData; -exports.hasElClass = hasElClass; -exports.addElClass = addElClass; -exports.removeElClass = removeElClass; -exports.setElAttributes = setElAttributes; -exports.getElAttributes = getElAttributes; -exports.blockTextSelection = blockTextSelection; -exports.unblockTextSelection = unblockTextSelection; -exports.findElPosition = findElPosition; - -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 }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _guidJs = _dereq_('./guid.js'); - -var Guid = _interopRequireWildcard(_guidJs); - -/** - * 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 _globalDocument2['default'].getElementById(id); -} - -/** - * Creates an element and applies properties. - * - * @param {String=} tagName Name of tag to be created. - * @param {Object=} properties Element properties 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 el = _globalDocument2['default'].createElement(tagName); - - Object.getOwnPropertyNames(properties).forEach(function (propName) { - var val = properties[propName]; - - // Not remembering why we were checking for dash - // but using setAttribute means you have to use getAttribute - - // The check for dash checks for the aria- * attributes, like aria-label, aria-valuemin. - // The additional check for "role" is because the default method for adding attributes does not - // add the attribute "role". My guess is because it's not a valid attribute in some namespaces, although - // browsers handle the attribute just fine. The W3C allows for aria- * attributes to be used in pre-HTML5 docs. - // http://www.w3.org/TR/wai-aria-primer/#ariahtml. Using setAttribute gets around this problem. - if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') { - el.setAttribute(propName, val); - } else { - el[propName] = val; - } - }); - - return el; -} - -/** - * 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 - * - * @param {Element} element Element to check - * @param {String} classToCheck Classname to check - * @function hasElClass - */ - -function hasElClass(element, classToCheck) { - return (' ' + element.className + ' ').indexOf(' ' + classToCheck + ' ') !== -1; -} - -/** - * Add a CSS class name to an element - * - * @param {Element} element Element to add class name to - * @param {String} classToAdd Classname to add - * @function addElClass - */ - -function addElClass(element, classToAdd) { - if (!hasElClass(element, classToAdd)) { - element.className = element.className === '' ? classToAdd : element.className + ' ' + classToAdd; - } -} - -/** - * Remove a CSS class name from an element - * - * @param {Element} element Element to remove from class name - * @param {String} classToRemove Classname to remove - * @function removeElClass - */ - -function removeElClass(element, classToRemove) { - if (!hasElClass(element, classToRemove)) { - return; - } - - var classNames = element.className.split(' '); - - // no arr.indexOf in ie8, and we don't want to add a big shim - for (var i = classNames.length - 1; i >= 0; i--) { - if (classNames[i] === classToRemove) { - classNames.splice(i, 1); - } - } - - element.className = classNames.join(' '); -} - -/** - * 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, knownBooleans, attrs, attrName, attrVal; - - 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 - knownBooleans = ',' + 'autoplay,controls,loop,muted,default' + ','; - - if (tag && tag.attributes && tag.attributes.length > 0) { - attrs = tag.attributes; - - for (var i = attrs.length - 1; i >= 0; i--) { - attrName = attrs[i].name; - 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} - * @method blockTextSelection - */ - -function blockTextSelection() { - _globalDocument2['default'].body.focus(); - _globalDocument2['default'].onselectstart = function () { - return false; - }; -} - -/** - * Turn off text selection blocking - * - * @return {Boolean} - * @method unblockTextSelection - */ - -function unblockTextSelection() { - _globalDocument2['default'].onselectstart = function () { - return true; - }; -} - -/** - * Offset Left - * getBoundingClientRect technique from - * John Resig http://ejohn.org/blog/getboundingclientrect-is-awesome/ - * - * @param {Element} el Element from which to get offset - * @return {Object=} - * @method findElPosition - */ - -function findElPosition(el) { - var box = undefined; - - if (el.getBoundingClientRect && el.parentNode) { - box = el.getBoundingClientRect(); - } - - if (!box) { - return { - left: 0, - top: 0 - }; - } - - var docEl = _globalDocument2['default'].documentElement; - var body = _globalDocument2['default'].body; - - var clientLeft = docEl.clientLeft || body.clientLeft || 0; - var scrollLeft = _globalWindow2['default'].pageXOffset || body.scrollLeft; - var left = box.left + scrollLeft - clientLeft; - - var clientTop = docEl.clientTop || body.clientTop || 0; - var scrollTop = _globalWindow2['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) - }; -} - -},{"./guid.js":111,"global/document":1,"global/window":2}],108:[function(_dereq_,module,exports){ -/** - * @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. - */ - -'use strict'; - -exports.__esModule = true; -exports.on = on; -exports.off = off; -exports.trigger = trigger; -exports.one = one; -exports.fixEvent = fixEvent; - -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 _domJs = _dereq_('./dom.js'); - -var Dom = _interopRequireWildcard(_domJs); - -var _guidJs = _dereq_('./guid.js'); - -var Guid = _interopRequireWildcard(_guidJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/** - * 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 { - handlersCopy[m].call(elem, event, hash); - } - } - } - }; - } - - 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); -} - -/** - * 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) { - var old = event || _globalWindow2['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 - if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation') { - // 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 || _globalDocument2['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; - event.defaultPrevented = true; - }; - - event.defaultPrevented = false; - - // Stop the event from bubbling - event.stopPropagation = function () { - if (old.stopPropagation) { - old.stopPropagation(); - } - event.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) { - var doc = _globalDocument2['default'].documentElement, - body = _globalDocument2['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 = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0; - } - } - - // Returns fixed-up instance - return event; -} - -/** - * 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 - */ -function _handleMultipleEvents(fn, elem, types, callback) { - types.forEach(function (type) { - //Call the event method for each one of the types - fn(elem, type, callback); - }); -} - -},{"./dom.js":107,"./guid.js":111,"global/document":1,"global/window":2}],109:[function(_dereq_,module,exports){ -/** - * @file fn.js - */ -'use strict'; - -exports.__esModule = true; - -var _guidJs = _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 = function bind(context, fn, uid) { - // Make sure the function has a unique ID - if (!fn.guid) { - fn.guid = _guidJs.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; -}; -exports.bind = bind; - -},{"./guid.js":111}],110:[function(_dereq_,module,exports){ -/** - * @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 - */ -'use strict'; - -exports.__esModule = true; -function formatTime(seconds) { - var guide = arguments.length <= 1 || arguments[1] === undefined ? seconds : arguments[1]; - return (function () { - 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; -module.exports = exports['default']; - -},{}],111:[function(_dereq_,module,exports){ -/** - * @file guid.js - * - * Unique ID for an element or function - * @type {Number} - * @private - */ -"use strict"; - -exports.__esModule = true; -exports.newGUID = newGUID; -var _guid = 1; - -/** - * Get the next unique ID - * - * @return {String} - * @function newGUID - */ - -function newGUID() { - return _guid++; -} - -},{}],112:[function(_dereq_,module,exports){ -/** - * @file log.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/** - * Log plain debug messages - */ -var log = function log() { - _logType(null, arguments); -}; - -/** - * Keep a history of log messages - * @type {Array} - */ -log.history = []; - -/** - * Log error messages - */ -log.error = function () { - _logType('error', arguments); -}; - -/** - * Log warning messages - */ -log.warn = function () { - _logType('warn', arguments); -}; - -/** - * Log messages to the console and history based on the type of message - * - * @param {String} type The type of message, or `null` for `log` - * @param {Object} args The args to be passed to the log - * @private - * @method _logType - */ -function _logType(type, args) { - // convert args to an array to get array functions - var argsArray = Array.prototype.slice.call(args); - // if there's no console then don't try to output messages - // 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 - var noop = function noop() {}; - - var console = _globalWindow2['default']['console'] || { - 'log': noop, - 'warn': noop, - 'error': noop - }; - - if (type) { - // add the type to the front of the message - argsArray.unshift(type.toUpperCase() + ':'); - } else { - // default to log with no prefix - type = 'log'; - } - - // add to history - log.history.push(argsArray); - - // add console prefix after adding to history - argsArray.unshift('VIDEOJS:'); - - // call appropriate log function - if (console[type].apply) { - console[type].apply(console, argsArray); - } else { - // ie8 doesn't allow error.apply, but it will just join() the array anyway - console[type](argsArray.join(' ')); - } -} - -exports['default'] = log; -module.exports = exports['default']; - -},{"global/window":2}],113:[function(_dereq_,module,exports){ -/** - * @file merge-options.js - */ -'use strict'; - -exports.__esModule = true; -exports['default'] = mergeOptions; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge'); - -var _lodashCompatObjectMerge2 = _interopRequireDefault(_lodashCompatObjectMerge); - -function isPlain(obj) { - return !!obj && 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 - */ -var customizer = 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); - - _lodashCompatObjectMerge2['default'].apply(null, args); - - // return the mutated result object - return args[0]; -} - -module.exports = exports['default']; - -},{"lodash-compat/object/merge":37}],114:[function(_dereq_,module,exports){ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var createStyleElement = function createStyleElement(className) { - var style = _globalDocument2['default'].createElement('style'); - style.className = className; - - return style; -}; - -exports.createStyleElement = createStyleElement; -var setTextContent = function setTextContent(el, content) { - if (el.styleSheet) { - el.styleSheet.cssText = content; - } else { - el.textContent = content; - } -}; -exports.setTextContent = setTextContent; - -},{"global/document":1}],115:[function(_dereq_,module,exports){ -/** - * @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} start Start time in seconds - * @param {Number} end End time in seconds - * @return {Object} Fake TimeRange object - * @private - * @method createTimeRange - */ -'use strict'; - -exports.__esModule = true; -exports.createTimeRange = createTimeRange; - -function createTimeRange(_start, _end) { - if (_start === undefined && _end === undefined) { - 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: 1, - start: function start() { - return _start; - }, - end: function end() { - return _end; - } - }; -} - -},{}],116:[function(_dereq_,module,exports){ -/** - * @file to-title-case.js - * - * Uppercase the first letter of a string - * - * @param {String} string String to be uppercased - * @return {String} - * @private - * @method toTitleCase - */ -"use strict"; - -exports.__esModule = true; -function toTitleCase(string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} - -exports["default"] = toTitleCase; -module.exports = exports["default"]; - -},{}],117:[function(_dereq_,module,exports){ -/** - * @file url.js - */ -'use strict'; - -exports.__esModule = true; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -/** - * Resolve and parse the elements of a URL - * - * @param {String} url The url to parse - * @return {Object} An object of url details - * @method parseUrl - */ -var 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 = _globalDocument2['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 = undefined; - if (addToBody) { - div = _globalDocument2['default'].createElement('div'); - div.innerHTML = ''; - a = div.firstChild; - // prevent the div from affecting layout - div.setAttribute('style', 'display:none; position:absolute;'); - _globalDocument2['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) { - _globalDocument2['default'].body.removeChild(div); - } - - return details; -}; - -exports.parseUrl = parseUrl; -/** - * 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 = 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 = _globalDocument2['default'].createElement('div'); - div.innerHTML = 'x'; - url = div.firstChild.href; - } - - return url; -}; - -exports.getAbsoluteURL = getAbsoluteURL; -/** - * 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 = 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 ''; -}; -exports.getFileExtension = getFileExtension; - -},{"global/document":1}],118:[function(_dereq_,module,exports){ -/** - * @file video.js - */ -'use strict'; - -exports.__esModule = true; - -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 }; } - -var _globalDocument = _dereq_('global/document'); - -var _globalDocument2 = _interopRequireDefault(_globalDocument); - -var _setup = _dereq_('./setup'); - -var setup = _interopRequireWildcard(_setup); - -var _utilsStylesheetJs = _dereq_('./utils/stylesheet.js'); - -var stylesheet = _interopRequireWildcard(_utilsStylesheetJs); - -var _component = _dereq_('./component'); - -var _component2 = _interopRequireDefault(_component); - -var _eventTarget = _dereq_('./event-target'); - -var _eventTarget2 = _interopRequireDefault(_eventTarget); - -var _utilsEventsJs = _dereq_('./utils/events.js'); - -var Events = _interopRequireWildcard(_utilsEventsJs); - -var _player = _dereq_('./player'); - -var _player2 = _interopRequireDefault(_player); - -var _pluginsJs = _dereq_('./plugins.js'); - -var _pluginsJs2 = _interopRequireDefault(_pluginsJs); - -var _srcJsUtilsMergeOptionsJs = _dereq_('../../src/js/utils/merge-options.js'); - -var _srcJsUtilsMergeOptionsJs2 = _interopRequireDefault(_srcJsUtilsMergeOptionsJs); - -var _utilsFnJs = _dereq_('./utils/fn.js'); - -var Fn = _interopRequireWildcard(_utilsFnJs); - -var _objectAssign = _dereq_('object.assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -var _utilsTimeRangesJs = _dereq_('./utils/time-ranges.js'); - -var _utilsFormatTimeJs = _dereq_('./utils/format-time.js'); - -var _utilsFormatTimeJs2 = _interopRequireDefault(_utilsFormatTimeJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _xhrJs = _dereq_('./xhr.js'); - -var _xhrJs2 = _interopRequireDefault(_xhrJs); - -var _utilsDomJs = _dereq_('./utils/dom.js'); - -var Dom = _interopRequireWildcard(_utilsDomJs); - -var _utilsBrowserJs = _dereq_('./utils/browser.js'); - -var browser = _interopRequireWildcard(_utilsBrowserJs); - -var _utilsUrlJs = _dereq_('./utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _extendsJs = _dereq_('./extends.js'); - -var _extendsJs2 = _interopRequireDefault(_extendsJs); - -var _lodashCompatObjectMerge = _dereq_('lodash-compat/object/merge'); - -var _lodashCompatObjectMerge2 = _interopRequireDefault(_lodashCompatObjectMerge); - -var _utilsCreateDeprecationProxyJs = _dereq_('./utils/create-deprecation-proxy.js'); - -var _utilsCreateDeprecationProxyJs2 = _interopRequireDefault(_utilsCreateDeprecationProxyJs); - -// Include the built-in techs - -var _techHtml5Js = _dereq_('./tech/html5.js'); - -var _techHtml5Js2 = _interopRequireDefault(_techHtml5Js); - -var _techFlashJs = _dereq_('./tech/flash.js'); - -var _techFlashJs2 = _interopRequireDefault(_techFlashJs); - -// HTML5 Element Shim for IE8 -if (typeof HTMLVideoElement === 'undefined') { - _globalDocument2['default'].createElement('video'); - _globalDocument2['default'].createElement('audio'); - _globalDocument2['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 - */ -var videojs = function videojs(id, options, ready) { - var tag; // Element of ID - - // 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) { - _utilsLogJs2['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 - } else { - tag = Dom.getEl(id); - } - - // ID is a media element - } else { - tag = id; - } - - // Check for a useable element - if (!tag || !tag.nodeName) { - // re: nodeName, could be a box div also - throw new TypeError('The element or ID supplied is not valid. (videojs)'); // Returns - } - - // 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'] || new _player2['default'](tag, options, ready); -}; - -// Add default styles -var style = stylesheet.createStyleElement('vjs-styles-defaults'); -var head = _globalDocument2['default'].querySelector('head'); -head.insertBefore(style, head.firstChild); -stylesheet.setTextContent(style, '\n .video-js {\n width: 300px;\n height: 150px;\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.0.0-rc.72'; - -/** - * 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; -}; - -/** - * For backward compatibility, expose players object. - * - * @deprecated - * @memberOf videojs - * @property {Object|Proxy} players - */ -videojs.players = _utilsCreateDeprecationProxyJs2['default'](_player2['default'].players, { - get: 'Access to videojs.players is deprecated; use videojs.getPlayers instead', - set: 'Modification of videojs.players is deprecated' -}); - -/** - * 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 'extends' doc for more info) - * var MySpecialButton = videojs.extends(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 = _component2['default'].registerComponent; - -/** - * 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 `extends` 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.extends(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 extends - */ -videojs['extends'] = _extendsJs2['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} The options object whose values will be overriden - * @param {Object} The options object with values to override the first - * @param {Object} Any number of additional options objects - * - * @return {Object} a new object with the merged values - * @mixes videojs - * @method mergeOptions - */ -videojs.mergeOptions = _srcJsUtilsMergeOptionsJs2['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} The plugin name - * @param {Function} The plugin function that will be called with options - * @mixes videojs - * @method plugin - */ -videojs.plugin = _pluginsJs2['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 _lodashCompatObjectMerge2['default'](videojs.options.languages, (_merge = {}, _merge[code] = data, _merge))[code]; -}; - -/** - * Log debug messages. - * - * @param {...Object} messages One or more messages to log - */ -videojs.log = _utilsLogJs2['default']; - -/** - * Creates an emulated TimeRange object. - * - * @param {Number} start Start time in seconds - * @param {Number} end End time in seconds - * @return {Object} Fake TimeRange object - * @method createTimeRange - */ -videojs.createTimeRange = _utilsTimeRangesJs.createTimeRange; - -/** - * 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 = _utilsFormatTimeJs2['default']; - -/** - * Simple http request for retrieving external files (e.g. text tracks) - * - * ##### Example - * - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * - * - * API is modeled after the Raynos/xhr. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @returns {Object} The request - */ -videojs.xhr = _xhrJs2['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; - -/** - * 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; - -// REMOVING: We probably should add this to the migration plugin -// // Expose but deprecate the window[componentName] method for accessing components -// Object.getOwnPropertyNames(Component.components).forEach(function(name){ -// let component = Component.components[name]; -// -// // A deprecation warning as the constuctor -// module.exports[name] = function(player, options, ready){ -// log.warn('Using videojs.'+name+' to access the '+name+' component has been deprecated. Please use videojs.getComponent("componentName")'); -// -// return new Component(player, options, ready); -// }; -// -// // Allow the prototype and class methods to be accessible still this way -// // Though anything that attempts to override class methods will no longer work -// assign(module.exports[name], component); -// }); - -/* - * 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 === 'object' && typeof module === 'object') { - module['exports'] = videojs; - } - -exports['default'] = videojs; -module.exports = exports['default']; - -},{"../../src/js/utils/merge-options.js":113,"./component":48,"./event-target":79,"./extends.js":80,"./player":87,"./plugins.js":88,"./setup":90,"./tech/flash.js":93,"./tech/html5.js":94,"./utils/browser.js":104,"./utils/create-deprecation-proxy.js":106,"./utils/dom.js":107,"./utils/events.js":108,"./utils/fn.js":109,"./utils/format-time.js":110,"./utils/log.js":112,"./utils/stylesheet.js":114,"./utils/time-ranges.js":115,"./utils/url.js":117,"./xhr.js":119,"global/document":1,"lodash-compat/object/merge":37,"object.assign":40}],119:[function(_dereq_,module,exports){ -/** - * @file xhr.js - */ -'use strict'; - -exports.__esModule = true; - -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 _utilsUrlJs = _dereq_('./utils/url.js'); - -var Url = _interopRequireWildcard(_utilsUrlJs); - -var _utilsLogJs = _dereq_('./utils/log.js'); - -var _utilsLogJs2 = _interopRequireDefault(_utilsLogJs); - -var _utilsMergeOptionsJs = _dereq_('./utils/merge-options.js'); - -var _utilsMergeOptionsJs2 = _interopRequireDefault(_utilsMergeOptionsJs); - -var _globalWindow = _dereq_('global/window'); - -var _globalWindow2 = _interopRequireDefault(_globalWindow); - -/* - * Simple http request for retrieving external files (e.g. text tracks) - * ##### Example - * // using url string - * videojs.xhr('http://example.com/myfile.vtt', function(error, response, responseBody){}); - * - * // or options block - * videojs.xhr({ - * uri: 'http://example.com/myfile.vtt', - * method: 'GET', - * responseType: 'text' - * }, function(error, response, responseBody){ - * if (error) { - * // log the error - * } else { - * // successful, do something with the response - * } - * }); - * ///////////// - * API is modeled after the Raynos/xhr, which we hope to use after - * getting browserify implemented. - * https://github.com/Raynos/xhr/blob/master/index.js - * - * @param {Object|String} options Options block or URL string - * @param {Function} callback The callback function - * @return {Object} The request - * @method xhr - */ -var xhr = function xhr(options, callback) { - var abortTimeout = undefined; - - // If options is a string it's the url - if (typeof options === 'string') { - options = { - uri: options - }; - } - - // Merge with default options - options = _utilsMergeOptionsJs2['default']({ - method: 'GET', - timeout: 45 * 1000 - }, options); - - callback = callback || function () {}; - - var XHR = _globalWindow2['default'].XMLHttpRequest; - - if (typeof XHR === 'undefined') { - // Shim XMLHttpRequest for older IEs - XHR = function () { - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.6.0'); - } catch (e) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP.3.0'); - } catch (f) {} - try { - return new _globalWindow2['default'].ActiveXObject('Msxml2.XMLHTTP'); - } catch (g) {} - throw new Error('This browser does not support XMLHttpRequest.'); - }; - } - - var request = new XHR(); - // Store a reference to the url on the request instance - request.uri = options.uri; - - var urlInfo = Url.parseUrl(options.uri); - var winLoc = _globalWindow2['default'].location; - - var successHandler = function successHandler() { - _globalWindow2['default'].clearTimeout(abortTimeout); - callback(null, request, request.response || request.responseText); - }; - - var errorHandler = function errorHandler(err) { - _globalWindow2['default'].clearTimeout(abortTimeout); - - if (!err || typeof err === 'string') { - err = new Error(err || 'XHR Failed with a response of: ' + (request && (request.response || request.responseText))); - } - - callback(err, request); - }; - - // Check if url is for another domain/origin - // IE8 doesn't know location.origin, so we won't rely on it here - var crossOrigin = urlInfo.protocol + urlInfo.host !== winLoc.protocol + winLoc.host; - - // XDomainRequest -- Use for IE if XMLHTTPRequest2 isn't available - // 'withCredentials' is only available in XMLHTTPRequest2 - // Also XDomainRequest has a lot of gotchas, so only use if cross domain - if (crossOrigin && _globalWindow2['default'].XDomainRequest && !('withCredentials' in request)) { - request = new _globalWindow2['default'].XDomainRequest(); - request.onload = successHandler; - request.onerror = errorHandler; - // These blank handlers need to be set to fix ie9 - // http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/ - request.onprogress = function () {}; - request.ontimeout = function () {}; - - // XMLHTTPRequest - } else { - (function () { - var fileUrl = urlInfo.protocol === 'file:' || winLoc.protocol === 'file:'; - - request.onreadystatechange = function () { - if (request.readyState === 4) { - if (request.timedout) { - return errorHandler('timeout'); - } - - if (request.status === 200 || fileUrl && request.status === 0) { - successHandler(); - } else { - errorHandler(); - } - } - }; - - if (options.timeout) { - abortTimeout = _globalWindow2['default'].setTimeout(function () { - if (request.readyState !== 4) { - request.timedout = true; - request.abort(); - } - }, options.timeout); - } - })(); - } - - // open the connection - try { - // Third arg is async, or ignored by XDomainRequest - request.open(options.method || 'GET', options.uri, true); - } catch (err) { - return errorHandler(err); - } - - // withCredentials only supported by XMLHttpRequest2 - if (options.withCredentials) { - request.withCredentials = true; - } - - if (options.responseType) { - request.responseType = options.responseType; - } - - // send the request - try { - request.send(); - } catch (err) { - return errorHandler(err); - } - - return request; -}; - -exports['default'] = xhr; -module.exports = exports['default']; - -},{"./utils/log.js":112,"./utils/merge-options.js":113,"./utils/url.js":117,"global/window":2}]},{},[118])(118) -}); - - -//# sourceMappingURL=video.js.map diff --git a/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.css b/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.css index d82c8d6..a2224ce 100644 --- a/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.css +++ b/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.css @@ -23,7 +23,6 @@ .vjs-resolution-button ul.vjs-menu-content { width: 4em !important; - right: -7em !important; } .vjs-resolution-button .vjs-menu { diff --git a/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.js b/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.js index 00d319c..b23f3eb 100644 --- a/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.js +++ b/node_modules/videojs-resolution-switcher/lib/videojs-resolution-switcher.js @@ -1,12 +1,115 @@ /*! videojs-resolution-switcher - v0.0.0 - 2015-7-26 * Copyright (c) 2015 Kasper Moskwiak + * Modified by Pierre Kraft * Licensed under the Apache-2.0 license. */ (function(window, videojs) { + /* jshint eqnull: true*/ 'use strict'; var defaults = {}, - videoJsResolutionSwitcher, - groupedSrc; + videoJsResolutionSwitcher; + + function setSourcesSanitized(player, sources) { + return player.src(sources.map(function(src) { + return {src: src.src, type: src.type, res: src.res}; + })); + } + + /* + * Resolution menu item + */ + var MenuItem = videojs.getComponent('MenuItem'); + var ResolutionMenuItem = videojs.extend(MenuItem, { + constructor: function(player, options, onClickListener, label){ + this.onClickListener = onClickListener; + this.label = label; + // Sets this.player_, this.options_ and initializes the component + MenuItem.call(this, player, options); + this.src = options.src; + + this.on('click', this.onClick); + this.on('touchstart', this.onClick); + + if (options.initialySelected) { + this.showAsLabel(); + this.selected(true); + } + }, + showAsLabel: function() { + // Change menu button label to the label of this item if the menu button label is provided + if(this.label) { + this.label.innerHTML = this.options_.label; + } + }, + onClick: function(){ + this.onClickListener(this); + // Hide bigPlayButton + this.player_.bigPlayButton.hide(); + // Remember player state + var currentTime = this.player_.currentTime(); + var isPaused = this.player_.paused(); + this.showAsLabel(); + // 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 + setSourcesSanitized(this.player_, this.src).one('loadeddata', function() { + this.player_.currentTime(currentTime); + if(!isPaused){ + // Start playing and hide loadingSpinner (flash issue ?) + this.player_.play().handleTechSeeked_(); + } + this.player_.trigger('resolutionchange'); + }); + } + }); + + + /* + * Resolution menu button + */ + var MenuButton = videojs.getComponent('MenuButton'); + var ResolutionMenuButton = videojs.extend(MenuButton, { + constructor: function(player, options, settings, label){ + this.sources = options.sources; + this.label = label; + this.label.innerHTML = options.initialySelectedLabel; + // Sets this.player_, this.options_ and initializes the component + MenuButton.call(this, player, options); + this.controlText('Quality'); + + if(settings.dynamicLabel){ + this.el().appendChild(label); + }else{ + var staticLabel = document.createElement('span'); + staticLabel.classList.add('vjs-resolution-button-staticlabel'); + this.el().appendChild(staticLabel); + } + }, + createItems: function(){ + var menuItems = []; + var labels = (this.sources && this.sources.label) || {}; + var onClickUnselectOthers = function(clickedItem) { + menuItems.map(function(item) { + item.selected(item === clickedItem); + }); + }; + + for (var key in labels) { + if (labels.hasOwnProperty(key)) { + menuItems.push(new ResolutionMenuItem( + this.player_, + { + label: key, + src: labels[key], + initialySelected: key === this.options_.initialySelectedLabel + }, + onClickUnselectOthers, + this.label)); + } + } + return menuItems; + } + }); /** * Initialize the plugin. @@ -17,91 +120,25 @@ player = this, label = document.createElement('span'); - label.classList.add('vjs-resolution-button-label') - - /* - * Resolution menu item - */ - var MenuItem = videojs.getComponent('MenuItem') - var ResolutionMenuItem = videojs.extends(MenuItem, { - constructor: function(player, options){ - - MenuItem.call(this, player, options); - this.src = options.src; - this.type = options.type; - - this.on('click', this.onClick) - this.on('touchstart', this.onClick) - }, - onClick: function(){ - // Hide bigPlayButton - player.bigPlayButton.hide() - // Remember player state - var currentTime = player.currentTime() - var isPaused = player.paused() - // Change menu button label - label.innerHTML = this.options_.label; - // Change player source and wait for loadedmetadata event, then play video - player.src({src: this.src, type: this.type}).one( 'loadedmetadata', function() { - player.currentTime(currentTime) - if(!isPaused){ player.play() } - player.trigger('resolutionchange') - }) - } - }) - - - /* - * Resolution menu button - */ - var MenuButton = videojs.getComponent('MenuButton') - var ResolutionMenuButton = videojs.extends(MenuButton, { - constructor: function(player, options){ - this.sources = options.sources; - MenuButton.call(this, player, options); - this.controlText('Quality'); - - if(settings.dynamicLabel){ - this.el().appendChild(label) - }else{ - var staticLabel = document.createElement('span') - staticLabel.classList.add('vjs-resolution-button-staticlabel') - this.el().appendChild(staticLabel) - } - }, - createItems: function(){ - var sources = this.sources; - var menuItems = []; - for(var i = 0; i < sources.length; i++){ - menuItems.push(new ResolutionMenuItem(player, { - label: sources[i].label, - src: sources[i].src, - type: sources[i].type - })) - } - return menuItems; - } - }) - + label.classList.add('vjs-resolution-button-label'); player.updateSrc = function(src){ //Return current src if src is not given - if(!src){ return player.src() } + if(!src){ return player.src(); } // Dispose old resolution menu button before adding new sources if(player.controlBar.resolutionSwitcher){ - player.controlBar.resolutionSwitcher.dispose() - delete player.controlBar.resolutionSwitcher + player.controlBar.resolutionSwitcher.dispose(); + delete player.controlBar.resolutionSwitcher; } //Sort sources - src = src.sort(compareResolutions) - groupedSrc = bucketSources(src) - var menuButton = new ResolutionMenuButton(player, { sources: src }); - menuButton.el().classList.add('vjs-resolution-button') - player.controlBar.resolutionSwitcher = player.controlBar.addChild(menuButton) - var newSource = chooseSrc(src) - label.innerHTML = newSource.label - player.src(newSource); - } + src = src.sort(compareResolutions); + var groupedSrc = bucketSources(src); + var choosen = chooseSrc(groupedSrc, src); + var menuButton = new ResolutionMenuButton(player, { sources: groupedSrc, initialySelectedLabel: choosen.label , initialySelectedRes: choosen.res}, settings, label); + menuButton.el().classList.add('vjs-resolution-button'); + player.controlBar.resolutionSwitcher = player.controlBar.addChild(menuButton); + return setSourcesSanitized(player, choosen.sources); + }; /** * Method used for sorting list of sources @@ -110,47 +147,72 @@ * @returns {Number} result of comparation */ function compareResolutions(a, b){ - if(!a.res || !b.res) return 0; + 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: {}, res: {}, type: {} } + * @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]] = []; } - for(var i = 0; i tag inside
  • y6N^cLePrFG8+uJ!nAD%(r@kax;QcLwf{|Rrn=4WV-AelekNU~UPbAp1L^esMB z0}2V@wqJKq>kJhv(i_m7B=?h619O^B`}IL%yI;VxkSMcQr4w5$2<+er85sgv7sw-R z)?!Fw5Gqv*QC_;TZYH-bQb71ZSs6+ieTEHBPBs;Nvo!)4r)k|V*X?*ChBX;H`8E!y zWvI!Z4)9@BTGjDa1Anfd_;YlLOldINa4)Pc*1-3!C*`bAs@*He#Ucu3JOv-vo<)p* z*CZb@dG?@nDiDO zPRfEzcW{sk-7Q;$n^(Bhd@n$9%XfF#tMBkpuox1}ktn3nS0plFu}%Z15NGI7!p~QZesXd?4InY9}p1Mml^&?;^VSQMM04ChIV-^6lgr}#I zEt@u|@1d@-vI_Nb1SiI$heJ2&QNsv&yYUcAC@5N^I)J?<{mpZhR>yv;ll^0SK1jRr zuPVt-@HFAibWXH>qUUQJqPzmyShF4pApknl9uSAm+53#Fij?1P8VV|vtjF;c>XG;5 z7EI2aVTDO-4%RgK40|tQR$;CCqBGnuSdwnSpijl0UFFrzWnKxXOw6wt@L6HfMpeG+dpPb~ZJNLEA=&LV%z~p~pq5i}C-C%JU{4II=>HOuF3Xi03aNZxF32KcA6yTW_Rnlh|FumO!i>-PAXGk4(o#*vvpxl zn0qTGY6|JA=d80NYA#qo{An_nkv7xPc}e@S0k)+DZzOVE4yGZr6(F9%1M>i3G-!+V zVJHaqPGDZ}n%e*paIpbmK^V4dW^QsJB8&kTs1ARC4ovdx%CTQyow0bb#*VxA(SQx# z_HomYJkzJSCSIXfI5yt;UEU-;<~MN8Tit2$Va^U zsK?IXh`vO+oIEC9^%&k;CQ<+=K`}51Ev~yIsdojWC~egB zw-V^Mh&4H@w-I$gkNQ|IA?Qv3tmA%6~M3n32$oGfROR)L&mdgcqF8`K*k~uiI zsF#gIOo+`rf{cb3xRv95XjxaY0}^2IHI;9;aF#}s5^!`C_E`2?gCO})-Threv6#5P zX24*;*%P-0U>16%3l{;E<4*;|VT{I1Bp3p6 zME*}XbxHQs3jJX!314A8wG8yX1wLZ{pYcPj2D_$l1Ho;HCz9FLVVFjJ!P-qLJ=(CX zPtp3+Z+%*54SyL4wW4?Gg8(o{;sSwV`T?Yzo!4W42G(}x2E zuB)q{`_Q%jNU_@kh%Eg6>2Eg#|E2GAc)2}l5+UmD1YbFC`{kWyeg$*GwlJ3BPdX?^ zlw-6A_71|V5(~D)ySie<_+J0p-tTS@OH(1V3*D_9#0(O(e?l@7@htaSj&w<0Awm#b zdI%VQAjU!fr;~fk`Ipo;*TEbLcq>t?LPtGh5^30%Vete%j+V|G(FNe+?A3zA^#H6f zy((o2D*z2WT9AN9hU}4@X79agOyVlS?3Iq@n-<1 z2&{2wt8^_pAx;DY*r@sx(G90L46xlFNkl0(=&rdk@-Mq{C;XdLMqUvb5$w`F5y%p; zH5lP#!9CDhfE6ekoVkgT_3?QSOJfWNRqT{C#bG%#5AFq6if~LgnIA^Sh~+S*-Al9ri#a;!G0-SKk_~Kf8+JqKIY(s0A;oTbNjsK+g~^9l?-E^9!Y1+qmSJncP1`9pR$c3wVZj3<}>?5`< zhhJN#NwYRyW1#4G4YDczguNAQxD{0_gYKkr8*oPS(EFWJL|PIjWTdXeE>zJ$EsuQQ zOHyYeUGktpG(iz~Bfu!+#xUN2xR@Qj`ADDvhxVt_ z3veBBmWlo!q&2M%6H7y0{ z1+&8Qz`cZ?Gx`&P-Vz|d@AWC`n;>JFta5Iz;Gn24i$@a!Kc!=3ETpm`-}czvh$4c#;nIcW^;HK%J?h7$|}h^)r)z zM^f)JAJxhAd1VGDfH#cjO()Lq> z)Bhu&)B4yC>!WZN;ABL{Fl=TmSe}8ylNlL;HS-@`0cN?HbQ38u+}``=FZZ6l{sGs7 zpyVayZYuG%AwrS?3G)1zU_2olGi^+Z2<8Ng3!qY=N&O_ALKSBSS6nE2IM zUo(%AK#Gm&M$j=lP)Pa00=Udmr69m_8WnCDt*#2j>=e6C(0$Mq5xC(3lC78~pWKHM zFPwRDpM3D{my}+5jfHLz_Rvx!R?>q#Gt`*%`-a#aw>}8KqY!us16GeXYsbbUgv9nL zMQs>Izh*&V_{>xwafk>$AUdP-Pzk8lgPBrWl3_w=777|6sly8*!uI}B^$$rmg(jfz zARdOHdui_eaw(WyxS_)z-UYO1b09KYWaXw=oWwkU^+kYR9f{}KzB3(xUYH|iJ1{_! zZ+N8qi@U_y%o4kxb3t(^6T6*1>TDB@tM>UYQ?{ZssG&jh0=Wae=w^~}sBD8$t_wOe z;yCo7en9}LVOKg^H#b8BD}%mZE_C?F%AT-$xklVzfs?&^DzETei~Jsm4?>nf!kJrNMuSoUGSK_}f1HjC%*5&zT`6ZJTUea(@ef#-Q80Pq72;7o_rZVXFD$ z;Pw#iK0M5)FF9~7dJc4Dz=j4 zKM#6EN08U{A4hDpPlYe zs;VgvI2R&OH>|2o;X_2mfgV8ezPBmc^U@mKaeF=uYCNM7uaDMnJ_#y3L4k#?;EamU zRS?r&po0~%ro;}V8y6Q=lxn}iYHuepU^nqgDK3HP)|I15H!Hi?JlH|>Ia{0J$%0NQ zHQuUhyj5tt1$*5T(k&%D4(bq719iND6p1qxgcyZRC~L8v8bN9RHZgSA8W2BEbcr#c zdG}Y8O$OQ85Sd;;%$<%Ahbss2LFixFLt^C|7Sf&eFrOIYDD}u!!$UE9!$WdLg^X>M z?+qbwJZH6hfJb5%jAY1ZPvfOUmA?`Kdo>_b)CsN!wxmf*b)%g)uaI zDm1!+DsN%H#+AbnP;o;w&as{@0#1JUf-dU=uQBw_-d~mEl%b;#9)@G_=no|!hWG{=9eD{HZ9?gBh4>iZ zE3zdZd4l`u?h8>K9oVFR((t|`!MZe-$g3bVypOZ-8Ui;C^EHZaDb*-H0}%V1s)cuo zV(jPjc>|t4UKg+??d5AGhoN-w8P$+B;mm)jmYAWahRlD3c~8aC&Ij3Fz6h@-C_X4igq)H%{=|YpU~tG z>4dK$NI}SLVx|Ys7|>6|-nc+Ak3*S!gj_vRIn7t2L;LU#qt#IpV){S+@cb#bJ+4IB zB^r_b6~!XNRrzp-Kjy%}^cR9#Dk6r&Zw1la1mV$luBcz3q?Ki~3ID=E?hwXPUI`N# zhv2TfGNMdeIo6IWag4sv+>9p6@yZoivjz@Eyd+}FDQLp`@x0xCj6^*j5$@A(osY;s zH~5S#Fp?`D|8)j1HkjuAwZSFf89+qTL!vyy^j~9Qg6@Q7s6s@ z{y12&hXD=$3OYSAeprYNKS5qJJ}G+}09Q=;-Vm;bnfHOGNf(9&B&DFE4dvGQJ8sT} z+n5I#HZd>IwQH4O{Y!6bs;5)0x74j;^x@8u&TZ}*TASh%;q6emlDtN zA#ARsr`KF9z<4~f?ad)FlFVVS>On)27-=zXjDd2+2Jri>>-{&lE|J_mQmBEE>6Kx~RKDKgi|Gzh*@G;zozuo`2J9 z1rXWQdp_`-qO7Qfs{%5IqY*%LdmC1!Z-wgmxED3i?}cVCmEjlo!}35F z50IyM?Nc9BfIFrGU<0IvMpkF!)Ewn)FfQ5TjM9XXnSszVXbB-{hIHLsGinoXMUrdK z?%`U4A2f+pS@?@P=|Q%7j@&hjwbNWh)?_%ft8FMP4vZXO4b&4TY~H6_ZO|Jg)lq7V zIo(|$#4WlLpjIdNv-*|}6CTp7f4Qi<-arHca&`qd(cuZ=Df7Po6@VgMEALk2+^BLW zqJlagLh4}KWQzKZ>y3chmr7&`8a#UsPq{maOI~%M$RNpJYJC{Q1;!{3cgHu;L_#V9 z0(mcZ^TduA*u72Iy$$S+;leH`qX1Y^B&;JNgz%ejDuvzvfw?7mG}`03yK4HL&6Ybf z&Xe%AHZz-lAjW)jxkwF18@f$k)m%@T80 z@KA~dE#b2b!q#~hTTr6t`w#*uiy=95nE(pVdW1W0eu6}B4U|;vC{Ta_BM3Asn6)0S zPbq;nI1$@*_yHyctpj{j00)+VlAsYF5~msy!jbGP)Z!q=VdoDuChc|(^96>5lnN(@ z?$H1xLmE5ygI0oPW?4UKc22+W4J1uSSN9&F`-10L!U>Z@7Jwm@lU((Oei=J(LdFvaPAeQFsJyf@p{EqJ{00ba7QU~ciQ$1|8 zFdN~X;9?dw0sSJ&1ft*5F7O|28@kvAnEO&O*C_5VzAIN&vF4FSQkgZoi$}&oDmB09 zB{UM)>)k?F-Qfnd@F@LT=m3N2P{lz^Aoprs=rv33J|8RUR%+PBzP@Q!= z{Xqv-&Y+Izaujw4Szi|QqwBu16L7-E?=T_o1=s6~8m!S0*g`-4U3p&f(KR|PEws>Y zx!X^J&dl?;1q8G}fFDi=)^!|Qp$-FGRE;=&R$N@?#Fx~!8v*RATsj^vrMmwMtk z;H4wWDqI3+SkNZnY-~Tlgn(&?Jhzmc=0h?;;mGE&1?rCDydkNpc}xJ_@NhXB<{)wq z86FktQG@^-&f@IfBFITAznmfh%T6naviWRG?w_rlC`wwZ5z2|Zl8XWb0LWy z6yYq!S9yh45p@Kd`SSvf0+U2B?a2a;Ml}$WXO-`;!880?fFji>4uNMjHyVlk!gE2N z`w@^R;1_JKe7-PiAp6ZmVVeW3yxVGpbnq||xnVm+B*sn(2O&(_ zp=q6AA5IE+KESN<*L-R)2+#q-z4`Nk%-2@pm^fKlm0=p=;<~6D)ecLr#~T$84BHOJ z0-BN?^wDMmtvAJ=72k~@g18-15d(wW>E(Y}gPxN91%*@k_*e7suR!vgQg`|RJ`tTi zbXL2608`z2M7fM}5s$G_30mj0LAIM`M*koFc zoKeo~jPey#d$^WucOF3!RwtWvR?QTYoc1P@Q3ePuvN8AR`wC&Xe`zomUY_t#mM_;o zfip=I{{wtiR1&Wj&7}v5YHqJBcjveCIKMZz-xCqK_;=S0? zEZ(|LSB=FdZGV9ayD6TlTuUqA)kngory8BoVMFv1Znq;s+$0#7lE0(Vhr?N(h~0MT zo9KB))ohOBv&Skf!0oe1)hRceWs#UEVjOEcbk?HPHlx{)2_XebIA!1A(3^DQJeZqb z3vv{meh@6o&ZQ+xRbej1h9cxQaF_+bu6L;3TnIT{a|69Af!;jwTW8o`n%{&XX!SU%r)IiAX&Ba1xQ$xEKVUF2kiC!X1PjGLZTD+%+RIr zg_2(1)jbmh?RAW9h>dU~qag9G7~=eRNT&G_^x*ginun@V>a0pI{Jx*V1_sF9mj;u8 zHONk@1~NUX^p<74gPA80)_p{iIk|4uObbB6qCM;g(t_9x)&M23V7{7Am-Z3%K7cF1 z4kF$y`&d>;yLWZZOgm_&D-~Zci=}n0GDh7tj%(D+h^j%W2>gM@8M1WHVCG*z25Nl0 ztk6S~uoH7@fiJb;kf|>}*W)(Cb=q^moID(s1$$Z(SH^1XQWE%>&C^}nwgNkn;I|sB zqT^vsHbUOeklwKfPsz0!37ILi+F8Z0?xXk&pwqjd>Df{noxn)r<|a96)1$^3 zj8(Fnz-LYoET2oZ8Tbq%?9kK%9(x5V4P*IJ2#!GDU6z5pO9Gs zEQU}@B3!iPKFRw6tsrcxXw^aFHj?%iS`4WLES)M^nEnYcPE7wNR2yd36}7?2BLy>{ ze$~82)D9L?+>VT83$qy0cbIJRcK|!~64w>47Yoc}PN@;aoFF5tE^ZTIxaIlC-$t^* zLM51cbES{tA)@Zte#1XauM=wUA#4DV!rXY4m|BQ(${xww?a6$WhojEuGpx7xGa2Tt z%_azLpd;f9``IaIB{;5F*A9sC=F|)(jSHJi=PkAqE42Ga?O+hLuw5IYk)|gc?h`fp zXqwS2q5uqQl(cq@R=i#=3fq6C_AoHxVPTxy&L`dq5od0EqJOW+XR~`})DYp&EiMEz ztG~ll2r6ynu0Xy5>5JI7h!hP050>yc2JNP{&)}(Lh?CI95Yc~JY+v2VCJ}LoMF$~5 zfEGVnMOu1JF%Z}X0CwTnTL@8%;Zw5D1@HN_BLJLS!o=ny3Xs-V`noB2FE#m=l5VUQ0aEfUXB{d$>*QM| zBxqxTE|`+g?Yi#kNxo$YLyt_KNhPRDzGd^{Yd^5$0Z+dY?3Cd^@_=VjS-T9Rk_VJA zZ@sFvy$2qUNFK07HDi)1@mKPl%sW7Kdd+==k$lG|5%y|tcM1O_-|-QJ)%h>HcSUZ= zcf1WDN>~s7BG@tQl2ro;z5Wx zz8+4z%D91CVLS+Fp6b_hixEy0u#+q&2h(SkT&p*XAt`}S`j~$n%>2(Hj5AYu4_c}o zxz7;Y8WpNGpX49rNLlHsSb3&i$cix`?+e_2RcurC z|6KqN*>y#fFv2ESLksq55uhGbz^t~6ADCAVKDDI7hdgZ_`+wRAo~bpnZsqW zOb=2Uhr_}(C-Ei`jD@&Xx4`??xd$r9fY~?e5P|KS+2L&@m@)Zo!S;go<~osJ6nM8p zI#Gh$K2Se~%b^Y1P`K^nPHBQR=m`~w+-m`K!0)ySO)4NZ9%z%IQ67@xApg?r!hwDc z-{~J&{I@G~Aej)ri;uy`5<4l<0%JH5=9G2q+*lwK@W|D}2~?^cP2Ai|22pDH1<8{U zVpX7^>yY;>%}~7Z75&{kIDFWoK}^g6rN^bHu>-3~vT6ambiy*(Iv=W&cFlMnXa~Y- zV}D!e-R%t=8_atv28HcXx{);R-hGtex6P#a?Sn^TlG#cT#$1$km8}qon5Ky64KL{* zsN}esMP_R8YqpNr2V^l%;Wxk){c?nTuv#^k!QXq7v;F%C6l7#3Q8ElN9(lrw<@KEQ6H<=D*tgc4h_9N873 z^j(4MRB{_~D~n?RaRfv*jruKO0SV9~!>e0_^5wCBG_R=KAJz%{O6dqA4qs_d#SI7~ zC$JI($a#YTXL|-%f11HfEv!N%764c19IgX^X<#Mhe>2Gn&m9hEf@u_l(!WXv+cH`c z6T}_>kZ7C6 z@*rZJQIrl48qrx?jTt! z>x~OqkrKn;*AwU;unkpuXN1)Pb}V3=6!AgD|__zK>JyR~?zf)P+D zlMh3Q_N4^zj_lT2PW2s%mWDL@J;bT_;NmA#>&6MrJEH-PU+T-3C>ThExJUah345-K zM(vPaghyrhq|`2MlSKLVDdtdANIVE1p01m;<0hCx%X+|4q~x;mv*$%i9_c3@Sso4& zpVR3hUT^zg6)}_HF>9oDHGK8`TNAx0t`CF$vPr$g9`dYAea2#*JCjopHrTEdEld$KYv=HO` z5uPVi>L7D6#E-|9_6W)|hGBBRVFm}~&)IA#cV!*0gW8763_j))<1%fSzv_>{Cc<6I zXLC&tVNkwyb{dx8^K7`(2G>cp~z%d60C@;#Yq zgrC`h;d=@pTtmDmY-+wT^C-1gc#wG#(sd$Ad;OSUH}~ZU?9&=9zi4EGnfzaHo;W#$wP8lN91^l zL9Nc4@tBr=f3|?Mk4PoS;#=1T*bFh%@nmna4BtC@% z(wxFnJJ7bko|;r?YijuFbBkA5Be1bT*(Tuy`Xhm#HAhHl8~>)332dP26 zdAFM*uN>=~7+4B;KJ?5CG~Shd(KdSs-Aw+I+>G4b)#@8w-R|(9c|8}MRJIQPwGHL) zHa9l@P)EG1&7IApjTQY{WZZ4713i-7Q2>M-N=ZbkQO>Ii=Bev)9CtP75+v=22LN|< zghGRe9ll?f9)2C99VCL;MxMj^z)jV+%kbikQ;?B?gcSg@fUG}=sSBFVmg$W8YgByc z<^;5yk9xB{GRNDLR$YzqNh>mJ0@=maF`>21gDN`Q*LPKs*K`5!O4(`_9h>Fr?FMbIvjWUKarpW zIbxLwS^ttMzJ!v$fshK2oBb^@Do;`!B*aI_LwSYyd00qrkSEe4^J`~Grzj4()b@M` zy3t3>gv;Zxe@N6RWq(C@=u}l~nH?L44O8I-&e78zCYZYcz+5~Ts){p;~ zJpJE{IqtyH&4ABZ^K*sB=_*vmx9q*|754RHNC7Y~!XW>Vb8;Q{K9kFoUmiYwRDc)H zRgXS-KT5iw01?3h9f=TN`J##tWe+I=OoljJK#87juV_QGj`smkH4LsoJhwo3*D0f_K$W-{ zGkytc^#(_w`^Bu)4J`zVL}-b%^0Vn&fmH}&+(y&5O-pK-kAhAi@UL8-=J_!J3}Hxu zXc|H;8wcR3=ot&3@jq5r0_9h%Nnz+K#KfiVV-GU|Ka;6yuG4cBP$4VD^dp{bK2UP~Dhg?KGg|C^Gq8p5bQ9)fa3?f`X#B-1+hnsBtan!@lJQMT2p zif|Esck+|7ojTjGIw>reQYFDhK50W+468B3nte9-3Y~6MC$qpY{uL|jfJM3?e+Ry<9-XKYK?8&X4O-B zA*ejkj-B7}VV!lr028b49AsBG3d`%04;8o^w zzm7A#j@7*ciBn$FMDzO<*7sosLcvGg=~}-758!)w&l&6n(*_{7X7Uu1SM7eIJEPY0 zbQ=ju%M9`MRd#H0rQSOd9X!{?9DXJ7HKeYsa9)nTGsBED`wbPR4xbkNhib!fj8O0)EZ z7+DkOm#pHg+r(Elh=-Xw#}iJ^k70O`bei-}EJS$Hj@i21lp>@*6i73$l2ZyAn|HJM za26p?cYK1ReF>oLO#mb6{XGRr zey3B0?;6K&s(9pAVsD9cs$G%e%~v!;_d}othn;-Kg6W%iY%4&#CG`K<@VS3amc+X# zl8IhGPzEg~r1F}+Iu6k70hl2KxS&i=oOGe&(~JyDL0s+NvD@@Z3j}oxQUE}9O#tB< zJtuh0nTuQT^aJwTO-pU1B-&gUj`)k{3z0PV0|+;<<#UTospYtdKuiS~bPWf~R|uc~ zF@LWh3K>=qTS!Gs3rJf zoLNK9Z_)P|I*bLc@Mwfu4&j6hPb$k_8}^K+>-H43dKF;$#B0WVrIE%5k7EBLSa!0- zqz#6PrCzkFgKua}^{RxLBOvNdZcNlcShQ~DxZuGh4)JziDR!#R>12;ip8c$v*$bf7j9b_?X2UTGIQW29`J8|mFljho( zu~Q&H*u&1!LIt(Uo8vpOYkVwzFJ<^?#Gf!3WXAYRRl`g_jra`Tki6m-hjYrfHb?Mo z2B`pwMIY1{HsTCgufnxvy9&6r!bR&^xK=k`Ak`P)T4B;Fu~bHxfD5MNmYg>sGFCK+ zX)Uv!OKo^AwO!bUwt6mg5b&XW0MA~+8LD<-{6RFbMPY&Mn};2N!uXOU9iT3yQVROK z>Np_kz7zzrI0S)USQD&;Gcs#JMzxY>tWTSOKo;=zvJOxAqYekNV5J*UZBiHuK>Kca zVH~xt3;V!)+Bip!Kojkv+ayjcjZBz?_{_uFe(J-yXToU(MVh^jo%4uhBS9&ArV)wp zl8B3*==12M(X1rLBsorly6L49s3g$K`a9f+d+a~K4#FUzeDATT72wv9gruBPg`YlW zvhfW%KY1$?dV~)guO(|er-ZS|8Y0So6oHCRkExGfE3{*9X_LvD{qL*qnce>Zl15_h zY1K!(vcRLjUzy$=B>$V|$pDgNWDzBz36V{E6r@qu)uYBGx3UF2d(*g_Z-ml;NQ}*e z!p_D$rj&eh|Hk$&6_k>Bv{CGTEKo|e&Q;2`T~kvjrC$n^(l1{^DKQ`pAa$}lz=Q|6 z7g>Ln0J5Z9168I#tOA214_G1RA)|mMBcjgx#y5~oh;R#d_HsfuBI0fx%5OasZm3H9 z9qM-nJ!D&hSPda>ky-d};Zbg1peGc#85vi4mp6^q%%GK$d-LN&oQ@7bX1E=RFt8ic&s!Rf(pYSkVnpObUy+wy@117 z4pm?s3AJoM597K=&{$fDY`~ET6$F-;^z04?q5X!>5_?q~OKc{&(8L4Naw|5KWjccY z!tcNt9*U?Id>FC?4U5#6Z(m~E3v9p;<0UTpPP%mXlAC?6avQiVqIplU+?Sv&h-8f7 zujf2azU_zrvdG4R0Qt>)wr|C;|E%iOg(Se=Sw};;F}_GWW1lbuS6?iR73jq8aSAeU z)bk7i9Wfp7JS-J;Ob@`x$_AL74R-uBfgL)J+S`_81Jgq+8`y|EU~U*hbIF}M5z)U; zMn&K;a%OCZ)mhmzyp9mmc1@K6#jEr_ue;s%%B(rq^L5NNmJpBxWp3usdJAR#6`+h` zLcR`&`6_ChcbZ4GAY1xEJx($8#6gOBXSf+f~e{guP<2 zD2kB-zN!v{imn1rM43pqNRidf>6nsK*u_J)4@)=BG81yX<-sbe`QyP8NlD2HUU;bz zAe;1%VSO}1HaHIb^)TJIxUf=X`xOD7clHkw|8G*)t73Yg%(+T2&0>eYz2@Oc>2Xo> zQ1IEoRk?7%5(y>{&Mtk7$pd!JUG!GPBI>(aSKV7#>J4S7 z|BRy43Wc(-`8LYt&bZBR^w)$(W57sKSVkl)hYc{C6T`A~*TqE-VU$O`IbwQUTp%sl zG13E!kPyvq0uBB==m79mAryI&>DWdTNn zAX-43i_l@e8XZD|1mOp@1(pK_$DAyB>Z3FHUNupv2850g_oG>M3V}_VB*M{wkA^`v z7}u|8B{d!jKCWo8mt12uIXjnh6XlN(SIaCLm+frU?$@F3yhPT!dY1Z_QFW|@@9PnF zi|dlX`(-fWzidA-BsY)`VYN-79H>vJV0K{%w#P&|!@MB*#(e1T+M+z>>&5aNh=u}E zCAe4mA<=~2jeX-d&|rIop{*-k6KoS1_2M3L_hsaqP8s!bg>IlSO9e^&|k=feSsTg zbs{ID99)}0)5;;&=ofYO47;v~N}!tvKNS6n0}2LYr}%7ooI9c+LwW^*6$Ex;BxAhmnI8PP&A$ zjJ46%K}}zPn{-qEVGz^JJjQPk(=B4UMND6cn3l-4H0DH+*uN@UZaFdqd$U5XmO=J5 z>ixD{R5;96!8&hs<|VYV_BX&gfNueF<&aJgW82}I;&j171w2yFo82yAO%R*#SFuT% zW0TgR)fPz-i)y{A7$rOTe<)VzHeA7N3=``$S&*Flw&91WfUsIddg=nL=IIKmg-o-e z;ED@60}2Kiqz{N5qVSO<30OD6kB942CZSl1rfF9N6_WR?!xUVrz9_QLceg&|w<>dR zP5<}_Qc5v5zq--b$MFyf@wH+8F&~OM_?W^?!==P(ly7AJ<;yFiZ`BMl^&rkQVen-< zX-Gb^&Y5QaqME)7QK9-xg&e;I>Y439xYlCA6ek$mjE+`OXgZ7-`yvubn6>?%lrRx z@c!n>3Tb--!xF>&f5RzQZp!z|Llx>K{wfiLzq|D#y?v4LBAtH*d5_jRb+`-3mymoQ ze!EleQ`k`XY+XEreki0QwO<22uOPqoI`MLAvvIG7B+7`9Q%Dk}sKlU0{nHXGA26NM zMm%xYxWJynIm_e%uYr#|zX65vYX}Ik?W)o!SP7s&4aRKA8;=aFwg*A1IgFJ1d(A6az^{Qvet!1Ztz4 z%*Dm|rT@+LmaeS0t_wt8H=xy|FXf?_<@#w_R!=vjeDk7$fYT|+syjGsw zh}QuY6(hqSXL8Mu10IHYanyyI!!)#?=O!U_D2>)kD+*x7l`!1}{SQWVgw}8la?1&c zj74{e#4L@Wdcz7zb78nWx?Qa_iqt~Vc%>;ZXb*0OiE23kiR3Hqd`+(gWe7W(u2t0N zk0*m)K$2!dY+rSqYkFTJGB~NQ0)d7Q$7GG}-mNO(C>Wg2eFsWA&bT6mpzo2Dfz0hc zLbwFY+|n3w<{(eW(dU(a-ZK@aG?RShygzUTyzUU+JVE zLJ(i$i0OK?zyGq*1!Ie-C-$2eNctYq7R0}O3FwR1c%H*emDS~s3?t~gzR*d~;g{q- zIq@~u1H7X7daLk7VjKqTH^LGU`>lvOl5Z&ilj4YKlwp{WTUYs8l?N`!KeWojy%A7F zfnULTV5sc*6ez8O?0SywY1OZl6H{PCnAkm^Ovcb=GC-8?H`O)>uJVE1wIw4wxHUYv zzC!@eK@cUBXHU>T90>3^#743(AChwmkq#p~5zm8k5Jt0Ld-6=*xrH?yschdo$){5| zJt6|!&CNOX=pd|N;jkd387`C3c-KhaYd;Wo6ZudOQ3d(c*DetgiV0xH>EcU;Sy_B38#fYUV zZhRC$P;x7c2q@~2Vrlx!uq19w5Z;E)jHyp~aiw>%R{bBAq6?JUR-3`5rDIV@G|bL z8D3zPp3`4R3q)TA?xj2U%##GbGkX@C-G1vp0^;sR;}OWv!e7*?3%_NajEJ@2sv0aT zaAXa(z%&c90Q8o=L;>5my^MH!6vY4gn>jnGwD}5!&6SU0IPL+ll%E41AFSmf#U{?f z7%>}1^WktMO^h33hSMFiYaa($jq2AMwZXL3$#E|5_0BunwbNmqP4n6u|9ONE)dN)o^MfYt24Y^j z9uWbXdMcFSD!gtTfvrVD1T{rN&#zrUZa=DdBWq@W7ELp?GZqG5LTBp%z z_Ot2hPa~v<#c9pX0K}<*8yC*n?6GaRy7uLEkfNi1jmJrk0*+mG=~>>)vFi(;rA8QM zd{qw1V4o+jP(R(@k0$vC#37$O!!v|?V4fp%LX>|Vgauvub#Iu1bAnc&2sQSjPkHNjFne1uvV7SqjxWV-j&2sEFLo~S#m&;rsQ6*Yyx!@KNSobk z)Xs-Ajp7G!@pNB`6I|HxM)Nxv|Ke?$odb$1`bTNie8OV8TPUuWN>J+d>166n!`_;c zY3bZfrZfeq;kG0wwKI76&eh$8kb}ZqM1CQogy`S^yh|UEm>@G2QDuCLfD6YDZRq@C z1Y7{R>F*yO>~9|6t^1Izaejo>#|I{IC+Z#9zzx#Rk%r)>etP=@R6a|s@yHi=pdy`~f8dyqq$e6#1Trx?Nt*ieGv#B*ebTe~O?&{VPLDBam>#`?+^r3W(2GX%lNJoOEisab`ln4fQL?1Wi^ylg z(o+o?$m`(F9UqPFU zPZ1*iIm)OB;4+&}Q=;8b&WM4C_G!8wz1(~H{PE%5+qZ|iKfHVY`XvEzTlDzJ>$mUs zo(5&F_TK;W`t6^CvZs5yub=J(MepA39=>}0{_x!oZ{CzU*?YD7_OEZK>jO-vup4YP0cmiUzHtXlLle`03mV`1bM0=0ott5I3?ql|8JUOoMifZi))U02-gUC|! z1ZuN!t(y&owbN`eTlX`pG|2SIyqOY4KVpjOPlwB$~k)i$*1^ADK_piHuf*uejkXr@88S)^5^R#?eJwM z_n2hAb!E7f>wC;*0uFwNerw%I!_6vG3lI-V{ z4r(aEOwxgg5HrYlr&3Ovp>7NjCtMazjgf|koish2HJK0#4*6J0h17_r7@E`EDalHB zQh%>OsUYH!&aW|ZF!DzTJWIBujQL7Bi3s3`pt{jXh;H@I`Pmy7nNE!eaDkCIqz9+t z(>dblkr4!UU#03bpq#OBiSY1si47Oad3E(tZq|J941o;N5lpP z>D|1&lWmhVKBwHcss!V`vg~FHxUTiEv~k-lU^+G+ptdqJH-zxnilPb@1m0M_fH2fc zNu@CMmU5Y;v)LOu67kmyY!NJBP4wC(1php$;4>U_k4^C$D!4C3-q?bt$3N3inGk1C$Lkn0o8nZ1hRG{MT9}n0y;!f zGV7+ydcwIX+hxd~ zJ9QY&9}`s^GLJ-Hcj`#ca^jw9f!IZuvU6vYTTQLn_`NQcwWS~{>^sZ&9hqQhoNFR^ z%6L2Ush;yTxl+B#PGA^GHk5XsKc`HwWkjBx_T6tt4vm0t)g)Yl*U4Zl{k2Ys!vovqZyPM!?T9*otNcZ7xc{snFEIE&iJTOYKOV`M$ zG=2+(N$*x+@)Z;&eIs$O8WWLL1jdVs>aDb*;56b>2VQPiUs~ZTXgqfjym5B44!=EJmc&D5~M%&Q}oy=8H%;Q8c@#ofNCsb1T{h7F)f_7oHI#W zp%|DCBat%L4?&pZ7R=@=FoUTKr4Yk{Hn;^x!0J>S@1GKm-3C!|0FbK(d9M6)|&cjOX#^JIEkVi2*i2|MR z>2e?*+;X*HUq^Me)9?;`Y)(<)`%Ym)hKk>gbZekMe-B> zYir)^<|Z7&uK!^=I~(THexA={eowK0-A248b(}HKT6Q{+8qYBJUL*da)L>}2#+p+3 z{3m?=V}PmYj9J=JF&l;-hQI0Kboq19_r*^D*S~i{A4PWrw>8U z40Dvr(}@2{wf~~EX{-9Pli_{S*Z)gj{|dVYV{%@gj=*oa?1DsO5I5koGVSJ|lhO|m z8Q>@nDeT<%Fj}2AVfXvTAD%yje6y3j@Cf~StBJTu@3Y=JGfU`+D8zS%jYnCZf#eFL zyMT))Ye^vB=D#L6X~y4==k5Mua@-uu&gg^BYP0LtAl*Xy?n}$VFGG(>TQC4b|Mopbe8qfwy?nX)k-U;Dbf#p zpuOE2xVFIoZpQEXrOe zn3-k!t>$d}0!|Z?T^JSD8!*Im<3SGsYkimX3oaEIa$*SuX=eo^ERXywt-wS;Yh&n~ zT{3vt^7aogn*2saGO{7&*xA|o=4BGO zpT6?1dT<9D+nB^~-h(AyRa!6maoI*^)!SQPD@{XVUs-E_f9p7bgGTb%o1Jl6LV`6? zbh8D_02UrH#Uv7s56(>%EW>0eeJ#GSFxTL(WcaObS5+E=>En54FoqbN{-I3k?dAxU zN_1z!+hFdfmG^L$dL;FRxGC%3Yq_y76&aQ-2GAC(Wz(Au57`6vXM1PSm(0mj?GE$L zuf{X@CJ=;y>eL353mc8bYg83z4_6ToKA#u^tU>4SfG>pX22?>422pw4s*(kI{h(g} zymX%kzvZK6P>xVrxDvmGiB~1#0qP%e<~r;O z&c|nm%~m*W_-33t2EP_}4gOOA57xI$VIXPiEV!>np9Y;-ANRB3Q$HW{`ZHh=QrC9U zDpauy^mHmf54dln9)w7l9(T3_Hx88|z|SH(NLonQ=;_n4m`W*b0#OXBX>`bh$RX&_ zhybr`%rBI7o{Hs^2>A1h^PXAwI8WKQPX)Sqhtj8pig-uVu`yYfU}9Wl3epN<@F_X| zo4v`?KraSwipkkKmKPKDZ<63#n~H{$f|7KXHtNG)2E7|u2gTa}9GE@Hfh$F40D%Qh z?=a4Ha?nnnXYU3r1oP-6Im=C#t$hpjXmy<43kU~?VI|Q3ksK90BJ1k)! z9)C+BlR_=;3m+rk{wuMu1W=g)^8&_uf7AKdmrh~d++X1)K(hg6&6Mp8pV68j@M)O| z(fepYY7`Sd+Majb3Fs^F+&bcYB7Ko=T*Ja(EchA z`!~-|gruyoiCZnA>{{PMY+*VC!CJ%Ri zUZ&ULkhXYb{l9+htp1$f$M4s{FyKCBjWRb-*k!WcwYw`_);N_;vqsj$*mJVGg$Whe z^TL*w?{FgbE9T?KKW8W4t!ta#Cf_#!G)j|G^DkbxBQT1`6rND{)oqE~)l5BaTKY>{ zZ=wDIKfcmT?%V-wHygwKv;0l$Rs2mAdY*Zrp9oEXu;U*6l2zCNNiHHT{S)IXumTb7 zMr2S|y9xFjE{mv(%)3A}n+NM1I1p{?GITz?xrZ`}{GP~#)C#iiriS@rJugr6;^OYc z27<_3-8#wskn=RVvLyhsjn&9UGUh;4w}}8rPYF#@yp>%scoUFoF+%k7sK)>F7Jgbj$?ur{5DWub-#{^0wkF-D%cTN5S-w!V?_7BV} zpedMznCKEL89R(4x+}Z~0k27ezrYvJdXw3LmY=c#Ngqq?ev4Fy1JU^})=be-0 zHCi}QqMP@K68!;Kaq$TrQrCoSKoY;c(fF$jaxoWwQ`LLj!CS$4)fY7DX)OsZm zhP&g_NzQuJ3|Fc%idmlnX%;RP+Gb1+n+@_l(H<2phbQHv0TM< z*^}}Gt?!5cFtn^C2c96j!?Cw zi4)xZfg?&T7#9>dE{(XP7w!O<-hAmTlCXLUT1z0jrR@nCv(9Eg7Z!Ri?WJ<}Ln6N# zunVqUF!mc(m4yS(r+`|o0(wW$O1uBZe0ErmR0bQV>ADt>997u9s$M+FEWKf+rZhIv zRC!IoNn%XxBf-o_2^kg z`l__lVq>E-aOju_KJfflpCW8V&}o3v-N*N1`plbe8hT`^_7sXJ-FiXEhI0mqU%l(4 z6$sB=U0Ih4pC243G8c?q<@nzYlRnVEo z1WI4jE`zIB0eZa8P9ahcn4)F7SK4ZgxTR#+Y|$7paH;x@Hqb=(vSU%>YwloG(`#*E zq2ZPHB-~4f9t?YCm5ln>BvcoF)vIYpbb;Fn90=Y3y8(EC_ZFya4l}53-kBRWfRH+Z z`&^(yv;u<_zABczQpU_oNTk;sM6d%{GnB{jbV;$nKv@o)s5AhpMZ4l?^U}>K3C?g_ z!1-o@OwzEGuPM;^7*lN6_44CGt|gmQ$*O?}7s;!ItB=7ACS;n&N0^RnD@S#f*Q0~E zRXE|UmBFZ)xSQLdh!A87UNN|OtsIILQ3tYo@G@>ED(5F`YiSFE=CZy)n)`)X*-M>K5fW?p`bNR+?=%pz?mjv$o}n zwnEvwQvap(+O7=3(~G7InT%6b-$ z#g;GY9}GaL`_ie{o(iWz<@B}|4d58e(ij#}@&hGmUu8B%%7YSl>E)Vcq2VqBueC5w z4;U?)s&KWXX_mIa9-0gh&LMoQ?(q@Fym*&jz|2f@`5;^m%2zMkY7jD2M;Xp9fHihs zNfc-hfhPg0tCu{jn7lk0V=3aexNv`3G^mf&46|sf3s|(Y=PC>^xCXdf_z*1zAF`-x zv3hVl0as+cAS?D3yaXo`N$AEiKpw|!Ekt;qyn@A(_lV%i z9)HTFVs;`zOTW)W`@vl@alE`ovoTdxEK9q_t@Boo-7cH!SG6xmVoI|cc#-H-lN8=% zXYsmNd1!5CsvjR{9yOFHP2eV5v1B={Ab|v%Z$YpqgwyoaScKhfb%vK;c;!Vf< zL@~qTIn)T&BA6Chkln&4fYic%Re0t1%&V|KNyT0ZyAWB{;toUtwy?R1wH9}v0?n|rE$&KqwW}_6QBtRJrkH&DdpfGI|Dwq_04CUC4ra6Kp zcc;F5*!d{?h{$Mc`U)TU>kU@}XAWaAiq6(jc+BuqPZmP9(8w0Y2&<*=AZQ)#5Ui<; z-83VYplXJ5E3_wK@j4v{QORUzMGu{2T?jp;)G7$1l}*VG6?SAzqg`K17IF8Nz#pTlA&G4YuF^kWf%`uT`GHI#?mI}D?y}t&nhgV{^N~Dz}on*xen4iQzMr`W0h|gib+O-0nxPT zSca4*Ymo_-d@OKOI#&ha@?Hvn7tB)z)A3P{FqPYg@J(n>^~M@+u(z$ns4C(cmAk85 zYa^$dSmPBAN2@xsOxOgpjnfC>Zno3M#&VSA_Lg)-b?h({1>`>Jc_L^>Z*o|5jAj+9 zcmn2ve75qAsUv)g7Akk-)>+sktq5A$@7<%~vefujche`HWNak{#mi7j(Og?!AwpFeZV6p%cTmBQAc*dU;rdU?2JU!Wi@TkK)0bhL1o8%i& zTJMg(r`V8iFzklNQ)sc*-3*gfptu*N_}6WPZnX5`?}c}>%|{I_))}{7<3hZK&t4ZP zfcL%X(^KZ2G+)3f8;2cDf{A-RP zxc9}Akibaq*!a|K0?q(7>2<;F8|qzTCBO6-+0hk&EtNRpc$Q2Jbkbiuz+Z2Zk0A`Q z7u!B|*m)smzB7k->z#Vs;m~v%-4qea(`>u@5FVlVs5k3xcM(972kfW4{q6x-=jZUW zV#`2T5K;~sWBzkvUJJ)W%suH`US5(TMa^dijlAm{vdD*9M2FlWs5ZsJoixGvKmt7&#nnRQ=j8_i}*7`YqAh1#+39?Rz`!BH< zY*!1(2Hd@ZBd8h*{J&x-L-C<=(4+V%B%c!VY_cm|J0IPWaKxwOpw96eky(!~cOf!M zrmb-#ocRVC&Y>CoitPr%!kl2J%nl781$cMuJ1}QQDN)eXf7@9Xk zwcddQ_d`ydNB3VW4sE*y4?9|v&d#2_Ibxh0Y>@eZn?=$@-=oDLK2UA4hBn`YY#_%2 zur~-?>io40Tof_z|Igl=XSJ1O{eu60qmXZA+EO4|8<2zr3mcqvrn_f|$cVI^UTUs{ zY#|Yna1+2sR|1^z)ywr>L?firpMARB?+dbk8xN``Zh*pW zj(0e?l6ME%1Sk+EvQ|!HkP)MtkwMKlR1b)l0_4!mTCrFmSHx_jqwu)pTZssBlqG5{ zu=cx?+b>?KV2{olVNeA6)!7Ej?(vlu;OW6!u{f_)Yu}L`)|CK^S2f2NECiccr)aXX zkAU5z-!YVZV_;A)7T2m;Pviz;^I0_pEhUTJF_!13Rxl1}ZO#~&mxYFE*39o82hA{G zv?R>dT3`*d5L(+%5GLK4jbs*26nFeM9Wt)9ES;cStQam{^Wt@=lIe$9xlp}IGk}nF z8-6#+Ll&{J!*x#w_K~zNDwIY6YR)h-D`!9o~iVL71YqvZ6uZ_e)8|TxTZLATT;cO*6}p0XfxVJjmyv5QQ2nMhoit z+D=_6?wiTHqHfjzOJ-lRyi!8gmO#mAg}?;~7=an7gv$*EvFKuVQU+fUQcvA@K~iu; zU8?C{S0uMBSq!lOTJ-cpM`JSfco#{LxPZIuFmvqoT~Fpv0g#sJ6ug#hyJP! z9g=VAS`rFb-lHT)2Vh%~$9uTAkntAJ%8qO9oU+r7X5}*tU188IH@h@*ArA}v%Y^%a zG>5gFc2>^d1t?b>4!m;wr~E!6;U5ADbRtA@;CTNGIaC|*n$6E&@KgN(lMK`nBBIdm zzf?h40o4eCQCBV;vDHCL+Q~C==HSzSH;xIX0!-PZcB>nkbTb{r@1EPj)s8F_z3c?K z=rGETlXWA&uUMSSU@`q55qvB)dVoVSR}zUV2i}L_VJKL&<8b5-d|oc^7L|v^5N1&t z1hd+cOAUMu3AikMccL5x12IRon(c)4O~IX(n82PW1-yVjbUkux2IFyQ7zINPz+(cW z-?AX_RcD3y)GUei&CLWduZ=DMt2+ccpgZCNZ9}ewwUlP&fj0zG*kT0%J|n@AaVB-6 zk(#oFLKg9el{ufGzZBoWyoV<&oxlBII1G)Z5Tx_k5#EZF&9>qVjuwq3hOn=b70L1n zoTW}xCyK+86@bNUW@~0!7VO#>PWh2S2?wrZ@)|1O@`jOjCKWeOlGA#}3ecGUZ0bpOB_zl4#3Ve;>>4x7> zP!zBYUd9`P2U6JjBwc_YAjSooOq+iTh>kLyj9y#;7wk1t#*6Ob&pM`l_ih0lfhRn2 zJKDiReFf%wlqg=OT8tYn&I{>|4zazQC<300S32}dCm9G+y@nVeE-dxO-NDYl!uJz` zP!HZCOvtA>J`Q&h<-AfwZ3srL{+h0wolj57d1q{&ARA5uh*IJ1T`+J3qzfuouT6B5 zl?nAz+4-mOpEhMg2Lkuc%`hk%l;%DU;3IuJVM!Yx*|8g&7rcr@64ZE`h}$+q!RtY2 zc!B_}^1Fcm^pe0YCP0I#a5UDcIV_{Gk=_>vDAefVD=xc6fDOlh=tH~_KL@uLL3gW( za;cutg)e@&*XBSS^&*LUVdxRL7{m#@@bbC0;ft(|@}m};6Z+3rcI_P*pR|~hJ+zHT zs){pU#JAH&-;P_bi-r-3z$2+(OVa&n;Ej)Mki-0E@9XsL-QWjmFq25rbK^NBER5}* zju67dWK9X!0v>yV9%<=n9yZ$ac-|4LJq`^+cj!I z=%hOQP9M^ZO$I7hl_M4UsczIH-7B70zvGSi1}m5oYeSDqQ}z4I$v7f!)E_WauK@4H zy8*9MOy|YqJz67m)1|Tt^%#z1nVa6Bp?7icNBICs_v>pit;ycdaAJD$cn)@`B;daC!rO^~en7kn?$u?Colj4FS*qG-JpA z4U9PUD31t7)j5vn8xLv>j8SjAbwsow1QOh?r71WlomsMDGvRW{V~=9#;sYS%0u0R! z9gjUJM~{1_AaJ|}3<_hs`-c^B@n-w#=CQ29t{QdD6}$gdlLhLNnW*)C*b;Q$k4R6( z0ec^J{AC8{=^YFvbkFQ_9dUJeu06Dn~w+HJv;`q-_VF@4hHaMkY0>njzj@76u^jE$H zSlpS&$O_s#Iwzeu;OVI0m0yzaBtzE&%WiE>G=#M(vuNz=m_4Hvd?(m2xIc6AQA4h9 zhEyVg?wWJm+lH#Z4vjL}&3oq)#H)t0U1*zC?wM^xr{k&zN*MLw#%|OVDhIDaJS0Wa z#eCV1%W#Bs+K}bb;s>m5*LO;4Tb_P57VnnigRwy)f#I z#~Bf41EF)k9FZtZSu7036S!(mDqwRUo==RA@rv%2KQa_5WDcj6Uldt1s30jKSc)lT zp+s@~+c{;?0`l6%YUq&BWg)Msp}T92S_#Gj=kS+qQCGB9yD_)MIUBVPW+^dUa*gcY3f7=|voZ%Eh=0W1Kd4@t??> zQo#@yL_Nc-QCby}tf(4-EO@q=Ov+OIYGA|VYg3gy2fK8R4|f+bDhz(B*xF`qmY-{|18#aud7n9SBoR^kIm1=N4zXLNy z3^NrK5G}s)Vzcbo9maC?qzA&Tu4s#F0LBk zZ-`{vPgi-Pu<}Nx^2U2h5`=MFg747YlE5iLnEwO1o#r@TRhBOtbpZh*wD7x`Z0PMF zWck!oP9)H`M70==za$VZ1SzM3Q8uOZH4$cE*a_&mFno`Nr>CGO6bAKIgoL{t=%J5u zlh*>Oep+cmRsIu&-x@#$QD&^&K&;BdsRf?eoWhSzIaU}#8=>T;s){SBp%Uy`8RZK| znf=Brs7B3{Y^5L1=2ek%cKe>B8i>3FT?Gf0W6nvmGx;9!6$nK_A#70a$KYbCTzpzN zAI)D5m8%CTii=moD`A<#3}U?iy4QoMxZdJb$0#2@hNYv^l@h|%mIC{>UuQ9+t;l@f0v zJW!qUA*7O!5zbnpPOPHDL9`+0<=n;tYNNd#PvP_)2h+j;7`43+B`F%!H;mzH+@bDT zd5OZUEp>C}-D#OgwpRUn`VF=s(`n&_Wix%#xUcSS1GcS|FDHY}$>rq(^@1k9_Mp3$ z)o9dh4$0HmBQPo;BX5-N*TM$w*ZnV9t_4jXUdET!L>2w=XP3{dAE{w+kQ){suv?KJ{KSuwUO)a3508;fn1<_#p=n-J}p4;ueapMqsu z4Z&~xgSvb&o(z5i&e0kI3MyI8!gVXTtN!X|l2OYq&poAh*k8--0p|Vg=fYXJQu7xZ8EcxvYjMD(8 zjmWkl8IR%5+Ha0uy#Da!u(|p#LjEnd4)6CG?^fTft`6e1Bf~x4v}*zOi-^G0#=eGY z0W@_ac8pJ3qwWyOOF#k&l4+o-CA4(W*mD!4sU+qJwT&o?3}gTdHllmUDI8Iy*g>*= za)SZSf`iI+Nwq{i9b7^MyxBvhT`)udo;R4=W4CAst?O5i!Ut1Amjt=mkV3_%21Jm- zRh}CldFmOKVSM1b*cx**2jqM{$e+*uS|DfrgNuSt&k%!@TBQ!%ER#S&P&_5!BTUTd;HgM(UVdj1Icl8HLKgoB6h11XuV`)}#_9asAM zqFX^8Uvh0h_bJV{NpMJGZpEk#;))vJn>P7Z+4JZ0H-+)8 zN-cN{K7m0a9CxsG@{FHIENW$@kTR)0LL?WpxfxXr3P;)WswnO)^QJ(r6ZHCPr8&$Q<}Eg~AB5%Rs|)8Rlp43EhVTRK20M2X zwy(7!j>(7`$@%`NHNn|UGt>KWN)HbS4BFtA3*OfH9k|wD92{4tTBl`J7BrDh9$R|il6NvAPEjJp+ECk63O$8=bSYPXtJt=$!GUN#|& zW!+dvib-akLw{>nrxmo`bkW;!?jL&xj?Q1Xz1Q_5XIjlV*Nkp)5wK^OAr$%B8;j3@ zx&A%NRcSzTR}hahhDyAaL@gm6f+j~z5`%*B1WwI22N|*5 zD4^5@=~TCXP94IE{@l1L7a+vtX1juu!wfsbn5+6BWhMy{rRad?rWGuPZ_6>Rr3q^S z3)KxPP!;Wo_O7{Kv5I@`hW`N(GF=mai-j9l2^Tmxlp>il1y=SFYHPCRxZ;8eII(uG zU{T!rodnmuxF-xb$?=}^{N$`x_n-|A3kO#R3leKapCdDJIsuhpc8DR05e*T~QOITS z8*yI8wuHQ_COU4MMndTN-m$xZ-A0}BstUV}W}we(TtPK?=2nR&ZFH3~U2^F}X(enV z?!@l8umnjpV=U>NY3`WAE!?ubvz&*}N+X}Pmh*aI-F43Cu5dwZ9jBRIQjVQ&`5O+U z1&ae(&dA^O_gO&Y91w;B)R|}9TRHb{>Vt1ig{#Q3T&23-{LSmaRv$HmE#s-)s*tS0 zb+8YewJ3RwJIb1jMD`=@m6V4N{)!M0_^;5XI;(6};hC z)WtE@?qF=bOS%Na)*@;FmxSXufKk`M!$;4o#TWLUfP}q6?i!G$m*2H#Vm;`yBL<0x?Yx|~l7*`r$O^a1&!WSDXgmWFV+f?JzY zVkCz{A|mi1EH-LD+IB=sib9sVcYgyZ4rh5ngup31oAU{N528i*1C<(B1d-2>@D46_ zE}}YY(Y8DaRe;KbosinD!Xbe4Z7Cc-6_E3?(K<~(89_aPepsA|9 z5|L>8;w|InSM87BKbMoE6G)%Gv_7XwtHeLC|Nn~6ca)_=L!q4f*>s9@cT(OREUosd zV4GLq)|t@;R{vGqE3Yh7s(XK4tw4n!2myc*eOo!jeMm0x^lbvYUhrCQHH=5AUzeeA zt3$yC6r(|4Y~qdS_3*qu7>RtZ{0%55f1$P;Ye~jl+E`gjU@SMkMDiZd;8Qq}7>KFt zE#_e37=S%{Wfit@6JYcJA*Rm77ed7^2adLA2gue*@tE-(kd~nrQ#B~3=6DaA%4!xs zX;0Lv2apX+o*ut=-bk-1fpsaaTzhf#*kjn@+>Y-(R7OjQ7hLlikeBXZKoCgu`Ef$U zWP{A$06x>%w7mi-&bW$lYWAUDH2%hhciUbh4D}CQJRL@Ma$30P))aA(19_d*2r zfO24xDoRFDyx-+* zF-mltQhD%p2>!ytk=T(cDBTE+p+CHaw4oUxlTjXBVL1cuOx}JMVF#~k0ELQczY*^| z*EgW$OdDt9{bzxV5cZX7`F!R0)sK&#emH!&|LFPQ0prXl%?y@@_@sO?o*Xm!HrDUX z+U4c>%Cn;n&t5-$_43gCc)5T4?5D#I`!5gPyn1#3!b$*(8_c$li|A{}B#Y4A%mPv9 zXS+GEC7ff7DX=5y(x;F^%bDn+i#WqNIK{#irk9h*k}G#s#&_idQO*k&-sMc8{k#h+Q)%b40ptQ?OLp*7EWN*-gfDDYyzk#;_sr1CDUa zgS3Q#zy2)ICxEx2E?!frNMu~D5y2ky!vQ=S9lUzMt+ZaD;J^~N5Q`6i;n9~3cMD`@ zz>R_MF##7J9C*wgr8wpgWrAY~Y|)H3Y?`Eg3;L2`;Mi(@2~kly0pmkMSP4eDW;Rba zhr4$T!R`E|OciipAxf(r2Yr;mR)QbB+Y2T^yuQ=l#SPnE zUe;whY4+as-{V1m*Pg`1Ch+>Q(Wvl9;OGtTM-Qt7B@$o=QZUVdlf7oFZ1rfm*Uj%q z$NOQ&+=pv;O#f=U2G+aM|A3Nf z{Wi2aMVb?Sp?{cYZw*N~qT0}+CU}$bi8p+ZiYngZH7cri^QS0=Na15S2Ou66)&f3E zaeU1SZnlPhlSM5991nvjtC|LW164Lp8^eMu92Q<-KPKE2y4 zpgzpkw5c#PFLQCT+|<4mt1SSsfEihdzQ}EgOFO%HFTXNo_hET+&zRk54fA8jStx^( zvZ!iMEUr)F&nq|hCJ1#KE;gWh$R=+>?^D>gV0wec>R-5aRpYWU01i0^a+p_2<)0`t z06kj)7c}nO%DjBPvFw^X+cG(~kye(usIn~+cdK%{MfJ2qTnnI5A7Z|u-J2YzX*BZ$ z%H!-S3<5XQ4I7A@CSRe@q$Hy>-x z4_V&o#5U{SB)6N@^V#7jibQ8`g@(O<9<8Hr?`i(!Z84tRvATXfR&ETbX zRv&|tb(&tjXmv`jj!Hk5*4I`xT>VTKEQRNZRk~xyc@H~%3WX*l!d5wQAvlD_(GN>uy%IZDOcg4!Q;TY*f?vWHV?lO!RBTkXyxu@|pG86bvR5_UCckrW*v#q4Dqr!Kqo|@?(g9|9bTj2EHy-wt zIlXh$S&CFy%vFwV{gB;=T`#^=d}Q;AFxi_zOT@J>&8+fEcqN%eGqW;;%A!%4BKgit zSR#9Uko-U@|D9LZME#WS>n&vDp&|ZAm+NXJQrU%?9w%j z7}s%C2~XqzlkbrEaSg2Ab0ijbB+X^I5b?4vp6^2nWIGX!w?(y#0${!#IqTO|WSO|8 zD8wwPCI#X;23g5GulWgv<>D52-&@t8MV*J`@-55{4#GQzb<=KKi$}1q>u}eEon|*{ zc!@6>cvvnTf+qyb9rna+Kw$T z;#)Ja{O~$m%sl5xhfS5W1w4JATa8P$FyD`-(5nE7lFSL%@qTQIR>A4F_1j<=MGu?c z6Z==r=0b}g_UZtw0w7!(D{S7REUzIm{LGlbNmxVdMf^YIwmPlv_6p?rz)8Rv<`*b` z^AA}r!&W;TN``zxj{F7RoZm+Mb2xpzycF9z{-kj+ggg_NQjPjjIA5gN4zN&`4}QWC zx~F{D|3F7I;Ftz7A~bG0K^lG;OiUOJp}#ttK>{>bzL?IXA`zu2*}(BiwPv8~R~|Il zcdcAuvjvM+?Fz439_NDbYcqzXZe#F)SOA6slW*$LVm#R&!mXWIY)A>L6827)Tyyxn zgJ=yNu&{vUn}LSGvjwEumpYGOVX_3W#>)pQ$A?G9AAWjvaAU6X;lh%3e;(?7Ogb&~ zv7b~A-R=_q+lRUzo5|s*4@bZ!N!5=f@?Lld;pIFXOOoV4HA8Z)Y#M?bPk|$B%$GYs zaT92jBL0j&=mMS00}exZ;E~=SbutSxusP^z_Lm|&&(2~&0 zj1@CgA9IiTmgGQ@WWX8QgYj~avZtQEcG+oqcIX-(dNIXwQ9hYY+#jZ5UCiPZ3Ux6L zz*bd*`3R=v!X~%?fT_U~v#bY8DF*=5?O@r{xr}CObz^B|y-Lp*xl97WcUFvP6m%IP z90eVR*>k!Ni*OK@r;wF_`c*K)u-!2i)>3J$K0 zZd3E~Jpka*9gAD&W;Z(@o7L}3%>nPtiTN_dLWf?>a-JB!u94xmU@?qdzX&6goOXXh(MRp7%DM;EuYWn(m%n*0Nz04 zgVr%nJ)+9PtLFz+#o>S6V4q$)SRVcJ(IW6G&+#^pvv=Zc>NKBJpET+EQ*Wc}faJIo z$nc{@0*c8;9?Csr@L6>LvJU+(JbgH8sp4lazQ_g4*{M)i7?fG*4JK3d2FT)?=LGDq z5T;=m;>Q@HTF+yq{b~#N_#K-Cb9&Krmvk`yocw~KQ^+JD0~Py32gnFO#6f$O@fU1>f3&|SsmHLd%-sP{HpuQvjMw-;W@S9Q=l*iR4V$Z>(wul0elpSt}0E{{{PZl z?HkR^P)GFys-TE$IVe*0{Mal*zYjQ2;FKa4<^y_f&M~Pw%rQLy|BA5q=H5v4B>bOv+mxd>dBl;gDArLGp-uA$ti51B7WK#9!WGC`*0u)_t%-S zJZKV>XQ%JA9{bRG#2QXYADiI?1l5~9G;M~61?E`{G^+3y(nrzv0J~!tQi`g)$~`D2{k{kTK=b0OkEbKk7k^s;f#*I zIk9xzlhg2bCD^v53Z-~&@LC3;9jVeF}uVVC!vf{!@ zkoFr{zm-l*KhPq<{nA`ZWXH6r)dOyg&Rav9^~yOKwv{N;SAt(j+Nc^cf0Ph6Q>h6K zyV0UGTv1Ucron_JJ1NRk^^8HT2`Fr5Il7oUlZ7SBaMDxpyXxBq6(jX%nc-5cQXd%Y znwy>?w{@m717WcG!<`c6R5~W>9jjJa{#I3#kSq#Q8g{xOr8AzC<>s+Vo>8QW+kjVs+^FIbZm-iPss)>E z+rpV{SZ_F!SPB@8G&hn(U7i_6j1BOvatH`jZ9;h*7>WePEKvNh%4E(Ju{y%ZB!8gV zvXM(Tr5oElu5(#~Y@KGSx{fno>lM!g$9r>)LFq#cnC#l;pkjB-2c5G0nN@+YBMR%A zy*kM`D1r5OW*D}*flWax)0IpaJ?l2n?hQM>Y?R|7kc7PmSS3`wTTw}}khiIsaqI4l zF0NdwxiY~~(hEI2NP#+~S!|wL!wHokg;NPj#|xY5b^hTChF^I8f=(=$qZ}Mx0k}PeMpb#{-Y`sF)s6Uh-xg<3#LTyMnoW9aRXnvepUJ3Cy%S z*Eh2)8NDUXJysP5y_j_wr09oc#7sI5=xy+#Xbv4FfyJqpw_PYBk^zrG;G|8)8$~z< zfik-l(3Ye|fb#7XU$TvSa%RqW!h&Ox+kx|-ZRhZvM_#ci z`*~2P(uq*PhF2D)csOagyp?P!S0Js zt%#?ex+UxJxElyUHqyU>OFir%qwr~2AF&1mNcW;bc`bzX!g8;H=R2KcFr$jvvgn&K zKS)Ltl_Gi;vVZ24E8yIqy}X)Pu!?lvWU7A0grhL);)mhf?iDUv2m|rztz1V1q%Oc@kMJuD8#)9MKelQbh!EXtdgI>n&@UR5UkJmYj7L(u5lll1Ges%mxk5kW zlBFLzAFjWHW3!A*q)}Hr3wdiJNe^^9=47da2l*R;iiR@8R4ZeBE6BKo8VETY%M-GK zr`pg48Y+sM6nkK5Y>2eAb}MPCMYdy!>q1=)LAm~eM6^Y&xHR&$)td=ac5WQ|+M?;D zPgIWbWDZR!`r@1Cum*?eag^i?k%pL}v+*fVORHWWUS&V|b6FuD22tePLB&t&ttUvO z*N(^M=@bsEc)N-gfKfDosncMTzP4dS+R!GIz)wl_0y+l`JBv(25-szA&d}^!;4NJr zzpI^(emt&ce_2G(FfSymyFtUPQFdqFOu3#wEkTIY(u>Y?>WdJlfyN>lh66`R{aa!*(2Lt%R$evi&VPgA*&pGqp#k^ZftskZ zr|X$a`faF@ErItmg(E%q0)SKDC4N-bw-D8{8f9%TYojphKC|xotoBk;Nv_-$LYyYj znpT-~I{P+E-?rbwla(rzcIo@K=rPfFOtFSYM*ZUyN_?yQ;Ay1N2h`c1X{Fk6E^~P> zOHZXlr8;7f(|i#yCuZZ3DKusw1i22i?2PURLw0w|V-vk8iyhDbB&s5U6RO5&0`OYr z1v2^5#>PehpO49(I-O1eua6g}`t8}mGzG_eRlE)xI20+wb zreETccrU5Z0g-uY=sSys78Qwx*=bFoB++2=r-M$3^-C{~(804)%zIWX^;!s`IsJC8 zs!UdtLf z@t_*;#Nb*`?EsMgO~leS!)hxdE;vL1_60A{2#KKX z7uXP6wq*k^nNpNC7j#O4E4b7n9eLMTjR1>^h8^4YGr;d`u>ch^PRb=rA>Du5Xii^e z%d%aTNdr>$OzCPU2NC(b*)3tWUN77EHVZuutyqajK_W*==itPC%VB;M>>7a??65P# zh&Dzz4&s|;cX&v9w^T&Zq{(m|p!8c#z&dZofD6GL6Uq=eMure<)hBT9$=$~o2r=Mv z#5Ug#8FvB3bW`xb)0nvaC#*tDHM6zMgpbl0Eyku)P5z0R=+vX?fa3-vp5m0SHH*_z zveHqfb73~Eb$7zWF)KQM@xt1E8Ql@42Va9vi{DK_rhCeLGn)_Ed9#!&#_+a?RR)%B zFR(a496r46ngyx26rnhgcit=9^3VXhdv_33fqfktf`510CZuP7>hY?qZ7Hn{P2GE(Rm}*du(@eYl^oVPMg-YP~>1=w^LjM%E1(|yVYse)# zlETeo|u)qLrC_kC>AfL3UNevh<4&V#vmVK?GHviA`V}5c3W)uzR`HT6; zztP1xr?O`HlON0MTRu#WYwlMAPCy5sL{Bp_Dn0`t{MOJ%0H_=PlpWLq|IH|f-M!0@ z)NOcobVa z66IX3uU*5aD5A}}%?rE;6isw-4$U{*T!U^mMd)??3qnPu`=DNonEwhgo(sf6pABZv zia@&knpCY52zbSG?jVAwGAJDWLirOEL)0wsqAA}JgdS6mvLK?YZ`muLw#QaH`2q?C z%`Omem-2TyM1g0A3-WB%*S`xC4i|U4k_!sI;ah=!sv?QT50yw;`KKfp(KK8fBj9-# zk1hkm z^2mnM0zP1@pM#J!lwG0`_q__Mc9UklRe95)2>(>gOvvGc^%pBnIyh`GyHUBiCfL+` zhbEoo+(EYs##_P=i07f}^rkg+Bn*QpRh{%tJkL;AIqBe{aLMAi8eEHVc3{215L?j# zl#r0cBW{=99LrQ%?qDgq>DO1_l|fqzA)d}a*#M&sRK>-<($NlhcyfV&IDBd!LN=Zy zlUnc~PiXAiky%jApc_H|7CHzveRbF#uvr-yps8q>oe<7baJ4lr{A7>Ef18d+jkNj^ ze~!n;4hjf6BxBJ69~$DMYtBU}$8h7CV`yPo!pi-piACJlZo@h)x?-&?C8aCnWmUNa zkE;(;AXsK<&=V_Zv4%~sp)8+Ns+Mz>V^{}^nQ3o?zE2fozK#m0u5V1+_Tk4&kGqKjzl`5P=Byx0pJ&t+LB}Ar{GN zQ7y%JfF7?1ugutWgiZlx-5M)LQ!`@?cY$8O&}PFE6Al+#2pQ}DEQ#A_G0Gg>eT_P> zT8HWe!sU!Vh*0F8WzaX)<$<~XzuN<2PeJJq*_`SO{--#Fa0|mL$2_#E5MVXYfWL{R zTG};U81~?jGMffZTR^rA^BoKc7BRoxx^J%1GoqgFiP?!Wj4L+?k<|%C<&?zCV0eAu z#@gwCLuneeS3G6rPTK3tU~H#RduUA#;x8dN~pfSAcHY-AC6Qv7UOSNKm)o;*o*|8WAwz>TYrNxAz7 zL6|??xXKe&d6RZ;Tw(1AD*SblrlXrzS;I^ofen7+8c*2CFDX%^o7Z74FW}1*0>&Fx zS|gAje{0Q~%)`~frF{r`eH3mK5=hHqWq!*(GvBjY411!mLD_z{*)6%vwVv#P;S551 z?%Z=#5C9T@c@U%%ejb9QEw0KNFUo zLF3^U#y$O6#5^jvOtD{xE@ewIe;E!1JGlO?LFE@9@~BG*Y0)K8jG1L{c-+P~e4A^3 znR5f@if;qQ+TOfj@%0s;<0VT9?yj%hw4e2r4fM0Var2HijrAMPV||75SikW^HaL;p zjT?{uzLdXzVN z5h7tFyD#y1v)yNOGj`vIj>gUEczuiA1FL#*vzk_MV)sYYptxDBKwo9|!0E0O*1f^1 z25Yr&O=b0aqPp&O$qYPX#`5hme9Itjnp%QbDIk3&eJhdj4Ii`H!Ol zR!kbI@H>Hm^Zz(O+tA>jvg)+eOP49nUKX9I)!8|`!$S%?Lm8Ndp0i9w&mY?SY5ANU z9W7gxoL&1}mCF~XmK(W~>KS`0Z1~27t_!?}II+6bBn7uuq(6r93i;KXg0Z)fjDq&O zN|af`{#AMqS0$0Y2D}iHbJ`7-89qHaFc1HfR72HqJAEsKo3=iub^=h6kmhyD6vy49 zOT8TJ=DJz0b0^@qQM(4iN-8n497cAFLEs48?`k2!pTDaGVPJ=x#_w(=;D>y78ySM@ zyW0ugY{h(Uy)NN>`R_Dgsf#&nZ0Pogbl_ncaI?K!u={X`V2|F1rA~N?WD7=p+^mCw z&H4LvFlX=nejO~>+P`lng**TE?PBi1_NAvgXpy=e@q6axE*S?9y zp#q{1APh_JA}z2lvZg!!dAAmo&_MJGmbTcn7CuJX6}EjU-4vn&+AOW%GCU1U#M|Ux zG)gB=k6%1*Kt`Ii|8bTi;fPd@>fS7*b<`pkm7C42OU*3vv{3AdG z&3Vm7(z38hZ*G->+l^{+^Li*e<@7yXRAJ8LMislF;=HQn9&sw)eU22vXnCt@`tur# z4srkvMmo6g)*lek(YB`17iC=gE3N8S?C+0NuC?$P8qlBx@~<>%ql1taFsEsBtG-FG zMSLM8s;+f#bL6OM%c$?i-|7CMD3gULix$u2Y; zW@(8vEiC{qKB18tPKTOH`AzQhCEPCG8Ni0c@Mo{hdTGYV85zIL(Xdu``^Lsbd3rC=Nw)Y+0 zZuCJEY^ojgQw0Oq@sq*Vv|HW)ZnSV&?fV!^mF_6QU6*+m{NA&QDzo4`m!rcy97DbS z2(Jp%4ruK63^wQpq)1&BqUl12yE~s=kD#&xEgsywG{N72tIkQ#wsEEeOJqz__PaX} zv}=q89nx0eh@n<^vq#ZQj{1`Bb%BvE!$BEUTqM8xG9m*eoy@+`UUdpG*Qf;TuI;2fc4-w$hm2oN75PZZV2o6$2~6rbB2252&?T#hf(|mw3iJ zrYytS0>L3DRqUhI#5DM-JPekxvJ?JVXk~O{m7V^5Govhb1p1QoK$9}mm&|fQU`lj9 zZ#D$CorQdn#)F!uS3daPO}%oy{(ca>WEln+HayAgwfOtzgRZ!z@Ufl1dvfa)sKb&i z)}8`=Sz zL#%M}Ez}r~zZo#R+qC9@R5+y(l9+VB(88I`GePD$6d$0W^#qN=S%tfqUUV~gK^yeU z0tcMGHjVawU?XN!|9#==ndO>V{r&{K7?z7R1TxE@q8`eyUxgD>vqof#Mxk86GoEXw z!ljt&8w}=$coZ8?On@oBMPTYMw?)-Ioo6)B`@SZ1E6g3}$@jE6m_PB4-_suV{@fA5 zw2Yv1>}JpixzqDrHf1aFJ&k1*+(=Ge(aLJBwH@IY>~5hylKIQT%{zCr(kMgEA>Ps6 zu%W(7Z@(4%zRvfA8|zNkjdcLSzIdIj;h0K32WrqaSH_tR8TTCu9pg`vR-j29;N2OOM6IEYUk6yt?r3$c8*zWcqjvWZ4` zP)#dWn5bM1)>%0YvP{}T?t`5>%E1ZkaGJW{gsS##tBMOdG2vvaWD`g?yvwQ*u#sQ*levNcAz8J7TN~Tp1(PEyai{ z_PGko*7p4clQCP1od{T4VLZgXMr5|OALYd6WH4K^H!3XG>{rB&4;zCy)nllphR2n7 zw~JkXr%(uAdHY~ZE1pN3Uzmc0A?(fKV*T;MINwGupd-||5C)UA@?uhEHKY_Mt8lnV zYoM)Y#NM(C&rjwg*ljiUD14B!fUS-Fs@p(^7npeAh+!jLfg_)$k5=cuB(7g~8uCfB4KX2n4b5E+L!ucXX< z(VCsCwAxeL;@IBnt7`xc9DIZMy9@Z}oKef3o?cTboVLD}QDAK^ZFHA|CJ;LdXQ;O$ z#z{T08^H+ayzRZ`(Xku1x6@l%GOYXM^^B$ZKCsU@M&~4>A}Z&5Obs1HV<|Pz&Y_Fq z;@H!<*wT(SgpF=p9k10uuIK4E(D66)^HBv|)!1AU;(YT~#JSy@*ElLJB7oCCIU=AC zdmv8XK2IVaXH_R$=;J81?x^*7&~Jg2wsMZEWS?d{;J>f#pFtM`SH<54vv;fIx9_?u z@0Tj811xgdVT|NY&5wI>w3WpUH?!k2+#-TzfqlL@czpuB1yqZm!Ej5B|1EyryD zM-XuKQC@v@R4TvgE>%9PVqC!*fHk;B{-AXlES~$Gy*m2v)8U(=XRls1&!p*J0i6-l z=LWff?Y}&D^Xl0_^H(W1$qj+7Izd61VVFjAEakn%yA>H#WiR;tLome7UbzL=H|s#L z1IROhh++p0L^By1$RMT`E)zv+&_Ny)1fOllalAn z)hB~V+8clMjcf5I&)yt9dG&MiT*`fJu0B4Qj8Ai0>+#b!uU;HBKTD}E&D9r2&ko;B zYwuRpRx^9>u-5z{rM@=r+$qBte>OhvoCt!O;OYxc$K_@CYvo|vL0I#VMqRyow->xZ zgAp1Sbr?N;eicIZ_|=b(pME%ex&P?-;X(7O4CGrg@KZ)LX^taoJ(RzVn9K7iETQ^zI@Mr5usSo##qMA{YFd5o;N-o%XLF zV&v;CV{LU|_FC;NHM`3ldx(3h?W~d;&<-2V(Fn+zU4gk=pt$!joWL(V9(=fy%BJG6 z*%J8NF6wu1wFHsBbAIUOUhgZbPHoQJ>#+y)$cqjAH)IHO^$l#tfdb7=6#=d?kGDfT zozO4O2b>$NI2)rF+n~U?BV-w0zga}j^=A_!GiU2p@y7kB#qQlaGS{#==~zJPRZ zUD*v%f;)1D!IPOnA6@F$Dfv^vWrstXm8k^GS%;MGYj7b`wstraZ#ne8frfmuAVMxw z1m)J~AcZ+cLG3FIqp6vlUvPAXtSPw3{F%YpAa2l9Qdd=L&v4%?F;rTiK3 z$2wRg#5hW4`*71dfVwhBOC~nJQm5B)$LuQ_a;Nx0;L+d7H;Pmq<*r|Lm#5Z6AmWKCA$Zg1fCrgO@@2uBe$mVQ(AAII?W0YX!H+(l;$JP%CA)a zipv*S{L{R^u=vG~EQrSuHMV!>&VnUm8&)dZxU=q?gX6hqY`8N(Wg9&Z))HZ}`OOZE zw|MxGXT&Q8VRP%VmrE%>1>VRB5^;pLM|WCJl_jFbS$0o3fvZvIWei)>DaF`J_+9a5 z7@6>Ak0jp)hQ><$=)e9eXa)rQ$1!*nG95n%xcK6H7OY~? zL3BaI$YtA6enXS;A~@%j;3#zbYF;2DGX}?<^@5cGdjt1lc-p`dVd1sCBx%6gcL1(m z-KHVqq?%TH!Vtu6#Z`sKrSMToSv|Cw)UKgA9FNbcr#Qmhsxf1zq8Q(%mOb3?jTrti zm+bBuHY1k67juk?zKey11?Y1D`d9$Cm3-TOkDyqm7?pk(-zwE|(jMb3YK=TNT8LM6 zc`3Wky8%oPZvmUH3RMt18a>&$xZHYsch+!lKt7>TvuEG$wqHJQ#xA0pwmt5C16l(2 zYhceuIq?23u4IIeXxd$f`g$I4K7F&O95;JiW#DYK#S(%^*wbzN#}Fsrd-sUWo57xY zJRE>Zc>_d+@CUJoUoXMu!`$h+rm!T4_o~C+FNSGv)__|6_^h#ZCHQhDesL_%!920q z2Z>;UA|g0;GL+|N4%;;PwT7h(`FI#-Km8dYma$)17Un?X;gB`K&Y*yxH(Tm0r;w}K zR*%PLzESzH22I0Uo4;h+L{YFfAZZ+*Ee)1W4DP9O7Ot2$!6v1F5{)3`Bk(}C4Ci{X z4eyd{OD+s14L?0HiGK{bvlC3x{(dUneleLYd&WGvGARrhvJ}ky7a5d5!J@;E&x)pc z_n0IqU5%DG@Hi2QO$s|{sW|T!@?XDsF5p^Krge%7YrR_TFAtV_mDL`$KxgIayiy;R zPb#Y^%M=h<*i(nYW*_w}F48=~4}Dw@hoJ4Jv*rLPQt+TPYat*IWg)<+sU^Y8aLL9jA`^QrN)Y2JMzC z@>e1e0q;$-^biq~t?woEZ^TbPsMLnnAMlUikQ@F{)9y;?M@Y~Z-w%xDNzfFT5NWHs zl5fTJz(=FX2(eTx8>G`}Fv7}832;hJ;U{U-FU=5IFrAffY4R)ntR(NN|Eo@n7G;Gh zH(#MG16S0dKa*vsI!zkXTv@f8=}Pqxn6Ud5NI4|k(eMXo>T#ud$mH4dbO?Oo36c(h z4DykE3TIqhoQq_sOkE5dinPMbtD<1#OV~aP_d6sd9Y@FB%t>S2rKyG|d{S50apOT< z2+!LE(Xv!pOnm0J8SZ|h(CFenlv>4msjLxuR5Jb zn^r-InmJ*nM?NGp6y|tGvc;n~L$!Tm98x}9K&;#>;KrSogT{4pV&EPacS>MGxC9;@ zo~@oi<91GV`*-i&0R=UEb}F$aXA-op1#tpyNvP+7bn1d{LS9~v2%P%F7RXbtgF5PA z|L;x1r0a7|NP*qv{F1h#X;*>C0o}!o+v=Pg(y_0>KJ8EPdO;#Yl_27CJ63|9fg0tm z9r>pTi>>%pZVRBCAHP(aznS{sW(uUNB+P;};O?k`90buIG5(Ovg#y+a79wWelMe4V z29)4}DOVPmx~tqOo&b?PdFU5T7Ubl;>_IGomIg!Hk~b&I%Or5jIIbd%jR7ArKblGk z=}t%m!rDU57RODHxi=nw+=~xU1NR;gCXb?CUIJbE0)rgOYv*hd)mQdNKKZ|GxW~qR zg|UUYZ-(fYauDwAXoX<_5geRw4_1K?%l4(Fb#~WM!=-)Rh7)s?UDjEYQ9c31yo7c z%DN5agn4F%=QqBKB8R!m-@$`$2m26`2xC~e(4!-PyNbE0xGs6&nXP92TwVs(UR5t; z5T))w3XjG8YI|C0&6nx;)OD&N-2qbyZrKOZ{G!@Zj1sZ>Kktg27H)1who-X0D+vhR zbn_LogQo+FS?AMZfN?H6HjM>x~WnW1|73GmBCC%S<0! zc{ZT*72}(ff7n3klPT~>k1ZKaZj=ki7;>7o+jBU#Nb#yV9--hzHWksAJHZ=i5UDOg zr38pn@Y5nvVI}Yd7BD&e&@96mk`_QMH*&BN#ac0JI!aR{wn}I$>d$s__wLBTLHG>7 zK|HvJimFge3^aZ=1_-&~gbcF5C(TG{0WdHEdi>Mt3E#sgy9?U`sxQLq=ncLKpqn2B z-Byn(tKG2%Ooi6HgiBRFDggm`hV)DnR71fr25Q$iP|3>m={ltg*C|RYnr@)TBpOaJ z?U=1vL@bg>-1xo#Mj47Yz;_LD*tYbKegS&x>>ey>5Ezr+Fq5Sru*^$LYbF1 z5xCfJoS;QW?l@?|CK&#Z^Z_+bcOeh$!{iX$^9KG+Frac7H(_tLxz6J2YrEaOWGz|h zLY%-d5EdY_-X%31M8G;$IA zXQ#DCKIZgf&;vUf2;7e#!Y6RU1uUJ*0}8pBpeF2-R-mN{y*~u5qFOE(48CIW)3bxa zSARP~`6^7JjH<+*|5`=_EZ7eq3#6u#d*v2cZas;$ljWU(3$BrNf+K*i&?K%bXB79? zjvFM&;uAI04Z)L^6PY;#PgW9-+wWwBP|1{IQd}&GwRAFn2U`6p$3>I1 z(QZZ>PL|DYf<%dWAdD;xY#=zYg7_w2#wSrLh}Q~B0QO}az~-|C2?Aac5zsX}I!V(R zkVyYyr8AvUlG3Cwo~DeCAs+_D37QD)LxR9en+6-VB5g!DPq)!MbjzJlg<8ms4t7b* zUsPvXZ%_vaAX(JCYVaspd0uJw?Qexr4XfJLYVO3RBQq{*jNEJu@*$HH+ zA{X|?b2OWrjK7q~>sPyh~QBh(4q|4=8P7V%Vzd3xo4<*$` z>518ErF&2pSxWAe#-q|b4~csva*oq(>C0et0%MsHfC~klKy($8nRsq@L-WKI6XftwJEu0Eg-KIOeTL-X4Pk> z%~THRAR}e^h=*0w?e%CoAX>!Nh@-6b;l}r=v8Bb@_S;1Gvt>qt> z?UGw7=a+(DV-Vlc>{(^;~|dJ4myj5Bic2g#vRlR98b1SDXB^_ zoW1A?BpLm;?YAfI-@^hz{+ib=IhoDQ8U#+?fdUs1w1)vHr11|p0~lT>Ew46eYkyv? zCUg}e6%qLMrZpctxNocCrpr&q*fpLEhPtEpEQcx+Xw11|(>tMV^S zV+!Mt)px6_Mh><3(U&y@y0c&nzv?2kpi1IZA!S>6o)kt2F~z=FsUP1wH$03_*|Fw? zGwv{~{;T|Mb*}>Jq3OG$_dnp9ShifOS2wOM-~Q{}>iZ?6!R!U!S1`dnm>5+mDDxIs zKU}^=!paYoKd(Y<1S1v8BgkEGYde`2AW5?$+(FL~)X|VRW)4Y0NMjC9a3&7F0wld>G9_&n~1OcrBU{5=%!zWbos00r7+_0aYDyu0Utmui!G+uQ+X8@E*9kqEon} zN7SNX!jFiI9GmdTRfHSmW%zMhyWQm_+X05E^KZtl%KTcP*aUq5fT8Den)cA@TqNx&$!TMx&nktefzDA~j$)nC4 z#?7j>f&>vx>2hDPi$}2(Jvy9~oHCuvguv2k`Ewhw1{{+p8u1iqJ>Bc-o z=3gt-XJHGDP5L)L?^&h#_b@YZ$@3fq{$8oR2n#sZH!qR-0?cX61Tg~iRY&w1oxZA6 z{|9px5P_BI8x;H>mFiL0zM@ylRx1nZu#7w4>o;xs7&VS6)gM_y-R}H^lpibAe`p(Y z_ON;~I~{In`JV~je;D{mW)Gy=iDcphEdN}&D$@Ps6a5oy!3^<+2QIq4GW4J^8;j}m zOqtescL39}g=J&|;jNUb^cQ!PmJro95d9ZQ?)5TK5=n4o1nDlc<@ms>`?bhlp)E^g zeoMvPz56soVZ_kjo|Y^bEQNS?YY4=<`wf^ml=fP~!IX+~uk^%#kbq$}t+Lx`i2~~Z zGVkH`zk4^=FOUQ@L;hGUYp2`%n+j=g$*PtF^qM*EJ5cR`(#;5>BI>;dR5&ya9Ewm#@V4^Un)=I{^&Q`k#$LsIj*AXZ6nk z0s^<28Gb?epVdTl8CL`Xa28*>u*!{Js9xJBA$G~x*BzU9B09E>5+ba))T?(R+Xx&4 z!U+MWeAmhul!~D3xIBZVZ)tN2;avWrg;A?S%Y=_B)O>P^bN6#aaa? zn=5N8YY9@!eH;rx1v8+gip~Cjl74Ty)8q6QqSZ9ZJiS6CUGZu2IN1K>aOrIcbzGF} zcRJ~GN>bD8ADhqZWiPI@yHg_KV2k*X;pB)qX(C323A|$sdILp=sI+P;m{G-TCg2Oo zEFaq^v^fe!&H1|=6hxR$3Me6EH4koFI+u+q<^gCv$M@K#_Idmp`FiO$Uk4*Vs=T4* zLWq>x**ZlQpt8=2_ez6|5mJMInkt`8DNth)(gn*TZ)!KAqTa zNW;t7{3&jT+(dC$(|i!9UwY2pRd z@sV)}bb~Q8e*xRc@|eR6k;dKtg#%0G0bNmeth2ExlG_N`RPPz99*=3%q364@s>d*C z)TN56#P=?kz)h!mtg1Py19Wjb@*3|Zc8UHZ;Mh|KUDy;Z zf)U8%n@qs?(z9FFp1>PU;1E)e>xK_cyWcTb$^7*N~lm$s34lt zK7?1QjxYXvr)OygWC6%$Y_wl-H{5=sO-HS>Tvh11q$)3l;ws!?*@>Fgw~>Yq|@wozA|{zH$vxo zjaJ}ue(3)_EAaWdR$xjuRM%{xFZn541ARKTS`2yEVSWeX!6&Ej6VM3Afa-Qx_MY`)=Z6}6-%RdkUR2$<9gObPNgI6z(Cn?Ne!4nyO z(Z%8G3KpX!F&wP{#ZV;*P!kk^I#-e>K`0hzEk*=Q_50|9-gjc}LLVp_*U&TmD89KLd*o6(qe^S5-a^)5eVk0E3oj0EVu*Ayy}E zxf@XdMhewwj7L$X{ZZ#+Jo)8j<1((-?cx}06M%t@rbl7SRj&lEw*RvmPT_qI5;-%V zpKmrG<6i#u1Nvq0fIz-uK%WQc7pjij3P#3}{LO~+Q{2PiLBSX%H>exJsb9FE<}6%1 zsB4xE8lxDLdJDPPnho+}(Rbj#11E+M8rHFuEB4T{m-+db+{*!5CS=iEUdEi2^xAtg z;IgzSgEKK1sA|+qUaQY$ITWDIp=5~by-WTO|7Zdt3{A<$hBh2jPxObs0)=y9_Y;Eb zij*%<^`lY259PJXR%K~RzO*Y#_}P)qZe?{ny)W~p-zBTpBEC)=_`KM-s+1f0cTaqv zUfjQ`tU9gL&R*y3{r7uqxcFO#eiYo6;^RJjkAvk2-5uH-Kye3&58%+0g?2aVQSmjC z*M`f-`P#G5T!&$joX@EuV zxIE%UIjxXhP;v>{BZiny;aOShBT@~%n+9M|jM5vTcckizmjBad?5Y9m02sRpjFH&j zn#`hJwIA#O>)#HB90r@`G|_N3xFp+fd@Xxoy7H(cq&^Um)3a*wqBW#sfXa_xECA0q zg=h?sN!*Ii>7IrD>c618Gi@#Zw!i$(<@ZaXLsiZDTqCg5jd^#6FtnSA;H+Fsq1Oq= zym({~H#~(|tdP+NIi|GFa&d@m_Y(NHw z?m(C;KcODP@gxy-OAiIYHnW}g(7ABU-dCzz`P3QpX^A8x=(zviTHcytswF`CG6Q$i zQv)YD9C$cHPGL@`w!WofZrrgD4S=i%L_310qUjOn1&;+(Ess#9gT;WmC!`7vi`n6Z zUu~>bSKm!np(G*lLWq<^y^Chl%6cJWnQPbB=G)(B4~qxgLEu3)Pu94qYhd$a+F=0$ z2LpN*3s%(@43ZK!S(Q?tc3ig5Q$Q7&A#kuc3KRzc=Gz6ZMeJ{cAW^*EVEGRF2Va%g zKQU27`|*wJducmtQKph@RuWy?c83WaVSgAZ!z~kg)1}h>5lrYWSIG>|W~zm@Kxzk3yP-HCHi?e@M7r)NW?xB=32LN9nAL=Qf=iut10%dXVo z6=&60crvwdtB4OP8S!A?yeM-+3k#n5kM7}o`>%)Zf2fonzWvwk`=#Bz%AS8KTk=Ta z!GsfYaq#WeK_nNZ?=#Ah-KfNlfp_f=3{h=2cgq0S<#2Y{pIr_orE)G4@+{6RkxSwK=qS--HzD-wsPzM`88CG13koHSfseL-Y z!b1Mw9*N;w`+a%+J@f6B+Nih}I@y(b57Qf}wk$LtKT)iYmx?_>qZ}4HgVA{^2l5mW z9(ee-4Xq=%hIxAt^OL|I!8>Oj7_TQ|Dw{x+<{7j`XmAE@xQ6hO^OjUc08upe(@f7} z?;8JK51|vhg3EqwxsFXvC1Ii&@80pp9`bhIy_0Y6-tAR(_x_AM$!#&N*s1X6DGuqF zPuCdeBAgqZM!9$T&&~>}fc+fjk73a#>kWp}j*`X`U4qRaxW4o{vT!aP}kl^YBhWbI#waXnB zy5AJlY3eJ7W?OWqD4OHkh=gLQhmU@s>0aZYxzynLXUie%7hGK3|wv&FlRo>X# ztd{)8dL`jzk*u|9$^5rct0cz$g;{YWR|D9ERDhmk^`qKjlNyAgwh+x=X&PBZ=R7?a zd~V7EC*W6ASg>U!1a$-SJC>*~end68Hw5O^`UUtZ9P$i4gS{>&mPOf&yVYuYJcD>1 z7K7G$2GJk{O}*No!??l9mkBglM|~*d0S1J*M|t;PbTk?Kh6^1L?q_Y##-M64B`i9; zjI2iDevt+mz_52fuE3)~7aUCx*raeENHri3-%dv~?wOVc4k`eJ$%pMp{%J6Ku58{( z0EtZs&e^c|qzqAz)xCry6lCA@y-lvZghdC*z;M)6xMZ27M+l=0D<^m$LJS{D@jPg) zWf4N5DXh8!IL+i+gvY?HqKx;y5sYdbJG})cJ@}#*G90i`#aP=h#Ih$61d@hy77RLR zz{bJR5K03pMQezxD1RAvC}@+_jj$kT%A!(NGNf=DWH+F?(UoGjjqzm2cEMYl`~|y6 zdEmKR9fA~reJXWvb45%8M!`3i9kyVgNjK(A`_S?}mP+B+i+iH(5!fJSUr8+LSxp@Zeoa<^hJIRZ`U9g+s*#o3kFAHtTQ%@R`6-y2gg#7St%@6EmNri z7uT{bTrD&&izW%OG)U1Uk|b;mB;b=wT1nB?kf>iSFFTs98wBb41?86jN>|8iQduz+ zlD|N{v@Wl;rvhPPyUC|k+}-<}Du|XlI&N1Q;LM~n*Y5|&p*X@<_N6@-G!PRpoKb4y z-k?bVw+!T4>qQoq7sRvR*b4`2GHjhqU!BPfobG=eOc9QcW|;ITgGpgDBbZLm6NN3j zKl%nNhTRT7WF9ZmL-WbrxqZi4GS_X=K(%D) z8|Z=MZ?N8l?wKxd5?-cwS+(3(miwyZWWl3ie2&>1O2A!xR7@!|dR}!)4KnTY2ifWB zt^9X0G6+-aofFsP+$yAi< z{Q8<)uuM(8<%_Fc`MqLR*z6j=DP^5$EZD1l#2^){(1;&DK02apL~ADg5^=~vzqKP` z(_~YRtxGgjyT+!sK0E@7v&GVu?_u**z$^h@tREdi`vejLBUUw1ZtbH)Wn#E%7=A0Y zU~Y0YgWHNxS|UsBGzA*B0%aQ087NL0^%i(E?-&T~aHSjLSqeuWaFI@YN#R}EYLPda zHrSggzi3`SfN=y=u?3HkX#+TTHwF4^#8{0$prP6gB^otK*%jc4q42}hg{G^Dz{0wo zcZga*FZ~#yj1fxl^WgQH1Rf6dbs_q^fKQEI3Flu3`lMN+ZDSG63uBNqJ~( zq80t_>NXe|M6skf`LLC5O}%ab5CFRl)ISbJ0yU0dpoCz?z$>163dG+|*Aad@Amd00 zw}sN{f*Bpw;IVHskR$QJE@*Gl5?n1gICf>gkw^j%NUsL4ki-|EbT83{gE zq<)_t5BR~t^(}sE^Mf^DP6F#X)Yyb62|iF`a}6~%VMBrs)Yx1@jm&hnHDE%rzPZ5+*lOT|85_)iA>hzy}L&vM{WL@WC2etg*!!TdYCQZEdl}7HbfQ zTLj`3fw)B=ZV`xE1mYHfxJ4jt5r|s^;ue9pMIdewh+72W7J;}$AZ`(eTLj`3fw)B= zZV`xE1mYHfxJ4jt5r|s^;ue9pMIdewh+72W7J;}$AZ`(eTLj`Zfw)Z|ZWD;x1mZS< zxJ@8#6NuXc;x>V}O(1R)h}+y|+uUZ`+-BR{X4|kz!Ut=>>IfgKvCbOYf7{%D+uVQK z+<)8Lf7>tz!Ut!Y_P_C*0|3a_gUjUYusmz`>b)FHSV*8ev)^OlyQ`jWDedrZs}IMsU^$$r>S9BP45tWQ~xl z5t21RvPMYO2+0~DStBHCgk+77tPzqmLb66k)(FWOAz33NYlLKtkgO4sHA1pRNY)6+ z8X;LDBx{6ZjgYJnk~MDD8aHc=o3+NxTH|J|5ll6Lsm9G(<7TaKv(~s-Yuv0gZq^z% zYmJ+=#?4yeW~~vhH3GIqz}5)Z8Ub4)U~2?yjexBYur&gpxwobs-3D`O}Yn{-o6S{S7);d94Cy46=ah)Kp6U23bxK0q)3F10ITqlU@1aX}p zt`o#{g1Al)*9qb}L0l(@>jZI~Ag&X{b%MA~5Z4LfIze0~i0cG#ogl6g#C3wW&dplq zX03Cx*11{h+^ltO);c$9otw4J&06PXt@DDa^Mb1Lf~xa^s`G-X^Mb1Lf~xa^s&nz` z1bdxeuM_Nbg1t_#*9rDI!CoiW>jZn9V6PMGb%MQ4u-6IpI>BBC*f-Mq)r~bk9UmL~ zke?6uZId5c{MhD4jUTA62B_nMH2`&dum+%x57q$G@xdB^IzCtfP{#*r0P6T)4L}_q ztO2NRtO1btU^M^@AFK=5Y^(t`_+VYY1|O^o*x-Y80ULa<8ZK{qum&z~e6R*CZ+x%@ zE^mCW2JQrWum&z~e6R-g{>B>MiVvm%O88(AKnWixLd5`lpwV@LX`NuA(I-C8=sLl) zPB5(#OzQ*_!=K}Wg$W^=d*XwI2_c$p;)8_=A-DXO6Y<{5d1_!jk0c~(V8ypboRdF9} zSGOK)V6X90zt`k@ouAlh{9KpM4f(t;pAY0yY5|liBeej>tp{*7AfK#tAE4wXYuyJh z`N>-M0Zx9h$NLyRKcz0Ff$x|CKcyBX!S7NF)8Kb0kKyAx0Lo7(325@WlmRIDT}w*K zfF@D^PJT-J04TppEr68YrSAVn-J34AwI%s}H^Tnl=>FnIsFvF|s#;J{qByBeA9nyC zNa0WvC6N@R(|s=kBta6KKoQ`i?s^Horys!I{QLhi_W%+)(y41lxD}zzwbx!luAEk8 zt^x3<(yoiRlSbb4bX`!cwCf`CO1mynue9sJ+e*7G+)Wzx*3)%iaHU-r7FXJJVREHi z7d9sipX=$maJtg23$H8fx^TPFt_!~_?YhhWq?rQrbX_I^rCpb4Kxx-yB2e0OnF>fV z7wGA_%mzxkE&`;q>!O;Jc3osjY1cK+yfn|eL_v{{hSJk@(NRjfF7l_e>zZ@s%sF$& z;KJOTIcLtCGiT13Gv~~ibLPxBbLN~mbIzPOXATLVuK8!q{4;0%nKS>)nSbVx1C>#~ zb4UVD^U|DoX%6XBj$ocMN6jIiN(<&W^A)1vwCkF$U`pkfuV5XgHD1W+r|X)pK$CM^ z*L(#K$}wM2!D-huU(K1X=FC@f=BqjL)to6lXNu36;__f<#}t<%qqJKy#pTr~$B>xf za&eSnNKElLQ+&=8pEJehOz}BWe9jb~GsWc@QP&igZ$#P@mv^MJ`!&VoASuWFn&R@2 zl%sy-CFv;)$WPK!b>%7Psk-u&^c2Q+(cud0v}}sco8t4P_`E4D?~bq5B=goJ^VTHu)+F=RB=goJ^VTHu z)+F=RB=goJ^VTHu)+F=RBytvM)0$-7nna$Xa*Sv5m7GU%%vW+Bl{T)-SMng0V;Y&S zPXrPA)#d?mk9Iquhd zCD#(~(0nE5Qfc)o_fk*Qm4m6L>dM8`Q~k=x=e6RjNM%6uh1njG_$JZYufulY*Ov~t|9`AYsYIp!;Q)JnTw^Oc-x<+xw-mHcYu zxL@;?Tx)X7S8}eEcE9E;`Pa&Ezve5s*vfIg<|}#G2pT5jji{`6E^VOpHYSDbPXueuBUoD!i6eggS`D)R8wP?OtG+!;6uNKW$ zi{`6E^VOpHYSDbPXueXAfp*MS3Nt8eT$!&FX&}dZrC5W~?$>;!aD#G;EAy2i4oIW< zN-+neg=a+_^i*BN9rRRPg&*`(zf0yTg&|0ruM~(-+I7uWibW{LbAn1s^q*Lm}2A$+TWF zt(Q#eCDVGzv|ci;mrUy=(|XCYUNWthOlyTXfWfp@phIbo-LzJ$LpdJ1X{~UFay)j^ zS`iO&Ol!qFl=j$7YlS_O%$rCr|iRU||?E^qoO7($Net8j?Y?#uL5 zL_|66%k))HL^6a%k^K@O|nY8N)&zPV3`a;;?sjn}D z4GdC$6&^^d%@@K0Pqq0%c;M+;!UJj75+3GR0`Svyg$Ht6S9l=py21l#*A*TxdtFy} zAnm%s18LV49!R^c@j&?5Ij$?2!en+`$rNeVl}wR#UC9(__bZtq?YfdF3~kqyOp$h7 z$rNeVl}wR#UC9(_*Og3Rp1ZDOinQxWrbxT4WQw%wN~TDwE^#YARhMv+pQ=lQ$xqcK z66B}qDrTam>zeM0oseU?D|(`|>zeKgpeV<6O?Smm$T8gss5tF@C12#buH=if>q@>z zyI;u{4u@fue35ot$rowYm3)zQU31i|IcnA%HEWKVm3*-he?5;0C8RM25Hw7Z;*Cf@djzv z6>pGsUGWBHi|dLvNV~3hgS6|4H%Pm#c!RX-iZ?KJTvxn7+I7Vnq+M6MLE3f28>C%J zT!D$?GNL7D~H!L#{OoatygvEtD4ITDQ>Cbq%?eE|lZCmS3%2EG)5nfx9R1q>k{yRO8SwChTINxQDZ7hBwQCBCFxSE7k^?tFoa z<*lz;1JF|~YZX9GwW%clJ=Lb-|9ZN-ThkJNa$H`@fV68#8IX1@_o$Tsa-iIbs3QZaMHN79hv1nFTz(vsj_lJiYT&T~F^k zRoBxyPu2DG&Qp+RWkgTcHKjbglcRpMJff#Y;pv^H`t|gVN94Mu8Ve@MH`N@-X9ZR; zIFQd%?KqInQ!qG?&r>iskk3;vyfjuF$R{lr9LVP>7#zswDHt5cXLVOFIFQd%Fuat= z@^oE^ENRy@6&%PX$NicL4&<{y?7F7HOH;vteDYmaB1_u+N@Q6}cE1u?(ynWIIgn3| z`!&5@nqCg%ldrlC9jOVHGIvCGW zFgqB}Q!ujvrKcsu!FbZHYe``(#$Vm9C5814x>18vA9M=tcA)ze(itzr!629J8#Md8|@%4vQfBw*m z|FH6}H`f03ht+@miRyIax2O(t_>Fx4DiW<^e<)^Uq7(clT0txLEm}b@_$^vNGx#l9 zK{x0P<={Wj3hKdc(FzK}Z&4j(&YL&I>5of#C!F5gk$1!CElav1?};N59#(bKxBoG(h-l3FF)%q0?0XrS3mj&)|B?9{wGQop0W;r#~K_ckSuT z)xC31Z?5j$d%Q6ft6or3D#>q#T1v@p2107dZw5k&$!`G!#**I9KK>I$(EoZ15=-~^ zEqXxv_$}(8dHfdj&^>;O>dXgv3ue$lir=C-8pvk9&V#UDdE@qiljLmt!G>~{HS zVw3r)j(8W9ydD2RKgDUh$#Xg$qs}(OAs)^n$IUjJ>WDqtI$`j%I8Ew91H9EwC2$C& zD*0@pByaVSoIZ(?97-yij59|M+pLu=n~ajYvTM6O*5bHMZM@|U@)#aN_~$$umHW6o zkpCl2P-PZCQ7Agetazaq-=_D;5uu50i@oT3>_z9o?c!9nF4|@pG@$FgPDLL4m16eJN0=c&KlHN|Iu-qi6I6qtD~cI^vvBAheZpxp1FerR->v3 zbPO}^>PdV=`9M*gw{i=St{(54J0Og0DSmuLOf@a|n6FrR={rzLc@ABD?JWz|v5 zP)z#C-n^251A2#toPfv=+>|z@){cL3=W(UT=fwJyI$NCPeOyDi&x_NX3E4N!bWYU% zW*Hwc?f)FdkEfxx0io2Cj&2?_62aAhOpX)9S>J+ul&T-t_!I)Ch62)KzXZrk8`LcpJL<7+htA8AS@!bPcj{}NaG z#O-;;{PoX&#_{E@|55K^^la3>8XW4r|0gg0JpaEx`RPKFsP2d1TG-JW46Y`qMs# z8+D?wt@}y%f&1!P-1G1omkq@w2RcZ~Z=%X_DbL|^qi_D0Cf6$GH)(~RpYYpJMTVt+ zA_sn*cn>a}$U5gIDEN7zTW+A^{3A#A1MWWRPZ!4eH0Gf$Q90sQy{2glE=u7TZ0#^9 zKac9u$NzM#;l}~D7&7cS!28lqe`@HE@_yq;SLz*1kd>>MD8Ok`U%K;+q3C4fAM?l93Ybo? z8&3YY{L$DG?1ssn_x|1W2RGal)lKlU)a0qbI4zcEqXE!_LbeGD&j zWDafAzq%S;rF}D*$+<+1=?P5}Z5M38Prg))(c^lj7%iBq+j0ER(!c4aE->)-IIhnx zz7;P&{psn`J*yW@M&%7~oHGnvq- z%F4W=x5(6#u4@HH<%N`jdKLs0w@3adKvKatTkLTmH+eth6V4yU^^dhY4zc%rkJUdM zO2P8Gl}|XjTDS{OOZVT(l!~;*vV2Ym7X7^0~}crTXCFl3pL0_SKvFTxZEo zv&Qv~KUdc~x_hvky30y~dv7dF)h`bH$A55#i|-__^7QlACIaU|4O&oy1Et)%$n8Z! zfAJ}3!F_^!2(-sF%b$t@by_f3w@@$md0Ih6pPfx!-dwg?WCuBmc8lBqp=`Oxj>1*j zfytu(#H+8j9Pry}0px%EuT>gnn#+A6Us@wn=)VsRU`69e*v<>N|FS=EcZlz0{qCKu zAM(!DBW4`z2`=l5D~|{M@uHtF8X#bZ|5Fq}>bd-j6mYL4SGAt&T4Z=;e0A?x>qMMg zYD`3(d+9vE|GVb%nSZ;|J!BVooVaMe@cw+p`KJ@^0gGAtluHZF^H;TZIxVib|Kq>@ z;orvkjp_0RIbExDs_RIq%fu(Im@JQ(b7w`s^7E6|o#t}q1Gj(W6sX@y;%kidr!ez= z2-fue&i+L$a2EuSL$w^SbwPIZ7x2ryQ={=8PyX~T$2|UW;+vt0DQ1~d_vKZ1uK0Fi ztHbpY-zn8ye)1PEJM-UF{Ez?mAI8t0%B~nnF=n?Hvh6!7PpXUbXkeh5H8j=Nr54+7 zQe?^a6E5QOZ=?+*;}1YTh*s(ce}E7dhy--zq&qMTF910NmPFuhI!utL4iBYagge3yQOPgd;K4+g^)si! zSb&;i`wf=BFZeFjo)jalWK*N459Y^4l}1t3%)bcxA*P(1PiTvKD`cPiwZTuhj*ctC zBPQ}*C>-$uh{l<-f%R05X}D&E&iPY=uK>#R3@KG~j+J5k0y?XzAQN;FQ?R9@3s34Q zsi^XOjgjcYpuppQWSya+i{asmUwCl7Hz$&)0*_ihx)Ik{{CqL}UihE>Zf53x`@?8> z&1KZ<*w9%-~ZqL=imP?|JUFD z7ybWV$$MD(-*r*kNWXCPmzRwvhXXDh;O;p6^mI1KJqOVx=FPu8(GMT*o(~VMxhZbu z=<51n{49SXa&UM*Gx7C1`OmoQ?Q~|B%ihke5ByW&jR&ot4flFyGv(#4C;W=k)Dmec zO!@vl1RuYUI6S-Q&-BkP$Nu&22fa`J79>u3pYh-7m%V?pU}1sI9Q5~wT+=db=#x#C zHT0W}_%6NkAMZrWJLV>d@78bt@B)1IuC99b?cwG3hdf!O)7$sYn*ZkD%PM=^2mkvz zQH_=1)sGJ(D|96nzfF<}sMh;eN52DI>cv%-`~Az`*VDUP5cwUom^a(Kvol>n`Qx?X zLZ2p=_#RzwanBE9BkHw&FWxab-}EnzxT@`kd!ou)-<EI^mh4 zjq{$PABJu)>dIXCJ+O6&rlS!0BG&Jz_j?gH7{y?I9~yME(^~)DzrXuq;yNDwAkuVG z&5USs#P5$@jKAMSSpi~x7gJeyC2zO-(egjYTiN>W8|gb;rTY7-L_qmRf#2f#tON7< zkJT6te-B8*y%S>1Gp9eo4YjgApj5N8e~kURkdLmpY4B?N-E#WT=fU`X2K$7o&8JSw z(eIyoR(CUYG^R8=S!%*=iC>j{MqpdZ)%?uY|2vIL^npj&XTJPfS`NsciDLi5)qhh? zN4>-Tvy;*A0!xiR;LP}%<)|sB9FNY=X7rfyjURgdCXo6zffRhD{)`^qXlSCaVS0Al z@3AN|nrsK;KKo7VKI-{L8k^{SFnU&6W#3}4-_whJnc&9}H3{y-TcB=qwLfz*n%Ns1 zJ>#n9`)7OC+&rCjQ1R_?R{8t%6OAa`a5X%8w%5Dj7wpUQH_II2X%n~Nmp7k{het;R z%Vf8;7G}=4D*IV3?|iel^XqZ{dkuMv-|0+cWH#~J?=;BVbUpJpYZ{{J5I?Rltr2dr zP78g?piwJF*zu!h+3w8Quy-J36S-jdo2V!Y6;;oN{Mz+1-Cy`!G(M_poRzu1tJ|_x z!tvt(kNW*nG150{aC_c<|Ej>vXeNHqym)^WpMSXacZw^#^2~SR7ah=H?^2hFv(P!# zRqP{k%Cq03=x;PL`W{0~t$Pd%D7F8gx-l%V`R@mw{Q}QwfcE}~^Or|V&Wz~agG>cg0dm3%B8Vk}Gkg(d{(r1dk z!ZqKPshi;$ws$BI(q5pPicne=nOGq2 zr`4FPBhxIDPXJk)k$RVdiBD3#!u^O~TIm~SOa5JrX9i)Sj)0x{7R1%ZM>?bYG|`&$ z@B`vqo?Wx-pRQ8^!#&*SglB_uF36s!kD|KHxI-2lorxW0;?G3caUYZO@T@mFes(oJ zpR84VdtBvse110nI9tej0J>YzW3se<*JMI23D5Eq4=h*N2~WVSvnGm76Q#$c^uxQ8 z*m_(>ok;`;c7n(6bo&F474ySyw>0rpz6&-Pi}q|jnD)g1?I|B34)g4wPpp){y>tvy z@LjsgiM(k2U^r=cM6QKp5<~IfaMC8sOy8?*bubVa4J;n9@BcK)6XJ*7_T z-y3O0$NdK~98FreT@g><_mb*tl3#~FNMQ4smWif(zrLE(IuX*Qo&QF}gDb2Z&1Ngp z6LwqSc`8B}VQmuO0g~vQAMiZlf5e#e;;1xUnP+WSPmaLB^KlPmt~ z>yZE40sN%L|EvC&Yks?g6gLDv@%|0|YX260^mCQ`lA3?D(lIm^of}Vf5wrf6UB0nt z=#3OANdo@M!+jD(fIO1>Ecff%vnqSG@v<=olyk7)Sr&NEy6d6Ms8oiQlboUHTa}kdr+al@(a#7HUV=XKLEF#q(Fh zArz&Yt0NKOfM4jjcQfU@OD;=8=a>2$gD=5bE=w2ixQQ6OI;7PIbCG6nno3A9u$@3i z=H)09$tmc)vi-Kb+xhTe$6{z8sI%TUfvm`yDI4PWn5#KVPqlC=_-P!A=a{*vNiN9RKW&j1j5e?K!I6{3 zm7=TFn^RR(j#t6KA2hLV@ppkBX4Vua?p=!neD-bcF2)|tbJpHW+IlE-B4?tr$+4p=tQOF5gyo49wZf`=AB^5rF-^b2BPE+pgctd$EqiM8&od?X zRpBakvdJRGR=QEPoW_8WnpRq!6 z`4O+P_|+&C+26lDzvdUa*pQXNz+XVq1XB+(!l%eb@M5uwqWZa@Lb6yOMaf?GuA~`Q zGe}WL;iug)VpOiq^yKhrc>ZB> zef~Bz5>Qzd<2;vv(>bT^sDoiz&_~6}`SgK6PJF2=4$g&zqTT9gVgdTC62Uo3bVIfS zj#>u=b~sZ8M#L^M94RI)jOK*pf^r;qWqRmV403o;>q=il@OH>btu?lXb?&6n@^`}@ z!7;%n>anWK0XI%KKgmXeGyxfg`e>}*8V%9By?BFhK+^;j3JqIFXKMP?`=0U(eZ{HC z+oom$S8(g}HcvfJ=uHz_aR4EW_t$=XG!Nj?fG=?A+-Gg-}OoCq9zEyH!x9 zqX3RJB^1M>Tk7^B&D^HR?fPOH*HCGzlbvQU880cyFiGI^Flc50#Tdy+>soUI8RnQO=ODkUI6i0ZY}BsQ zs>|lomuhzJ4AV)WkN!cbgMTc&-hY%v9?H&m@{g=HK_;cr1^&lF{U(&U`N!M--sxZ* zTHs(=)^uiVf^kAu-HSs_ya3z0=C@EC%;*RiNL4!>GgH)Z)jRpM;Dv#8CPXw4KJ=tUt^qrPJx3v1n zN0=1PS;agt@K;Nu{P|^b<1K%@8W&$_0YxdVSKmiC{~WPKVRp2kjGPetPp`3k+-I7u ztPCIASxV&T51abHi-K>`IwX<4*6=_r?!_PM%S-4L;6`#Q46EYH7GYAi z7+*iFzu|2#`Xz?qk!9ok8x>49UjDiu5p>tElVcW#xa#~o*N3Xp-X0MZ%T*Ml1`Ac6 zmNig*JnVQV3ptl=_3g?&{*~e(SH0U0ut3;|46J!}Ry6!N)_N&q99OSeGA4H)ndZ-@ zW%z1vQMJP0UXRC@RR(jr0x_d|V-K36lGwdSmUh@bLO#EN2Cn_JAUTI+a>35oi5;am zrNtjcOWY(>1N!ZDXrDlbliO$tq-TIMQm(3Kl#zo4k$}ed$lB{mt!?U;TlL+4E`~$t zk_bl4lwxYc6pP}po7`(LGc~zcMCvi;Gl@C%!(F$Lg@9|_gv=~u&$oIlC(Ha?PBUj7 zabQtRRx9Il%A~|Z>mURjaNJJQ0k}f~_$q^+g>SNSUXDLLCC3M}AyW$(J_@4`4o=wu z_dKmB{I-A9#+2dfZn<*(%V<{b7(accGhvcY+j9S~7jdC_LDwVbxNo#OcY}yXNemezs3_Rb;n6;uo9Q5X%cY<3S7wCY0=RQW+J;vQ%+!LHuRl z&?AOz(H;{G1IxxkMNk;NC{?yGu*=R_yq8_gP1UeG`Vt%Z6mw+LzAEqKcy@_Apd><* zd#os%1I`;G%an_bI}*&^7$UJaV+}vio_b?)E6gDW{KQ9W7m$MKoC!EDti0Z`hB=en zMc_ppROM7EI$s$Qo8he^L%_%l4kyrQgI*o3h%WM(%UbB~cPKWMw*|ppeoor)sI)06 z4v2pEFJO;Kj(;-O2vni?0bLYFnG@T|w}#jI$4xxA8|F#ML69R(?~&TO-owsN=dR1l ztah|+GEDui^RAsUg1pjsSki9`lci?+$%?&ZdR99{y4EB~RIv}Aw(cFQ?H%9;gRP>F z{uca{9hC3p<*Av}3IuKqw-n2lIEMt6m@EWA{TCh7J0o2?(#u-`s0sPrf=gaZYtm%zf7fc+M2)p^8w!VWvLs+5(>;A&n|wEd9rnkDmWen zYYwl^4qEu}nk!wx9B$%Sq{zNI7??hnu>Yr`7*zD(S-tlz*O4GVAJ?0{7}i=84b^MFjim!Gk#seC<=Fce)8(5Bcg$~|;V5Hil&H}G+Xys? zGMB_0gbEI8VOLyhB^Enkn3ANUIkZ2*2+y}oZ@o!9=I^bZIMswt-drj7c5QiUmpUb& zQ*8KB=}N8hc73Th$|m%W;l06hmV_|HW?9f0(?suT&|^vXMu=QzvMD==HprDdEbf)= zNzP;Y02$gMCSmec0~H*q0TLn5@1nPS>0z7kNttCA3D0GI+to__I{(v}s9v+84D}BT zOl7JGb>c0c{x}#7_8d&6X6-~gZ)d%|{#guN?UTb4-z=tDUIkRq5wE#3Mcwj-BFI#| zSfR0sYIP4c0D7ZdsjuM|r35ztXHRFfv;m~3)^qq1$E}R#JZ&5%vrJe%2czW|-qEq* z#XO~3)(+;~jq@#1=)G|fIzhU8QpJ4wTLox#T^rvdb(72lPY2Hy)_JlvHG=xCCvhgH z*snv9xpGiMN15E<4Rcaz5>OYzkn?80 z3cB4*@7bV6G|~LfZI-+ss)lqV@rYnB>xV>Xx?|~014<4_0QvAPPKEPnJX{$Nx+e7) zZsB{AeR+X7uVe2JOMpS52h{T=`0vNqS86mAGqD~ zY!u;nE>Al-;UYACy-tl5G67_Z7qc|=m>I8%Jpvnthtp_FT*w#LP&(w!7#T6r2xshK z5%1?mgaiW5-sg0%K!0w#RwLhcn`x zvba(ETDp`1EG(6e-scx$9O;^ZiJE+LJMp>LNs`@U>9UzxNg=AF$lyX3EC7V|QW5pk zd{Q=Frnf!y^GcKrd^yrrPTTw{HfwzLojBhaTb8)vF?rGmCl*B^C(AIi7yA0akt3S| zp3H)i-wYKnDAOW+;Z?6Y=A`x_`lM84wKOj!4(tqM!G=U`(2CqQu|IG#wg>Wcoj`BT z%NV@mkI9pAU`R1GHNCs%@Ifkz;zb`k;t6Mm+zI4*PZOC@%WiGo%IKPq6FzQ9g~N1} zYdpMLlRIV8%r&vA{nN?-D|JD}1H&dML2Je4G^4)6WRAnIgXG%Bbsd#V=P0s6Ta^MP zwE$BIO< zn)+7>dTvo6wtjsuPuV^Z5=e3~?!ywai<3hz^Xh)n8qtBa zxPXZdy^*f@!i;mDmsf+EW%NPeA??=PCCBv+K3deA_RrnZM(CvMOcKHAayyn<$>bH| z&8^q^QmL5bb?000QufHa(M2` zLMnQ!hY@miqSexi-u-PB7IP`!j}X`A<8k?-5V|qu8EcECr9e(1Nr*ME>H!xN>F9`2=#Rx9a6V_1>j2 zpkst2G^tl$xX+StRS3Vpp^K^C(K&6yk?VCN=1XS~qN{>mUB4#J`R`|4)qZE@~?A7pml^$)Ab>Dq9 z-%F<+j>0xLEaM*ghLcalp4*3P&8Mqa)vCUbSF9;36L2{)M`r(SfKOZtsYHY&BGJ*u z2I1cgCRO&4XajH2Yp2w*FiP>UXs)a;BvDBwSm7~7PHbWm%L+@yH*6ZcrhbhwA|`oZ zZfyEK64i*A-Ml_UI@F5IBqa#36n0dY7ch$%S0}^}EVtf2&4u%lL5Y5=cKL45h+$o# zc?jUy$mIJOW9VNng=`m`ofYklcXboB9dH$8W0B-ap}!*inRJLjEl>vwK_3;1R8`19 zh2`O`h!@qIvmGJ1UPkT3=drQaIwGeps_^=OurLv?Vh$lQbj9QR(gYG3#=~55MhL5U zl!#jo*O}|rK(o&9GMQJ)*V=|sl~o{EL2`vRBoL06Prk%z!S1E)Ad5t3!mduDP~{NW zQzWT-?x~C*7Q1KFH6cHiPC^g!-ebML01NX&z1hOEVK8dlZd8Se_#kkLxUNtnlPCO1kuQ~80H_R&wXhx2 zTce#1nufw5jlhcZ7ai$RXZnVdw74~Wv z!4Ij$zOEo$iOC~EJ)?D?NIx#(3E-YKq0S1|ICYABRAkxS=j7K-nLfXqBaK;1BwGte zys+y|6d?tjVu@1kDK-{XRnOa^h(Y&m2B=&+HK-47tBNhAFt#~DbwrqAqljcc6x?K~ z$~r#iSiXuAtB)o)S6zzW#$*|N+dnpoz1FcbJ{DB8-q9k++y0m>7pE8}E)WHR+iMcVsxPn&Y4RJ1san)p=VX6sF7nRle+fs5|NqWI$D(^Az!k_-~2!WuISuv8;ijz?Yu%?WO zyj<8U^QmXuK^$PKTnM+2rwRxgF~HDLkg^Fm0`5-wyzy2#y_OFOUDOzd*VoODo!#}$ zR&%+zr6VG-yRGv`&I=o>wBfQ~T5@IfZn&dXsD;O>2~1NG&6BTPan)PlM#Q%_;oD|} zp%|B^GYwFzdDAahajUbrwfoUxOs}#VD1%j8+w_Q9c}LIX*07k$rYN6;qeLqeGfVZ0 zbtFLzvs3cyLx;3ut?B>6fAG|BqZ-y6>PBc}Ep)C?Ne!wNYM?~3XZI;&79*+Ga;T+ytNse>Rhgmc1V&5?_3yb1ppSvsDtx@K1`B|(U+JKCb-KzSLO!195L2d05Goe%28il4I7Gof5nuf?kzBEACprQy zA<^F>%;b)rxJ=?F3vJ?TBC-=dvETCbthyw<(b4C5fX$E@JUHg?}>uoc3#KjK)WQi4=1Y3wIfXy`M8MS(gWeUiz zZ6C!BK3<6(Pq~+1;)51CO9m^;JLiQCY?cIJL!(Rq@F*8t(+f+bY+NOw-8^BvnbWt1 zMZ|M((L%-)a+3>cf{Bn))Tz&f2j??$=T>94(Xq2P5h!o^+^@ePkfL@8TQaM^nJ0H` z4TM#1b%9XYH^nq_DQd^;SiD6IWfwW{(w0~(_qXvHA^ZM8c*|xqjo!MW$bFPish9qN zy)jA*z0r(BIfBhx^d=8wHbVHOeH!&{*!3IN&`=VC6kEHVBXo9PGd>=2+A)M~ua>H~ z5lJpZ<))AsGA9Q~Lyj1THt!_Q-t;b%dgXF6_VDuxdbB=GD)5>w<8dXqQ*RH`iC;GT zRtxK?d(_3FOy$)m%WH|Hdb$&P$;xkQ#2xsaj-kUZ{X&aXZHVwWXr$<# zU3!kUPrUDP3_zHI6TH1YH~nvrrQ@Lmzwv7%s@%ZV$i_e1j^y>YZUzdplSJOVknv5O~7i=>Vld(4?83@UHHPGLwOQ0_SWuw7kCq!?=jUl9-S}V4$1b8 z5ChtL2WX&-=t!|uiUwcP7Jn2KRfW&|y}sDflC#7yluLvJj5Iz2syCX2-IVKy{nEJB z#H|U#fhnSs3Yi@a?);sksz%K#PM`Q<0S*dJ3Dcpfh;B&$(=CeQFQB!5Rct2bqYp0@ zf#a%9vJb283V^s7d{mH-6pbG#*}6)(Cs=T?!hsGc;@EhKq$m3r0x=wCH1n`r)Gj6z zd?{|qXn7kqg`o`3po`GD>wUx9)vnhA=GSUZN_f%QOsvk0EtWvxF#THh6Uj_Yy|QuQ z{1$mC%A_;AlE?s7d4xER{*%i&pK@uRR}3!v`7*vfJb*M@r=$IQ#mx(@p^iDc5e9oM zOP8EZ5RBMKDb_TbhJBe8wl|0_f@_Bt$?u-D3Jqstw|KE4jmQ@}yA)tlL}r-Ek>3?E z_+t(!NtBS|@o-;j2OlXGI)ShGgG*H-q3RX|rKe&N)%CzG*R3 zf;T3VEw_z;r0ewDnrTY-!Ss-tS^V0>?|aI|4xx7l#4P*=foq0N&f z|9)z=_2But9*s6N8k=gNv06TkS|rikx-VTI1Pn==qD=Su-#n8~WPV(LC%$ODhI`EalEa#7QF#?2 z!Jlq3^A|#9SDUNNm-UvG#1gB`cP8thpV8}zk(ErFLRksiWSJg)K5qec@@0}pa`x6h zJU~(V*W}RU#<}EZt+CMJuh3awrwxHMgze^9^C;N%Z-oxk)oIQpI}G$vgYQEDUrD#q z_`2l}jr$hZ2_`J~K}^utXn!=kBAUs(BhbYqer-G10sPhGI2sJfjid-WsE1n-#Q3g3 zb67!h4-ZJX?&I@A2>>pCmgYlYo9)_-9u*`M>Occpc8c2Rgw^T@>i!%gW2}nbu7O{zSaUB zX&g`+KwhD^;vH}=NQ$S+t$+!-*dk9G?1 zp6gE1PbELrTG%&AqwecQw|xTv*O#BKfhvt!u!)xhew|Z;v{WGfJ_ean(*%*2!qg#Z zMrbHzJ~i2KlhYtvYhS%V(`fMT{G7&U?`ahtUOrt3NHm?a8JL>h@N?Zyado>X)(G4d zV&sfsw$aC&rG;h>DvTkW zm^{>;c_q+j-U*JNO^HvIxe4y!?LC=6Dnnu3Z8n)#)Z$_kL$;*C-5nZS;KRCx>ofV6 zp_b!2TpuQ5r+vwAHW*GQE=ox&s#Lov*;uv!6-+skKnz=a4vG6Uy6A(JrTjXQ77jWG z3TPVz{IW1Lq$r<_xzS8h>KG zxQN+?CX;6hnb0KKY|cv)Avy7x2Grebyag1=7MO=>K)~kY6J>+Fj0?4w^I4KVX60EC zr{M0gZ=XbAp6!5jAz+Pq z6cw!S>X-Bml39;h?JF!!*G?619c=|M1E~1E9gNbIQ6!cT*FS)4DIkl1n{?yHkR1i! zVJvDYm2MGN#{>xS4C{V#MM9&`&*RUF4oyyKEb5dK-dvD5Mr;OYHwVEkLDsO{rH{d_ zMj%D7+B}OOK;U+;YRT+|auaS72ICgN6vKRp5zGfz(lu|S2?VN|>@=^UKs0$R&l!=5 z8NPhNhB@7aRj&RRSTEkfijXtvc;vy4YAgZKnp0phDo%2w#Yr z%s#8~C03iiVEn7$K%MRM!XQnHXVV1C;l=C`#;fQegDK=(>GuXJm0X}DM0&>`3fu^G zP0!$<+W z+D){9hH#vbI4m=)kl?pedSXv>X5_s{ZpLAsruoT>0y9~TI8VDd7ccXfhmYNEq94`o zV&)B67>;J}LOPy?bnK_t3N1`AVL9sMXu08_ni1A+0FX7J=vuQh9cRiS4wg<77s_k8 z;6)(8U;w1$?0&*RsdLmIm9 zT3lcP!Ka^@(#pQn=)T)@56lQEdLBBV#svSLv#?B+(1l%Vj*yFpRmPyjw|Isj4+|kG zGQ2{@6~GW`!WTXXl!DoHa1xSs;Gy+h>d^JFEqnvj47a-H^q#**y-&uxbSZr~&121; zqD>yro^V93eP&0K{-Aq7!)7z7n+hFa)u$kT04cs{H<`3U`RMZxi{mSb5oVot8QdayYk$aTE#`}tVUfTFbgtEn(E9OSIIdO*dP)7V z7-WVp1$yTqXB_=N>(`URd@4JGnXu7QKM%CQT?JjU7to!?EPoex3!X$VdRi4K0z+RV zhB?tbSJ9klPh#aI;uaptVSJP^aG#aLO~I|@*sYJUz2i_QOgw@XuUd2*$nv5SWj&}H zb5>daOh6@IFGE*6YDn$Xi%)Mh`qg~@pm>5gwe?i_k88DWs5S-o42c&OL+FlbvMo>& zbLP~MOt0ESB?K#dF6eX|jf8ULanXw-VhNaw$pk=9dO9&ple_`0U! z=isF0!AUhXX9h3}$rvDRCB)*Vl&qCO6=!6$!9%c%581Q4{#=+9u5`lyjm9=-; zckr0nz|_*8)0hVAk|>I;p&@(%;cLN{dcjn6bXp?3*H|mq2$Myvd`&j8ZS;U74!Dh? ztpY))=QopjYc|+zEw!+^oV0-I0XAzCan;uv8>W|=JS-v9?&lT5`iuOj1`R9ib0-W`n>C(_5$c zDvE`(ce_TD0GWpBLk$s__DuLL=b8XJEf2k9@7KZq9(I~~7{;0hGZG{ArmS+nm^d!A zTVRZE%tql4T!(dg65Y#3eK12JvI6_Qo0j(jxG!pOr}umwP0FA%ML=mx*p{QpgUzhhd}OGTGi&^EDC*ZWKffnJ9%2qGcyV_Datv}5gRI4Kj-yXchWlys#bkIH zdO58RhmK4g2OJLi~0;;W4#&%gPg_^o-}YG zV9jNw6Lp(e;)8dSe6X};X2+p0!6cTKkAb-j`G_gR5*h6lOfKd}hD6|CFT8Wf5HnQS z>{Zn)dOR5HX|N>0hSm0ocuMgpLmc#t5Rn2n?Itl)wVwfuoVkL`_kpWdQ35tn-_NDk zp=o>@1sTV`z#V0fBNv#5!QU`}DpY|NDOj_XWeuMaldSy$n=IxM0wKa}#grNb83BbC zV2LRN<{}(;7N4*v)zMraWO2<5%M`2OiF?c70Fg@ZGOKK*IwN*ehBk8%?zlgXTpn;siS!tux||EX(O` zE9OWgFod_N7gmHUFhcCFl_9`NR>@ee5^yP@wBqp}Re`XK^^(#{1%53=5!@gOs85Y{ z`$igTS+ON$py`~i%4yT54o2Owbn>IR8Ip7GfBSQL(}vqR1-E@g)d%A(FQ`p&&!}nyFsr|<$+xVz!s7kV`ZqQ+5pA6eJGp4 zLULSn8vM7p$q##E6@Nr6*Trf*&FceyK@)9KELrU&sty#3224DnRuLMbCv&e|3#C!1 zDpaRZE-N#;s8hIFg=eG9`I0CSG1djO_IvWyjfOaX2@8)H97Cgbb;o>Fg?-=DuqV-{ zj5?s@0(%6uJdcc`T|&?f&%F&KcX1_bRrotejNvu*Fb0;asg3+^@bu zg(}<((t|EHA^TZ5logYKN?=8nDuS*A`C^V51;;u^u;5)9y2( za8*8+@E5Bgl#oqF3G-rnD%8GY4JSyY73qNJQUYNXY{$$aMB#;pY--R*MfJk&xxT7C5ZbRLy;cjhL)KN>$``v`X&gHB>yR%J zqqGLVLnGFzkkV3KDv!Mr=uUelY!3VXd{^ZcRj!?kK0M<8-fRnEP{Zqr0C;a_hf-s?-n1MA|MpWtFt(qK62*ockuZ!=XSrzZEP4Z{u zw&QZG{WK;>TS(BwlT6M1D3sMVHS{TbQD|tE6V!XL^ysPkJi3&3j^25Umq&BoBNdJ2 z5)yi~sb;BW6<$6b6VsO9kVB9|`pqd(n|hcB#2OhIuT4V5*qBJw=69!h<~j2i`%Dm; zP?8Ec!8G}TC8ltPOId|y+J!RW9#%Qp)1~@V1&1sTBim^lI+yWFwxsfLWG7Wtn>Wq*t}cPl6vRIL-24ePZ zgg$muz|(N)gG~{b@$v(;5oR0q;dDz4UUoOqpkHG$k>mx)emgHxee_$_qqlqc1(CGni=lp%76~R`LcqOwhiDEgZ#lJiEt=_ zg$uhe0{o%C$LT~F-f2obI=zTLcvd!c-nTDW#ePK`P@%*i65J701Gd1Sv3C|_06^6< zwlwTU?9(kGr83(!*zgZ$TAsDB*F9VMdo)b2TpbeV>GLPUzp%f`Ra-hV6+;u1Okb5a zo8Ev?n;t32@=0@M!W0g!VLw(i*<7#HTqUBa6+dAWRW9Yy>zI2)G#W6|o-UDvc6}DJ2ZJN&vVllt4)O*j|0b%1{r4e^e~j-+0rOg+NlG>Td`IX$09Y z7}}A&h6AI17DBF*n2=9Pmse?ai|*; z{vtx=8N5rw;5Z1C_JLQ+P;^l*K1qm*W0h7pM%*vW+zEjdD;yM#q5AJMZFM8lL918q z5K-~H@hw<0WXO7j2F3SY`>xwOk1crG&QZ*(7lG4~aw4m<{x>V5-SJ)~WV8%tniN*K0} zbUyGUbXcvd_qi-`vKr;G3`MpanTot$%12sV>7Q;)AWJqN3*fTJgAyW zD#_7U_-g8H)fD>hH)`j;1EzAdu3!g$a+4a9pxQco+?JFKqf-@ROoejcQPPyF>;?4& z?wRH}2&0njfz=R6myEkq1-VN&MJGiu{D>;>e;o7Wd5l~}A% zW-#t*U@*0d0ZwBpFe6&m+iS~4hCIF}Fsr!*xd;Q>i{T`RFkC3X4QwA)A7n5X1P9g< z1;m8}f{%YKzBRB5vF$Lp{w(Z(jHgA5i|;L*3t`r?A|l$JhY1K5OXP=fa5%O`hC~Y{ zI<=ZtmnRV>G?#*OWnBbPiCuhB48nqy^hgJ|XeS_&Hd;5i0d|Su){3RJ>wb?H}uNc%YmOz$@ z<)r579&(x*9FSa*nhA-}2>sRQ!0EERY?N7;*M&h9<$FhRu5^a#)+vmL#mchjJX5h+ zvHZ%MBShPQp(*j3+Iq0e`9-FGr^z4pDxGp1Oi@VB=fd?W9@UO43#bEC6PEqEv8(u_xR?JJ;v0~L!k4Yt<7UQM~ zFX`!21+BoYf$}<#8f)-V_^!dK%EcS=JZ1+AoV2z5N_fo4ig1!T${oT3Im0^msJvWt zJ{2g4pGbKb4zfQ7HCgu8q=8*5RA(&1UNK9MMJE*UXmp&MH9%R^SXP1eFX8;az(V(F zM3-5)7Mf4HQm6JJmeb2;gJAUqZcur)p~Wa_a2*AtFFzPAaU1hNfoU z<4rQL`GZ1dvbRf*#aMxlr0du}t}msvT_h8MEP@LU(cd6o$XFhBz6gSds@w3loQEYW z2B5UKxtgSOvd!}2tv8}s*a8p~zEoRibs>WowmS7@MkfAl7()KUjF>y#qwY=App1P& zh9qE&Lyw=$mf52IBvviD0`WMaBnH=yqco~m86cj%!P(CUq|d*$PXl0TM&_?h!zeA< zcWQu38R_nZt{N9Cp%MnV$D+eJAwdAcr@`A=6Gm!t(nXA*5^i$~Sa>Yl!zfztu&{WZ z(rLH-p$K=17&qJR1bRxLS6Yz5lzw5p*pVz8g*r%GVPhbe|4s}>Q3Z}**}!{AS=PnH zetxh#t?md|^!YOm`EX^H7|ki6Jc(%KLVQXmWE5`H4XZ+WaYOI`1=OSn9pnfGO!amq z&LgcNhHf@UaTd$~AXaNZy4tW=3KGT6gO^{%bVPVv{1RR>@fbnF{xcP1=Y_ad9mW0x z0)S-~8f(>{;OP{nQ`!iHM=Bv+w+^8_g0^9G1kAZo1~3{Uz{oio2Bs_?^8w#=Znq0u z>4{mBD$EEFr0j6CDXfuXG&uDXQSuF)MY@YYhaPwyy!|x>6I#n#TjjJzz;r%vWk`kr zLQJyNnALI2$T8E!6d;m!brw~ivhrt^QnyG^ap8o7=xH4N>c{l1!Yh@)5PTKp-TOrl z*AfF?sN_P#RM}J~3?!e+5-6j$d3dc{YgF`SVgbZW&xM2ygJt`{Rq7z1&P{uZ+VNva zFxM$<=)S&-sfvZq6k?7pd(I|FuedFGUmwOyCw?~Z5=9gS03<| z)Aop%bb_aEBJ)f1hMOddX{$&j!R(G!BfI43mDSY;8!_HBw>(FQUU(#XyKfb9O9BMN!Iuy6{3|bQ07Rbd4U5 zyKcHCJwC95)r7Hf@>&Nyf#yh}3P^{a+=oy#eehLm#780Jd9c)rU{NMnwOa{1}qrmK3|G zxC1c6DKED@i5c22Y1s&JT^Ul$jW2^|G7dmReXZBc)+4n)Bf@**wXCR5i&cn&nf)-gwfDUtdD;bEi)W@Q6TRisUl2+*bxVJ!HAL_ zKd!WiJ4-{v+*>R(;vsn}wWw<9xSyjGFe@MpFs77o*^JQ4_HoVd27$^Jd%+B!D-9$m zM7{Rc*DA1l^tuW2)hdDHcKaoy5OkQ4`AKl|NyER0fJbyS+_8XRiCS+N)Tg1h-Q{tB zUCnGcVK2!+0MdsB^K^58$X?6hAix?Y>|E zy8#XAICMy%hJ?2wt@erO3H{ZkQDGoz+oHM-)1~TIy?|MrPQkR4%;fQMBLIc10!9E> zRbvaWR?c=#eIb0i$)4Ms9aCFry3)tsF&*74S516u3Xqi*Ycnz1Ym!c~MFtGAjI$I= z@%1t)KF+ z_Sd{aP)&uI3Yd({qvPyW&7O`cy27iy4IT?5T<(MfMCn}UiXnJL6H(t7|IfvZ;%gqS zCP(&J`-_!-8^c?aR%duFFS>sXXaByoiWyLHGPTclWI@F&7vU%w8AiHN*D=z?uw$%v z6QLqv_Eb<+W|izeP^G#mkyCSsHLa}cTuqmSU1ndgf~>PbQwM<~$Ab#*W!-js_z&wg z%41%M;v4=ND&T#i2eSwo117&oeZ&n%!EXB%`ENb}2)rehGlg@jcFd20n83lyF4~hc<5fAH!a7vt?kXG9x9A6gC1nklUoR3M*yEHXW z0K$UG2p5_sG)3y-KiL?vbL6$EH}RNwLDNWh1ThTd*rykZ2P2}yysIJi!t8r6Aynzp zQiAZ^YBSd~jb6rXj1Pomm{fEQCfIj6+Lqfk122dmvQ4$yNMOT=ia^eNG=MVB6XICA z3g{zV^#E?|{}WcZ<;zn8GeKx&b@3$x^-6zuPeAOnSzj08;~7@yzR6Lr0nMXOBeQ{a z@2|>fB}}!PbeJ-;zAz{WQ%B3q{EV^?L%%3_LjyGe(!5*JmedqWwtcBf?3jM&H*B$p zaovgsHoR5#ZC=8dS4!aB3Ut($aL$kg4MWzO=gne6QWEquLg8mo;xw2Q7~3r4sSXyr ztHy=D`Nm`-w8p305`|wbt&$V<`3}OU9b*FKRW!~-pjtj;0agfSS`S?CRL!qJE6b3P zR$N)>uR$)$P$tb_-i6}=VIXAz@se1BcD#O?RdWA}^TTv-{gC?5L(jvfn@Nnx$?B$& z$&Lo|iFaid?Q^|^0AY1TA{D9+k6i<@eCQ5G^+!O?Y%CR6Ip~^+@K#hcis7J(V2RUM z2#dKtkvNiiLq;q9=|O|YF=;55Kklsd=4398V)P66c!LE>5Ay_<8x zOC?w%Jr;x`IM%06TpzW;Y$=RJEjTo$s*LW;Z!$8b4K>Afc%y#DGkz+}`6v#9YHBmK zU3fkxiQ#hl81=ESd|oIK6s!0)jp21qIpZMLNP3^%r2NSebVYaVoJ@%#Zj+5 zQ<3$;ZF2=DZ9X&!GKe2Ta)Si6%`vt_{i8jPHAJI$iu+xQ#be=gF4mH247(Eo>ysG2 zIE@!)NfaN>Wn{MplyIntTAUz^5a(>1$g0O8CptITv^-l}c3YVE0!IcIW~f06JFcor zcN$h$m8f-WUu6&= zrP+u~HoTrd0(N2+QJ+n}unoY006|J1NgrY~f$kpwGzQEFroqYf22Oq&55pK^&Yh`7 z9<~pI3E;&DbmXR#$qiVz!Wv;ZiSrX9Jc$w7TP{YZwu+6l8Mi66PVGZGb6~lmwHNM% zReLzQ4}f7A7_5VbtUt{22Ge;U^*bHW;43l0H=tcL{KC zu)SV3pI8b!ZR71*h8%Y*zL={o_Yg|Lvk_4y)FRk?a2i%oEDnz|GOzde#u1QcDl-8_ zLt`oe&h4r;0pot;+Jq`LXQwbtQKm;r#?I!+s=FcsBM#R&M7h7Y774@OcLteHl zSz$pEgPpW*v8=iJM|p@;l#&=*!qN;!$Unmdm==Olu{|t?unJk>cgME%g@TkmjRogW zf6`wJ%MHx2)jv!?yb!e%q2P57);Cav@)%@$ic6?9NbIcd?`BHhk|~0WPJ#Pl-YohiR7O zG5FOlHm4e)w%+(=@Wi1MaN1sHIF;-vWlZB%&ZV)|XsBW~oEQqDP<^(e2oG$6X29*u zTjv5^SR4upM6B2u9`fSnK*a*spJ_ei`cEiaki;PQk^X}5Ab6wms+p5tqnUvQHVEq_ zIPTx0+WI_U|5up#a`KNi6W=y&OXVAicRH$NCP?+$)$L(;*=+R-kt?Rx~#qu%4FCGYJ63|x&7Ka9G)sH+G*NS&xFG*{Iw zTZ5kJeP)&t3w^uKT0P9hL%O5w^>Z&jtTtvr+?E&n936dqDUMoQIgQW89*f+Z7VliP zUO0NZ)_BU>8#Y{UOEu>MzWhS8jmrYK*m?Q&Od$8D4_&`>KH4Sio%GFkr+uU1EZ)xh zFh%Fri+*GDh7fT3`ar|!28MUwI~YlJBFDWA#hQuI_Mm~t9-jtY@V-RmE}D*+{J!6K zzTDg<-m%tvxw>7H+i1>W<*9U#RAX;{aC*bX3ECg#qnU-infZ0&DQC`Ke~$f#oOQK; z>G7XYMfIBPHMFG10B7`nL^px!s}?(LRViHh&!HN~d4_wodrAMq7LV6I#e zyW=;?>;A=W>ml;p2I^>)Sj8HL1rGg%(>H8Qd2``eWNmoprO)+fqkpsCIO;b0+)*J& z*1!19T3>VY)V1d_CE9O;qc=9(5vu>560^3P0o zvC=pK*Eq9BYt6y(yHh)48v*OuwGm2ZC?P^kVw5Z1^cU3afD0Q$Me$o-B2VxGklQz! z7uwj`Djl5F4BR$f>`PZ(x7UVdF$G4!Opo|_Ibc<5AD|iqDtnWp=YB}Rvj=y1$;}?M z77wVmdKfW`xt#6T5V%Ua&)1t9zesAyoU z>(J_8V8?e(5`! zuX{ral6yn;IRs$)RbMuaOS9cHj2pAjIv#aEFn`Ubkn|zudPNU@;<^ z8&=2dIJ%|bbzfLJc|dFKw*5Rpw^xTYK0|P6seP~ziY$7k9&Xd}T;Ow?aYKi9o@|=% zJIhP2p$(92`+Q$}OLXqMwTzcX{^TFDR{}jOq8+_y-Yx^EeD(hPp5R^&xYuy)pirAL z1)@n>jH&i>ryD1I0&5~=8Y8n%6sco(xWjF#>uovB_bkoR&Dx3q>Kkq>c?zsK2+_@R zk2fCe4tstPqyA#s8!ctc(#b|_mt4Kw(8-duR4Ve(c~vJ;lfhza%fQw`JrPgxq}5Z=9|+*TeCB zs)&=(h_>89-h}%+1!t(V!9#fp#&p*0rNwVRTB+>Cl1Kbn*aWVd=bsu&uQ|-N76eT- z)xP%3`92^d2szXRJE1?9@_A!h{(5w6ml0^3*Jt%eCI81JGTrK zi}Y6x*3PXGoZg5NRh`5g(U+b!$;n?l^b-Gjk-lq`bj_QaFO0S3<}82jS z55qz8Bi+y4w6wA@f79xi2%GLOMwf0hCZq-W$vsxAq8mP+SMk(W7ea(nXtV z1OC$8Cat#Lo$!LG_u{_A5pO0Re*1;#t-19RXFSf@ZyWqZ(`g&a`4sK2MKdbEv-yR3 z+s(nt)}ByTdK^ov?Y7^1)xuFzK@^Fj3S`ta*wA>kSiXOWLgVv?=ls3LhqYnA;xIuY zO{_3`gIjj`agHsu5k1%N0Coh=iX39D?!B^xNiN=AP}qkyz=5@C*E*+5=KHY5SzAGO zUc`LUJVSq>S6|QDmRSq8d9~34`+{;4!YZCF9dgH1EHVG$EmH4Aa~S-jbp&+eZ^!vR z+thjASCrH~;%4`%W&Tnqsr&1z98lqc`o>ku^IKQot*uOgBz!eLbGOhO7WHB5m@`O< zv|1Y=Ko)m(^fdvDgE|YK6bcU8%Y^=gu#oN5`_H+%_LL=ZA{VO3jqOrlq0e$k!5bnOvEd9P?gdfv-}0}o-ot7N;JNRkIgy$g6aG@ zg~k!T?Q_yz&8p3yg+%1bX?u^jJTbq{3uEtnj9`;vFi5*8r2w`d=O7z8sKj07PW;Q8;n(^)`gr-3 zjb~im6{3HEkj99#H31KZhPrI&O0t>Q;#%k9hM^-F}x zefx+&L_xTnRvLy=5Ej>?mODq5-TC%KE3d=83Z9(keREYZO^dy+(RoDCvF0!^+2H}W zac9X~%Y4?!b2u4n|GMXq5M|*06Y+yMA-v{6i;badaYbd{rEJ{uR~+0}c*jp9d}$%) z(n@*|)Ny)(5!L(u-$V2_e`AP#cE7o~72BM5j{8B=^A#+iy+Bs?Ie%rBt-L6(cVG;K zudtJfIvkWx-b*dj!G7C*8LK9%>`sAs2Cd*I2S8`SBDUYXX}h}pB7!8zcJnb2SdVBG zvi)g9tL8z?0qrqw(4{-aU)1yd%a~KfHZ#0q?L{k?c1O!I*q-L#bs0g-Koikh$Lrm8 z#&I*MOIGJCjhI=8yWePwL{};>_=LeRJx4?LZ{m=d?0d-6NQ$N+t>(#Q^!#WsdO*=%b>!|Yp{Z;i8u2W90;7Ir8l5cAEjK-XS)UFvhpI;&E8 z7&;28H>Hj#)|PKS!FJqR!q&C8#(ZlI6$j(2=9TGOIIpGF zo==o*-f8mSYq+iaRDjI$?ThxSpjS6oCKqetGS*<3^{13Tjcy%>rGi4d<=hfzC2Dlj zUgf@Hi4@ncN?wjJy8(678j#qAA-=Xa<&0)&#}A+E%*0A)aNNGEAqOLH_horKZ^flg ztN#ys=hoCXljQvm1QDE1F;^v77D5Ywc`uF$GEYYU>d3t7NH{OWe z*}iCDsg7A$S$VFTOFO=PW``ad7=lU0BbqR#hY_~J^xpd{mW;m}-aP+OSfAi9>!V;_-) ziKMflkU!oU301}L^^KY`|Jg7#qE}uBe&LP97qGSFJNt)mXi*U($JCD^{IXYRs(tw2 z3%!0Ryuds%*+a*1u#yn%${fggF07a(ulBPc;%!#^{7Q5Kiw7&wi`m{eHL#gL`Lq+9 z`(|VnB?LFGWkk}rHzNqN=U(U#QR@h1sNW;nIB zV~b(!Mnq`&aEXbFh_vT&=JoRCdAfzS3>Gq>l>KM_|7rAyxvl-1toYI}bQ-YYcrOg@ z61PP)KNs0x=L#CmO`OLy{I)FagzC#ONyHqWUARV1VVlbK>(Kb@kK`e;ftcskgaT+W3adT29D8B@1 zZp7fxaaUZ^hutP~*BGXoJeOMOXLfuS9j-Ls|1@leZ7E~MKOdFso%#pe&B)p z27T}=G$J3Ovg-UirWeA>$a-~SEg3yu zC*LHgltW+!5(LaBO2mhhbHFy1#%%Nb_}lqTu0r=N&Nq-RObXj;+$=$lVbl#gG82T6 zYf{qk_AeB+oVXk#!bXBB)Uj`+&NuDZIEm`B*A7b5qd%Uxl6LCKje~|82Iu#`h4c0W zx)V>odE&mGS;bbs<+SBDhU_>gLg&bLGMisE(c>k9dUF+(S zJ8DCT?2AleHaPRyMAQFRCr99Oa_?)^`~in9m%g0KDQui%5gw5pZ82vyZ|7|JwodBZ z=j6r*|E=5|pe@j*vutCK##kvJWY6e+QDl@ec11Js-cu<3xANN55JZmKvLM^h}Z`$cA zr=p0()H-aqF2MY`iSbo=>EsDtUU%0j{Nfl_6|V55t3s*Qc}^=`yR_`;<9)Ea#P!U3 zNy85E#@%HcJf^3kv3|4;D$-?x&C-}c&23FTkM+aH8fG?#rjJz|2kwV9R1j>GaGEk9 z7g&BB={j1(`(!U6n1)iX0H+M-ZHyNh%aJ8FlRb_{Y?!tus`yBJ|ISm_#fCWO7Y2>i zq81`RbXRKcKGDImd-A;C(}Z{zO=Mqt zaj~CW4N;geX8N!9upoliF!U$RW~v_xRW{@6<@J5~u#>#l1Ww4OU5^KWIjj>H!4Ni(U+JE|4NE*H-SjP+ryCagQSnQ(@TbZDI-)LqKBCrt zdqm-m$ttFm6S?iu(_Ju-h0FJ%2bgjrrln|)P{ZPsPDa3uUm4kK^pXTLFWdoPdA7=>Hi^GzFD!#|a;=4CA^k9tq&qzru7zWdhCAVEUmNHj^a z3|E|6_*U~w=Gm^hW66Bq$$ZYXpJF*S zaOpp{557ChM#+pn*b5CK((v#q;?4s&yHwoVE`^v%bmiaR7sd-E@{iuOhPpn>lb^Xogel05&FpgWZtle$!Z6v+T|<^-u`1%6#Kk`2e}IZJ56U zPBi?wT(dPw=MlKl@B%&@v^l6wTzO$a5rAVB(!*hsg&@&&!?t2NOS$BOu5uI>P_r&~ zo9g`fq1%vPDQwHGj2CXNFP!CD5Gc(;`xl1ln1CUQ%SE_2-L^w!$gB%E77lH(8TEZb zrc%5;UaNIq9y`ucTb_pKi)OxNO;%==pI7HO88c;-^Diq_E3>ffV!|h8>zX3tjXk>T zK0?VS{+u8}vvMtsD82ObC89fd9i^?%x1wj;jK2(Pd5$Jl&_Dx=8vSFJ0v}iD zbMcapJz7=mKl}erBVTCgzF0@x*A66Wsj$|0kcY&1kV@toq4kH;1^uMA_o(k_Metuq%br$32Z$%4 zBSJ!oZb!p%o2M$;+e6dKlpdwTHr3uH{k1y(MpRrrmqKG0u5VI2bcDZS8|J`faCYGl z{n(Lc2TxE8P_Dc;cJ09JR2^6AM~#2@QtRW_$*oGF5=A8a&U;Uicsw=Zu+vhJckO91 zwO%SNgpIvPKGq#LPvX)Uel&!j?n2O`S?!VaT58u zhMkEq1ghh!@f@LBJW`3HPM*ToXER%dhTqWBqZws(nxENgFmM) zrx?n+1kO@F|LW9V`iY~wNq@&tu3w~U$s}3%(=EgQyGfZX_Wu+OTWW+JbW!;8sB0YB z&>*4gTr3TmQz%&YF!rWN9!?cw&%lqKM1u6nmcf&y#w8MbELL1-?AtDjt}LYqH5nmN zqEWYyH3&_!+9FOHZW9=|UTBz*r7n0&qG?qO0~x~io$Z3% zc;oak8fHBVBS8?+TgBwHsQv4T?6G}QE|8L{T2Vk^UlewIJ!eW#t*9|*Y*=eS#m(O` zJ9h@BfSclsm%$e13I}9UJ%+|>9IyC)5W2Mil6c0IPjr3OSM zf!;;2Nan3q>}Rt?EFQBfB6DKgUHU=Oyo5rCcU<$4i`7;`E^CEFSqqmUD4Ev5f=#Mb zkaVWAibVh%_)BUQ@R&MkWUxn^7Pn{6y$9@qvgR58U+0y6MaH@^vzc*B3JiU#cq*&A zv?wEn8((eQHSyv^U5VN6#yr*kkDH3jtOMeIsZ$+JRRE4q4 zK;{P48lCeH2yKFy?exa8aZK46p{Km<#j}5tZ2Pnjir!khSYMnb_1A92-1aI->b(C7Jq(ZyIEI!96{D^t1sLX^9LBamVC&mCl%u2qT0IXAV2wLg$M)6g62L(p$Ec*i8_br?Zxv zEr{4?{r|rqE?-i26x5?Us0NVHT7dfTJiW>5meG|4)vEpfr^#ht;=k)wB7<1Vldw3q z|4*!Os|(h+ae_GxeIK5upJo#Y?vGL#mP|7`n7L9lD=PWq$^gyj3c6WnU*#w?!b*m& zt8=CRES+kVy^WZctmcMav=_BNc=q8|8MU;897gakFN*^EF9K}b|ome9rnuwvJZWZ zc33U*kmb4IsZH)Bqx*8#n5{*Oz?1Rf^4`+Jv?kV73qe^P0+&BI2z)~mfg|05V0ggEI9#7ke<(6stxiY1ob*UutjFNOESKT&BYQm?xpuxWBwoPoAcix8IKjo zn0_Z2o>=-Zags6rA0`jK?Hm0k$!2X{xOyCYX1g z?c6eson%_D2Et-zkKYpxSeRON!Tqt39g8S=Ot`pJo5VN+uIR=d^<2YTYpD{tm8>r7 z-nsqg8lTd-eqxVUXqHv~)zZJ&#Y?69Fi!msKEVD@8vmCQf_>CN-g&_x8hY@xyatD<)9S62{N*p|pD7O6D!0qX>nxq@a z9Sk4ML}|VF-gn&iYsc2I_bc!|0+8=I+_|y9g)-n%ANe|BnC~Y?=4z^^QTM z<=|~C*#z>tvWBpxU3>-Hx(=^ zx{r(4Mj-{b_>rAhO22ggUz@gxq(4&XR86Q&avU7p+wxbpH8=rqvqHZAS6n!K4iQ2l ze>Oq*90UTO9{5B1#u+q)3^1#fj;Wxgt0adRL zg_uv)W|Zto#NMsnC(qtz(4Zt<$dHxRNE12?tsYliGBF@A9;VOxr{wgpk?5cLG_GbCuOHiM;|( zdlrSegmM=AWNCC)Z+fs8@idGKS?&xOT1L3@)#G$0?b{N(y2;9OkC@|`jO6G*Xi%tv z>PHXRCNcL&NaUxzy1ml!au8s0HbXduY15*VGp~#K1W6-(NGbVc5`9b{TC<#fhOWAXlW+mqM$UTHFRUa|Z`98JWY8P-uXrmt?c*lO?eCWwdn=BuJprB7)ZpDY%=q3% zh>mDvhfEP)_eORDgoUeiHas1y4V+YPM0yD*A4Y+5rP|QB{G)e#IgSX8v+2{Rl-^^$_Kq#_n znE7bOi<)u^0C45wZL(>b=ge#Xx&?^4y{$vOW_KCa1!ycHvNaoYXXWRN3Lx>>BS!^N ze2%SBjMofxK8<(w4wPTAxY{*yYD)>;(3!j>TtBACut_u?M$Q3olLAZnYO|4ej1!ga zYqN~N4-KMbSyXE)_Pt3lY%vX>y4_64>jRf~pQhZdTv8X%5*%C{80lX(2OW~C=p69V zpbAq~TGm-=ALvb?%L8+Fs=n)u)sW&6FCT~u$iyrCUH$*{hBQ$Ax7%m^Z~xy?SIFBc z_uzoujD5-YFBiRroVL8Ml{MWvo`RC4P|88bP3+OrEQTNt0G_bcLh`i4=%(sqIiY4V zYNaQfV34eX`$!6YxNyF=(+hJjDPGM7ZZ%=0gepcd{uTC;S&?{aYz~^YO1?qAWFIxk zwQj$L8#av+y(k#su*>q#P7Wo%5r1solU@>Ho02bO1)zk#E(0 zcg9u(VLC8qYDU|tzh#yq%vJs^yy_UBCKKOZGOClin~{|H>ApO$TR}&+Ky0#gEvmMc z?qD^ur)1L@VjCj!(MTz%(tpZXy&(RQ3(}TV(EL5q`;Ln9CXuffQ_aazq8Yy^cRr>P z;q!@K8vEtd{(&D|<}B5#eDIp&=An)yJtK7J6q1pDCXeo($JM^XJGW9l(_=uhC8ch~ zqsNmCEAGXFwCEdNx-=Bm6g0WGc1fq@cfO?bgBRpSa!R^cCRvJBa54{W{7lJZ!-R@X zlNg9>k;xP!=MghIbEdAdo-2m-IjzE#gUrCqKs5Z03wxbt7dHKj;TO1i;(Zj4hK}8X z7dwl}Eyu*Z`w|Y8Q5SLgM8CN*#uIl*ILH95KAm52kGQ^j#0}gd4yngTIpgQZbbYnm zX_VHVbrhT}krzG2{Hb!)rM3XruuYq_2#AC3dV~GTA^DEbn_qPm^ zu0k^?Rmo6_8Rw-i2?y=GUk8<5om3sdYuf7`HsKo=nWY1 zet7a=q^6N6U+Vm@%0}(-b;mI3kzAW1I(^2G9>+LzGyZFF8>)-Z1T)+jlYUa!)Jqw?PH-iQACjrTYRooN!KO^BtEaGlINR9WspoaQZe#T_0j zZxdi^c{W-&PHSh|+N~!SzINU3Yo`$r*Pso}rbsWiIs@|AHwN)4;?VaH+bXp zh__Ssye;m~P>T3gra3r*i=C)YVVHa>#m;ojiST>xrdzeAWb4YtsQ>;8IEp8~VsfS#GPQ{Lgf8@^RvD}2hd9*E1 z%ybq$5oQSM&>F;^v?kF{M?5aXh&RQUcJZIuu!Df!{|c>Kg^HmIw5t`qkcCqsHxA`= zV)&Ee_9PhK)4`|Gxa1QoZoJEO{L`+TEiF^So>>m^B8qCq5(3hLH&?-#$9EHHxE_lB z3(p$RiC55Z`3s#Da;JdFJ@!Lc-ksVz;;P_O$fkEib(a4~ zp*iSs$o6<6+Nf=BjsuEJ#z$%kGbI8%M;o>3{gvHO;^BdgzhibsKpmQpF5#xO$Wd~#r z7j;{OCzr~^dohaFUWv5lmbI%Z)fr9O6?7H9tn;+#A;bK;3|Jh zX%2Vok7MnllB*GD#^u~OV9@m6?Mf238cAu~W9(ee1a--7H_Z22&+-L4KYr0#bz56H z-^b-gvgw?%b}CbD-|E&#gh)XW$=-T_u6!n2t~1|dFlI6+M_g~mfv|n3fX@yZ4NbS> zTK72KaN`w~E}Yznk2Eci#7Q-sxd7(aElH`)lr=r&g-H*0BKWp>>Mf7$0?B@w#4p8$ zCx}LtPY*mCu-G(rr>3Y}c^-*el}@TD2cm{uGEorz0BV4d24schg#P5zuvdK2Q=%kG znUX+~>{;}83InC7S6uL|GGC>&__|nSV&dc09CrPRmZJzH>>AIY_@P{<04vbm@Pc3M zy^||?pJbS}{CBOxCmUG90kz&bd$AngmN6&XvDA=#8(7nCk19REF>a--VCx>)fE&qL zTh3(03#Pot>xo?&+@=g8>l+-x2ka>D@Vv+p+|e}&o0@m9zM#+Xt5Cyq&~_Lxc;gkg z46JTo`J@57{-vY_O64X648A0|*6DYxxFJ&(g)wimD^tNdY*FupU8ShvTHOa)jPUK^ zyh-af{Lu=X{g?)J0-~sUJF19?ChWD7-&2Mz8?K;VCma@H*f+x8Re}~9J$ztzhtr$CX*}^n6BVAn{RTFIZhRSD_{fEzGSe3jc>&Lf z;hx{0tKCsbJ)s!fMun*4)Hbcq(cIe(A3U|a?RJ;jL;*q;v>P$gzONqRf14?|N>p|` zJ|n!faX(=^*jsQp6gdCj7sDBB#V#NSh?F-my^|5;_hj1wzs+hX4VvgHV=s-VQ)H(n<-CY(hpkytjx# zW%z??PR>lz_L1D6i(lB-Bjppq^)FjPOk_m|ck%m@RyMtuaK>n(-}~#Ky~YEXeoD!S z0ulwVN+AXb!=wLqm{5U))EUZ7R-rfj-fg(m6|?D?p-=hz{o`;f-6IYZ_vRE?Jg_bd zxl<9Dk-VF^<7Hyu{bkzgRG|L6dI^h1|1v=8FzcDE1K7OPIgSa z)sVr8{nmc-2FrJz%pGH%D#y1Wz9s9tC4*}(FX6MeV+#0U$@tt+60Z#wKwcw4NV5o! zwvlSx=%pMnE1s?+%J4G8 zBJO!Jl{xa~TH0Av3brNhnx$R&rGb!N*py%Jd!necuhZoD z_m#9|V^6&oit2bF9pLXPvA(@nsqsotU*5OhR}zVhl?J5tG(g;^^WRqzp@@}6$p>ZO zS6Qgf-`CRm-d5||Sf#MmcOzZPpbqtojN| z6o!nmNx0QqN9NDP`#(S)Mr$0*4elhk;SV;{UyqCI$aFEOx+rfcj5U)hdGEYh?)xzP z-W7JA#dRvhW@vdoQ>3%M8kty*YW8DVhBq$Kd+(x@*uc4nd6 zlFwo%Q345-)zw!9Cd#gm`ay_ZDX*<`_2w1JzpjYfzOXIAJB5Knm)J^kdMcv~Vc8#j z?d6m~l21t3Z`8Mk9*s5FEIjLcKj_LoURQaM;w>d|K^wo-l#82v?|bHj?;0=)H~(61e8l z2)Fg26<(i{eLK9Y0OC5F!~TZ1)%dVFM5yUN%(72^U2a;e6TVNi@cELQyC~TBN{c)U zkN8$p33R=1P%gzO*F;r?(cf6odjz~rbpRkNU3Hd3r<$1Omx1UotLD@TbFRVp))rd1vzOQwD=EREIxH6EoF0Ck zacg<=2&=)RPq>l>?e_9tivk=ZiZ4hSa5g`Fns4k(SLA->Ck_?F$fJ|`s4En0uQO(G z7<~9f_(Fx6H@Wt{wa=SmbOj^Z8U)Gl!Bgp=FM zU~%^G5MU{)fdu8_fV?~z>^71uN29Q9*oApw;kOj@eg}$KXXv9;rVci)rC@;F+>51` zc!KBUivJ!bY7S?|8RDLQh0mq6bzq?DJq$P-Ni}!u(DmdZky5ceE<~ zu)dR=q3NWBfQfCu#)_9KL?mp8DD3Pcr{9+0Wj8t71?&R1IahdW?O<8u$Oaj}gnYu$R;7RQ}Dd6elYW2}_~7m8`7#vQ#x_?U$J- zrQH{*VHg8@w31a7A?No!)_P(l3pE~on#o_(c!@O-hQOA+Wctsmyi!F%Gb}Y#?$YO< zs(=#Jz^b#QH(@I9WypwBAywl~Q$bs?b&H-Eq-a0_3`LLyT46j+52C`kI_lo(UYlJz zrMcpoPcHYumGXp?X$uTmsJNoJf~(W|yPIWQY_iQ!uY%{@PeXTvk%asuY3x}zKtmcK zaoYAD$-iDW7iHv2Yi~UpWYxpxk>*u@mj6XoU$tw6LsWw-l;O0jFPTEz)B>LOX(hf8 zcmnNeiK9?&N*DA)cBZ0ag1|5s?NliVdtrjR0I=%06Vt^eAk%?7j|=j_vrl27DGo>$ z7OM9zyf+9Mt+af;Bxaa-#CHU9b9bOw+udHb^2&q=;Dom3O*f;w8@7xq027cEl%rpEmUzv}yVy>Jl4C*!%0AcaRJq%E#}c%@ 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ⅅ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