{"version":3,"file":"js/183-f77134c0d1e0fcd5d40c.js","mappings":"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","sources":["webpack://sharesecure/./node_modules/@fortawesome/fontawesome-svg-core/index.mjs","webpack://sharesecure/./node_modules/@fortawesome/react-fontawesome/index.es.js","webpack://sharesecure/./node_modules/@videojs/xhr/lib/http-handler.js","webpack://sharesecure/./node_modules/@videojs/xhr/lib/index.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/conventions.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/dom.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/entities.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/index.js","webpack://sharesecure/./node_modules/@xmldom/xmldom/lib/sax.js","webpack://sharesecure/./node_modules/debounce/index.js","webpack://sharesecure/./node_modules/global/document.js","webpack://sharesecure/./node_modules/global/window.js","webpack://sharesecure/./node_modules/is-function/index.js","webpack://sharesecure/./node_modules/keycode/index.js","webpack://sharesecure/./node_modules/mux.js/lib/tools/parse-sidx.js","webpack://sharesecure/./node_modules/mux.js/lib/utils/clock.js","webpack://sharesecure/./node_modules/mux.js/lib/utils/numbers.js","webpack://sharesecure/./node_modules/prop-types/factoryWithThrowingShims.js","webpack://sharesecure/./node_modules/prop-types/index.js","webpack://sharesecure/./node_modules/prop-types/lib/ReactPropTypesSecret.js","webpack://sharesecure/./node_modules/safe-json-parse/tuple.js","webpack://sharesecure/./node_modules/url-toolkit/src/url-toolkit.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/resolve-url.js","webpack://sharesecure/./node_modules/video.js/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://sharesecure/./node_modules/@videojs/vhs-utils/es/stream.js","webpack://sharesecure/./node_modules/m3u8-parser/node_modules/@babel/runtime/helpers/esm/extends.js","webpack://sharesecure/./node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","webpack://sharesecure/./node_modules/m3u8-parser/dist/m3u8-parser.es.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/codecs.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/byte-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/media-types.js","webpack://sharesecure/./node_modules/@videojs/vhs-utils/es/resolve-url.js","webpack://sharesecure/./node_modules/mpd-parser/dist/mpd-parser.es.js","webpack://sharesecure/./node_modules/@videojs/vhs-utils/es/media-groups.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/mp4-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/id3-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/opus-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/ebml-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/nal-helpers.js","webpack://sharesecure/./node_modules/video.js/node_modules/@videojs/vhs-utils/es/containers.js","webpack://sharesecure/./node_modules/video.js/dist/video.es.js","webpack://sharesecure/./node_modules/videojs-vtt.js/lib/browser-index.js","webpack://sharesecure/./node_modules/videojs-vtt.js/lib/vtt.js","webpack://sharesecure/./node_modules/videojs-vtt.js/lib/vttcue.js","webpack://sharesecure/./node_modules/videojs-vtt.js/lib/vttregion.js","webpack://sharesecure/./node_modules/@videojs/xhr/node_modules/@babel/runtime/helpers/extends.js","webpack://sharesecure/./node_modules/@fortawesome/pro-light-svg-icons/index.mjs","webpack://sharesecure/./node_modules/@fortawesome/pro-regular-svg-icons/index.mjs","webpack://sharesecure/./node_modules/@fortawesome/pro-solid-svg-icons/index.mjs","webpack://sharesecure/./node_modules/axios/lib/helpers/bind.js","webpack://sharesecure/./node_modules/axios/lib/utils.js","webpack://sharesecure/./node_modules/axios/lib/core/AxiosError.js","webpack://sharesecure/./node_modules/axios/lib/helpers/toFormData.js","webpack://sharesecure/./node_modules/axios/lib/helpers/AxiosURLSearchParams.js","webpack://sharesecure/./node_modules/axios/lib/helpers/buildURL.js","webpack://sharesecure/./node_modules/axios/lib/core/InterceptorManager.js","webpack://sharesecure/./node_modules/axios/lib/defaults/transitional.js","webpack://sharesecure/./node_modules/axios/lib/platform/browser/index.js","webpack://sharesecure/./node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","webpack://sharesecure/./node_modules/axios/lib/platform/browser/classes/FormData.js","webpack://sharesecure/./node_modules/axios/lib/platform/browser/classes/Blob.js","webpack://sharesecure/./node_modules/axios/lib/helpers/formDataToJSON.js","webpack://sharesecure/./node_modules/axios/lib/defaults/index.js","webpack://sharesecure/./node_modules/axios/lib/helpers/toURLEncodedForm.js","webpack://sharesecure/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://sharesecure/./node_modules/axios/lib/core/AxiosHeaders.js","webpack://sharesecure/./node_modules/axios/lib/core/transformData.js","webpack://sharesecure/./node_modules/axios/lib/cancel/isCancel.js","webpack://sharesecure/./node_modules/axios/lib/cancel/CanceledError.js","webpack://sharesecure/./node_modules/axios/lib/helpers/cookies.js","webpack://sharesecure/./node_modules/axios/lib/core/buildFullPath.js","webpack://sharesecure/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://sharesecure/./node_modules/axios/lib/helpers/combineURLs.js","webpack://sharesecure/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://sharesecure/./node_modules/axios/lib/helpers/speedometer.js","webpack://sharesecure/./node_modules/axios/lib/adapters/xhr.js","webpack://sharesecure/./node_modules/axios/lib/adapters/adapters.js","webpack://sharesecure/./node_modules/axios/lib/helpers/null.js","webpack://sharesecure/./node_modules/axios/lib/core/settle.js","webpack://sharesecure/./node_modules/axios/lib/helpers/parseProtocol.js","webpack://sharesecure/./node_modules/axios/lib/core/dispatchRequest.js","webpack://sharesecure/./node_modules/axios/lib/core/mergeConfig.js","webpack://sharesecure/./node_modules/axios/lib/env/data.js","webpack://sharesecure/./node_modules/axios/lib/helpers/validator.js","webpack://sharesecure/./node_modules/axios/lib/core/Axios.js","webpack://sharesecure/./node_modules/axios/lib/cancel/CancelToken.js","webpack://sharesecure/./node_modules/axios/lib/helpers/HttpStatusCode.js","webpack://sharesecure/./node_modules/axios/lib/axios.js","webpack://sharesecure/./node_modules/axios/lib/helpers/spread.js","webpack://sharesecure/./node_modules/axios/lib/helpers/isAxiosError.js"],"sourcesContent":["function ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _wrapRegExp() {\n _wrapRegExp = function (re, groups) {\n return new BabelRegExp(re, void 0, groups);\n };\n\n var _super = RegExp.prototype,\n _groups = new WeakMap();\n\n function BabelRegExp(re, flags, groups) {\n var _this = new RegExp(re, flags);\n\n return _groups.set(_this, groups || _groups.get(re)), _setPrototypeOf(_this, BabelRegExp.prototype);\n }\n\n function buildGroups(result, re) {\n var g = _groups.get(re);\n\n return Object.keys(g).reduce(function (groups, name) {\n return groups[name] = result[g[name]], groups;\n }, Object.create(null));\n }\n\n return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (str) {\n var result = _super.exec.call(this, str);\n\n return result && (result.groups = buildGroups(result, this)), result;\n }, BabelRegExp.prototype[Symbol.replace] = function (str, substitution) {\n if (\"string\" == typeof substitution) {\n var groups = _groups.get(this);\n\n return _super[Symbol.replace].call(this, str, substitution.replace(/\\$<([^>]+)>/g, function (_, name) {\n return \"$\" + groups[name];\n }));\n }\n\n if (\"function\" == typeof substitution) {\n var _this = this;\n\n return _super[Symbol.replace].call(this, str, function () {\n var args = arguments;\n return \"object\" != typeof args[args.length - 1] && (args = [].slice.call(args)).push(buildGroups(args, _this)), substitution.apply(this, args);\n });\n }\n\n return _super[Symbol.replace].call(this, str, substitution);\n }, _wrapRegExp.apply(this, arguments);\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) _setPrototypeOf(subClass, superClass);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar noop = function noop() {};\n\nvar _WINDOW = {};\nvar _DOCUMENT = {};\nvar _MUTATION_OBSERVER = null;\nvar _PERFORMANCE = {\n mark: noop,\n measure: noop\n};\n\ntry {\n if (typeof window !== 'undefined') _WINDOW = window;\n if (typeof document !== 'undefined') _DOCUMENT = document;\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\n} catch (e) {}\n\nvar _ref = _WINDOW.navigator || {},\n _ref$userAgent = _ref.userAgent,\n userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\nvar WINDOW = _WINDOW;\nvar DOCUMENT = _DOCUMENT;\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\nvar PERFORMANCE = _PERFORMANCE;\nvar IS_BROWSER = !!WINDOW.document;\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\n\nvar _familyProxy, _familyProxy2, _familyProxy3, _familyProxy4, _familyProxy5;\n\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\nvar UNITS_IN_GRID = 16;\nvar DEFAULT_CSS_PREFIX = 'fa';\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\nvar DATA_PREFIX = 'data-prefix';\nvar DATA_ICON = 'data-icon';\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\nvar MUTATION_APPROACH_ASYNC = 'async';\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\nvar PRODUCTION = function () {\n try {\n return process.env.NODE_ENV === 'production';\n } catch (e) {\n return false;\n }\n}();\nvar FAMILY_CLASSIC = 'classic';\nvar FAMILY_SHARP = 'sharp';\nvar FAMILIES = [FAMILY_CLASSIC, FAMILY_SHARP];\n\nfunction familyProxy(obj) {\n // Defaults to the classic family if family is not available\n return new Proxy(obj, {\n get: function get(target, prop) {\n return prop in target ? target[prop] : target[FAMILY_CLASSIC];\n }\n });\n}\nvar PREFIX_TO_STYLE = familyProxy((_familyProxy = {}, _defineProperty(_familyProxy, FAMILY_CLASSIC, {\n 'fa': 'solid',\n 'fas': 'solid',\n 'fa-solid': 'solid',\n 'far': 'regular',\n 'fa-regular': 'regular',\n 'fal': 'light',\n 'fa-light': 'light',\n 'fat': 'thin',\n 'fa-thin': 'thin',\n 'fad': 'duotone',\n 'fa-duotone': 'duotone',\n 'fab': 'brands',\n 'fa-brands': 'brands',\n 'fak': 'kit',\n 'fa-kit': 'kit'\n}), _defineProperty(_familyProxy, FAMILY_SHARP, {\n 'fa': 'solid',\n 'fass': 'solid',\n 'fa-solid': 'solid',\n 'fasr': 'regular',\n 'fa-regular': 'regular'\n}), _familyProxy));\nvar STYLE_TO_PREFIX = familyProxy((_familyProxy2 = {}, _defineProperty(_familyProxy2, FAMILY_CLASSIC, {\n 'solid': 'fas',\n 'regular': 'far',\n 'light': 'fal',\n 'thin': 'fat',\n 'duotone': 'fad',\n 'brands': 'fab',\n 'kit': 'fak'\n}), _defineProperty(_familyProxy2, FAMILY_SHARP, {\n 'solid': 'fass',\n 'regular': 'fasr'\n}), _familyProxy2));\nvar PREFIX_TO_LONG_STYLE = familyProxy((_familyProxy3 = {}, _defineProperty(_familyProxy3, FAMILY_CLASSIC, {\n 'fab': 'fa-brands',\n 'fad': 'fa-duotone',\n 'fak': 'fa-kit',\n 'fal': 'fa-light',\n 'far': 'fa-regular',\n 'fas': 'fa-solid',\n 'fat': 'fa-thin'\n}), _defineProperty(_familyProxy3, FAMILY_SHARP, {\n 'fass': 'fa-solid',\n 'fasr': 'fa-regular'\n}), _familyProxy3));\nvar LONG_STYLE_TO_PREFIX = familyProxy((_familyProxy4 = {}, _defineProperty(_familyProxy4, FAMILY_CLASSIC, {\n 'fa-brands': 'fab',\n 'fa-duotone': 'fad',\n 'fa-kit': 'fak',\n 'fa-light': 'fal',\n 'fa-regular': 'far',\n 'fa-solid': 'fas',\n 'fa-thin': 'fat'\n}), _defineProperty(_familyProxy4, FAMILY_SHARP, {\n 'fa-solid': 'fass',\n 'fa-regular': 'fasr'\n}), _familyProxy4));\nvar ICON_SELECTION_SYNTAX_PATTERN = /fa(s|r|l|t|d|b|k|ss|sr)?[\\-\\ ]/; // eslint-disable-line no-useless-escape\n\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\nvar FONT_FAMILY_PATTERN = /Font ?Awesome ?([56 ]*)(Solid|Regular|Light|Thin|Duotone|Brands|Free|Pro|Sharp|Kit)?.*/i;\nvar FONT_WEIGHT_TO_PREFIX = familyProxy((_familyProxy5 = {}, _defineProperty(_familyProxy5, FAMILY_CLASSIC, {\n '900': 'fas',\n '400': 'far',\n 'normal': 'far',\n '300': 'fal',\n '100': 'fat'\n}), _defineProperty(_familyProxy5, FAMILY_SHARP, {\n '900': 'fass',\n '400': 'fasr'\n}), _familyProxy5));\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\nvar DUOTONE_CLASSES = {\n GROUP: 'duotone-group',\n SWAP_OPACITY: 'swap-opacity',\n PRIMARY: 'primary',\n SECONDARY: 'secondary'\n};\nvar prefixes = new Set();\nObject.keys(STYLE_TO_PREFIX[FAMILY_CLASSIC]).map(prefixes.add.bind(prefixes));\nObject.keys(STYLE_TO_PREFIX[FAMILY_SHARP]).map(prefixes.add.bind(prefixes));\nvar RESERVED_CLASSES = [].concat(FAMILIES, _toConsumableArray(prefixes), ['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', 'beat', 'border', 'fade', 'beat-fade', 'bounce', 'flip-both', 'flip-horizontal', 'flip-vertical', 'flip', 'fw', 'inverse', 'layers-counter', 'layers-text', 'layers', 'li', 'pull-left', 'pull-right', 'pulse', 'rotate-180', 'rotate-270', 'rotate-90', 'rotate-by', 'shake', 'spin-pulse', 'spin-reverse', 'spin', 'stack-1x', 'stack-2x', 'stack', 'ul', DUOTONE_CLASSES.GROUP, DUOTONE_CLASSES.SWAP_OPACITY, DUOTONE_CLASSES.PRIMARY, DUOTONE_CLASSES.SECONDARY]).concat(oneToTen.map(function (n) {\n return \"\".concat(n, \"x\");\n})).concat(oneToTwenty.map(function (n) {\n return \"w-\".concat(n);\n}));\n\nvar initial = WINDOW.FontAwesomeConfig || {};\n\nfunction getAttrConfig(attr) {\n var element = DOCUMENT.querySelector('script[' + attr + ']');\n\n if (element) {\n return element.getAttribute(attr);\n }\n}\n\nfunction coerce(val) {\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\n // We'll assume that this is an indication that it should be toggled to true\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-css-prefix', 'cssPrefix'], ['data-family-default', 'familyDefault'], ['data-style-default', 'styleDefault'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\n\nvar _default = {\n styleDefault: 'solid',\n familyDefault: 'classic',\n cssPrefix: DEFAULT_CSS_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n}; // familyPrefix is deprecated but we must still support it if present\n\nif (initial.familyPrefix) {\n initial.cssPrefix = initial.familyPrefix;\n}\n\nvar _config = _objectSpread2(_objectSpread2({}, _default), initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\nvar config = {};\nObject.keys(_default).forEach(function (key) {\n Object.defineProperty(config, key, {\n enumerable: true,\n set: function set(val) {\n _config[key] = val;\n\n _onChangeCb.forEach(function (cb) {\n return cb(config);\n });\n },\n get: function get() {\n return _config[key];\n }\n });\n}); // familyPrefix is deprecated as of 6.2.0 and should be removed in 7.0.0\n\nObject.defineProperty(config, 'familyPrefix', {\n enumerable: true,\n set: function set(val) {\n _config.cssPrefix = val;\n\n _onChangeCb.forEach(function (cb) {\n return cb(config);\n });\n },\n get: function get() {\n return _config.cssPrefix;\n }\n});\nWINDOW.FontAwesomeConfig = config;\nvar _onChangeCb = [];\nfunction onChange(cb) {\n _onChangeCb.push(cb);\n\n return function () {\n _onChangeCb.splice(_onChangeCb.indexOf(cb), 1);\n };\n}\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n}\nfunction toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName].trim(), \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n}\nfunction transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar baseStyles = \":root, :host {\\n --fa-font-solid: normal 900 1em/1 \\\"Font Awesome 6 Solid\\\";\\n --fa-font-regular: normal 400 1em/1 \\\"Font Awesome 6 Regular\\\";\\n --fa-font-light: normal 300 1em/1 \\\"Font Awesome 6 Light\\\";\\n --fa-font-thin: normal 100 1em/1 \\\"Font Awesome 6 Thin\\\";\\n --fa-font-duotone: normal 900 1em/1 \\\"Font Awesome 6 Duotone\\\";\\n --fa-font-sharp-solid: normal 900 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-sharp-regular: normal 400 1em/1 \\\"Font Awesome 6 Sharp\\\";\\n --fa-font-brands: normal 400 1em/1 \\\"Font Awesome 6 Brands\\\";\\n}\\n\\nsvg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {\\n overflow: visible;\\n box-sizing: content-box;\\n}\\n\\n.svg-inline--fa {\\n display: var(--fa-display, inline-block);\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-2xs {\\n vertical-align: 0.1em;\\n}\\n.svg-inline--fa.fa-xs {\\n vertical-align: 0em;\\n}\\n.svg-inline--fa.fa-sm {\\n vertical-align: -0.0714285705em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.2em;\\n}\\n.svg-inline--fa.fa-xl {\\n vertical-align: -0.25em;\\n}\\n.svg-inline--fa.fa-2xl {\\n vertical-align: -0.3125em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: var(--fa-pull-margin, 0.3em);\\n width: auto;\\n}\\n.svg-inline--fa.fa-li {\\n width: var(--fa-li-width, 2em);\\n top: 0.25em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: var(--fa-fw-width, 1.25em);\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: var(--fa-counter-background-color, #ff253a);\\n border-radius: var(--fa-counter-border-radius, 1em);\\n box-sizing: border-box;\\n color: var(--fa-inverse, #fff);\\n line-height: var(--fa-counter-line-height, 1);\\n max-width: var(--fa-counter-max-width, 5em);\\n min-width: var(--fa-counter-min-width, 1.5em);\\n overflow: hidden;\\n padding: var(--fa-counter-padding, 0.25em 0.5em);\\n right: var(--fa-right, 0);\\n text-overflow: ellipsis;\\n top: var(--fa-top, 0);\\n -webkit-transform: scale(var(--fa-counter-scale, 0.25));\\n transform: scale(var(--fa-counter-scale, 0.25));\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: var(--fa-bottom, 0);\\n right: var(--fa-right, 0);\\n top: auto;\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: bottom right;\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: var(--fa-bottom, 0);\\n left: var(--fa-left, 0);\\n right: auto;\\n top: auto;\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: bottom left;\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n top: var(--fa-top, 0);\\n right: var(--fa-right, 0);\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: var(--fa-left, 0);\\n right: auto;\\n top: var(--fa-top, 0);\\n -webkit-transform: scale(var(--fa-layers-scale, 0.25));\\n transform: scale(var(--fa-layers-scale, 0.25));\\n -webkit-transform-origin: top left;\\n transform-origin: top left;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-2xs {\\n font-size: 0.625em;\\n line-height: 0.1em;\\n vertical-align: 0.225em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n line-height: 0.0833333337em;\\n vertical-align: 0.125em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n line-height: 0.0714285718em;\\n vertical-align: 0.0535714295em;\\n}\\n\\n.fa-lg {\\n font-size: 1.25em;\\n line-height: 0.05em;\\n vertical-align: -0.075em;\\n}\\n\\n.fa-xl {\\n font-size: 1.5em;\\n line-height: 0.0416666682em;\\n vertical-align: -0.125em;\\n}\\n\\n.fa-2xl {\\n font-size: 2em;\\n line-height: 0.03125em;\\n vertical-align: -0.1875em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: var(--fa-li-margin, 2.5em);\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: calc(var(--fa-li-width, 2em) * -1);\\n position: absolute;\\n text-align: center;\\n width: var(--fa-li-width, 2em);\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border-color: var(--fa-border-color, #eee);\\n border-radius: var(--fa-border-radius, 0.1em);\\n border-style: var(--fa-border-style, solid);\\n border-width: var(--fa-border-width, 0.08em);\\n padding: var(--fa-border-padding, 0.2em 0.25em 0.15em);\\n}\\n\\n.fa-pull-left {\\n float: left;\\n margin-right: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-pull-right {\\n float: right;\\n margin-left: var(--fa-pull-margin, 0.3em);\\n}\\n\\n.fa-beat {\\n -webkit-animation-name: fa-beat;\\n animation-name: fa-beat;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-bounce {\\n -webkit-animation-name: fa-bounce;\\n animation-name: fa-bounce;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1));\\n}\\n\\n.fa-fade {\\n -webkit-animation-name: fa-fade;\\n animation-name: fa-fade;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-beat-fade {\\n -webkit-animation-name: fa-beat-fade;\\n animation-name: fa-beat-fade;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1));\\n}\\n\\n.fa-flip {\\n -webkit-animation-name: fa-flip;\\n animation-name: fa-flip;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n animation-timing-function: var(--fa-animation-timing, ease-in-out);\\n}\\n\\n.fa-shake {\\n -webkit-animation-name: fa-shake;\\n animation-name: fa-shake;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin {\\n -webkit-animation-name: fa-spin;\\n animation-name: fa-spin;\\n -webkit-animation-delay: var(--fa-animation-delay, 0s);\\n animation-delay: var(--fa-animation-delay, 0s);\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 2s);\\n animation-duration: var(--fa-animation-duration, 2s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, linear);\\n animation-timing-function: var(--fa-animation-timing, linear);\\n}\\n\\n.fa-spin-reverse {\\n --fa-animation-direction: reverse;\\n}\\n\\n.fa-pulse,\\n.fa-spin-pulse {\\n -webkit-animation-name: fa-spin;\\n animation-name: fa-spin;\\n -webkit-animation-direction: var(--fa-animation-direction, normal);\\n animation-direction: var(--fa-animation-direction, normal);\\n -webkit-animation-duration: var(--fa-animation-duration, 1s);\\n animation-duration: var(--fa-animation-duration, 1s);\\n -webkit-animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n animation-iteration-count: var(--fa-animation-iteration-count, infinite);\\n -webkit-animation-timing-function: var(--fa-animation-timing, steps(8));\\n animation-timing-function: var(--fa-animation-timing, steps(8));\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n .fa-beat,\\n.fa-bounce,\\n.fa-fade,\\n.fa-beat-fade,\\n.fa-flip,\\n.fa-pulse,\\n.fa-shake,\\n.fa-spin,\\n.fa-spin-pulse {\\n -webkit-animation-delay: -1ms;\\n animation-delay: -1ms;\\n -webkit-animation-duration: 1ms;\\n animation-duration: 1ms;\\n -webkit-animation-iteration-count: 1;\\n animation-iteration-count: 1;\\n -webkit-transition-delay: 0s;\\n transition-delay: 0s;\\n -webkit-transition-duration: 0s;\\n transition-duration: 0s;\\n }\\n}\\n@-webkit-keyframes fa-beat {\\n 0%, 90% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 45% {\\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n transform: scale(var(--fa-beat-scale, 1.25));\\n }\\n}\\n@keyframes fa-beat {\\n 0%, 90% {\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 45% {\\n -webkit-transform: scale(var(--fa-beat-scale, 1.25));\\n transform: scale(var(--fa-beat-scale, 1.25));\\n }\\n}\\n@-webkit-keyframes fa-bounce {\\n 0% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 10% {\\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n }\\n 30% {\\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n }\\n 50% {\\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n }\\n 57% {\\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n }\\n 64% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 100% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n}\\n@keyframes fa-bounce {\\n 0% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 10% {\\n -webkit-transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0);\\n }\\n 30% {\\n -webkit-transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em));\\n }\\n 50% {\\n -webkit-transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0);\\n }\\n 57% {\\n -webkit-transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em));\\n }\\n 64% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n 100% {\\n -webkit-transform: scale(1, 1) translateY(0);\\n transform: scale(1, 1) translateY(0);\\n }\\n}\\n@-webkit-keyframes fa-fade {\\n 50% {\\n opacity: var(--fa-fade-opacity, 0.4);\\n }\\n}\\n@keyframes fa-fade {\\n 50% {\\n opacity: var(--fa-fade-opacity, 0.4);\\n }\\n}\\n@-webkit-keyframes fa-beat-fade {\\n 0%, 100% {\\n opacity: var(--fa-beat-fade-opacity, 0.4);\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 50% {\\n opacity: 1;\\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n transform: scale(var(--fa-beat-fade-scale, 1.125));\\n }\\n}\\n@keyframes fa-beat-fade {\\n 0%, 100% {\\n opacity: var(--fa-beat-fade-opacity, 0.4);\\n -webkit-transform: scale(1);\\n transform: scale(1);\\n }\\n 50% {\\n opacity: 1;\\n -webkit-transform: scale(var(--fa-beat-fade-scale, 1.125));\\n transform: scale(var(--fa-beat-fade-scale, 1.125));\\n }\\n}\\n@-webkit-keyframes fa-flip {\\n 50% {\\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n }\\n}\\n@keyframes fa-flip {\\n 50% {\\n -webkit-transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg));\\n }\\n}\\n@-webkit-keyframes fa-shake {\\n 0% {\\n -webkit-transform: rotate(-15deg);\\n transform: rotate(-15deg);\\n }\\n 4% {\\n -webkit-transform: rotate(15deg);\\n transform: rotate(15deg);\\n }\\n 8%, 24% {\\n -webkit-transform: rotate(-18deg);\\n transform: rotate(-18deg);\\n }\\n 12%, 28% {\\n -webkit-transform: rotate(18deg);\\n transform: rotate(18deg);\\n }\\n 16% {\\n -webkit-transform: rotate(-22deg);\\n transform: rotate(-22deg);\\n }\\n 20% {\\n -webkit-transform: rotate(22deg);\\n transform: rotate(22deg);\\n }\\n 32% {\\n -webkit-transform: rotate(-12deg);\\n transform: rotate(-12deg);\\n }\\n 36% {\\n -webkit-transform: rotate(12deg);\\n transform: rotate(12deg);\\n }\\n 40%, 100% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n}\\n@keyframes fa-shake {\\n 0% {\\n -webkit-transform: rotate(-15deg);\\n transform: rotate(-15deg);\\n }\\n 4% {\\n -webkit-transform: rotate(15deg);\\n transform: rotate(15deg);\\n }\\n 8%, 24% {\\n -webkit-transform: rotate(-18deg);\\n transform: rotate(-18deg);\\n }\\n 12%, 28% {\\n -webkit-transform: rotate(18deg);\\n transform: rotate(18deg);\\n }\\n 16% {\\n -webkit-transform: rotate(-22deg);\\n transform: rotate(-22deg);\\n }\\n 20% {\\n -webkit-transform: rotate(22deg);\\n transform: rotate(22deg);\\n }\\n 32% {\\n -webkit-transform: rotate(-12deg);\\n transform: rotate(-12deg);\\n }\\n 36% {\\n -webkit-transform: rotate(12deg);\\n transform: rotate(12deg);\\n }\\n 40%, 100% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n}\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both,\\n.fa-flip-horizontal.fa-flip-vertical {\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1);\\n}\\n\\n.fa-rotate-by {\\n -webkit-transform: rotate(var(--fa-rotate-angle, none));\\n transform: rotate(var(--fa-rotate-angle, none));\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n vertical-align: middle;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n z-index: var(--fa-stack-z-index, auto);\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: var(--fa-inverse, #fff);\\n}\\n\\n.sr-only,\\n.fa-sr-only {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.sr-only-focusable:not(:focus),\\n.fa-sr-only-focusable:not(:focus) {\\n position: absolute;\\n width: 1px;\\n height: 1px;\\n padding: 0;\\n margin: -1px;\\n overflow: hidden;\\n clip: rect(0, 0, 0, 0);\\n white-space: nowrap;\\n border-width: 0;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n fill: var(--fa-primary-color, currentColor);\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n fill: var(--fa-secondary-color, currentColor);\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n fill: black;\\n}\\n\\n.fad.fa-inverse,\\n.fa-duotone.fa-inverse {\\n color: var(--fa-inverse, #fff);\\n}\";\n\nfunction css() {\n var dcp = DEFAULT_CSS_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.cssPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dcp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dcp, \"\\\\-\"), 'g');\n var customPropPatt = new RegExp(\"\\\\--\".concat(dcp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n}\n\nvar _cssInserted = false;\n\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n _cssInserted = true;\n }\n}\n\nvar InjectCSS = {\n mixout: function mixout() {\n return {\n dom: {\n css: css,\n insertCss: ensureCss\n }\n };\n },\n hooks: function hooks() {\n return {\n beforeDOMElementCreation: function beforeDOMElementCreation() {\n ensureCss();\n },\n beforeI2svg: function beforeI2svg() {\n ensureCss();\n }\n };\n }\n};\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nfunction toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\").concat(tag, \">\");\n }\n}\n\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n};\n\n/**\n * ucs2decode() and codePointAt() are both works of Mathias Bynens and licensed under MIT\n *\n * Copyright Mathias Bynens \n\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nfunction ucs2decode(string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n var extra = string.charCodeAt(counter++);\n\n if ((extra & 0xFC00) == 0xDC00) {\n // eslint-disable-line eqeqeq\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n\n return output;\n}\n\nfunction toHex(unicode) {\n var decoded = ucs2decode(unicode);\n return decoded.length === 1 ? decoded[0].toString(16) : null;\n}\nfunction codePointAt(string, index) {\n var size = string.length;\n var first = string.charCodeAt(index);\n var second;\n\n if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {\n second = string.charCodeAt(index + 1);\n\n if (second >= 0xDC00 && second <= 0xDFFF) {\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n\n return first;\n}\n\nfunction normalizeIcons(icons) {\n return Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n}\n\nfunction defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = normalizeIcons(icons);\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalizeIcons(icons));\n } else {\n namespace.styles[prefix] = _objectSpread2(_objectSpread2({}, namespace.styles[prefix] || {}), normalized);\n }\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll ease the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nvar duotonePathRe = [/*#__PURE__*/_wrapRegExp(/path d=\"((?:(?!\")[\\s\\S])+)\".*path d=\"((?:(?!\")[\\s\\S])+)\"/, {\n d1: 1,\n d2: 2\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\".*path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n cls1: 1,\n d1: 2,\n cls2: 3,\n d2: 4\n}), /*#__PURE__*/_wrapRegExp(/path class=\"((?:(?!\")[\\s\\S])+)\".*d=\"((?:(?!\")[\\s\\S])+)\"/, {\n cls1: 1,\n d1: 2\n})];\n\nvar _LONG_STYLE, _PREFIXES, _PREFIXES_FOR_FAMILY;\nvar styles = namespace.styles,\n shims = namespace.shims;\nvar LONG_STYLE = (_LONG_STYLE = {}, _defineProperty(_LONG_STYLE, FAMILY_CLASSIC, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_LONG_STYLE, FAMILY_SHARP, Object.values(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _LONG_STYLE);\nvar _defaultUsablePrefix = null;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar _byOldUnicode = {};\nvar _byAlias = {};\nvar PREFIXES = (_PREFIXES = {}, _defineProperty(_PREFIXES, FAMILY_CLASSIC, Object.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES, FAMILY_SHARP, Object.keys(PREFIX_TO_STYLE[FAMILY_SHARP])), _PREFIXES);\n\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\n\nfunction getIconName(cssPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === cssPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nvar build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n if (icon[2]) {\n var aliases = icon[2].filter(function (a) {\n return typeof a === 'number';\n });\n aliases.forEach(function (alias) {\n acc[alias.toString(16)] = iconName;\n });\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n acc[iconName] = iconName;\n\n if (icon[2]) {\n var aliases = icon[2].filter(function (a) {\n return typeof a === 'string';\n });\n aliases.forEach(function (alias) {\n acc[alias] = iconName;\n });\n }\n\n return acc;\n });\n _byAlias = lookup(function (acc, icon, iconName) {\n var aliases = icon[2];\n acc[iconName] = iconName;\n aliases.forEach(function (alias) {\n acc[alias] = iconName;\n });\n return acc;\n }); // If we have a Kit, we can't determine if regular is available since we\n // could be auto-fetching it. We'll have to assume that it is available.\n\n var hasRegular = 'far' in styles || config.autoFetchSvg;\n var shimLookups = reduce(shims, function (acc, shim) {\n var maybeNameMaybeUnicode = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n if (typeof maybeNameMaybeUnicode === 'string') {\n acc.names[maybeNameMaybeUnicode] = {\n prefix: prefix,\n iconName: iconName\n };\n }\n\n if (typeof maybeNameMaybeUnicode === 'number') {\n acc.unicodes[maybeNameMaybeUnicode.toString(16)] = {\n prefix: prefix,\n iconName: iconName\n };\n }\n\n return acc;\n }, {\n names: {},\n unicodes: {}\n });\n _byOldName = shimLookups.names;\n _byOldUnicode = shimLookups.unicodes;\n _defaultUsablePrefix = getCanonicalPrefix(config.styleDefault, {\n family: config.familyDefault\n });\n};\nonChange(function (c) {\n _defaultUsablePrefix = getCanonicalPrefix(c.styleDefault, {\n family: config.familyDefault\n });\n});\nbuild();\nfunction byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n}\nfunction byAlias(prefix, alias) {\n return (_byAlias[prefix] || {})[alias];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\nfunction byOldUnicode(unicode) {\n var oldUnicode = _byOldUnicode[unicode];\n var newUnicode = byUnicode('fas', unicode);\n return oldUnicode || (newUnicode ? {\n prefix: 'fas',\n iconName: newUnicode\n } : null) || {\n prefix: null,\n iconName: null\n };\n}\nfunction getDefaultUsablePrefix() {\n return _defaultUsablePrefix;\n}\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getCanonicalPrefix(styleOrPrefix) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$family = params.family,\n family = _params$family === void 0 ? FAMILY_CLASSIC : _params$family;\n var style = PREFIX_TO_STYLE[family][styleOrPrefix];\n var prefix = STYLE_TO_PREFIX[family][styleOrPrefix] || STYLE_TO_PREFIX[family][style];\n var defined = styleOrPrefix in namespace.styles ? styleOrPrefix : null;\n return prefix || defined || null;\n}\nvar PREFIXES_FOR_FAMILY = (_PREFIXES_FOR_FAMILY = {}, _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_CLASSIC, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC])), _defineProperty(_PREFIXES_FOR_FAMILY, FAMILY_SHARP, Object.keys(PREFIX_TO_LONG_STYLE[FAMILY_SHARP])), _PREFIXES_FOR_FAMILY);\nfunction getCanonicalIcon(values) {\n var _famProps;\n\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$skipLookups = params.skipLookups,\n skipLookups = _params$skipLookups === void 0 ? false : _params$skipLookups;\n var famProps = (_famProps = {}, _defineProperty(_famProps, FAMILY_CLASSIC, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_CLASSIC)), _defineProperty(_famProps, FAMILY_SHARP, \"\".concat(config.cssPrefix, \"-\").concat(FAMILY_SHARP)), _famProps);\n var givenPrefix = null;\n var family = FAMILY_CLASSIC;\n\n if (values.includes(famProps[FAMILY_CLASSIC]) || values.some(function (v) {\n return PREFIXES_FOR_FAMILY[FAMILY_CLASSIC].includes(v);\n })) {\n family = FAMILY_CLASSIC;\n }\n\n if (values.includes(famProps[FAMILY_SHARP]) || values.some(function (v) {\n return PREFIXES_FOR_FAMILY[FAMILY_SHARP].includes(v);\n })) {\n family = FAMILY_SHARP;\n }\n\n var canonical = values.reduce(function (acc, cls) {\n var iconName = getIconName(config.cssPrefix, cls);\n\n if (styles[cls]) {\n cls = LONG_STYLE[family].includes(cls) ? LONG_STYLE_TO_PREFIX[family][cls] : cls;\n givenPrefix = cls;\n acc.prefix = cls;\n } else if (PREFIXES[family].indexOf(cls) > -1) {\n givenPrefix = cls;\n acc.prefix = getCanonicalPrefix(cls, {\n family: family\n });\n } else if (iconName) {\n acc.iconName = iconName;\n } else if (cls !== config.replacementClass && cls !== famProps[FAMILY_CLASSIC] && cls !== famProps[FAMILY_SHARP]) {\n acc.rest.push(cls);\n }\n\n if (!skipLookups && acc.prefix && acc.iconName) {\n var shim = givenPrefix === 'fa' ? byOldName(acc.iconName) : {};\n var aliasIconName = byAlias(acc.prefix, acc.iconName);\n\n if (shim.prefix) {\n givenPrefix = null;\n }\n\n acc.iconName = shim.iconName || aliasIconName || acc.iconName;\n acc.prefix = shim.prefix || acc.prefix;\n\n if (acc.prefix === 'far' && !styles['far'] && styles['fas'] && !config.autoFetchSvg) {\n // Allow a fallback from the regular style to solid if regular is not available\n // but only if we aren't auto-fetching SVGs\n acc.prefix = 'fas';\n }\n }\n\n return acc;\n }, emptyCanonicalIcon());\n\n if (values.includes('fa-brands') || values.includes('fab')) {\n canonical.prefix = 'fab';\n }\n\n if (values.includes('fa-duotone') || values.includes('fad')) {\n canonical.prefix = 'fad';\n }\n\n if (!canonical.prefix && family === FAMILY_SHARP && (styles['fass'] || config.autoFetchSvg)) {\n canonical.prefix = 'fass';\n canonical.iconName = byAlias(canonical.prefix, canonical.iconName) || canonical.iconName;\n }\n\n if (canonical.prefix === 'fa' || givenPrefix === 'fa') {\n // The fa prefix is not canonical. So if it has made it through until this point\n // we will shift it to the correct prefix.\n canonical.prefix = getDefaultUsablePrefix() || 'fas';\n }\n\n return canonical;\n}\n\nvar Library = /*#__PURE__*/function () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread2(_objectSpread2({}, _this.definitions[key] || {}), additions[key]);\n defineIcons(key, additions[key]); // TODO can we stop doing this? We can't get the icons by 'fa-solid' any longer so this probably needs to change\n\n var longPrefix = PREFIX_TO_LONG_STYLE[FAMILY_CLASSIC][key];\n if (longPrefix) defineIcons(longPrefix, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n var aliases = icon[2];\n if (!additions[prefix]) additions[prefix] = {};\n\n if (aliases.length > 0) {\n aliases.forEach(function (alias) {\n if (typeof alias === 'string') {\n additions[prefix][alias] = icon;\n }\n });\n }\n\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n}();\n\nvar _plugins = [];\nvar _hooks = {};\nvar providers = {};\nvar defaultProviderKeys = Object.keys(providers);\nfunction registerPlugins(nextPlugins, _ref) {\n var obj = _ref.mixoutsTo;\n _plugins = nextPlugins;\n _hooks = {};\n Object.keys(providers).forEach(function (k) {\n if (defaultProviderKeys.indexOf(k) === -1) {\n delete providers[k];\n }\n });\n\n _plugins.forEach(function (plugin) {\n var mixout = plugin.mixout ? plugin.mixout() : {};\n Object.keys(mixout).forEach(function (tk) {\n if (typeof mixout[tk] === 'function') {\n obj[tk] = mixout[tk];\n }\n\n if (_typeof(mixout[tk]) === 'object') {\n Object.keys(mixout[tk]).forEach(function (sk) {\n if (!obj[tk]) {\n obj[tk] = {};\n }\n\n obj[tk][sk] = mixout[tk][sk];\n });\n }\n });\n\n if (plugin.hooks) {\n var hooks = plugin.hooks();\n Object.keys(hooks).forEach(function (hook) {\n if (!_hooks[hook]) {\n _hooks[hook] = [];\n }\n\n _hooks[hook].push(hooks[hook]);\n });\n }\n\n if (plugin.provides) {\n plugin.provides(providers);\n }\n });\n\n return obj;\n}\nfunction chainHooks(hook, accumulator) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var hookFns = _hooks[hook] || [];\n hookFns.forEach(function (hookFn) {\n accumulator = hookFn.apply(null, [accumulator].concat(args)); // eslint-disable-line no-useless-call\n });\n return accumulator;\n}\nfunction callHooks(hook) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n var hookFns = _hooks[hook] || [];\n hookFns.forEach(function (hookFn) {\n hookFn.apply(null, args);\n });\n return undefined;\n}\nfunction callProvided() {\n var hook = arguments[0];\n var args = Array.prototype.slice.call(arguments, 1);\n return providers[hook] ? providers[hook].apply(null, args) : undefined;\n}\n\nfunction findIconDefinition(iconLookup) {\n if (iconLookup.prefix === 'fa') {\n iconLookup.prefix = 'fas';\n }\n\n var iconName = iconLookup.iconName;\n var prefix = iconLookup.prefix || getDefaultUsablePrefix();\n if (!iconName) return;\n iconName = byAlias(prefix, iconName) || iconName;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\nvar library = new Library();\nvar noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n callHooks('noAuto');\n};\nvar dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n callHooks('beforeI2svg', params);\n callProvided('pseudoElements2svg', params);\n return callProvided('i2svg', params);\n } else {\n return Promise.reject('Operation requires a DOM of some kind.');\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n callHooks('watch', params);\n });\n }\n};\nvar parse = {\n icon: function icon(_icon) {\n if (_icon === null) {\n return null;\n }\n\n if (_typeof(_icon) === 'object' && _icon.prefix && _icon.iconName) {\n return {\n prefix: _icon.prefix,\n iconName: byAlias(_icon.prefix, _icon.iconName) || _icon.iconName\n };\n }\n\n if (Array.isArray(_icon) && _icon.length === 2) {\n var iconName = _icon[1].indexOf('fa-') === 0 ? _icon[1].slice(3) : _icon[1];\n var prefix = getCanonicalPrefix(_icon[0]);\n return {\n prefix: prefix,\n iconName: byAlias(prefix, iconName) || iconName\n };\n }\n\n if (typeof _icon === 'string' && (_icon.indexOf(\"\".concat(config.cssPrefix, \"-\")) > -1 || _icon.match(ICON_SELECTION_SYNTAX_PATTERN))) {\n var canonicalIcon = getCanonicalIcon(_icon.split(' '), {\n skipLookups: true\n });\n return {\n prefix: canonicalIcon.prefix || getDefaultUsablePrefix(),\n iconName: byAlias(canonicalIcon.prefix, canonicalIcon.iconName) || canonicalIcon.iconName\n };\n }\n\n if (typeof _icon === 'string') {\n var _prefix = getDefaultUsablePrefix();\n\n return {\n prefix: _prefix,\n iconName: byAlias(_prefix, _icon) || _icon\n };\n }\n }\n};\nvar api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n parse: parse,\n library: library,\n findIconDefinition: findIconDefinition,\n toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nfunction domVariants(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread2(_objectSpread2({}, styles), {}, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n}\n\nfunction asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.cssPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread2(_objectSpread2({}, attributes), {}, {\n id: id\n }),\n children: children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n maskId = params.maskId,\n titleId = params.titleId,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var isUploadedIcon = prefix === 'fak';\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.cssPrefix, \"-\").concat(iconName) : ''].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).filter(function (c) {\n return c !== '' || !!c;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread2(_objectSpread2({}, extra.attributes), {}, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) {\n content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n delete content.attributes.title;\n }\n\n var args = _objectSpread2(_objectSpread2({}, content), {}, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n maskId: maskId,\n transform: transform,\n symbol: symbol,\n styles: _objectSpread2(_objectSpread2({}, uploadedIconWidthStyle), extra.styles)\n });\n\n var _ref2 = mask.found && main.found ? callProvided('generateAbstractMask', args) || {\n children: [],\n attributes: {}\n } : callProvided('generateAbstractIcon', args) || {\n children: [],\n attributes: {}\n },\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread2({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread2(_objectSpread2(_objectSpread2({}, extra.attributes), title ? {\n 'title': title\n } : {}), {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\n\nvar styles$1 = namespace.styles;\nfunction asFoundIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n\n var _icon$slice = icon.slice(4),\n _icon$slice2 = _slicedToArray(_icon$slice, 1),\n vectorData = _icon$slice2[0];\n\n var element = null;\n\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.cssPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n\n return {\n found: true,\n width: width,\n height: height,\n icon: element\n };\n}\nvar missingIconResolutionMixin = {\n found: false,\n width: 512,\n height: 512\n};\n\nfunction maybeNotifyMissing(iconName, prefix) {\n if (!PRODUCTION && !config.showMissingIcons && iconName) {\n console.error(\"Icon with name \\\"\".concat(iconName, \"\\\" and prefix \\\"\").concat(prefix, \"\\\" is missing.\"));\n }\n}\n\nfunction findIcon(iconName, prefix) {\n var givenPrefix = prefix;\n\n if (prefix === 'fa' && config.styleDefault !== null) {\n prefix = getDefaultUsablePrefix();\n }\n\n return new Promise(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: callProvided('missingIconAbstract') || {}\n };\n\n if (givenPrefix === 'fa') {\n var shim = byOldName(iconName) || {};\n iconName = shim.iconName || iconName;\n prefix = shim.prefix || prefix;\n }\n\n if (iconName && prefix && styles$1[prefix] && styles$1[prefix][iconName]) {\n var icon = styles$1[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n\n maybeNotifyMissing(iconName, prefix);\n resolve(_objectSpread2(_objectSpread2({}, missingIconResolutionMixin), {}, {\n icon: config.showMissingIcons && iconName ? callProvided('missingIconAbstract') || {} : {}\n }));\n });\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nvar preamble = \"FA \\\"6.3.0\\\"\";\n\nvar begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n};\n\nvar end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n begin: begin,\n end: end\n};\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\n\nfunction hasPrefixAndIcon(node) {\n var prefix = node.getAttribute ? node.getAttribute(DATA_PREFIX) : null;\n var icon = node.getAttribute ? node.getAttribute(DATA_ICON) : null;\n return prefix && icon;\n}\n\nfunction hasBeenReplaced(node) {\n return node && node.classList && node.classList.contains && node.classList.contains(config.replacementClass);\n}\n\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\n\nfunction createElementNS(tag) {\n return DOCUMENT.createElementNS('http://www.w3.org/2000/svg', tag);\n}\n\nfunction createElement(tag) {\n return DOCUMENT.createElement(tag);\n}\n\nfunction convertSVG(abstractObj) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$ceFn = params.ceFn,\n ceFn = _params$ceFn === void 0 ? abstractObj.tag === 'svg' ? createElementNS : createElement : _params$ceFn;\n\n if (typeof abstractObj === 'string') {\n return DOCUMENT.createTextNode(abstractObj);\n }\n\n var tag = ceFn(abstractObj.tag);\n Object.keys(abstractObj.attributes || []).forEach(function (key) {\n tag.setAttribute(key, abstractObj.attributes[key]);\n });\n var children = abstractObj.children || [];\n children.forEach(function (child) {\n tag.appendChild(convertSVG(child, {\n ceFn: ceFn\n }));\n });\n return tag;\n}\n\nfunction nodeAsComment(node) {\n var comment = \" \".concat(node.outerHTML, \" \");\n /* BEGIN.ATTRIBUTION */\n\n comment = \"\".concat(comment, \"Font Awesome fontawesome.com \");\n /* END.ATTRIBUTION */\n\n return comment;\n}\n\nvar mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n\n if (node.parentNode) {\n mutation[1].forEach(function (_abstract) {\n node.parentNode.insertBefore(convertSVG(_abstract), node);\n });\n\n if (node.getAttribute(DATA_FA_I2SVG) === null && config.keepOriginalSource) {\n var comment = DOCUMENT.createComment(nodeAsComment(node));\n node.parentNode.replaceChild(comment, node);\n } else {\n node.remove();\n }\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var _abstract2 = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.cssPrefix, \"-.*\"));\n delete _abstract2[0].attributes.id;\n\n if (_abstract2[0].attributes.class) {\n var splitClasses = _abstract2[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n\n _abstract2[0].attributes.class = splitClasses.toSvg.join(' ');\n\n if (splitClasses.toNode.length === 0) {\n node.removeAttribute('class');\n } else {\n node.setAttribute('class', splitClasses.toNode.join(' '));\n }\n }\n\n var newInnerHTML = _abstract2.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\n\nfunction performOperationSync(op) {\n op();\n}\n\nfunction perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nvar disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var _options$treeCallback = options.treeCallback,\n treeCallback = _options$treeCallback === void 0 ? noop$2 : _options$treeCallback,\n _options$nodeCallback = options.nodeCallback,\n nodeCallback = _options$nodeCallback === void 0 ? noop$2 : _options$nodeCallback,\n _options$pseudoElemen = options.pseudoElementsCallback,\n pseudoElementsCallback = _options$pseudoElemen === void 0 ? noop$2 : _options$pseudoElemen,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n var defaultPrefix = getDefaultUsablePrefix();\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class' && hasPrefixAndIcon(mutationRecord.target)) {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n mutationRecord.target.setAttribute(DATA_PREFIX, prefix || defaultPrefix);\n if (iconName) mutationRecord.target.setAttribute(DATA_ICON, iconName);\n } else if (hasBeenReplaced(mutationRecord.target)) {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n}\n\nfunction classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (!val.prefix) {\n val.prefix = getDefaultUsablePrefix();\n }\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.iconName && val.prefix) {\n return val;\n }\n\n if (val.prefix && innerText.length > 0) {\n val.iconName = byLigature(val.prefix, node.innerText) || byUnicode(val.prefix, toHex(node.innerText));\n }\n\n if (!val.iconName && config.autoFetchSvg && node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\n val.iconName = node.firstChild.data;\n }\n\n return val;\n}\n\nfunction attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n var titleId = node.getAttribute('data-fa-title-id');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n var parser = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n styleParser: true\n };\n\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraAttributes = attributesParser(node);\n var pluginMeta = chainHooks('parseNodeAttributes', {}, node);\n var extraStyles = parser.styleParser ? styleParser(node) : [];\n return _objectSpread2({\n iconName: iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix: prefix,\n transform: meaninglessTransform,\n mask: {\n iconName: null,\n prefix: null,\n rest: []\n },\n maskId: null,\n symbol: false,\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n }, pluginMeta);\n}\n\nvar styles$2 = namespace.styles;\n\nfunction generateMutation(node) {\n var nodeMeta = config.autoReplaceSvg === 'nest' ? parseMeta(node, {\n styleParser: false\n }) : parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return callProvided('generateLayersText', node, nodeMeta);\n } else {\n return callProvided('generateSvgReplacementMutation', node, nodeMeta);\n }\n}\n\nvar knownPrefixes = new Set();\nFAMILIES.map(function (family) {\n knownPrefixes.add(\"fa-\".concat(family));\n});\nObject.keys(PREFIX_TO_STYLE[FAMILY_CLASSIC]).map(knownPrefixes.add.bind(knownPrefixes));\nObject.keys(PREFIX_TO_STYLE[FAMILY_SHARP]).map(knownPrefixes.add.bind(knownPrefixes));\nknownPrefixes = _toConsumableArray(knownPrefixes);\n\nfunction onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return Promise.resolve();\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? knownPrefixes : FAMILIES.map(function (f) {\n return \"fa-\".concat(f);\n }).concat(Object.keys(styles$2));\n\n if (!prefixes.includes('fa')) {\n prefixes.push('fa');\n }\n\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return Promise.resolve();\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return Promise.resolve();\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e.name === 'MissingIcon') {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new Promise(function (resolve, reject) {\n Promise.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function (e) {\n mark();\n reject(e);\n });\n });\n}\n\nfunction onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\n\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread2(_objectSpread2({}, params), {}, {\n mask: mask\n }));\n };\n}\n\nvar render = function render(iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$maskId = params.maskId,\n maskId = _params$maskId === void 0 ? null : _params$maskId,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$titleId = params.titleId,\n titleId = _params$titleId === void 0 ? null : _params$titleId,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return domVariants(_objectSpread2({\n type: 'icon'\n }, iconDefinition), function () {\n callHooks('beforeDOMElementCreation', {\n iconDefinition: iconDefinition,\n params: params\n });\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n symbol: symbol,\n title: title,\n maskId: maskId,\n titleId: titleId,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n};\nvar ReplaceElements = {\n mixout: function mixout() {\n return {\n icon: resolveIcons(render)\n };\n },\n hooks: function hooks() {\n return {\n mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n accumulator.treeCallback = onTree;\n accumulator.nodeCallback = onNode;\n return accumulator;\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.i2svg = function (params) {\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n return onTree(node, callback);\n };\n\n providers$$1.generateSvgReplacementMutation = function (node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n titleId = nodeMeta.titleId,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n maskId = nodeMeta.maskId,\n extra = nodeMeta.extra;\n return new Promise(function (resolve, reject) {\n Promise.all([findIcon(iconName, prefix), mask.iconName ? findIcon(mask.iconName, mask.prefix) : Promise.resolve({\n found: false,\n width: 512,\n height: 512,\n icon: {}\n })]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n maskId: maskId,\n title: title,\n titleId: titleId,\n extra: extra,\n watchable: true\n })]);\n }).catch(reject);\n });\n };\n\n providers$$1.generateAbstractIcon = function (_ref3) {\n var children = _ref3.children,\n attributes = _ref3.attributes,\n main = _ref3.main,\n transform = _ref3.transform,\n styles = _ref3.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var nextChild;\n\n if (transformIsMeaningful(transform)) {\n nextChild = callProvided('generateAbstractTransformGrouping', {\n main: main,\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n }\n\n children.push(nextChild || main.icon);\n return {\n children: children,\n attributes: attributes\n };\n };\n }\n};\n\nvar Layers = {\n mixout: function mixout() {\n return {\n layer: function layer(assembler) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes;\n return domVariants({\n type: 'layer'\n }, function () {\n callHooks('beforeDOMElementCreation', {\n assembler: assembler,\n params: params\n });\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.cssPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n },\n children: children\n }];\n });\n }\n };\n }\n};\n\nvar LayersCounter = {\n mixout: function mixout() {\n return {\n counter: function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n return domVariants({\n type: 'counter',\n content: content\n }, function () {\n callHooks('beforeDOMElementCreation', {\n content: content,\n params: params\n });\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n }\n };\n }\n};\n\nvar LayersText = {\n mixout: function mixout() {\n return {\n text: function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n return domVariants({\n type: 'text',\n content: content\n }, function () {\n callHooks('beforeDOMElementCreation', {\n content: content,\n params: params\n });\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread2(_objectSpread2({}, meaninglessTransform), transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.cssPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.generateLayersText = function (node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return Promise.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n };\n }\n};\n\nvar CLEAN_CONTENT_PATTERN = new RegExp(\"\\\"\", 'ug');\nvar SECONDARY_UNICODE_RANGE = [1105920, 1112319];\nfunction hexValueFromContent(content) {\n var cleaned = content.replace(CLEAN_CONTENT_PATTERN, '');\n var codePoint = codePointAt(cleaned, 0);\n var isPrependTen = codePoint >= SECONDARY_UNICODE_RANGE[0] && codePoint <= SECONDARY_UNICODE_RANGE[1];\n var isDoubled = cleaned.length === 2 ? cleaned[0] === cleaned[1] : false;\n return {\n value: isDoubled ? toHex(cleaned[0]) : toHex(cleaned),\n isSecondary: isPrependTen || isDoubled\n };\n}\n\nfunction replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new Promise(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n var content = styles.getPropertyValue('content');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily && content !== 'none' && content !== '') {\n var _content = styles.getPropertyValue('content');\n\n var family = ~['Sharp'].indexOf(fontFamily[2]) ? FAMILY_SHARP : FAMILY_CLASSIC;\n var prefix = ~['Solid', 'Regular', 'Light', 'Thin', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[family][fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[family][fontWeight];\n\n var _hexValueFromContent = hexValueFromContent(_content),\n hexValue = _hexValueFromContent.value,\n isSecondary = _hexValueFromContent.isSecondary;\n\n var isV4 = fontFamily[0].startsWith('FontAwesome');\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName;\n\n if (isV4) {\n var iconName4 = byOldUnicode(hexValue);\n\n if (iconName4.iconName && iconName4.prefix) {\n iconName = iconName4.iconName;\n prefix = iconName4.prefix;\n }\n } // Only convert the pseudo element in this ::before/::after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n\n if (iconName && !isSecondary && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var _abstract = makeInlineSvgAbstract(_objectSpread2(_objectSpread2({}, meta), {}, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n\n var element = DOCUMENT.createElement('svg');\n\n if (position === '::before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = _abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\n\nfunction replace(node) {\n return Promise.all([replaceForPosition(node, '::before'), replaceForPosition(node, '::after')]);\n}\n\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements(root) {\n if (!IS_DOM) return;\n return new Promise(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n Promise.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n}\n\nvar PseudoElements = {\n hooks: function hooks() {\n return {\n mutationObserverCallbacks: function mutationObserverCallbacks(accumulator) {\n accumulator.pseudoElementsCallback = searchPseudoElements;\n return accumulator;\n }\n };\n },\n provides: function provides(providers$$1) {\n providers$$1.pseudoElements2svg = function (params) {\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n };\n }\n};\n\nvar _unwatched = false;\nvar MutationObserver$1 = {\n mixout: function mixout() {\n return {\n dom: {\n unwatch: function unwatch() {\n disableObservation();\n _unwatched = true;\n }\n }\n };\n },\n hooks: function hooks() {\n return {\n bootstrap: function bootstrap() {\n observe(chainHooks('mutationObserverCallbacks', {}));\n },\n noAuto: function noAuto() {\n disconnect();\n },\n watch: function watch(params) {\n var observeMutationsRoot = params.observeMutationsRoot;\n\n if (_unwatched) {\n enableObservation();\n } else {\n observe(chainHooks('mutationObserverCallbacks', {\n observeMutationsRoot: observeMutationsRoot\n }));\n }\n }\n };\n }\n};\n\nvar parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n};\nvar PowerTransforms = {\n mixout: function mixout() {\n return {\n parse: {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n }\n };\n },\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var transformString = node.getAttribute('data-fa-transform');\n\n if (transformString) {\n accumulator.transform = parseTransformString(transformString);\n }\n\n return accumulator;\n }\n };\n },\n provides: function provides(providers) {\n providers.generateAbstractTransformGrouping = function (_ref) {\n var main = _ref.main,\n transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n var operations = {\n outer: outer,\n inner: inner,\n path: path\n };\n return {\n tag: 'g',\n attributes: _objectSpread2({}, operations.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread2({}, operations.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread2(_objectSpread2({}, main.icon.attributes), operations.path)\n }]\n }]\n };\n };\n }\n};\n\nvar ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\n\nfunction fillBlack(_abstract) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (_abstract.attributes && (_abstract.attributes.fill || force)) {\n _abstract.attributes.fill = 'black';\n }\n\n return _abstract;\n}\n\nfunction deGroup(_abstract2) {\n if (_abstract2.tag === 'g') {\n return _abstract2.children;\n } else {\n return [_abstract2];\n }\n}\n\nvar Masks = {\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var maskData = node.getAttribute('data-fa-mask');\n var mask = !maskData ? emptyCanonicalIcon() : getCanonicalIcon(maskData.split(' ').map(function (i) {\n return i.trim();\n }));\n\n if (!mask.prefix) {\n mask.prefix = getDefaultUsablePrefix();\n }\n\n accumulator.mask = mask;\n accumulator.maskId = node.getAttribute('data-fa-mask-id');\n return accumulator;\n }\n };\n },\n provides: function provides(providers) {\n providers.generateAbstractMask = function (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n explicitMaskId = _ref.maskId,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n fill: 'white'\n })\n };\n var maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.inner),\n children: [fillBlack(_objectSpread2({\n tag: mainPath.tag,\n attributes: _objectSpread2(_objectSpread2({}, mainPath.attributes), trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread2({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread2(_objectSpread2({}, ALL_SPACE), {}, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread2({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n };\n }\n};\n\nvar MissingIconIndicator = {\n provides: function provides(providers) {\n var reduceMotion = false;\n\n if (WINDOW.matchMedia) {\n reduceMotion = WINDOW.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }\n\n providers.missingIconAbstract = function () {\n var gChildren = [];\n var FILL = {\n fill: 'currentColor'\n };\n var ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n }; // Ring\n\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n });\n\n var OPACITY_ANIMATE = _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'opacity'\n });\n\n var dot = {\n tag: 'circle',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: []\n };\n\n if (!reduceMotion) {\n dot.children.push({\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, ANIMATION_BASE), {}, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;1;1;0;1;'\n })\n });\n }\n\n gChildren.push(dot);\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: reduceMotion ? [] : [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '1;0;0;0;0;1;'\n })\n }]\n });\n\n if (!reduceMotion) {\n // Exclamation\n gChildren.push({\n tag: 'path',\n attributes: _objectSpread2(_objectSpread2({}, FILL), {}, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread2(_objectSpread2({}, OPACITY_ANIMATE), {}, {\n values: '0;0;1;1;0;0;'\n })\n }]\n });\n }\n\n return {\n tag: 'g',\n attributes: {\n 'class': 'missing'\n },\n children: gChildren\n };\n };\n }\n};\n\nvar SvgSymbols = {\n hooks: function hooks() {\n return {\n parseNodeAttributes: function parseNodeAttributes(accumulator, node) {\n var symbolData = node.getAttribute('data-fa-symbol');\n var symbol = symbolData === null ? false : symbolData === '' ? true : symbolData;\n accumulator['symbol'] = symbol;\n return accumulator;\n }\n };\n }\n};\n\nvar plugins = [InjectCSS, ReplaceElements, Layers, LayersCounter, LayersText, PseudoElements, MutationObserver$1, PowerTransforms, Masks, MissingIconIndicator, SvgSymbols];\n\nregisterPlugins(plugins, {\n mixoutsTo: api\n});\nvar noAuto$1 = api.noAuto;\nvar config$1 = api.config;\nvar library$1 = api.library;\nvar dom$1 = api.dom;\nvar parse$1 = api.parse;\nvar findIconDefinition$1 = api.findIconDefinition;\nvar toHtml$1 = api.toHtml;\nvar icon = api.icon;\nvar layer = api.layer;\nvar text = api.text;\nvar counter = api.counter;\n\nexport { noAuto$1 as noAuto, config$1 as config, library$1 as library, dom$1 as dom, parse$1 as parse, findIconDefinition$1 as findIconDefinition, toHtml$1 as toHtml, icon, layer, text, counter, api };\n","import { parse, icon } from '@fortawesome/fontawesome-svg-core';\nimport PropTypes from 'prop-types';\nimport React from 'react';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n\n return target;\n}\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n// Get CSS class list from a props object\nfunction classList(props) {\n var _classes;\n\n var beat = props.beat,\n fade = props.fade,\n beatFade = props.beatFade,\n bounce = props.bounce,\n shake = props.shake,\n flash = props.flash,\n spin = props.spin,\n spinPulse = props.spinPulse,\n spinReverse = props.spinReverse,\n pulse = props.pulse,\n fixedWidth = props.fixedWidth,\n inverse = props.inverse,\n border = props.border,\n listItem = props.listItem,\n flip = props.flip,\n size = props.size,\n rotation = props.rotation,\n pull = props.pull; // map of CSS class names to properties\n\n var classes = (_classes = {\n 'fa-beat': beat,\n 'fa-fade': fade,\n 'fa-beat-fade': beatFade,\n 'fa-bounce': bounce,\n 'fa-shake': shake,\n 'fa-flash': flash,\n 'fa-spin': spin,\n 'fa-spin-reverse': spinReverse,\n 'fa-spin-pulse': spinPulse,\n 'fa-pulse': pulse,\n 'fa-fw': fixedWidth,\n 'fa-inverse': inverse,\n 'fa-border': border,\n 'fa-li': listItem,\n 'fa-flip': flip === true,\n 'fa-flip-horizontal': flip === 'horizontal' || flip === 'both',\n 'fa-flip-vertical': flip === 'vertical' || flip === 'both'\n }, _defineProperty(_classes, \"fa-\".concat(size), typeof size !== 'undefined' && size !== null), _defineProperty(_classes, \"fa-rotate-\".concat(rotation), typeof rotation !== 'undefined' && rotation !== null && rotation !== 0), _defineProperty(_classes, \"fa-pull-\".concat(pull), typeof pull !== 'undefined' && pull !== null), _defineProperty(_classes, 'fa-swap-opacity', props.swapOpacity), _classes); // map over all the keys in the classes object\n // return an array of the keys where the value for the key is not null\n\n return Object.keys(classes).map(function (key) {\n return classes[key] ? key : null;\n }).filter(function (key) {\n return key;\n });\n}\n\n// Camelize taken from humps\n// humps is copyright © 2012+ Dom Christie\n// Released under the MIT license.\n// Performant way to determine if object coerces to a number\nfunction _isNumerical(obj) {\n obj = obj - 0; // eslint-disable-next-line no-self-compare\n\n return obj === obj;\n}\n\nfunction camelize(string) {\n if (_isNumerical(string)) {\n return string;\n } // eslint-disable-next-line no-useless-escape\n\n\n string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n }); // Ensure 1st char is always lowercase\n\n return string.substr(0, 1).toLowerCase() + string.substr(1);\n}\n\nvar _excluded = [\"style\"];\n\nfunction capitalize(val) {\n return val.charAt(0).toUpperCase() + val.slice(1);\n}\n\nfunction styleToObject(style) {\n return style.split(';').map(function (s) {\n return s.trim();\n }).filter(function (s) {\n return s;\n }).reduce(function (acc, pair) {\n var i = pair.indexOf(':');\n var prop = camelize(pair.slice(0, i));\n var value = pair.slice(i + 1).trim();\n prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\n return acc;\n }, {});\n}\n\nfunction convert(createElement, element) {\n var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n if (typeof element === 'string') {\n return element;\n }\n\n var children = (element.children || []).map(function (child) {\n return convert(createElement, child);\n });\n /* eslint-disable dot-notation */\n\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\n var val = element.attributes[key];\n\n switch (key) {\n case 'class':\n acc.attrs['className'] = val;\n delete element.attributes['class'];\n break;\n\n case 'style':\n acc.attrs['style'] = styleToObject(val);\n break;\n\n default:\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\n acc.attrs[key.toLowerCase()] = val;\n } else {\n acc.attrs[camelize(key)] = val;\n }\n\n }\n\n return acc;\n }, {\n attrs: {}\n });\n\n var _extraProps$style = extraProps.style,\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\n remaining = _objectWithoutProperties(extraProps, _excluded);\n\n mixins.attrs['style'] = _objectSpread2(_objectSpread2({}, mixins.attrs['style']), existingStyle);\n /* eslint-enable */\n\n return createElement.apply(void 0, [element.tag, _objectSpread2(_objectSpread2({}, mixins.attrs), remaining)].concat(_toConsumableArray(children)));\n}\n\nvar PRODUCTION = false;\n\ntry {\n PRODUCTION = process.env.NODE_ENV === 'production';\n} catch (e) {}\n\nfunction log () {\n if (!PRODUCTION && console && typeof console.error === 'function') {\n var _console;\n\n (_console = console).error.apply(_console, arguments);\n }\n}\n\nfunction normalizeIconArgs(icon) {\n // this has everything that it needs to be rendered which means it was probably imported\n // directly from an icon svg package\n if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName && icon.icon) {\n return icon;\n }\n\n if (parse.icon) {\n return parse.icon(icon);\n } // if the icon is null, there's nothing to do\n\n\n if (icon === null) {\n return null;\n } // if the icon is an object and has a prefix and an icon name, return it\n\n\n if (icon && _typeof(icon) === 'object' && icon.prefix && icon.iconName) {\n return icon;\n } // if it's an array with length of two\n\n\n if (Array.isArray(icon) && icon.length === 2) {\n // use the first item as prefix, second as icon name\n return {\n prefix: icon[0],\n iconName: icon[1]\n };\n } // if it's a string, use it as the icon name\n\n\n if (typeof icon === 'string') {\n return {\n prefix: 'fas',\n iconName: icon\n };\n }\n}\n\n// creates an object with a key of key\n// and a value of value\n// if certain conditions are met\nfunction objectWithKey(key, value) {\n // if the value is a non-empty array\n // or it's not an array but it is truthy\n // then create the object with the key and the value\n // if not, return an empty array\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\n}\n\nvar FontAwesomeIcon = /*#__PURE__*/React.forwardRef(function (props, ref) {\n var iconArgs = props.icon,\n maskArgs = props.mask,\n symbol = props.symbol,\n className = props.className,\n title = props.title,\n titleId = props.titleId,\n maskId = props.maskId;\n var iconLookup = normalizeIconArgs(iconArgs);\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\n var transform = objectWithKey('transform', typeof props.transform === 'string' ? parse.transform(props.transform) : props.transform);\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\n var renderedIcon = icon(iconLookup, _objectSpread2(_objectSpread2(_objectSpread2(_objectSpread2({}, classes), transform), mask), {}, {\n symbol: symbol,\n title: title,\n titleId: titleId,\n maskId: maskId\n }));\n\n if (!renderedIcon) {\n log('Could not find icon', iconLookup);\n return null;\n }\n\n var abstract = renderedIcon.abstract;\n var extraProps = {\n ref: ref\n };\n Object.keys(props).forEach(function (key) {\n // eslint-disable-next-line no-prototype-builtins\n if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\n extraProps[key] = props[key];\n }\n });\n return convertCurry(abstract[0], extraProps);\n});\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\nFontAwesomeIcon.propTypes = {\n beat: PropTypes.bool,\n border: PropTypes.bool,\n beatFade: PropTypes.bool,\n bounce: PropTypes.bool,\n className: PropTypes.string,\n fade: PropTypes.bool,\n flash: PropTypes.bool,\n mask: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n maskId: PropTypes.string,\n fixedWidth: PropTypes.bool,\n inverse: PropTypes.bool,\n flip: PropTypes.oneOf([true, false, 'horizontal', 'vertical', 'both']),\n icon: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.string]),\n listItem: PropTypes.bool,\n pull: PropTypes.oneOf(['right', 'left']),\n pulse: PropTypes.bool,\n rotation: PropTypes.oneOf([0, 90, 180, 270]),\n shake: PropTypes.bool,\n size: PropTypes.oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\n spin: PropTypes.bool,\n spinPulse: PropTypes.bool,\n spinReverse: PropTypes.bool,\n symbol: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n title: PropTypes.string,\n titleId: PropTypes.string,\n transform: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n swapOpacity: PropTypes.bool\n};\nFontAwesomeIcon.defaultProps = {\n border: false,\n className: '',\n mask: null,\n maskId: null,\n fixedWidth: false,\n inverse: false,\n flip: false,\n icon: null,\n listItem: false,\n pull: null,\n pulse: false,\n rotation: null,\n size: null,\n spin: false,\n spinPulse: false,\n spinReverse: false,\n beat: false,\n fade: false,\n beatFade: false,\n bounce: false,\n shake: false,\n symbol: false,\n title: '',\n titleId: null,\n transform: null,\n swapOpacity: false\n};\nvar convertCurry = convert.bind(null, React.createElement);\n\nexport { FontAwesomeIcon };\n","\"use strict\";\n\nvar window = require('global/window');\n\nvar httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) {\n if (decodeResponseBody === void 0) {\n decodeResponseBody = false;\n }\n\n return function (err, response, responseBody) {\n // if the XHR failed, return that error\n if (err) {\n callback(err);\n return;\n } // if the HTTP status code is 4xx or 5xx, the request also failed\n\n\n if (response.statusCode >= 400 && response.statusCode <= 599) {\n var cause = responseBody;\n\n if (decodeResponseBody) {\n if (window.TextDecoder) {\n var charset = getCharset(response.headers && response.headers['content-type']);\n\n try {\n cause = new TextDecoder(charset).decode(responseBody);\n } catch (e) {}\n } else {\n cause = String.fromCharCode.apply(null, new Uint8Array(responseBody));\n }\n }\n\n callback({\n cause: cause\n });\n return;\n } // otherwise, request succeeded\n\n\n callback(null, responseBody);\n };\n};\n\nfunction getCharset(contentTypeHeader) {\n if (contentTypeHeader === void 0) {\n contentTypeHeader = '';\n }\n\n return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) {\n var _contentType$split = contentType.split('='),\n type = _contentType$split[0],\n value = _contentType$split[1];\n\n if (type.trim() === 'charset') {\n return value.trim();\n }\n\n return charset;\n }, 'utf-8');\n}\n\nmodule.exports = httpResponseHandler;","\"use strict\";\n\nvar window = require(\"global/window\");\n\nvar _extends = require(\"@babel/runtime/helpers/extends\");\n\nvar isFunction = require('is-function');\n\ncreateXHR.httpHandler = require('./http-handler.js');\n/**\n * @license\n * slighly modified parse-headers 2.0.2 \n * Copyright (c) 2014 David Björklund\n * Available under the MIT license\n * \n */\n\nvar parseHeaders = function parseHeaders(headers) {\n var result = {};\n\n if (!headers) {\n return result;\n }\n\n headers.trim().split('\\n').forEach(function (row) {\n var index = row.indexOf(':');\n var key = row.slice(0, index).trim().toLowerCase();\n var value = row.slice(index + 1).trim();\n\n if (typeof result[key] === 'undefined') {\n result[key] = value;\n } else if (Array.isArray(result[key])) {\n result[key].push(value);\n } else {\n result[key] = [result[key], value];\n }\n });\n return result;\n};\n\nmodule.exports = createXHR; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest = \"withCredentials\" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window.XDomainRequest;\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n\n if (typeof uri === \"string\") {\n params = {\n uri: uri\n };\n }\n } else {\n params = _extends({}, options, {\n uri: uri\n });\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === \"undefined\") {\n throw new Error(\"callback argument missing\");\n }\n\n var called = false;\n\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\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 {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n\n if (!(evt instanceof Error)) {\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\"));\n }\n\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n } // will load the data & process the response in a special response object\n\n\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n\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\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\n if (xhr.getAllResponseHeaders) {\n //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\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = xhr.url = options.uri || options.url;\n var method = xhr.method = options.method || \"GET\";\n var body = options.body || options.data;\n var headers = xhr.headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n };\n\n if (\"json\" in options && options.json !== false) {\n isJson = true;\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\"); //Don't override existing accept header declared by user\n\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\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function.\n\n xhr.onprogress = function () {// IE must die\n };\n\n xhr.onabort = function () {\n aborted = true;\n };\n\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password); //has to be after open\n\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\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\n\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n\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 && typeof options.beforeSend === \"function\") {\n options.beforeSend(xhr);\n } // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n\n\n xhr.send(body || null);\n return xhr;\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML;\n }\n\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\";\n\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n } catch (e) {}\n\n return null;\n}\n\nfunction noop() {}","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax = new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n \tif (this.locator) {\n \tthis.doc.documentURI = this.locator.systemId;\n \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t var el = doc.createElementNS(namespaceURI, qName||localName);\n\t var len = attrs.length;\n\t appendElement(this, el);\n\t this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t for (var i = 0 ; i < len; i++) {\n\t var namespaceURI = attrs.getURI(i);\n\t var value = attrs.getValue(i);\n\t var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t var ins = this.doc.createProcessingInstruction(target, data);\n\t this.locator && position(this.locator,ins)\n\t appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t if(this.locator = locator){// && !('lineNumber' in locator)){\n\t \tlocator.lineNumber = 0;\n\t }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t var comm = this.doc.createComment(chars);\n\t this.locator && position(this.locator,comm)\n\t appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t //used in characters() methods\n\t this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t if (impl && impl.createDocumentType) {\n\t var dt = impl.createDocumentType(name, publicId, systemId);\n\t this.locator && position(this.locator,dt)\n\t appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n if (!hander.currentElement) {\n hander.doc.appendChild(node);\n } else {\n hander.currentElement.appendChild(node);\n }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn this[index] || null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n ''+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.target = target;\n\t\tnode.nodeValue= node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('',prefixedNodeName,'>');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\",node.target,\" \",node.data,\"?>\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i', lt:'<', quot:'\"'})\n\n/**\n * A map of currently 241 entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n lt: '<',\n gt: '>',\n amp: '&',\n quot: '\"',\n apos: \"'\",\n Agrave: \"À\",\n Aacute: \"Á\",\n Acirc: \"Â\",\n Atilde: \"Ã\",\n Auml: \"Ä\",\n Aring: \"Å\",\n AElig: \"Æ\",\n Ccedil: \"Ç\",\n Egrave: \"È\",\n Eacute: \"É\",\n Ecirc: \"Ê\",\n Euml: \"Ë\",\n Igrave: \"Ì\",\n Iacute: \"Í\",\n Icirc: \"Î\",\n Iuml: \"Ï\",\n ETH: \"Ð\",\n Ntilde: \"Ñ\",\n Ograve: \"Ò\",\n Oacute: \"Ó\",\n Ocirc: \"Ô\",\n Otilde: \"Õ\",\n Ouml: \"Ö\",\n Oslash: \"Ø\",\n Ugrave: \"Ù\",\n Uacute: \"Ú\",\n Ucirc: \"Û\",\n Uuml: \"Ü\",\n Yacute: \"Ý\",\n THORN: \"Þ\",\n szlig: \"ß\",\n agrave: \"à\",\n aacute: \"á\",\n acirc: \"â\",\n atilde: \"ã\",\n auml: \"ä\",\n aring: \"å\",\n aelig: \"æ\",\n ccedil: \"ç\",\n egrave: \"è\",\n eacute: \"é\",\n ecirc: \"ê\",\n euml: \"ë\",\n igrave: \"ì\",\n iacute: \"í\",\n icirc: \"î\",\n iuml: \"ï\",\n eth: \"ð\",\n ntilde: \"ñ\",\n ograve: \"ò\",\n oacute: \"ó\",\n ocirc: \"ô\",\n otilde: \"õ\",\n ouml: \"ö\",\n oslash: \"ø\",\n ugrave: \"ù\",\n uacute: \"ú\",\n ucirc: \"û\",\n uuml: \"ü\",\n yacute: \"ý\",\n thorn: \"þ\",\n yuml: \"ÿ\",\n nbsp: \"\\u00a0\",\n iexcl: \"¡\",\n cent: \"¢\",\n pound: \"£\",\n curren: \"¤\",\n yen: \"¥\",\n brvbar: \"¦\",\n sect: \"§\",\n uml: \"¨\",\n copy: \"©\",\n ordf: \"ª\",\n laquo: \"«\",\n not: \"¬\",\n shy: \"\",\n reg: \"®\",\n macr: \"¯\",\n deg: \"°\",\n plusmn: \"±\",\n sup2: \"²\",\n sup3: \"³\",\n acute: \"´\",\n micro: \"µ\",\n para: \"¶\",\n middot: \"·\",\n cedil: \"¸\",\n sup1: \"¹\",\n ordm: \"º\",\n raquo: \"»\",\n frac14: \"¼\",\n frac12: \"½\",\n frac34: \"¾\",\n iquest: \"¿\",\n times: \"×\",\n divide: \"÷\",\n forall: \"∀\",\n part: \"∂\",\n exist: \"∃\",\n empty: \"∅\",\n nabla: \"∇\",\n isin: \"∈\",\n notin: \"∉\",\n ni: \"∋\",\n prod: \"∏\",\n sum: \"∑\",\n minus: \"−\",\n lowast: \"∗\",\n radic: \"√\",\n prop: \"∝\",\n infin: \"∞\",\n ang: \"∠\",\n and: \"∧\",\n or: \"∨\",\n cap: \"∩\",\n cup: \"∪\",\n 'int': \"∫\",\n there4: \"∴\",\n sim: \"∼\",\n cong: \"≅\",\n asymp: \"≈\",\n ne: \"≠\",\n equiv: \"≡\",\n le: \"≤\",\n ge: \"≥\",\n sub: \"⊂\",\n sup: \"⊃\",\n nsub: \"⊄\",\n sube: \"⊆\",\n supe: \"⊇\",\n oplus: \"⊕\",\n otimes: \"⊗\",\n perp: \"⊥\",\n sdot: \"⋅\",\n Alpha: \"Α\",\n Beta: \"Β\",\n Gamma: \"Γ\",\n Delta: \"Δ\",\n Epsilon: \"Ε\",\n Zeta: \"Ζ\",\n Eta: \"Η\",\n Theta: \"Θ\",\n Iota: \"Ι\",\n Kappa: \"Κ\",\n Lambda: \"Λ\",\n Mu: \"Μ\",\n Nu: \"Ν\",\n Xi: \"Ξ\",\n Omicron: \"Ο\",\n Pi: \"Π\",\n Rho: \"Ρ\",\n Sigma: \"Σ\",\n Tau: \"Τ\",\n Upsilon: \"Υ\",\n Phi: \"Φ\",\n Chi: \"Χ\",\n Psi: \"Ψ\",\n Omega: \"Ω\",\n alpha: \"α\",\n beta: \"β\",\n gamma: \"γ\",\n delta: \"δ\",\n epsilon: \"ε\",\n zeta: \"ζ\",\n eta: \"η\",\n theta: \"θ\",\n iota: \"ι\",\n kappa: \"κ\",\n lambda: \"λ\",\n mu: \"μ\",\n nu: \"ν\",\n xi: \"ξ\",\n omicron: \"ο\",\n pi: \"π\",\n rho: \"ρ\",\n sigmaf: \"ς\",\n sigma: \"σ\",\n tau: \"τ\",\n upsilon: \"υ\",\n phi: \"φ\",\n chi: \"χ\",\n psi: \"ψ\",\n omega: \"ω\",\n thetasym: \"ϑ\",\n upsih: \"ϒ\",\n piv: \"ϖ\",\n OElig: \"Œ\",\n oelig: \"œ\",\n Scaron: \"Š\",\n scaron: \"š\",\n Yuml: \"Ÿ\",\n fnof: \"ƒ\",\n circ: \"ˆ\",\n tilde: \"˜\",\n ensp: \" \",\n emsp: \" \",\n thinsp: \" \",\n zwnj: \"\",\n zwj: \"\",\n lrm: \"\",\n rlm: \"\",\n ndash: \"–\",\n mdash: \"—\",\n lsquo: \"‘\",\n rsquo: \"’\",\n sbquo: \"‚\",\n ldquo: \"“\",\n rdquo: \"”\",\n bdquo: \"„\",\n dagger: \"†\",\n Dagger: \"‡\",\n bull: \"•\",\n hellip: \"…\",\n permil: \"‰\",\n prime: \"′\",\n Prime: \"″\",\n lsaquo: \"‹\",\n rsaquo: \"›\",\n oline: \"‾\",\n euro: \"€\",\n trade: \"™\",\n larr: \"←\",\n uarr: \"↑\",\n rarr: \"→\",\n darr: \"↓\",\n harr: \"↔\",\n crarr: \"↵\",\n lceil: \"⌈\",\n rceil: \"⌉\",\n lfloor: \"⌊\",\n rfloor: \"⌋\",\n loz: \"◊\",\n spades: \"♠\",\n clubs: \"♣\",\n hearts: \"♥\",\n diams: \"♦\"\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s)){\n\t \t\ttagName = tagName.replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' maybe not complete');\n\t \t\tend = tagStart+1+tagName.length;\n\t\t\t\t}\n\t\t\t\tvar localNSMap = config.localNSMap;\n\t\t\t\tvar endMatch = config.tagName == tagName;\n\t\t\t\tvar endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()\n\t\t if(endIgnoreCaseMach){\n\t\t \tdomBuilder.endElement(config.uri,config.localName,tagName);\n\t\t\t\t\tif(localNSMap){\n\t\t\t\t\t\tfor (var prefix in localNSMap) {\n\t\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!endMatch){\n\t\t \terrorHandler.fatalError(\"end tag name: \"+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case\n\t\t\t\t\t}\n\t\t }else{\n\t\t \tparseStack.push(config)\n\t\t }\n\n\t\t\t\tend++;\n\t\t\t\tbreak;\n\t\t\t\t// end elment\n\t\t\tcase '?':// ...?>\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf(''+tagName+'>',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf(''+tagName+'>')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//';\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parsing fields [ID3v2.4.0 section 4.14.]\n\n mimeTypeEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (mimeTypeEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Mime type field (terminated with \\0)\n\n frame.mimeType = parseIso88591$1(frame.data, i, mimeTypeEndIndex);\n i = mimeTypeEndIndex + 1; // parsing 1-byte Picture Type field\n\n frame.pictureType = frame.data[i];\n i++;\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (descriptionEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Description field (terminated with \\0)\n\n frame.description = parseUtf8(frame.data, i, descriptionEndIndex);\n i = descriptionEndIndex + 1;\n if (frame.mimeType === LINK_MIME_TYPE) {\n // parsing Picture Data field as URL (always represented as ISO-8859-1 [ID3v2.4.0 section 4.])\n frame.url = parseIso88591$1(frame.data, i, frame.data.length);\n } else {\n // parsing Picture Data field as binary data\n frame.pictureData = frame.data.subarray(i, frame.data.length);\n }\n },\n 'T*': function (frame) {\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parse text field, do not include null terminator in the frame value\n // frames that allow different types of encoding contain terminated text [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, 1, frame.data.length).replace(/\\0*$/, ''); // text information frames supports multiple strings, stored as a terminator separated list [ID3v2.4.0 section 4.2.]\n\n frame.values = frame.value.split('\\0');\n },\n 'TXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the text fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // do not include the null terminator in the tag value\n // frames that allow different types of encoding contain terminated text\n // [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0*$/, '');\n frame.data = frame.value;\n },\n 'W*': function (frame) {\n // parse URL field; URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information should be ignored [ID3v2.4.0 section 4.3]\n frame.url = parseIso88591$1(frame.data, 0, frame.data.length).replace(/\\0.*$/, '');\n },\n 'WXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the description and URL fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information\n // should be ignored [ID3v2.4.0 section 4.3]\n\n frame.url = parseIso88591$1(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0.*$/, '');\n },\n 'PRIV': function (frame) {\n var i;\n for (i = 0; i < frame.data.length; i++) {\n if (frame.data[i] === 0) {\n // parse the description and URL fields\n frame.owner = parseIso88591$1(frame.data, 0, i);\n break;\n }\n }\n frame.privateData = frame.data.subarray(i + 1);\n frame.data = frame.privateData;\n }\n },\n MetadataStream;\n MetadataStream = function (options) {\n var settings = {\n // the bytes of the program-level descriptor field in MP2T\n // see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n // program element descriptors\"\n descriptor: options && options.descriptor\n },\n // the total size in bytes of the ID3 tag being parsed\n tagSize = 0,\n // tag data that is not complete enough to be parsed\n buffer = [],\n // the total number of bytes currently in the buffer\n bufferSize = 0,\n i;\n MetadataStream.prototype.init.call(this); // calculate the text track in-band metadata track dispatch type\n // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\n\n this.dispatchType = StreamTypes$3.METADATA_STREAM_TYPE.toString(16);\n if (settings.descriptor) {\n for (i = 0; i < settings.descriptor.length; i++) {\n this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);\n }\n }\n this.push = function (chunk) {\n var tag, frameStart, frameSize, frame, i, frameHeader;\n if (chunk.type !== 'timed-metadata') {\n return;\n } // if data_alignment_indicator is set in the PES header,\n // we must have the start of a new ID3 tag. Assume anything\n // remaining in the buffer was malformed and throw it out\n\n if (chunk.dataAlignmentIndicator) {\n bufferSize = 0;\n buffer.length = 0;\n } // ignore events that don't look like ID3 data\n\n if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== 'I'.charCodeAt(0) || chunk.data[1] !== 'D'.charCodeAt(0) || chunk.data[2] !== '3'.charCodeAt(0))) {\n this.trigger('log', {\n level: 'warn',\n message: 'Skipping unrecognized metadata packet'\n });\n return;\n } // add this chunk to the data we've collected so far\n\n buffer.push(chunk);\n bufferSize += chunk.data.byteLength; // grab the size of the entire frame from the ID3 header\n\n if (buffer.length === 1) {\n // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n tagSize = parseSyncSafeInteger$1(chunk.data.subarray(6, 10)); // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n\n tagSize += 10;\n } // if the entire frame has not arrived, wait for more data\n\n if (bufferSize < tagSize) {\n return;\n } // collect the entire frame so it can be parsed\n\n tag = {\n data: new Uint8Array(tagSize),\n frames: [],\n pts: buffer[0].pts,\n dts: buffer[0].dts\n };\n for (i = 0; i < tagSize;) {\n tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);\n i += buffer[0].data.byteLength;\n bufferSize -= buffer[0].data.byteLength;\n buffer.shift();\n } // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (tag.data[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger$1(tag.data.subarray(10, 14)); // clip any padding off the end\n\n tagSize -= parseSyncSafeInteger$1(tag.data.subarray(16, 20));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger$1(tag.data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n this.trigger('log', {\n level: 'warn',\n message: 'Malformed ID3 frame encountered. Skipping remaining metadata parsing.'\n }); // If the frame is malformed, don't parse any further frames but allow previous valid parsed frames\n // to be sent along.\n\n break;\n }\n frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]);\n frame = {\n id: frameHeader,\n data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id; // parse frame values\n\n if (frameParsers[frame.id]) {\n // use frame specific parser\n frameParsers[frame.id](frame);\n } else if (frame.id[0] === 'T') {\n // use text frame generic parser\n frameParsers['T*'](frame);\n } else if (frame.id[0] === 'W') {\n // use URL link frame generic parser\n frameParsers['W*'](frame);\n } // handle the special PRIV frame used to indicate the start\n // time for raw AAC data\n\n if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.data,\n size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n frame.timeStamp = size; // in raw AAC, all subsequent data will be timestamped based\n // on the value of this frame\n // we couldn't have known the appropriate pts and dts before\n // parsing this ID3 tag so set those values now\n\n if (tag.pts === undefined && tag.dts === undefined) {\n tag.pts = frame.timeStamp;\n tag.dts = frame.timeStamp;\n }\n this.trigger('timestamp', frame);\n }\n tag.frames.push(frame);\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n this.trigger('data', tag);\n };\n };\n MetadataStream.prototype = new Stream$5();\n var metadataStream = MetadataStream;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$4 = stream,\n CaptionStream$1 = captionStream,\n StreamTypes$2 = streamTypes,\n TimestampRolloverStream = timestampRolloverStream.TimestampRolloverStream; // object types\n\n var TransportPacketStream, TransportParseStream, ElementaryStream; // constants\n\n var MP2T_PACKET_LENGTH$1 = 188,\n // bytes\n SYNC_BYTE$1 = 0x47;\n /**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */\n\n TransportPacketStream = function () {\n var buffer = new Uint8Array(MP2T_PACKET_LENGTH$1),\n bytesInBuffer = 0;\n TransportPacketStream.prototype.init.call(this); // Deliver new bytes to the stream.\n\n /**\n * Split a stream of data into M2TS packets\n **/\n\n this.push = function (bytes) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH$1,\n everything; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (bytesInBuffer) {\n everything = new Uint8Array(bytes.byteLength + bytesInBuffer);\n everything.set(buffer.subarray(0, bytesInBuffer));\n everything.set(bytes, bytesInBuffer);\n bytesInBuffer = 0;\n } else {\n everything = bytes;\n } // While we have enough data for a packet\n\n while (endIndex < everything.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (everything[startIndex] === SYNC_BYTE$1 && everything[endIndex] === SYNC_BYTE$1) {\n // We found a packet so emit it and jump one whole packet forward in\n // the stream\n this.trigger('data', everything.subarray(startIndex, endIndex));\n startIndex += MP2T_PACKET_LENGTH$1;\n endIndex += MP2T_PACKET_LENGTH$1;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // If there was some data left over at the end of the segment that couldn't\n // possibly be a whole packet, keep it because it might be the start of a packet\n // that continues in the next segment\n\n if (startIndex < everything.byteLength) {\n buffer.set(everything.subarray(startIndex), 0);\n bytesInBuffer = everything.byteLength - startIndex;\n }\n };\n /**\n * Passes identified M2TS packets to the TransportParseStream to be parsed\n **/\n\n this.flush = function () {\n // If the buffer contains a whole packet when we are being flushed, emit it\n // and empty the buffer. Otherwise hold onto the data because it may be\n // important for decoding the next segment\n if (bytesInBuffer === MP2T_PACKET_LENGTH$1 && buffer[0] === SYNC_BYTE$1) {\n this.trigger('data', buffer);\n bytesInBuffer = 0;\n }\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n this.reset = function () {\n bytesInBuffer = 0;\n this.trigger('reset');\n };\n };\n TransportPacketStream.prototype = new Stream$4();\n /**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */\n\n TransportParseStream = function () {\n var parsePsi, parsePat, parsePmt, self;\n TransportParseStream.prototype.init.call(this);\n self = this;\n this.packetsWaitingForPmt = [];\n this.programMapTable = undefined;\n parsePsi = function (payload, psi) {\n var offset = 0; // PSI packets may be split into multiple sections and those\n // sections may be split into multiple packets. If a PSI\n // section starts in this packet, the payload_unit_start_indicator\n // will be true and the first byte of the payload will indicate\n // the offset from the current position to the start of the\n // section.\n\n if (psi.payloadUnitStartIndicator) {\n offset += payload[offset] + 1;\n }\n if (psi.type === 'pat') {\n parsePat(payload.subarray(offset), psi);\n } else {\n parsePmt(payload.subarray(offset), psi);\n }\n };\n parsePat = function (payload, pat) {\n pat.section_number = payload[7]; // eslint-disable-line camelcase\n\n pat.last_section_number = payload[8]; // eslint-disable-line camelcase\n // skip the PSI header and parse the first PMT entry\n\n self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];\n pat.pmtPid = self.pmtPid;\n };\n /**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */\n\n parsePmt = function (payload, pmt) {\n var sectionLength, tableEnd, programInfoLength, offset; // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(payload[5] & 0x01)) {\n return;\n } // overwrite any existing program map table\n\n self.programMapTable = {\n video: null,\n audio: null,\n 'timed-metadata': {}\n }; // the mapping table ends at the end of the current section\n\n sectionLength = (payload[1] & 0x0f) << 8 | payload[2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (payload[10] & 0x0f) << 8 | payload[11]; // advance the offset to the first entry in the mapping table\n\n offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var streamType = payload[offset];\n var pid = (payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]; // only map a single elementary_pid for audio and video stream types\n // TODO: should this be done for metadata too? for now maintain behavior of\n // multiple metadata streams\n\n if (streamType === StreamTypes$2.H264_STREAM_TYPE && self.programMapTable.video === null) {\n self.programMapTable.video = pid;\n } else if (streamType === StreamTypes$2.ADTS_STREAM_TYPE && self.programMapTable.audio === null) {\n self.programMapTable.audio = pid;\n } else if (streamType === StreamTypes$2.METADATA_STREAM_TYPE) {\n // map pid to stream type for metadata streams\n self.programMapTable['timed-metadata'][pid] = streamType;\n } // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;\n } // record the map on the packet as well\n\n pmt.programMapTable = self.programMapTable;\n };\n /**\n * Deliver a new MP2T packet to the next stream in the pipeline.\n */\n\n this.push = function (packet) {\n var result = {},\n offset = 4;\n result.payloadUnitStartIndicator = !!(packet[1] & 0x40); // pid is a 13-bit field starting at the last bit of packet[1]\n\n result.pid = packet[1] & 0x1f;\n result.pid <<= 8;\n result.pid |= packet[2]; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[offset] + 1;\n } // parse the rest of the packet based on the type\n\n if (result.pid === 0) {\n result.type = 'pat';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (result.pid === this.pmtPid) {\n result.type = 'pmt';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result); // if there are any packets waiting for a PMT to be found, process them now\n\n while (this.packetsWaitingForPmt.length) {\n this.processPes_.apply(this, this.packetsWaitingForPmt.shift());\n }\n } else if (this.programMapTable === undefined) {\n // When we have not seen a PMT yet, defer further processing of\n // PES packets until one has been parsed\n this.packetsWaitingForPmt.push([packet, offset, result]);\n } else {\n this.processPes_(packet, offset, result);\n }\n };\n this.processPes_ = function (packet, offset, result) {\n // set the appropriate stream type\n if (result.pid === this.programMapTable.video) {\n result.streamType = StreamTypes$2.H264_STREAM_TYPE;\n } else if (result.pid === this.programMapTable.audio) {\n result.streamType = StreamTypes$2.ADTS_STREAM_TYPE;\n } else {\n // if not video or audio, it is timed-metadata or unknown\n // if unknown, streamType will be undefined\n result.streamType = this.programMapTable['timed-metadata'][result.pid];\n }\n result.type = 'pes';\n result.data = packet.subarray(offset);\n this.trigger('data', result);\n };\n };\n TransportParseStream.prototype = new Stream$4();\n TransportParseStream.STREAM_TYPES = {\n h264: 0x1b,\n adts: 0x0f\n };\n /**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */\n\n ElementaryStream = function () {\n var self = this,\n segmentHadPmt = false,\n // PES packet fragments\n video = {\n data: [],\n size: 0\n },\n audio = {\n data: [],\n size: 0\n },\n timedMetadata = {\n data: [],\n size: 0\n },\n programMapTable,\n parsePes = function (payload, pes) {\n var ptsDtsFlags;\n const startPrefix = payload[0] << 16 | payload[1] << 8 | payload[2]; // default to an empty array\n\n pes.data = new Uint8Array(); // In certain live streams, the start of a TS fragment has ts packets\n // that are frame data that is continuing from the previous fragment. This\n // is to check that the pes data is the start of a new pes payload\n\n if (startPrefix !== 1) {\n return;\n } // get the packet length, this will be 0 for video\n\n pes.packetLength = 6 + (payload[4] << 8 | payload[5]); // find out if this packets starts a new keyframe\n\n pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = payload[7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = (payload[9] & 0x0E) << 27 | (payload[10] & 0xFF) << 20 | (payload[11] & 0xFE) << 12 | (payload[12] & 0xFF) << 5 | (payload[13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (payload[14] & 0x0E) << 27 | (payload[15] & 0xFF) << 20 | (payload[16] & 0xFE) << 12 | (payload[17] & 0xFF) << 5 | (payload[18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs\n }\n } // the data section starts immediately after the PES header.\n // pes_header_data_length specifies the number of header bytes\n // that follow the last byte of the field.\n\n pes.data = payload.subarray(9 + payload[8]);\n },\n /**\n * Pass completely parsed PES packets to the next stream in the pipeline\n **/\n flushStream = function (stream, type, forceFlush) {\n var packetData = new Uint8Array(stream.size),\n event = {\n type: type\n },\n i = 0,\n offset = 0,\n packetFlushable = false,\n fragment; // do nothing if there is not enough buffered data for a complete\n // PES header\n\n if (!stream.data.length || stream.size < 9) {\n return;\n }\n event.trackId = stream.data[0].pid; // reassemble the packet\n\n for (i = 0; i < stream.data.length; i++) {\n fragment = stream.data[i];\n packetData.set(fragment.data, offset);\n offset += fragment.data.byteLength;\n } // parse assembled packet's PES header\n\n parsePes(packetData, event); // non-video PES packets MUST have a non-zero PES_packet_length\n // check that there is enough stream data to fill the packet\n\n packetFlushable = type === 'video' || event.packetLength <= stream.size; // flush pending packets if the conditions are right\n\n if (forceFlush || packetFlushable) {\n stream.size = 0;\n stream.data.length = 0;\n } // only emit packets that are complete. this is to avoid assembling\n // incomplete PES packets due to poor segmentation\n\n if (packetFlushable) {\n self.trigger('data', event);\n }\n };\n ElementaryStream.prototype.init.call(this);\n /**\n * Identifies M2TS packet types and parses PES packets using metadata\n * parsed from the PMT\n **/\n\n this.push = function (data) {\n ({\n pat: function () {// we have to wait for the PMT to arrive as well before we\n // have any meaningful metadata\n },\n pes: function () {\n var stream, streamType;\n switch (data.streamType) {\n case StreamTypes$2.H264_STREAM_TYPE:\n stream = video;\n streamType = 'video';\n break;\n case StreamTypes$2.ADTS_STREAM_TYPE:\n stream = audio;\n streamType = 'audio';\n break;\n case StreamTypes$2.METADATA_STREAM_TYPE:\n stream = timedMetadata;\n streamType = 'timed-metadata';\n break;\n default:\n // ignore unknown stream types\n return;\n } // if a new packet is starting, we can flush the completed\n // packet\n\n if (data.payloadUnitStartIndicator) {\n flushStream(stream, streamType, true);\n } // buffer this fragment until we are sure we've received the\n // complete payload\n\n stream.data.push(data);\n stream.size += data.data.byteLength;\n },\n pmt: function () {\n var event = {\n type: 'metadata',\n tracks: []\n };\n programMapTable = data.programMapTable; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n segmentHadPmt = true;\n self.trigger('data', event);\n }\n })[data.type]();\n };\n this.reset = function () {\n video.size = 0;\n video.data.length = 0;\n audio.size = 0;\n audio.data.length = 0;\n this.trigger('reset');\n };\n /**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */\n\n this.flushStreams_ = function () {\n // !!THIS ORDER IS IMPORTANT!!\n // video first then audio\n flushStream(video, 'video');\n flushStream(audio, 'audio');\n flushStream(timedMetadata, 'timed-metadata');\n };\n this.flush = function () {\n // if on flush we haven't had a pmt emitted\n // and we have a pmt to emit. emit the pmt\n // so that we trigger a trackinfo downstream.\n if (!segmentHadPmt && programMapTable) {\n var pmt = {\n type: 'metadata',\n tracks: []\n }; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n self.trigger('data', pmt);\n }\n segmentHadPmt = false;\n this.flushStreams_();\n this.trigger('done');\n };\n };\n ElementaryStream.prototype = new Stream$4();\n var m2ts$1 = {\n PAT_PID: 0x0000,\n MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH$1,\n TransportPacketStream: TransportPacketStream,\n TransportParseStream: TransportParseStream,\n ElementaryStream: ElementaryStream,\n TimestampRolloverStream: TimestampRolloverStream,\n CaptionStream: CaptionStream$1.CaptionStream,\n Cea608Stream: CaptionStream$1.Cea608Stream,\n Cea708Stream: CaptionStream$1.Cea708Stream,\n MetadataStream: metadataStream\n };\n for (var type in StreamTypes$2) {\n if (StreamTypes$2.hasOwnProperty(type)) {\n m2ts$1[type] = StreamTypes$2[type];\n }\n }\n var m2ts_1 = m2ts$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$3 = stream;\n var ONE_SECOND_IN_TS$2 = clock$2.ONE_SECOND_IN_TS;\n var AdtsStream$1;\n var ADTS_SAMPLING_FREQUENCIES$1 = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n /*\n * Accepts a ElementaryStream and emits data events with parsed\n * AAC Audio Frames of the individual packets. Input audio in ADTS\n * format is unpacked and re-emitted as AAC frames.\n *\n * @see http://wiki.multimedia.cx/index.php?title=ADTS\n * @see http://wiki.multimedia.cx/?title=Understanding_AAC\n */\n\n AdtsStream$1 = function (handlePartialSegments) {\n var buffer,\n frameNum = 0;\n AdtsStream$1.prototype.init.call(this);\n this.skipWarn_ = function (start, end) {\n this.trigger('log', {\n level: 'warn',\n message: `adts skiping bytes ${start} to ${end} in frame ${frameNum} outside syncword`\n });\n };\n this.push = function (packet) {\n var i = 0,\n frameLength,\n protectionSkipBytes,\n oldBuffer,\n sampleCount,\n adtsFrameDuration;\n if (!handlePartialSegments) {\n frameNum = 0;\n }\n if (packet.type !== 'audio') {\n // ignore non-audio data\n return;\n } // Prepend any data in the buffer to the input data so that we can parse\n // aac frames the cross a PES packet boundary\n\n if (buffer && buffer.length) {\n oldBuffer = buffer;\n buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength);\n buffer.set(oldBuffer);\n buffer.set(packet.data, oldBuffer.byteLength);\n } else {\n buffer = packet.data;\n } // unpack any ADTS frames which have been fully received\n // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS\n\n var skip; // We use i + 7 here because we want to be able to parse the entire header.\n // If we don't have enough bytes to do that, then we definitely won't have a full frame.\n\n while (i + 7 < buffer.length) {\n // Look for the start of an ADTS header..\n if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) {\n if (typeof skip !== 'number') {\n skip = i;\n } // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n\n i++;\n continue;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // The protection skip bit tells us if we have 2 bytes of CRC data at the\n // end of the ADTS header\n\n protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2; // Frame length is a 13 bit integer starting 16 bits from the\n // end of the sync sequence\n // NOTE: frame length includes the size of the header\n\n frameLength = (buffer[i + 3] & 0x03) << 11 | buffer[i + 4] << 3 | (buffer[i + 5] & 0xe0) >> 5;\n sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024;\n adtsFrameDuration = sampleCount * ONE_SECOND_IN_TS$2 / ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2]; // If we don't have enough data to actually finish this ADTS frame,\n // then we have to wait for more data\n\n if (buffer.byteLength - i < frameLength) {\n break;\n } // Otherwise, deliver the complete AAC frame\n\n this.trigger('data', {\n pts: packet.pts + frameNum * adtsFrameDuration,\n dts: packet.dts + frameNum * adtsFrameDuration,\n sampleCount: sampleCount,\n audioobjecttype: (buffer[i + 2] >>> 6 & 0x03) + 1,\n channelcount: (buffer[i + 2] & 1) << 2 | (buffer[i + 3] & 0xc0) >>> 6,\n samplerate: ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2],\n samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2,\n // assume ISO/IEC 14496-12 AudioSampleEntry default of 16\n samplesize: 16,\n // data is the frame without it's header\n data: buffer.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n });\n frameNum++;\n i += frameLength;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // remove processed bytes from the buffer.\n\n buffer = buffer.subarray(i);\n };\n this.flush = function () {\n frameNum = 0;\n this.trigger('done');\n };\n this.reset = function () {\n buffer = void 0;\n this.trigger('reset');\n };\n this.endTimeline = function () {\n buffer = void 0;\n this.trigger('endedtimeline');\n };\n };\n AdtsStream$1.prototype = new Stream$3();\n var adts = AdtsStream$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var ExpGolomb$1;\n /**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */\n\n ExpGolomb$1 = function (workingData) {\n var\n // the number of bytes left to examine in workingData\n workingBytesAvailable = workingData.byteLength,\n // the current word being examined\n workingWord = 0,\n // :uint\n // the number of bits left to examine in the current word\n workingBitsAvailable = 0; // :uint;\n // ():uint\n\n this.length = function () {\n return 8 * workingBytesAvailable;\n }; // ():uint\n\n this.bitsAvailable = function () {\n return 8 * workingBytesAvailable + workingBitsAvailable;\n }; // ():void\n\n this.loadWord = function () {\n var position = workingData.byteLength - workingBytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, workingBytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(workingData.subarray(position, position + availableBytes));\n workingWord = new DataView(workingBytes.buffer).getUint32(0); // track the amount of workingData that has been processed\n\n workingBitsAvailable = availableBytes * 8;\n workingBytesAvailable -= availableBytes;\n }; // (count:int):void\n\n this.skipBits = function (count) {\n var skipBytes; // :int\n\n if (workingBitsAvailable > count) {\n workingWord <<= count;\n workingBitsAvailable -= count;\n } else {\n count -= workingBitsAvailable;\n skipBytes = Math.floor(count / 8);\n count -= skipBytes * 8;\n workingBytesAvailable -= skipBytes;\n this.loadWord();\n workingWord <<= count;\n workingBitsAvailable -= count;\n }\n }; // (size:int):uint\n\n this.readBits = function (size) {\n var bits = Math.min(workingBitsAvailable, size),\n // :uint\n valu = workingWord >>> 32 - bits; // :uint\n // if size > 31, handle error\n\n workingBitsAvailable -= bits;\n if (workingBitsAvailable > 0) {\n workingWord <<= bits;\n } else if (workingBytesAvailable > 0) {\n this.loadWord();\n }\n bits = size - bits;\n if (bits > 0) {\n return valu << bits | this.readBits(bits);\n }\n return valu;\n }; // ():uint\n\n this.skipLeadingZeros = function () {\n var leadingZeroCount; // :uint\n\n for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) {\n if ((workingWord & 0x80000000 >>> leadingZeroCount) !== 0) {\n // the first bit of working word is 1\n workingWord <<= leadingZeroCount;\n workingBitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n } // we exhausted workingWord and still have not found a 1\n\n this.loadWord();\n return leadingZeroCount + this.skipLeadingZeros();\n }; // ():void\n\n this.skipUnsignedExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():void\n\n this.skipExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():uint\n\n this.readUnsignedExpGolomb = function () {\n var clz = this.skipLeadingZeros(); // :uint\n\n return this.readBits(clz + 1) - 1;\n }; // ():int\n\n this.readExpGolomb = function () {\n var valu = this.readUnsignedExpGolomb(); // :int\n\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n }\n\n return -1 * (valu >>> 1); // divide by two then make it negative\n }; // Some convenience functions\n // :Boolean\n\n this.readBoolean = function () {\n return this.readBits(1) === 1;\n }; // ():int\n\n this.readUnsignedByte = function () {\n return this.readBits(8);\n };\n this.loadWord();\n };\n var expGolomb = ExpGolomb$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$2 = stream;\n var ExpGolomb = expGolomb;\n var H264Stream$1, NalByteStream;\n var PROFILES_WITH_OPTIONAL_SPS_DATA;\n /**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */\n\n NalByteStream = function () {\n var syncPoint = 0,\n i,\n buffer;\n NalByteStream.prototype.init.call(this);\n /*\n * Scans a byte stream and triggers a data event with the NAL units found.\n * @param {Object} data Event received from H264Stream\n * @param {Uint8Array} data.data The h264 byte stream to be scanned\n *\n * @see H264Stream.push\n */\n\n this.push = function (data) {\n var swapBuffer;\n if (!buffer) {\n buffer = data.data;\n } else {\n swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);\n swapBuffer.set(buffer);\n swapBuffer.set(data.data, buffer.byteLength);\n buffer = swapBuffer;\n }\n var len = buffer.byteLength; // Rec. ITU-T H.264, Annex B\n // scan for NAL unit boundaries\n // a match looks like this:\n // 0 0 1 .. NAL .. 0 0 1\n // ^ sync point ^ i\n // or this:\n // 0 0 1 .. NAL .. 0 0 0\n // ^ sync point ^ i\n // advance the sync point to a NAL start, if necessary\n\n for (; syncPoint < len - 3; syncPoint++) {\n if (buffer[syncPoint + 2] === 1) {\n // the sync point is properly aligned\n i = syncPoint + 5;\n break;\n }\n }\n while (i < len) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (buffer[i]) {\n case 0:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0) {\n i += 2;\n break;\n } else if (buffer[i - 2] !== 0) {\n i++;\n break;\n } // deliver the NAL unit if it isn't empty\n\n if (syncPoint + 3 !== i - 2) {\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n } // drop trailing zeroes\n\n do {\n i++;\n } while (buffer[i] !== 1 && i < len);\n syncPoint = i - 2;\n i += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0 || buffer[i - 2] !== 0) {\n i += 3;\n break;\n } // deliver the NAL unit\n\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n syncPoint = i - 2;\n i += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n i += 3;\n break;\n }\n } // filter out the NAL units that were delivered\n\n buffer = buffer.subarray(syncPoint);\n i -= syncPoint;\n syncPoint = 0;\n };\n this.reset = function () {\n buffer = null;\n syncPoint = 0;\n this.trigger('reset');\n };\n this.flush = function () {\n // deliver the last buffered NAL unit\n if (buffer && buffer.byteLength > 3) {\n this.trigger('data', buffer.subarray(syncPoint + 3));\n } // reset the stream state\n\n buffer = null;\n syncPoint = 0;\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n };\n NalByteStream.prototype = new Stream$2(); // values of profile_idc that indicate additional fields are included in the SPS\n // see Recommendation ITU-T H.264 (4/2013),\n // 7.3.2.1.1 Sequence parameter set data syntax\n\n PROFILES_WITH_OPTIONAL_SPS_DATA = {\n 100: true,\n 110: true,\n 122: true,\n 244: true,\n 44: true,\n 83: true,\n 86: true,\n 118: true,\n 128: true,\n // TODO: the three profiles below don't\n // appear to have sps data in the specificiation anymore?\n 138: true,\n 139: true,\n 134: true\n };\n /**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */\n\n H264Stream$1 = function () {\n var nalByteStream = new NalByteStream(),\n self,\n trackId,\n currentPts,\n currentDts,\n discardEmulationPreventionBytes,\n readSequenceParameterSet,\n skipScalingList;\n H264Stream$1.prototype.init.call(this);\n self = this;\n /*\n * Pushes a packet from a stream onto the NalByteStream\n *\n * @param {Object} packet - A packet received from a stream\n * @param {Uint8Array} packet.data - The raw bytes of the packet\n * @param {Number} packet.dts - Decode timestamp of the packet\n * @param {Number} packet.pts - Presentation timestamp of the packet\n * @param {Number} packet.trackId - The id of the h264 track this packet came from\n * @param {('video'|'audio')} packet.type - The type of packet\n *\n */\n\n this.push = function (packet) {\n if (packet.type !== 'video') {\n return;\n }\n trackId = packet.trackId;\n currentPts = packet.pts;\n currentDts = packet.dts;\n nalByteStream.push(packet);\n };\n /*\n * Identify NAL unit types and pass on the NALU, trackId, presentation and decode timestamps\n * for the NALUs to the next stream component.\n * Also, preprocess caption and sequence parameter NALUs.\n *\n * @param {Uint8Array} data - A NAL unit identified by `NalByteStream.push`\n * @see NalByteStream.push\n */\n\n nalByteStream.on('data', function (data) {\n var event = {\n trackId: trackId,\n pts: currentPts,\n dts: currentDts,\n data: data,\n nalUnitTypeCode: data[0] & 0x1f\n };\n switch (event.nalUnitTypeCode) {\n case 0x05:\n event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';\n break;\n case 0x06:\n event.nalUnitType = 'sei_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n break;\n case 0x07:\n event.nalUnitType = 'seq_parameter_set_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n event.config = readSequenceParameterSet(event.escapedRBSP);\n break;\n case 0x08:\n event.nalUnitType = 'pic_parameter_set_rbsp';\n break;\n case 0x09:\n event.nalUnitType = 'access_unit_delimiter_rbsp';\n break;\n } // This triggers data on the H264Stream\n\n self.trigger('data', event);\n });\n nalByteStream.on('done', function () {\n self.trigger('done');\n });\n nalByteStream.on('partialdone', function () {\n self.trigger('partialdone');\n });\n nalByteStream.on('reset', function () {\n self.trigger('reset');\n });\n nalByteStream.on('endedtimeline', function () {\n self.trigger('endedtimeline');\n });\n this.flush = function () {\n nalByteStream.flush();\n };\n this.partialFlush = function () {\n nalByteStream.partialFlush();\n };\n this.reset = function () {\n nalByteStream.reset();\n };\n this.endTimeline = function () {\n nalByteStream.endTimeline();\n };\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n\n skipScalingList = function (count, expGolombDecoder) {\n var lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = expGolombDecoder.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n };\n /**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n\n discardEmulationPreventionBytes = function (data) {\n var length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength,\n newData; // Find all `Emulation Prevention Bytes`\n\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n } // Create a new array to hold the NAL unit data\n\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n };\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n\n readSequenceParameterSet = function (data) {\n var frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n expGolombDecoder,\n profileIdc,\n levelIdc,\n profileCompatibility,\n chromaFormatIdc,\n picOrderCntType,\n numRefFramesInPicOrderCntCycle,\n picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n sarRatio = [1, 1],\n aspectRatioIdc,\n i;\n expGolombDecoder = new ExpGolomb(data);\n profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc\n\n profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag\n\n levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)\n\n expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n\n if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) {\n chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n expGolombDecoder.skipBits(1); // separate_colour_plane_flag\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8\n\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8\n\n expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, expGolombDecoder);\n } else {\n skipScalingList(64, expGolombDecoder);\n }\n }\n }\n }\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4\n\n picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n if (picOrderCntType === 0) {\n expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag\n\n expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic\n\n expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field\n\n numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames\n\n expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n\n picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag\n }\n\n expGolombDecoder.skipBits(1); // direct_8x8_inference_flag\n\n if (expGolombDecoder.readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n if (expGolombDecoder.readBoolean()) {\n // vui_parameters_present_flag\n if (expGolombDecoder.readBoolean()) {\n // aspect_ratio_info_present_flag\n aspectRatioIdc = expGolombDecoder.readUnsignedByte();\n switch (aspectRatioIdc) {\n case 1:\n sarRatio = [1, 1];\n break;\n case 2:\n sarRatio = [12, 11];\n break;\n case 3:\n sarRatio = [10, 11];\n break;\n case 4:\n sarRatio = [16, 11];\n break;\n case 5:\n sarRatio = [40, 33];\n break;\n case 6:\n sarRatio = [24, 11];\n break;\n case 7:\n sarRatio = [20, 11];\n break;\n case 8:\n sarRatio = [32, 11];\n break;\n case 9:\n sarRatio = [80, 33];\n break;\n case 10:\n sarRatio = [18, 11];\n break;\n case 11:\n sarRatio = [15, 11];\n break;\n case 12:\n sarRatio = [64, 33];\n break;\n case 13:\n sarRatio = [160, 99];\n break;\n case 14:\n sarRatio = [4, 3];\n break;\n case 15:\n sarRatio = [3, 2];\n break;\n case 16:\n sarRatio = [2, 1];\n break;\n case 255:\n {\n sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()];\n break;\n }\n }\n if (sarRatio) {\n sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n profileIdc: profileIdc,\n levelIdc: levelIdc,\n profileCompatibility: profileCompatibility,\n width: (picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2,\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2,\n // sar is sample aspect ratio\n sarRatio: sarRatio\n };\n };\n };\n H264Stream$1.prototype = new Stream$2();\n var h264 = {\n H264Stream: H264Stream$1,\n NalByteStream: NalByteStream\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */\n\n var ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n var parseId3TagSize = function (header, byteIndex) {\n var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9],\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4; // if we get a negative returnSize clamp it to 0\n\n returnSize = returnSize >= 0 ? returnSize : 0;\n if (footerPresent) {\n return returnSize + 20;\n }\n return returnSize + 10;\n };\n var getId3Offset = function (data, offset) {\n if (data.length - offset < 10 || data[offset] !== 'I'.charCodeAt(0) || data[offset + 1] !== 'D'.charCodeAt(0) || data[offset + 2] !== '3'.charCodeAt(0)) {\n return offset;\n }\n offset += parseId3TagSize(data, offset);\n return getId3Offset(data, offset);\n }; // TODO: use vhs-utils\n\n var isLikelyAacData$1 = function (data) {\n var offset = getId3Offset(data, 0);\n return data.length >= offset + 2 && (data[offset] & 0xFF) === 0xFF && (data[offset + 1] & 0xF0) === 0xF0 &&\n // verify that the 2 layer bits are 0, aka this\n // is not mp3 data but aac data.\n (data[offset + 1] & 0x16) === 0x10;\n };\n var parseSyncSafeInteger = function (data) {\n return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3];\n }; // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding\n\n var percentEncode = function (bytes, start, end) {\n var i,\n result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n }; // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n\n var parseIso88591 = function (bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n };\n\n var parseAdtsSize = function (header, byteIndex) {\n var lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n return highTwo | middle | lowThree;\n };\n var parseType$4 = function (header, byteIndex) {\n if (header[byteIndex] === 'I'.charCodeAt(0) && header[byteIndex + 1] === 'D'.charCodeAt(0) && header[byteIndex + 2] === '3'.charCodeAt(0)) {\n return 'timed-metadata';\n } else if (header[byteIndex] & 0xff === 0xff && (header[byteIndex + 1] & 0xf0) === 0xf0) {\n return 'audio';\n }\n return null;\n };\n var parseSampleRate = function (packet) {\n var i = 0;\n while (i + 5 < packet.length) {\n if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2];\n }\n return null;\n };\n var parseAacTimestamp = function (packet) {\n var frameStart, frameSize, frame, frameHeader; // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (packet[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger(packet.subarray(10, 14));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n return null;\n }\n frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]);\n if (frameHeader === 'PRIV') {\n frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10);\n for (var i = 0; i < frame.byteLength; i++) {\n if (frame[i] === 0) {\n var owner = parseIso88591(frame, 0, i);\n if (owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.subarray(i + 1);\n var size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n return size;\n }\n break;\n }\n }\n }\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < packet.byteLength);\n return null;\n };\n var utils = {\n isLikelyAacData: isLikelyAacData$1,\n parseId3TagSize: parseId3TagSize,\n parseAdtsSize: parseAdtsSize,\n parseType: parseType$4,\n parseSampleRate: parseSampleRate,\n parseAacTimestamp: parseAacTimestamp\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based aac to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$1 = stream;\n var aacUtils = utils; // Constants\n\n var AacStream$1;\n /**\n * Splits an incoming stream of binary data into ADTS and ID3 Frames.\n */\n\n AacStream$1 = function () {\n var everything = new Uint8Array(),\n timeStamp = 0;\n AacStream$1.prototype.init.call(this);\n this.setTimestamp = function (timestamp) {\n timeStamp = timestamp;\n };\n this.push = function (bytes) {\n var frameSize = 0,\n byteIndex = 0,\n bytesLeft,\n chunk,\n packet,\n tempLength; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (everything.length) {\n tempLength = everything.length;\n everything = new Uint8Array(bytes.byteLength + tempLength);\n everything.set(everything.subarray(0, tempLength));\n everything.set(bytes, tempLength);\n } else {\n everything = bytes;\n }\n while (everything.length - byteIndex >= 3) {\n if (everything[byteIndex] === 'I'.charCodeAt(0) && everything[byteIndex + 1] === 'D'.charCodeAt(0) && everything[byteIndex + 2] === '3'.charCodeAt(0)) {\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (everything.length - byteIndex < 10) {\n break;\n } // check framesize\n\n frameSize = aacUtils.parseId3TagSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n // Add to byteIndex to support multiple ID3 tags in sequence\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n chunk = {\n type: 'timed-metadata',\n data: everything.subarray(byteIndex, byteIndex + frameSize)\n };\n this.trigger('data', chunk);\n byteIndex += frameSize;\n continue;\n } else if ((everything[byteIndex] & 0xff) === 0xff && (everything[byteIndex + 1] & 0xf0) === 0xf0) {\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (everything.length - byteIndex < 7) {\n break;\n }\n frameSize = aacUtils.parseAdtsSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n packet = {\n type: 'audio',\n data: everything.subarray(byteIndex, byteIndex + frameSize),\n pts: timeStamp,\n dts: timeStamp\n };\n this.trigger('data', packet);\n byteIndex += frameSize;\n continue;\n }\n byteIndex++;\n }\n bytesLeft = everything.length - byteIndex;\n if (bytesLeft > 0) {\n everything = everything.subarray(byteIndex);\n } else {\n everything = new Uint8Array();\n }\n };\n this.reset = function () {\n everything = new Uint8Array();\n this.trigger('reset');\n };\n this.endTimeline = function () {\n everything = new Uint8Array();\n this.trigger('endedtimeline');\n };\n };\n AacStream$1.prototype = new Stream$1();\n var aac = AacStream$1;\n var AUDIO_PROPERTIES$1 = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize'];\n var audioProperties = AUDIO_PROPERTIES$1;\n var VIDEO_PROPERTIES$1 = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility', 'sarRatio'];\n var videoProperties = VIDEO_PROPERTIES$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream = stream;\n var mp4 = mp4Generator;\n var frameUtils = frameUtils$1;\n var audioFrameUtils = audioFrameUtils$1;\n var trackDecodeInfo = trackDecodeInfo$1;\n var m2ts = m2ts_1;\n var clock = clock$2;\n var AdtsStream = adts;\n var H264Stream = h264.H264Stream;\n var AacStream = aac;\n var isLikelyAacData = utils.isLikelyAacData;\n var ONE_SECOND_IN_TS$1 = clock$2.ONE_SECOND_IN_TS;\n var AUDIO_PROPERTIES = audioProperties;\n var VIDEO_PROPERTIES = videoProperties; // object types\n\n var VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;\n var retriggerForStream = function (key, event) {\n event.stream = key;\n this.trigger('log', event);\n };\n var addPipelineLogRetriggers = function (transmuxer, pipeline) {\n var keys = Object.keys(pipeline);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]; // skip non-stream keys and headOfPipeline\n // which is just a duplicate\n\n if (key === 'headOfPipeline' || !pipeline[key].on) {\n continue;\n }\n pipeline[key].on('log', retriggerForStream.bind(transmuxer, key));\n }\n };\n /**\n * Compare two arrays (even typed) for same-ness\n */\n\n var arrayEquals = function (a, b) {\n var i;\n if (a.length !== b.length) {\n return false;\n } // compare the value of each element in the array\n\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n };\n var generateSegmentTimingInfo = function (baseMediaDecodeTime, startDts, startPts, endDts, endPts, prependedContentDuration) {\n var ptsOffsetFromDts = startPts - startDts,\n decodeDuration = endDts - startDts,\n presentationDuration = endPts - startPts; // The PTS and DTS values are based on the actual stream times from the segment,\n // however, the player time values will reflect a start from the baseMediaDecodeTime.\n // In order to provide relevant values for the player times, base timing info on the\n // baseMediaDecodeTime and the DTS and PTS durations of the segment.\n\n return {\n start: {\n dts: baseMediaDecodeTime,\n pts: baseMediaDecodeTime + ptsOffsetFromDts\n },\n end: {\n dts: baseMediaDecodeTime + decodeDuration,\n pts: baseMediaDecodeTime + presentationDuration\n },\n prependedContentDuration: prependedContentDuration,\n baseMediaDecodeTime: baseMediaDecodeTime\n };\n };\n /**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n AudioSegmentStream = function (track, options) {\n var adtsFrames = [],\n sequenceNumber,\n earliestAllowedDts = 0,\n audioAppendStartTs = 0,\n videoBaseMediaDecodeTime = Infinity;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n AudioSegmentStream.prototype.init.call(this);\n this.push = function (data) {\n trackDecodeInfo.collectDtsInfo(track, data);\n if (track) {\n AUDIO_PROPERTIES.forEach(function (prop) {\n track[prop] = data[prop];\n });\n } // buffer audio data until end() is called\n\n adtsFrames.push(data);\n };\n this.setEarliestDts = function (earliestDts) {\n earliestAllowedDts = earliestDts;\n };\n this.setVideoBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n videoBaseMediaDecodeTime = baseMediaDecodeTime;\n };\n this.setAudioAppendStart = function (timestamp) {\n audioAppendStartTs = timestamp;\n };\n this.flush = function () {\n var frames, moof, mdat, boxes, frameDuration, segmentDuration, videoClockCyclesOfSilencePrefixed; // return early if no audio data has been observed\n\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n frames = audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames, track, earliestAllowedDts);\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps); // amount of audio filled but the value is in video clock rather than audio clock\n\n videoClockCyclesOfSilencePrefixed = audioFrameUtils.prefixWithSilence(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime); // we have to build the index from byte locations to\n // samples (that is, adts frames) in the audio data\n\n track.samples = audioFrameUtils.generateSampleTable(frames); // concatenate the audio data to constuct the mdat\n\n mdat = mp4.mdat(audioFrameUtils.concatenateFrameData(frames));\n adtsFrames = [];\n moof = mp4.moof(sequenceNumber, [track]);\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n trackDecodeInfo.clearDtsInfo(track);\n frameDuration = Math.ceil(ONE_SECOND_IN_TS$1 * 1024 / track.samplerate); // TODO this check was added to maintain backwards compatibility (particularly with\n // tests) on adding the timingInfo event. However, it seems unlikely that there's a\n // valid use-case where an init segment/data should be triggered without associated\n // frames. Leaving for now, but should be looked into.\n\n if (frames.length) {\n segmentDuration = frames.length * frameDuration;\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(\n // The audio track's baseMediaDecodeTime is in audio clock cycles, but the\n // frame info is in video clock cycles. Convert to match expectation of\n // listeners (that all timestamps will be based on video clock cycles).\n clock.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate),\n // frame times are already in video clock, as is segment duration\n frames[0].dts, frames[0].pts, frames[0].dts + segmentDuration, frames[0].pts + segmentDuration, videoClockCyclesOfSilencePrefixed || 0));\n this.trigger('timingInfo', {\n start: frames[0].pts,\n end: frames[0].pts + segmentDuration\n });\n }\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.trigger('done', 'AudioSegmentStream');\n };\n this.reset = function () {\n trackDecodeInfo.clearDtsInfo(track);\n adtsFrames = [];\n this.trigger('reset');\n };\n };\n AudioSegmentStream.prototype = new Stream();\n /**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.alignGopsAtEnd {boolean} If true, start from the end of the\n * gopsToAlignWith list when attempting to align gop pts\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n VideoSegmentStream = function (track, options) {\n var sequenceNumber,\n nalUnits = [],\n gopsToAlignWith = [],\n config,\n pps;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n VideoSegmentStream.prototype.init.call(this);\n delete track.minPTS;\n this.gopCache_ = [];\n /**\n * Constructs a ISO BMFF segment given H264 nalUnits\n * @param {Object} nalUnit A data event representing a nalUnit\n * @param {String} nalUnit.nalUnitType\n * @param {Object} nalUnit.config Properties for a mp4 track\n * @param {Uint8Array} nalUnit.data The nalUnit bytes\n * @see lib/codecs/h264.js\n **/\n\n this.push = function (nalUnit) {\n trackDecodeInfo.collectDtsInfo(track, nalUnit); // record the track config\n\n if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' && !config) {\n config = nalUnit.config;\n track.sps = [nalUnit.data];\n VIDEO_PROPERTIES.forEach(function (prop) {\n track[prop] = config[prop];\n }, this);\n }\n if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' && !pps) {\n pps = nalUnit.data;\n track.pps = [nalUnit.data];\n } // buffer video until flush() is called\n\n nalUnits.push(nalUnit);\n };\n /**\n * Pass constructed ISO BMFF track and boxes on to the\n * next stream in the pipeline\n **/\n\n this.flush = function () {\n var frames,\n gopForFusion,\n gops,\n moof,\n mdat,\n boxes,\n prependedContentDuration = 0,\n firstGop,\n lastGop; // Throw away nalUnits at the start of the byte stream until\n // we find the first AUD\n\n while (nalUnits.length) {\n if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {\n break;\n }\n nalUnits.shift();\n } // Return early if no video data has been observed\n\n if (nalUnits.length === 0) {\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Organize the raw nal-units into arrays that represent\n // higher-level constructs such as frames and gops\n // (group-of-pictures)\n\n frames = frameUtils.groupNalsIntoFrames(nalUnits);\n gops = frameUtils.groupFramesIntoGops(frames); // If the first frame of this fragment is not a keyframe we have\n // a problem since MSE (on Chrome) requires a leading keyframe.\n //\n // We have two approaches to repairing this situation:\n // 1) GOP-FUSION:\n // This is where we keep track of the GOPS (group-of-pictures)\n // from previous fragments and attempt to find one that we can\n // prepend to the current fragment in order to create a valid\n // fragment.\n // 2) KEYFRAME-PULLING:\n // Here we search for the first keyframe in the fragment and\n // throw away all the frames between the start of the fragment\n // and that keyframe. We then extend the duration and pull the\n // PTS of the keyframe forward so that it covers the time range\n // of the frames that were disposed of.\n //\n // #1 is far prefereable over #2 which can cause \"stuttering\" but\n // requires more things to be just right.\n\n if (!gops[0][0].keyFrame) {\n // Search for a gop for fusion from our gopCache\n gopForFusion = this.getGopForFusion_(nalUnits[0], track);\n if (gopForFusion) {\n // in order to provide more accurate timing information about the segment, save\n // the number of seconds prepended to the original segment due to GOP fusion\n prependedContentDuration = gopForFusion.duration;\n gops.unshift(gopForFusion); // Adjust Gops' metadata to account for the inclusion of the\n // new gop at the beginning\n\n gops.byteLength += gopForFusion.byteLength;\n gops.nalCount += gopForFusion.nalCount;\n gops.pts = gopForFusion.pts;\n gops.dts = gopForFusion.dts;\n gops.duration += gopForFusion.duration;\n } else {\n // If we didn't find a candidate gop fall back to keyframe-pulling\n gops = frameUtils.extendFirstKeyFrame(gops);\n }\n } // Trim gops to align with gopsToAlignWith\n\n if (gopsToAlignWith.length) {\n var alignedGops;\n if (options.alignGopsAtEnd) {\n alignedGops = this.alignGopsAtEnd_(gops);\n } else {\n alignedGops = this.alignGopsAtStart_(gops);\n }\n if (!alignedGops) {\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = []; // return early no gops can be aligned with desired gopsToAlignWith\n\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Some gops were trimmed. clear dts info so minSegmentDts and pts are correct\n // when recalculated before sending off to CoalesceStream\n\n trackDecodeInfo.clearDtsInfo(track);\n gops = alignedGops;\n }\n trackDecodeInfo.collectDtsInfo(track, gops); // First, we have to build the index from byte locations to\n // samples (that is, frames) in the video data\n\n track.samples = frameUtils.generateSampleTable(gops); // Concatenate the video data and construct the mdat\n\n mdat = mp4.mdat(frameUtils.concatenateNalData(gops));\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps);\n this.trigger('processedGopsInfo', gops.map(function (gop) {\n return {\n pts: gop.pts,\n dts: gop.dts,\n byteLength: gop.byteLength\n };\n }));\n firstGop = gops[0];\n lastGop = gops[gops.length - 1];\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(track.baseMediaDecodeTime, firstGop.dts, firstGop.pts, lastGop.dts + lastGop.duration, lastGop.pts + lastGop.duration, prependedContentDuration));\n this.trigger('timingInfo', {\n start: gops[0].pts,\n end: gops[gops.length - 1].pts + gops[gops.length - 1].duration\n }); // save all the nals in the last GOP into the gop cache\n\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = [];\n this.trigger('baseMediaDecodeTime', track.baseMediaDecodeTime);\n this.trigger('timelineStartInfo', track.timelineStartInfo);\n moof = mp4.moof(sequenceNumber, [track]); // it would be great to allocate this array up front instead of\n // throwing away hundreds of media segment fragments\n\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // Bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.resetStream_(); // Continue with the flush process now\n\n this.trigger('done', 'VideoSegmentStream');\n };\n this.reset = function () {\n this.resetStream_();\n nalUnits = [];\n this.gopCache_.length = 0;\n gopsToAlignWith.length = 0;\n this.trigger('reset');\n };\n this.resetStream_ = function () {\n trackDecodeInfo.clearDtsInfo(track); // reset config and pps because they may differ across segments\n // for instance, when we are rendition switching\n\n config = undefined;\n pps = undefined;\n }; // Search for a candidate Gop for gop-fusion from the gop cache and\n // return it or return null if no good candidate was found\n\n this.getGopForFusion_ = function (nalUnit) {\n var halfSecond = 45000,\n // Half-a-second in a 90khz clock\n allowableOverlap = 10000,\n // About 3 frames @ 30fps\n nearestDistance = Infinity,\n dtsDistance,\n nearestGopObj,\n currentGop,\n currentGopObj,\n i; // Search for the GOP nearest to the beginning of this nal unit\n\n for (i = 0; i < this.gopCache_.length; i++) {\n currentGopObj = this.gopCache_[i];\n currentGop = currentGopObj.gop; // Reject Gops with different SPS or PPS\n\n if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {\n continue;\n } // Reject Gops that would require a negative baseMediaDecodeTime\n\n if (currentGop.dts < track.timelineStartInfo.dts) {\n continue;\n } // The distance between the end of the gop and the start of the nalUnit\n\n dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; // Only consider GOPS that start before the nal unit and end within\n // a half-second of the nal unit\n\n if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) {\n // Always use the closest GOP we found if there is more than\n // one candidate\n if (!nearestGopObj || nearestDistance > dtsDistance) {\n nearestGopObj = currentGopObj;\n nearestDistance = dtsDistance;\n }\n }\n }\n if (nearestGopObj) {\n return nearestGopObj.gop;\n }\n return null;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the START of the list\n\n this.alignGopsAtStart_ = function (gops) {\n var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration, alignedGops;\n byteLength = gops.byteLength;\n nalCount = gops.nalCount;\n duration = gops.duration;\n alignIndex = gopIndex = 0;\n while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n break;\n }\n if (gop.pts > align.pts) {\n // this current gop starts after the current gop we want to align on, so increment\n // align index\n alignIndex++;\n continue;\n } // current gop starts before the current gop we want to align on. so increment gop\n // index\n\n gopIndex++;\n byteLength -= gop.byteLength;\n nalCount -= gop.nalCount;\n duration -= gop.duration;\n }\n if (gopIndex === 0) {\n // no gops to trim\n return gops;\n }\n if (gopIndex === gops.length) {\n // all gops trimmed, skip appending all gops\n return null;\n }\n alignedGops = gops.slice(gopIndex);\n alignedGops.byteLength = byteLength;\n alignedGops.duration = duration;\n alignedGops.nalCount = nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the END of the list\n\n this.alignGopsAtEnd_ = function (gops) {\n var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound;\n alignIndex = gopsToAlignWith.length - 1;\n gopIndex = gops.length - 1;\n alignEndIndex = null;\n matchFound = false;\n while (alignIndex >= 0 && gopIndex >= 0) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n matchFound = true;\n break;\n }\n if (align.pts > gop.pts) {\n alignIndex--;\n continue;\n }\n if (alignIndex === gopsToAlignWith.length - 1) {\n // gop.pts is greater than the last alignment candidate. If no match is found\n // by the end of this loop, we still want to append gops that come after this\n // point\n alignEndIndex = gopIndex;\n }\n gopIndex--;\n }\n if (!matchFound && alignEndIndex === null) {\n return null;\n }\n var trimIndex;\n if (matchFound) {\n trimIndex = gopIndex;\n } else {\n trimIndex = alignEndIndex;\n }\n if (trimIndex === 0) {\n return gops;\n }\n var alignedGops = gops.slice(trimIndex);\n var metadata = alignedGops.reduce(function (total, gop) {\n total.byteLength += gop.byteLength;\n total.duration += gop.duration;\n total.nalCount += gop.nalCount;\n return total;\n }, {\n byteLength: 0,\n duration: 0,\n nalCount: 0\n });\n alignedGops.byteLength = metadata.byteLength;\n alignedGops.duration = metadata.duration;\n alignedGops.nalCount = metadata.nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n };\n this.alignGopsWith = function (newGopsToAlignWith) {\n gopsToAlignWith = newGopsToAlignWith;\n };\n };\n VideoSegmentStream.prototype = new Stream();\n /**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at media timeline start.\n */\n\n CoalesceStream = function (options, metadataStream) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = metadataStream;\n options = options || {};\n if (typeof options.remux !== 'undefined') {\n this.remuxTracks = !!options.remux;\n } else {\n this.remuxTracks = true;\n }\n if (typeof options.keepOriginalTimestamps === 'boolean') {\n this.keepOriginalTimestamps = options.keepOriginalTimestamps;\n } else {\n this.keepOriginalTimestamps = false;\n }\n this.pendingTracks = [];\n this.videoTrack = null;\n this.pendingBoxes = [];\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingBytes = 0;\n this.emittedTracks = 0;\n CoalesceStream.prototype.init.call(this); // Take output from multiple\n\n this.push = function (output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.text) {\n return this.pendingCaptions.push(output);\n } // buffer incoming id3 tags until the final flush\n\n if (output.frames) {\n return this.pendingMetadata.push(output);\n } // Add this track to the list of pending tracks and store\n // important information required for the construction of\n // the final segment\n\n this.pendingTracks.push(output.track);\n this.pendingBytes += output.boxes.byteLength; // TODO: is there an issue for this against chrome?\n // We unshift audio and push video because\n // as of Chrome 75 when switching from\n // one init segment to another if the video\n // mdat does not appear after the audio mdat\n // only audio will play for the duration of our transmux.\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n this.pendingBoxes.push(output.boxes);\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n this.pendingBoxes.unshift(output.boxes);\n }\n };\n };\n CoalesceStream.prototype = new Stream();\n CoalesceStream.prototype.flush = function (flushSource) {\n var offset = 0,\n event = {\n captions: [],\n captionStreams: {},\n metadata: [],\n info: {}\n },\n caption,\n id3,\n initSegment,\n timelineStartPts = 0,\n i;\n if (this.pendingTracks.length < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' && flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.remuxTracks) {\n // Return until we have enough tracks from the pipeline to remux (if we\n // are remuxing audio and video into a single MP4)\n return;\n } else if (this.pendingTracks.length === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.emittedTracks++;\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n return;\n }\n }\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n VIDEO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.videoTrack[prop];\n }, this);\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n AUDIO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.audioTrack[prop];\n }, this);\n }\n if (this.videoTrack || this.audioTrack) {\n if (this.pendingTracks.length === 1) {\n event.type = this.pendingTracks[0].type;\n } else {\n event.type = 'combined';\n }\n this.emittedTracks += this.pendingTracks.length;\n initSegment = mp4.initSegment(this.pendingTracks); // Create a new typed array to hold the init segment\n\n event.initSegment = new Uint8Array(initSegment.byteLength); // Create an init segment containing a moov\n // and track definitions\n\n event.initSegment.set(initSegment); // Create a new typed array to hold the moof+mdats\n\n event.data = new Uint8Array(this.pendingBytes); // Append each moof+mdat (one per track) together\n\n for (i = 0; i < this.pendingBoxes.length; i++) {\n event.data.set(this.pendingBoxes[i], offset);\n offset += this.pendingBoxes[i].byteLength;\n } // Translate caption PTS times into second offsets to match the\n // video timeline for the segment, and add track info\n\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = clock.metadataTsToSeconds(caption.startPts, timelineStartPts, this.keepOriginalTimestamps);\n caption.endTime = clock.metadataTsToSeconds(caption.endPts, timelineStartPts, this.keepOriginalTimestamps);\n event.captionStreams[caption.stream] = true;\n event.captions.push(caption);\n } // Translate ID3 frame PTS times into second offsets to match the\n // video timeline for the segment\n\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = clock.metadataTsToSeconds(id3.pts, timelineStartPts, this.keepOriginalTimestamps);\n event.metadata.push(id3);\n } // We add this to every single emitted segment even though we only need\n // it for the first\n\n event.metadata.dispatchType = this.metadataStream.dispatchType; // Reset stream state\n\n this.pendingTracks.length = 0;\n this.videoTrack = null;\n this.pendingBoxes.length = 0;\n this.pendingCaptions.length = 0;\n this.pendingBytes = 0;\n this.pendingMetadata.length = 0; // Emit the built segment\n // We include captions and ID3 tags for backwards compatibility,\n // ideally we should send only video and audio in the data event\n\n this.trigger('data', event); // Emit each caption to the outside world\n // Ideally, this would happen immediately on parsing captions,\n // but we need to ensure that video data is sent back first\n // so that caption timing can be adjusted to match video timing\n\n for (i = 0; i < event.captions.length; i++) {\n caption = event.captions[i];\n this.trigger('caption', caption);\n } // Emit each id3 tag to the outside world\n // Ideally, this would happen immediately on parsing the tag,\n // but we need to ensure that video data is sent back first\n // so that ID3 frame timing can be adjusted to match video timing\n\n for (i = 0; i < event.metadata.length; i++) {\n id3 = event.metadata[i];\n this.trigger('id3Frame', id3);\n }\n } // Only emit `done` if all tracks have been flushed and emitted\n\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n };\n CoalesceStream.prototype.setRemux = function (val) {\n this.remuxTracks = val;\n };\n /**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */\n\n Transmuxer = function (options) {\n var self = this,\n hasFlushed = true,\n videoTrack,\n audioTrack;\n Transmuxer.prototype.init.call(this);\n options = options || {};\n this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;\n this.transmuxPipeline_ = {};\n this.setupAacPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'aac';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.aacStream = new AacStream();\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.aacStream;\n pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream);\n pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream);\n pipeline.metadataStream.on('timestamp', function (frame) {\n pipeline.aacStream.setTimestamp(frame.timeStamp);\n });\n pipeline.aacStream.on('data', function (data) {\n if (data.type !== 'timed-metadata' && data.type !== 'audio' || pipeline.audioSegmentStream) {\n return;\n }\n audioTrack = audioTrack || {\n timelineStartInfo: {\n baseMediaDecodeTime: self.baseMediaDecodeTime\n },\n codec: 'adts',\n type: 'audio'\n }; // hook up the audio segment stream to the first track with aac data\n\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n };\n this.setupTsPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'ts';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.packetStream = new m2ts.TransportPacketStream();\n pipeline.parseStream = new m2ts.TransportParseStream();\n pipeline.elementaryStream = new m2ts.ElementaryStream();\n pipeline.timestampRolloverStream = new m2ts.TimestampRolloverStream();\n pipeline.adtsStream = new AdtsStream();\n pipeline.h264Stream = new H264Stream();\n pipeline.captionStream = new m2ts.CaptionStream(options);\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.packetStream; // disassemble MPEG2-TS packets into elementary streams\n\n pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream); // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n\n pipeline.timestampRolloverStream.pipe(pipeline.h264Stream);\n pipeline.timestampRolloverStream.pipe(pipeline.adtsStream);\n pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); // Hook up CEA-608/708 caption stream\n\n pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream);\n pipeline.elementaryStream.on('data', function (data) {\n var i;\n if (data.type === 'metadata') {\n i = data.tracks.length; // scan the tracks listed in the metadata\n\n while (i--) {\n if (!videoTrack && data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n } else if (!audioTrack && data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n }\n } // hook up the video segment stream to the first track with h264 data\n\n if (videoTrack && !pipeline.videoSegmentStream) {\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack, options);\n pipeline.videoSegmentStream.on('log', self.getLogTrigger_('videoSegmentStream'));\n pipeline.videoSegmentStream.on('timelineStartInfo', function (timelineStartInfo) {\n // When video emits timelineStartInfo data after a flush, we forward that\n // info to the AudioSegmentStream, if it exists, because video timeline\n // data takes precedence. Do not do this if keepOriginalTimestamps is set,\n // because this is a particularly subtle form of timestamp alteration.\n if (audioTrack && !options.keepOriginalTimestamps) {\n audioTrack.timelineStartInfo = timelineStartInfo; // On the first segment we trim AAC frames that exist before the\n // very earliest DTS we have seen in video because Chrome will\n // interpret any video track with a baseMediaDecodeTime that is\n // non-zero as a gap.\n\n pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts - self.baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('processedGopsInfo', self.trigger.bind(self, 'gopInfo'));\n pipeline.videoSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'videoSegmentTimingInfo'));\n pipeline.videoSegmentStream.on('baseMediaDecodeTime', function (baseMediaDecodeTime) {\n if (audioTrack) {\n pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('timingInfo', self.trigger.bind(self, 'videoTimingInfo')); // Set up the final part of the video pipeline\n\n pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream);\n }\n if (audioTrack && !pipeline.audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo'));\n pipeline.audioSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'audioSegmentTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream);\n } // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n pipeline.coalesceStream.on('id3Frame', function (id3Frame) {\n id3Frame.dispatchType = pipeline.metadataStream.dispatchType;\n self.trigger('id3Frame', id3Frame);\n });\n pipeline.coalesceStream.on('caption', this.trigger.bind(this, 'caption')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n }; // hook up the segment streams once track metadata is delivered\n\n this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n var pipeline = this.transmuxPipeline_;\n if (!options.keepOriginalTimestamps) {\n this.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n if (audioTrack) {\n audioTrack.timelineStartInfo.dts = undefined;\n audioTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(audioTrack);\n if (pipeline.audioTimestampRolloverStream) {\n pipeline.audioTimestampRolloverStream.discontinuity();\n }\n }\n if (videoTrack) {\n if (pipeline.videoSegmentStream) {\n pipeline.videoSegmentStream.gopCache_ = [];\n }\n videoTrack.timelineStartInfo.dts = undefined;\n videoTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(videoTrack);\n pipeline.captionStream.reset();\n }\n if (pipeline.timestampRolloverStream) {\n pipeline.timestampRolloverStream.discontinuity();\n }\n };\n this.setAudioAppendStart = function (timestamp) {\n if (audioTrack) {\n this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp);\n }\n };\n this.setRemux = function (val) {\n var pipeline = this.transmuxPipeline_;\n options.remux = val;\n if (pipeline && pipeline.coalesceStream) {\n pipeline.coalesceStream.setRemux(val);\n }\n };\n this.alignGopsWith = function (gopsToAlignWith) {\n if (videoTrack && this.transmuxPipeline_.videoSegmentStream) {\n this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith);\n }\n };\n this.getLogTrigger_ = function (key) {\n var self = this;\n return function (event) {\n event.stream = key;\n self.trigger('log', event);\n };\n }; // feed incoming data to the front of the parsing pipeline\n\n this.push = function (data) {\n if (hasFlushed) {\n var isAac = isLikelyAacData(data);\n if (isAac && this.transmuxPipeline_.type !== 'aac') {\n this.setupAacPipeline();\n } else if (!isAac && this.transmuxPipeline_.type !== 'ts') {\n this.setupTsPipeline();\n }\n hasFlushed = false;\n }\n this.transmuxPipeline_.headOfPipeline.push(data);\n }; // flush any buffered data\n\n this.flush = function () {\n hasFlushed = true; // Start at the top of the pipeline and flush all pending work\n\n this.transmuxPipeline_.headOfPipeline.flush();\n };\n this.endTimeline = function () {\n this.transmuxPipeline_.headOfPipeline.endTimeline();\n };\n this.reset = function () {\n if (this.transmuxPipeline_.headOfPipeline) {\n this.transmuxPipeline_.headOfPipeline.reset();\n }\n }; // Caption data has to be reset when seeking outside buffered range\n\n this.resetCaptions = function () {\n if (this.transmuxPipeline_.captionStream) {\n this.transmuxPipeline_.captionStream.reset();\n }\n };\n };\n Transmuxer.prototype = new Stream();\n var transmuxer = {\n Transmuxer: Transmuxer,\n VideoSegmentStream: VideoSegmentStream,\n AudioSegmentStream: AudioSegmentStream,\n AUDIO_PROPERTIES: AUDIO_PROPERTIES,\n VIDEO_PROPERTIES: VIDEO_PROPERTIES,\n // exported for testing\n generateSegmentTimingInfo: generateSegmentTimingInfo\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var toUnsigned$3 = function (value) {\n return value >>> 0;\n };\n var toHexString$1 = function (value) {\n return ('00' + value.toString(16)).slice(-2);\n };\n var bin = {\n toUnsigned: toUnsigned$3,\n toHexString: toHexString$1\n };\n var parseType$3 = function (buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n };\n var parseType_1 = parseType$3;\n var toUnsigned$2 = bin.toUnsigned;\n var parseType$2 = parseType_1;\n var findBox$2 = function (data, path) {\n var results = [],\n i,\n size,\n type,\n end,\n subresults;\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n for (i = 0; i < data.byteLength;) {\n size = toUnsigned$2(data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3]);\n type = parseType$2(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength;\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, end));\n } else {\n // recursively search for the next box along the path\n subresults = findBox$2(data.subarray(i + 8, end), path.slice(1));\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n i = end;\n } // we've finished searching all of data\n\n return results;\n };\n var findBox_1 = findBox$2;\n var toUnsigned$1 = bin.toUnsigned;\n var getUint64$1 = numbers.getUint64;\n var tfdt = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4))\n };\n if (result.version === 1) {\n result.baseMediaDecodeTime = getUint64$1(data.subarray(4));\n } else {\n result.baseMediaDecodeTime = toUnsigned$1(data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]);\n }\n return result;\n };\n var parseTfdt$2 = tfdt;\n var parseSampleFlags$1 = function (flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: flags[2] << 8 | flags[3]\n };\n };\n var parseSampleFlags_1 = parseSampleFlags$1;\n var parseSampleFlags = parseSampleFlags_1;\n var trun = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n // Flag interpretation\n dataOffsetPresent = result.flags[2] & 0x01,\n // compare with 2nd byte of 0x1\n firstSampleFlagsPresent = result.flags[2] & 0x04,\n // compare with 2nd byte of 0x4\n sampleDurationPresent = result.flags[1] & 0x01,\n // compare with 2nd byte of 0x100\n sampleSizePresent = result.flags[1] & 0x02,\n // compare with 2nd byte of 0x200\n sampleFlagsPresent = result.flags[1] & 0x04,\n // compare with 2nd byte of 0x400\n sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,\n // compare with 2nd byte of 0x800\n sampleCount = view.getUint32(4),\n offset = 8,\n sample;\n if (dataOffsetPresent) {\n // 32 bit signed integer\n result.dataOffset = view.getInt32(offset);\n offset += 4;\n } // Overrides the flags for the first sample only. The order of\n // optional values will be: duration, size, compositionTimeOffset\n\n if (firstSampleFlagsPresent && sampleCount) {\n sample = {\n flags: parseSampleFlags(data.subarray(offset, offset + 4))\n };\n offset += 4;\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n sampleCount--;\n }\n while (sampleCount--) {\n sample = {};\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleFlagsPresent) {\n sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n }\n return result;\n };\n var parseTrun$2 = trun;\n var tfhd = function (data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4)\n },\n baseDataOffsetPresent = result.flags[2] & 0x01,\n sampleDescriptionIndexPresent = result.flags[2] & 0x02,\n defaultSampleDurationPresent = result.flags[2] & 0x08,\n defaultSampleSizePresent = result.flags[2] & 0x10,\n defaultSampleFlagsPresent = result.flags[2] & 0x20,\n durationIsEmpty = result.flags[0] & 0x010000,\n defaultBaseIsMoof = result.flags[0] & 0x020000,\n i;\n i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n // FIXME: should we read the full 64 bits?\n\n result.baseDataOffset = view.getUint32(12);\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n result.sampleDescriptionIndex = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n result.defaultSampleDuration = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleSizePresent) {\n result.defaultSampleSize = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n result.defaultSampleFlags = view.getUint32(i);\n }\n if (durationIsEmpty) {\n result.durationIsEmpty = true;\n }\n if (!baseDataOffsetPresent && defaultBaseIsMoof) {\n result.baseDataOffsetIsMoof = true;\n }\n return result;\n };\n var parseTfhd$2 = tfhd;\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band CEA-708 captions out of FMP4 segments.\n * @see https://en.wikipedia.org/wiki/CEA-708\n */\n\n var discardEmulationPreventionBytes = captionPacketParser.discardEmulationPreventionBytes;\n var CaptionStream = captionStream.CaptionStream;\n var findBox$1 = findBox_1;\n var parseTfdt$1 = parseTfdt$2;\n var parseTrun$1 = parseTrun$2;\n var parseTfhd$1 = parseTfhd$2;\n var window$2 = window_1;\n /**\n * Maps an offset in the mdat to a sample based on the the size of the samples.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Number} offset - The offset into the mdat\n * @param {Object[]} samples - An array of samples, parsed using `parseSamples`\n * @return {?Object} The matching sample, or null if no match was found.\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var mapToSample = function (offset, samples) {\n var approximateOffset = offset;\n for (var i = 0; i < samples.length; i++) {\n var sample = samples[i];\n if (approximateOffset < sample.size) {\n return sample;\n }\n approximateOffset -= sample.size;\n }\n return null;\n };\n /**\n * Finds SEI nal units contained in a Media Data Box.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Uint8Array} avcStream - The bytes of the mdat\n * @param {Object[]} samples - The samples parsed out by `parseSamples`\n * @param {Number} trackId - The trackId of this video track\n * @return {Object[]} seiNals - the parsed SEI NALUs found.\n * The contents of the seiNal should match what is expected by\n * CaptionStream.push (nalUnitType, size, data, escapedRBSP, pts, dts)\n *\n * @see ISO-BMFF-12/2015, Section 8.1.1\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n **/\n\n var findSeiNals = function (avcStream, samples, trackId) {\n var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = {\n logs: [],\n seiNals: []\n },\n seiNal,\n i,\n length,\n lastMatchedSample;\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4; // Bail if this doesn't appear to be an H264 stream\n\n if (length <= 0) {\n continue;\n }\n switch (avcStream[i] & 0x1F) {\n case 0x06:\n var data = avcStream.subarray(i + 1, i + 1 + length);\n var matchingSample = mapToSample(i, samples);\n seiNal = {\n nalUnitType: 'sei_rbsp',\n size: length,\n data: data,\n escapedRBSP: discardEmulationPreventionBytes(data),\n trackId: trackId\n };\n if (matchingSample) {\n seiNal.pts = matchingSample.pts;\n seiNal.dts = matchingSample.dts;\n lastMatchedSample = matchingSample;\n } else if (lastMatchedSample) {\n // If a matching sample cannot be found, use the last\n // sample's values as they should be as close as possible\n seiNal.pts = lastMatchedSample.pts;\n seiNal.dts = lastMatchedSample.dts;\n } else {\n result.logs.push({\n level: 'warn',\n message: 'We\\'ve encountered a nal unit without data at ' + i + ' for trackId ' + trackId + '. See mux.js#223.'\n });\n break;\n }\n result.seiNals.push(seiNal);\n break;\n }\n }\n return result;\n };\n /**\n * Parses sample information out of Track Run Boxes and calculates\n * the absolute presentation and decode timestamps of each sample.\n *\n * @param {Array} truns - The Trun Run boxes to be parsed\n * @param {Number|BigInt} baseMediaDecodeTime - base media decode time from tfdt\n @see ISO-BMFF-12/2015, Section 8.8.12\n * @param {Object} tfhd - The parsed Track Fragment Header\n * @see inspect.parseTfhd\n * @return {Object[]} the parsed samples\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var parseSamples = function (truns, baseMediaDecodeTime, tfhd) {\n var currentDts = baseMediaDecodeTime;\n var defaultSampleDuration = tfhd.defaultSampleDuration || 0;\n var defaultSampleSize = tfhd.defaultSampleSize || 0;\n var trackId = tfhd.trackId;\n var allSamples = [];\n truns.forEach(function (trun) {\n // Note: We currently do not parse the sample table as well\n // as the trun. It's possible some sources will require this.\n // moov > trak > mdia > minf > stbl\n var trackRun = parseTrun$1(trun);\n var samples = trackRun.samples;\n samples.forEach(function (sample) {\n if (sample.duration === undefined) {\n sample.duration = defaultSampleDuration;\n }\n if (sample.size === undefined) {\n sample.size = defaultSampleSize;\n }\n sample.trackId = trackId;\n sample.dts = currentDts;\n if (sample.compositionTimeOffset === undefined) {\n sample.compositionTimeOffset = 0;\n }\n if (typeof currentDts === 'bigint') {\n sample.pts = currentDts + window$2.BigInt(sample.compositionTimeOffset);\n currentDts += window$2.BigInt(sample.duration);\n } else {\n sample.pts = currentDts + sample.compositionTimeOffset;\n currentDts += sample.duration;\n }\n });\n allSamples = allSamples.concat(samples);\n });\n return allSamples;\n };\n /**\n * Parses out caption nals from an FMP4 segment's video tracks.\n *\n * @param {Uint8Array} segment - The bytes of a single segment\n * @param {Number} videoTrackId - The trackId of a video track in the segment\n * @return {Object.} A mapping of video trackId to\n * a list of seiNals found in that track\n **/\n\n var parseCaptionNals = function (segment, videoTrackId) {\n // To get the samples\n var trafs = findBox$1(segment, ['moof', 'traf']); // To get SEI NAL units\n\n var mdats = findBox$1(segment, ['mdat']);\n var captionNals = {};\n var mdatTrafPairs = []; // Pair up each traf with a mdat as moofs and mdats are in pairs\n\n mdats.forEach(function (mdat, index) {\n var matchingTraf = trafs[index];\n mdatTrafPairs.push({\n mdat: mdat,\n traf: matchingTraf\n });\n });\n mdatTrafPairs.forEach(function (pair) {\n var mdat = pair.mdat;\n var traf = pair.traf;\n var tfhd = findBox$1(traf, ['tfhd']); // Exactly 1 tfhd per traf\n\n var headerInfo = parseTfhd$1(tfhd[0]);\n var trackId = headerInfo.trackId;\n var tfdt = findBox$1(traf, ['tfdt']); // Either 0 or 1 tfdt per traf\n\n var baseMediaDecodeTime = tfdt.length > 0 ? parseTfdt$1(tfdt[0]).baseMediaDecodeTime : 0;\n var truns = findBox$1(traf, ['trun']);\n var samples;\n var result; // Only parse video data for the chosen video track\n\n if (videoTrackId === trackId && truns.length > 0) {\n samples = parseSamples(truns, baseMediaDecodeTime, headerInfo);\n result = findSeiNals(mdat, samples, trackId);\n if (!captionNals[trackId]) {\n captionNals[trackId] = {\n seiNals: [],\n logs: []\n };\n }\n captionNals[trackId].seiNals = captionNals[trackId].seiNals.concat(result.seiNals);\n captionNals[trackId].logs = captionNals[trackId].logs.concat(result.logs);\n }\n });\n return captionNals;\n };\n /**\n * Parses out inband captions from an MP4 container and returns\n * caption objects that can be used by WebVTT and the TextTrack API.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VTTCue\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack\n * Assumes that `probe.getVideoTrackIds` and `probe.timescale` have been called first\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number} trackId - The id of the video track to parse\n * @param {Number} timescale - The timescale for the video track from the init segment\n *\n * @return {?Object[]} parsedCaptions - A list of captions or null if no video tracks\n * @return {Number} parsedCaptions[].startTime - The time to show the caption in seconds\n * @return {Number} parsedCaptions[].endTime - The time to stop showing the caption in seconds\n * @return {String} parsedCaptions[].text - The visible content of the caption\n **/\n\n var parseEmbeddedCaptions = function (segment, trackId, timescale) {\n var captionNals; // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n\n if (trackId === null) {\n return null;\n }\n captionNals = parseCaptionNals(segment, trackId);\n var trackNals = captionNals[trackId] || {};\n return {\n seiNals: trackNals.seiNals,\n logs: trackNals.logs,\n timescale: timescale\n };\n };\n /**\n * Converts SEI NALUs into captions that can be used by video.js\n **/\n\n var CaptionParser = function () {\n var isInitialized = false;\n var captionStream; // Stores segments seen before trackId and timescale are set\n\n var segmentCache; // Stores video track ID of the track being parsed\n\n var trackId; // Stores the timescale of the track being parsed\n\n var timescale; // Stores captions parsed so far\n\n var parsedCaptions; // Stores whether we are receiving partial data or not\n\n var parsingPartial;\n /**\n * A method to indicate whether a CaptionParser has been initalized\n * @returns {Boolean}\n **/\n\n this.isInitialized = function () {\n return isInitialized;\n };\n /**\n * Initializes the underlying CaptionStream, SEI NAL parsing\n * and management, and caption collection\n **/\n\n this.init = function (options) {\n captionStream = new CaptionStream();\n isInitialized = true;\n parsingPartial = options ? options.isPartial : false; // Collect dispatched captions\n\n captionStream.on('data', function (event) {\n // Convert to seconds in the source's timescale\n event.startTime = event.startPts / timescale;\n event.endTime = event.endPts / timescale;\n parsedCaptions.captions.push(event);\n parsedCaptions.captionStreams[event.stream] = true;\n });\n captionStream.on('log', function (log) {\n parsedCaptions.logs.push(log);\n });\n };\n /**\n * Determines if a new video track will be selected\n * or if the timescale changed\n * @return {Boolean}\n **/\n\n this.isNewInit = function (videoTrackIds, timescales) {\n if (videoTrackIds && videoTrackIds.length === 0 || timescales && typeof timescales === 'object' && Object.keys(timescales).length === 0) {\n return false;\n }\n return trackId !== videoTrackIds[0] || timescale !== timescales[trackId];\n };\n /**\n * Parses out SEI captions and interacts with underlying\n * CaptionStream to return dispatched captions\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number[]} videoTrackIds - A list of video tracks found in the init segment\n * @param {Object.} timescales - The timescales found in the init segment\n * @see parseEmbeddedCaptions\n * @see m2ts/caption-stream.js\n **/\n\n this.parse = function (segment, videoTrackIds, timescales) {\n var parsedData;\n if (!this.isInitialized()) {\n return null; // This is not likely to be a video segment\n } else if (!videoTrackIds || !timescales) {\n return null;\n } else if (this.isNewInit(videoTrackIds, timescales)) {\n // Use the first video track only as there is no\n // mechanism to switch to other video tracks\n trackId = videoTrackIds[0];\n timescale = timescales[trackId]; // If an init segment has not been seen yet, hold onto segment\n // data until we have one.\n // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n } else if (trackId === null || !timescale) {\n segmentCache.push(segment);\n return null;\n } // Now that a timescale and trackId is set, parse cached segments\n\n while (segmentCache.length > 0) {\n var cachedSegment = segmentCache.shift();\n this.parse(cachedSegment, videoTrackIds, timescales);\n }\n parsedData = parseEmbeddedCaptions(segment, trackId, timescale);\n if (parsedData && parsedData.logs) {\n parsedCaptions.logs = parsedCaptions.logs.concat(parsedData.logs);\n }\n if (parsedData === null || !parsedData.seiNals) {\n if (parsedCaptions.logs.length) {\n return {\n logs: parsedCaptions.logs,\n captions: [],\n captionStreams: []\n };\n }\n return null;\n }\n this.pushNals(parsedData.seiNals); // Force the parsed captions to be dispatched\n\n this.flushStream();\n return parsedCaptions;\n };\n /**\n * Pushes SEI NALUs onto CaptionStream\n * @param {Object[]} nals - A list of SEI nals parsed using `parseCaptionNals`\n * Assumes that `parseCaptionNals` has been called first\n * @see m2ts/caption-stream.js\n **/\n\n this.pushNals = function (nals) {\n if (!this.isInitialized() || !nals || nals.length === 0) {\n return null;\n }\n nals.forEach(function (nal) {\n captionStream.push(nal);\n });\n };\n /**\n * Flushes underlying CaptionStream to dispatch processed, displayable captions\n * @see m2ts/caption-stream.js\n **/\n\n this.flushStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n if (!parsingPartial) {\n captionStream.flush();\n } else {\n captionStream.partialFlush();\n }\n };\n /**\n * Reset caption buckets for new data\n **/\n\n this.clearParsedCaptions = function () {\n parsedCaptions.captions = [];\n parsedCaptions.captionStreams = {};\n parsedCaptions.logs = [];\n };\n /**\n * Resets underlying CaptionStream\n * @see m2ts/caption-stream.js\n **/\n\n this.resetCaptionStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n captionStream.reset();\n };\n /**\n * Convenience method to clear all captions flushed from the\n * CaptionStream and still being parsed\n * @see m2ts/caption-stream.js\n **/\n\n this.clearAllCaptions = function () {\n this.clearParsedCaptions();\n this.resetCaptionStream();\n };\n /**\n * Reset caption parser\n **/\n\n this.reset = function () {\n segmentCache = [];\n trackId = null;\n timescale = null;\n if (!parsedCaptions) {\n parsedCaptions = {\n captions: [],\n // CC1, CC2, CC3, CC4\n captionStreams: {},\n logs: []\n };\n } else {\n this.clearParsedCaptions();\n }\n this.resetCaptionStream();\n };\n this.reset();\n };\n var captionParser = CaptionParser;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about MP4s.\n */\n\n var toUnsigned = bin.toUnsigned;\n var toHexString = bin.toHexString;\n var findBox = findBox_1;\n var parseType$1 = parseType_1;\n var parseTfhd = parseTfhd$2;\n var parseTrun = parseTrun$2;\n var parseTfdt = parseTfdt$2;\n var getUint64 = numbers.getUint64;\n var timescale, startTime, compositionStartTime, getVideoTrackIds, getTracks, getTimescaleFromMediaHeader;\n var window$1 = window_1;\n /**\n * Parses an MP4 initialization segment and extracts the timescale\n * values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track ids to timescale values or null if\n * the init segment is malformed.\n */\n\n timescale = function (init) {\n var result = {},\n traks = findBox(init, ['moov', 'trak']); // mdhd timescale\n\n return traks.reduce(function (result, trak) {\n var tkhd, version, index, id, mdhd;\n tkhd = findBox(trak, ['tkhd'])[0];\n if (!tkhd) {\n return null;\n }\n version = tkhd[0];\n index = version === 0 ? 12 : 20;\n id = toUnsigned(tkhd[index] << 24 | tkhd[index + 1] << 16 | tkhd[index + 2] << 8 | tkhd[index + 3]);\n mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (!mdhd) {\n return null;\n }\n version = mdhd[0];\n index = version === 0 ? 12 : 20;\n result[id] = toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n return result;\n }, result);\n };\n /**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\n\n startTime = function (timescale, fragment) {\n var trafs; // we need info from two childrend of each track fragment box\n\n trafs = findBox(fragment, ['moof', 'traf']); // determine the start times for each track\n\n var lowestTime = trafs.reduce(function (acc, traf) {\n var tfhd = findBox(traf, ['tfhd'])[0]; // get the track id from the tfhd\n\n var id = toUnsigned(tfhd[4] << 24 | tfhd[5] << 16 | tfhd[6] << 8 | tfhd[7]); // assume a 90kHz clock if no timescale was specified\n\n var scale = timescale[id] || 90e3; // get the base media decode time from the tfdt\n\n var tfdt = findBox(traf, ['tfdt'])[0];\n var dv = new DataView(tfdt.buffer, tfdt.byteOffset, tfdt.byteLength);\n var baseTime; // version 1 is 64 bit\n\n if (tfdt[0] === 1) {\n baseTime = getUint64(tfdt.subarray(4, 12));\n } else {\n baseTime = dv.getUint32(4);\n } // convert base time to seconds if it is a valid number.\n\n let seconds;\n if (typeof baseTime === 'bigint') {\n seconds = baseTime / window$1.BigInt(scale);\n } else if (typeof baseTime === 'number' && !isNaN(baseTime)) {\n seconds = baseTime / scale;\n }\n if (seconds < Number.MAX_SAFE_INTEGER) {\n seconds = Number(seconds);\n }\n if (seconds < acc) {\n acc = seconds;\n }\n return acc;\n }, Infinity);\n return typeof lowestTime === 'bigint' || isFinite(lowestTime) ? lowestTime : 0;\n };\n /**\n * Determine the composition start, in seconds, for an MP4\n * fragment.\n *\n * The composition start time of a fragment can be calculated using the base\n * media decode time, composition time offset, and timescale, as follows:\n *\n * compositionStartTime = (baseMediaDecodeTime + compositionTimeOffset) / timescale\n *\n * All of the aforementioned information is contained within a media fragment's\n * `traf` box, except for timescale info, which comes from the initialization\n * segment, so a track id (also contained within a `traf`) is also necessary to\n * associate it with a timescale\n *\n *\n * @param timescales {object} - a hash of track ids to timescale values.\n * @param fragment {Unit8Array} - the bytes of a media segment\n * @return {number} the composition start time for the fragment, in seconds\n **/\n\n compositionStartTime = function (timescales, fragment) {\n var trafBoxes = findBox(fragment, ['moof', 'traf']);\n var baseMediaDecodeTime = 0;\n var compositionTimeOffset = 0;\n var trackId;\n if (trafBoxes && trafBoxes.length) {\n // The spec states that track run samples contained within a `traf` box are contiguous, but\n // it does not explicitly state whether the `traf` boxes themselves are contiguous.\n // We will assume that they are, so we only need the first to calculate start time.\n var tfhd = findBox(trafBoxes[0], ['tfhd'])[0];\n var trun = findBox(trafBoxes[0], ['trun'])[0];\n var tfdt = findBox(trafBoxes[0], ['tfdt'])[0];\n if (tfhd) {\n var parsedTfhd = parseTfhd(tfhd);\n trackId = parsedTfhd.trackId;\n }\n if (tfdt) {\n var parsedTfdt = parseTfdt(tfdt);\n baseMediaDecodeTime = parsedTfdt.baseMediaDecodeTime;\n }\n if (trun) {\n var parsedTrun = parseTrun(trun);\n if (parsedTrun.samples && parsedTrun.samples.length) {\n compositionTimeOffset = parsedTrun.samples[0].compositionTimeOffset || 0;\n }\n }\n } // Get timescale for this specific track. Assume a 90kHz clock if no timescale was\n // specified.\n\n var timescale = timescales[trackId] || 90e3; // return the composition start time, in seconds\n\n if (typeof baseMediaDecodeTime === 'bigint') {\n compositionTimeOffset = window$1.BigInt(compositionTimeOffset);\n timescale = window$1.BigInt(timescale);\n }\n var result = (baseMediaDecodeTime + compositionTimeOffset) / timescale;\n if (typeof result === 'bigint' && result < Number.MAX_SAFE_INTEGER) {\n result = Number(result);\n }\n return result;\n };\n /**\n * Find the trackIds of the video tracks in this source.\n * Found by parsing the Handler Reference and Track Header Boxes:\n * moov > trak > mdia > hdlr\n * moov > trak > tkhd\n *\n * @param {Uint8Array} init - The bytes of the init segment for this source\n * @return {Number[]} A list of trackIds\n *\n * @see ISO-BMFF-12/2015, Section 8.4.3\n **/\n\n getVideoTrackIds = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var videoTrackIds = [];\n traks.forEach(function (trak) {\n var hdlrs = findBox(trak, ['mdia', 'hdlr']);\n var tkhds = findBox(trak, ['tkhd']);\n hdlrs.forEach(function (hdlr, index) {\n var handlerType = parseType$1(hdlr.subarray(8, 12));\n var tkhd = tkhds[index];\n var view;\n var version;\n var trackId;\n if (handlerType === 'vide') {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n version = view.getUint8(0);\n trackId = version === 0 ? view.getUint32(12) : view.getUint32(20);\n videoTrackIds.push(trackId);\n }\n });\n });\n return videoTrackIds;\n };\n getTimescaleFromMediaHeader = function (mdhd) {\n // mdhd is a FullBox, meaning it will have its own version as the first byte\n var version = mdhd[0];\n var index = version === 0 ? 12 : 20;\n return toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n };\n /**\n * Get all the video, audio, and hint tracks from a non fragmented\n * mp4 segment\n */\n\n getTracks = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {};\n var tkhd = findBox(trak, ['tkhd'])[0];\n var view, tkhdVersion; // id\n\n if (tkhd) {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n tkhdVersion = view.getUint8(0);\n track.id = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n var hdlr = findBox(trak, ['mdia', 'hdlr'])[0]; // type\n\n if (hdlr) {\n var type = parseType$1(hdlr.subarray(8, 12));\n if (type === 'vide') {\n track.type = 'video';\n } else if (type === 'soun') {\n track.type = 'audio';\n } else {\n track.type = type;\n }\n } // codec\n\n var stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n if (stsd) {\n var sampleDescriptions = stsd.subarray(8); // gives the codec type string\n\n track.codec = parseType$1(sampleDescriptions.subarray(4, 8));\n var codecBox = findBox(sampleDescriptions, [track.codec])[0];\n var codecConfig, codecConfigType;\n if (codecBox) {\n // https://tools.ietf.org/html/rfc6381#section-3.3\n if (/^[asm]vc[1-9]$/i.test(track.codec)) {\n // we don't need anything but the \"config\" parameter of the\n // avc1 codecBox\n codecConfig = codecBox.subarray(78);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'avcC' && codecConfig.length > 11) {\n track.codec += '.'; // left padded with zeroes for single digit hex\n // profile idc\n\n track.codec += toHexString(codecConfig[9]); // the byte containing the constraint_set flags\n\n track.codec += toHexString(codecConfig[10]); // level idc\n\n track.codec += toHexString(codecConfig[11]);\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'avc1.4d400d';\n }\n } else if (/^mp4[a,v]$/i.test(track.codec)) {\n // we do not need anything but the streamDescriptor of the mp4a codecBox\n codecConfig = codecBox.subarray(28);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'esds' && codecConfig.length > 20 && codecConfig[19] !== 0) {\n track.codec += '.' + toHexString(codecConfig[19]); // this value is only a single digit\n\n track.codec += '.' + toHexString(codecConfig[20] >>> 2 & 0x3f).replace(/^0/, '');\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'mp4a.40.2';\n }\n } else {\n // flac, opus, etc\n track.codec = track.codec.toLowerCase();\n }\n }\n }\n var mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n track.timescale = getTimescaleFromMediaHeader(mdhd);\n }\n tracks.push(track);\n });\n return tracks;\n };\n var probe$2 = {\n // export mp4 inspector's findBox and parseType for backwards compatibility\n findBox: findBox,\n parseType: parseType$1,\n timescale: timescale,\n startTime: startTime,\n compositionStartTime: compositionStartTime,\n videoTrackIds: getVideoTrackIds,\n tracks: getTracks,\n getTimescaleFromMediaHeader: getTimescaleFromMediaHeader\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about TS Segments.\n */\n\n var StreamTypes$1 = streamTypes;\n var parsePid = function (packet) {\n var pid = packet[1] & 0x1f;\n pid <<= 8;\n pid |= packet[2];\n return pid;\n };\n var parsePayloadUnitStartIndicator = function (packet) {\n return !!(packet[1] & 0x40);\n };\n var parseAdaptionField = function (packet) {\n var offset = 0; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[4] + 1;\n }\n return offset;\n };\n var parseType = function (packet, pmtPid) {\n var pid = parsePid(packet);\n if (pid === 0) {\n return 'pat';\n } else if (pid === pmtPid) {\n return 'pmt';\n } else if (pmtPid) {\n return 'pes';\n }\n return null;\n };\n var parsePat = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n var offset = 4 + parseAdaptionField(packet);\n if (pusi) {\n offset += packet[offset] + 1;\n }\n return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11];\n };\n var parsePmt = function (packet) {\n var programMapTable = {};\n var pusi = parsePayloadUnitStartIndicator(packet);\n var payloadOffset = 4 + parseAdaptionField(packet);\n if (pusi) {\n payloadOffset += packet[payloadOffset] + 1;\n } // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(packet[payloadOffset + 5] & 0x01)) {\n return;\n }\n var sectionLength, tableEnd, programInfoLength; // the mapping table ends at the end of the current section\n\n sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11]; // advance the offset to the first entry in the mapping table\n\n var offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var i = payloadOffset + offset; // add an entry that maps the elementary_pid to the stream_type\n\n programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i]; // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5;\n }\n return programMapTable;\n };\n var parsePesType = function (packet, programMapTable) {\n var pid = parsePid(packet);\n var type = programMapTable[pid];\n switch (type) {\n case StreamTypes$1.H264_STREAM_TYPE:\n return 'video';\n case StreamTypes$1.ADTS_STREAM_TYPE:\n return 'audio';\n case StreamTypes$1.METADATA_STREAM_TYPE:\n return 'timed-metadata';\n default:\n return null;\n }\n };\n var parsePesTime = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n if (!pusi) {\n return null;\n }\n var offset = 4 + parseAdaptionField(packet);\n if (offset >= packet.byteLength) {\n // From the H 222.0 MPEG-TS spec\n // \"For transport stream packets carrying PES packets, stuffing is needed when there\n // is insufficient PES packet data to completely fill the transport stream packet\n // payload bytes. Stuffing is accomplished by defining an adaptation field longer than\n // the sum of the lengths of the data elements in it, so that the payload bytes\n // remaining after the adaptation field exactly accommodates the available PES packet\n // data.\"\n //\n // If the offset is >= the length of the packet, then the packet contains no data\n // and instead is just adaption field stuffing bytes\n return null;\n }\n var pes = null;\n var ptsDtsFlags; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = packet[offset + 7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n pes = {}; // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n\n pes.pts = (packet[offset + 9] & 0x0E) << 27 | (packet[offset + 10] & 0xFF) << 20 | (packet[offset + 11] & 0xFE) << 12 | (packet[offset + 12] & 0xFF) << 5 | (packet[offset + 13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (packet[offset + 14] & 0x0E) << 27 | (packet[offset + 15] & 0xFF) << 20 | (packet[offset + 16] & 0xFE) << 12 | (packet[offset + 17] & 0xFF) << 5 | (packet[offset + 18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n\n return pes;\n };\n var parseNalUnitType = function (type) {\n switch (type) {\n case 0x05:\n return 'slice_layer_without_partitioning_rbsp_idr';\n case 0x06:\n return 'sei_rbsp';\n case 0x07:\n return 'seq_parameter_set_rbsp';\n case 0x08:\n return 'pic_parameter_set_rbsp';\n case 0x09:\n return 'access_unit_delimiter_rbsp';\n default:\n return null;\n }\n };\n var videoPacketContainsKeyFrame = function (packet) {\n var offset = 4 + parseAdaptionField(packet);\n var frameBuffer = packet.subarray(offset);\n var frameI = 0;\n var frameSyncPoint = 0;\n var foundKeyFrame = false;\n var nalType; // advance the sync point to a NAL start, if necessary\n\n for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) {\n if (frameBuffer[frameSyncPoint + 2] === 1) {\n // the sync point is properly aligned\n frameI = frameSyncPoint + 5;\n break;\n }\n }\n while (frameI < frameBuffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (frameBuffer[frameI]) {\n case 0:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0) {\n frameI += 2;\n break;\n } else if (frameBuffer[frameI - 2] !== 0) {\n frameI++;\n break;\n }\n if (frameSyncPoint + 3 !== frameI - 2) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n } // drop trailing zeroes\n\n do {\n frameI++;\n } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length);\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) {\n frameI += 3;\n break;\n }\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n frameI += 3;\n break;\n }\n }\n frameBuffer = frameBuffer.subarray(frameSyncPoint);\n frameI -= frameSyncPoint;\n frameSyncPoint = 0; // parse the final nal\n\n if (frameBuffer && frameBuffer.byteLength > 3) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n return foundKeyFrame;\n };\n var probe$1 = {\n parseType: parseType,\n parsePat: parsePat,\n parsePmt: parsePmt,\n parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator,\n parsePesType: parsePesType,\n parsePesTime: parsePesTime,\n videoPacketContainsKeyFrame: videoPacketContainsKeyFrame\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Parse mpeg2 transport stream packets to extract basic timing information\n */\n\n var StreamTypes = streamTypes;\n var handleRollover = timestampRolloverStream.handleRollover;\n var probe = {};\n probe.ts = probe$1;\n probe.aac = utils;\n var ONE_SECOND_IN_TS = clock$2.ONE_SECOND_IN_TS;\n var MP2T_PACKET_LENGTH = 188,\n // bytes\n SYNC_BYTE = 0x47;\n /**\n * walks through segment data looking for pat and pmt packets to parse out\n * program map table information\n */\n\n var parsePsi_ = function (bytes, pmt) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type;\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pat':\n pmt.pid = probe.ts.parsePat(packet);\n break;\n case 'pmt':\n var table = probe.ts.parsePmt(packet);\n pmt.table = pmt.table || {};\n Object.keys(table).forEach(function (key) {\n pmt.table[key] = table[key];\n });\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last audio pes packets\n */\n\n var parseAudioPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed;\n var endLoop = false; // Start walking from start of segment to get first audio packet\n\n while (endIndex <= bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last audio packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last video pes packets as well as timing information for the first\n * key frame.\n */\n\n var parseVideoPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed,\n frame,\n i,\n pes;\n var endLoop = false;\n var currentFrame = {\n data: [],\n size: 0\n }; // Start walking from start of segment to get first video packet\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video') {\n if (pusi && !endLoop) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n if (!result.firstKeyFrame) {\n if (pusi) {\n if (currentFrame.size !== 0) {\n frame = new Uint8Array(currentFrame.size);\n i = 0;\n while (currentFrame.data.length) {\n pes = currentFrame.data.shift();\n frame.set(pes, i);\n i += pes.byteLength;\n }\n if (probe.ts.videoPacketContainsKeyFrame(frame)) {\n var firstKeyFrame = probe.ts.parsePesTime(frame); // PTS/DTS may not be available. Simply *not* setting\n // the keyframe seems to work fine with HLS playback\n // and definitely preferable to a crash with TypeError...\n\n if (firstKeyFrame) {\n result.firstKeyFrame = firstKeyFrame;\n result.firstKeyFrame.type = 'video';\n } else {\n // eslint-disable-next-line\n console.warn('Failed to extract PTS/DTS from PES at first keyframe. ' + 'This could be an unusual TS segment, or else mux.js did not ' + 'parse your TS segment correctly. If you know your TS ' + 'segments do contain PTS/DTS on keyframes please file a bug ' + 'report! You can try ffprobe to double check for yourself.');\n }\n }\n currentFrame.size = 0;\n }\n }\n currentFrame.data.push(packet);\n currentFrame.size += packet.byteLength;\n }\n }\n break;\n }\n if (endLoop && result.firstKeyFrame) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last video packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * Adjusts the timestamp information for the segment to account for\n * rollover and convert to seconds based on pes packet timescale (90khz clock)\n */\n\n var adjustTimestamp_ = function (segmentInfo, baseTimestamp) {\n if (segmentInfo.audio && segmentInfo.audio.length) {\n var audioBaseTimestamp = baseTimestamp;\n if (typeof audioBaseTimestamp === 'undefined' || isNaN(audioBaseTimestamp)) {\n audioBaseTimestamp = segmentInfo.audio[0].dts;\n }\n segmentInfo.audio.forEach(function (info) {\n info.dts = handleRollover(info.dts, audioBaseTimestamp);\n info.pts = handleRollover(info.pts, audioBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n }\n if (segmentInfo.video && segmentInfo.video.length) {\n var videoBaseTimestamp = baseTimestamp;\n if (typeof videoBaseTimestamp === 'undefined' || isNaN(videoBaseTimestamp)) {\n videoBaseTimestamp = segmentInfo.video[0].dts;\n }\n segmentInfo.video.forEach(function (info) {\n info.dts = handleRollover(info.dts, videoBaseTimestamp);\n info.pts = handleRollover(info.pts, videoBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n if (segmentInfo.firstKeyFrame) {\n var frame = segmentInfo.firstKeyFrame;\n frame.dts = handleRollover(frame.dts, videoBaseTimestamp);\n frame.pts = handleRollover(frame.pts, videoBaseTimestamp); // time in seconds\n\n frame.dtsTime = frame.dts / ONE_SECOND_IN_TS;\n frame.ptsTime = frame.pts / ONE_SECOND_IN_TS;\n }\n }\n };\n /**\n * inspects the aac data stream for start and end time information\n */\n\n var inspectAac_ = function (bytes) {\n var endLoop = false,\n audioCount = 0,\n sampleRate = null,\n timestamp = null,\n frameSize = 0,\n byteIndex = 0,\n packet;\n while (bytes.length - byteIndex >= 3) {\n var type = probe.aac.parseType(bytes, byteIndex);\n switch (type) {\n case 'timed-metadata':\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (bytes.length - byteIndex < 10) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (timestamp === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n timestamp = probe.aac.parseAacTimestamp(packet);\n }\n byteIndex += frameSize;\n break;\n case 'audio':\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (bytes.length - byteIndex < 7) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (sampleRate === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n sampleRate = probe.aac.parseSampleRate(packet);\n }\n audioCount++;\n byteIndex += frameSize;\n break;\n default:\n byteIndex++;\n break;\n }\n if (endLoop) {\n return null;\n }\n }\n if (sampleRate === null || timestamp === null) {\n return null;\n }\n var audioTimescale = ONE_SECOND_IN_TS / sampleRate;\n var result = {\n audio: [{\n type: 'audio',\n dts: timestamp,\n pts: timestamp\n }, {\n type: 'audio',\n dts: timestamp + audioCount * 1024 * audioTimescale,\n pts: timestamp + audioCount * 1024 * audioTimescale\n }]\n };\n return result;\n };\n /**\n * inspects the transport stream segment data for start and end time information\n * of the audio and video tracks (when present) as well as the first key frame's\n * start time.\n */\n\n var inspectTs_ = function (bytes) {\n var pmt = {\n pid: null,\n table: null\n };\n var result = {};\n parsePsi_(bytes, pmt);\n for (var pid in pmt.table) {\n if (pmt.table.hasOwnProperty(pid)) {\n var type = pmt.table[pid];\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n result.video = [];\n parseVideoPes_(bytes, pmt, result);\n if (result.video.length === 0) {\n delete result.video;\n }\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n result.audio = [];\n parseAudioPes_(bytes, pmt, result);\n if (result.audio.length === 0) {\n delete result.audio;\n }\n break;\n }\n }\n }\n return result;\n };\n /**\n * Inspects segment byte data and returns an object with start and end timing information\n *\n * @param {Uint8Array} bytes The segment byte data\n * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame\n * timestamps for rollover. This value must be in 90khz clock.\n * @return {Object} Object containing start and end frame timing info of segment.\n */\n\n var inspect = function (bytes, baseTimestamp) {\n var isAacData = probe.aac.isLikelyAacData(bytes);\n var result;\n if (isAacData) {\n result = inspectAac_(bytes);\n } else {\n result = inspectTs_(bytes);\n }\n if (!result || !result.audio && !result.video) {\n return null;\n }\n adjustTimestamp_(result, baseTimestamp);\n return result;\n };\n var tsInspector = {\n inspect: inspect,\n parseAudioPes_: parseAudioPes_\n };\n /* global self */\n\n /**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\n\n const wireTransmuxerEvents = function (self, transmuxer) {\n transmuxer.on('data', function (segment) {\n // transfer ownership of the underlying ArrayBuffer\n // instead of doing a copy to save memory\n // ArrayBuffers are transferable but generic TypedArrays are not\n // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\n const initArray = segment.initSegment;\n segment.initSegment = {\n data: initArray.buffer,\n byteOffset: initArray.byteOffset,\n byteLength: initArray.byteLength\n };\n const typedArray = segment.data;\n segment.data = typedArray.buffer;\n self.postMessage({\n action: 'data',\n segment,\n byteOffset: typedArray.byteOffset,\n byteLength: typedArray.byteLength\n }, [segment.data]);\n });\n transmuxer.on('done', function (data) {\n self.postMessage({\n action: 'done'\n });\n });\n transmuxer.on('gopInfo', function (gopInfo) {\n self.postMessage({\n action: 'gopInfo',\n gopInfo\n });\n });\n transmuxer.on('videoSegmentTimingInfo', function (timingInfo) {\n const videoSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n videoSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'videoSegmentTimingInfo',\n videoSegmentTimingInfo\n });\n });\n transmuxer.on('audioSegmentTimingInfo', function (timingInfo) {\n // Note that all times for [audio/video]SegmentTimingInfo events are in video clock\n const audioSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n audioSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'audioSegmentTimingInfo',\n audioSegmentTimingInfo\n });\n });\n transmuxer.on('id3Frame', function (id3Frame) {\n self.postMessage({\n action: 'id3Frame',\n id3Frame\n });\n });\n transmuxer.on('caption', function (caption) {\n self.postMessage({\n action: 'caption',\n caption\n });\n });\n transmuxer.on('trackinfo', function (trackInfo) {\n self.postMessage({\n action: 'trackinfo',\n trackInfo\n });\n });\n transmuxer.on('audioTimingInfo', function (audioTimingInfo) {\n // convert to video TS since we prioritize video time over audio\n self.postMessage({\n action: 'audioTimingInfo',\n audioTimingInfo: {\n start: clock$2.videoTsToSeconds(audioTimingInfo.start),\n end: clock$2.videoTsToSeconds(audioTimingInfo.end)\n }\n });\n });\n transmuxer.on('videoTimingInfo', function (videoTimingInfo) {\n self.postMessage({\n action: 'videoTimingInfo',\n videoTimingInfo: {\n start: clock$2.videoTsToSeconds(videoTimingInfo.start),\n end: clock$2.videoTsToSeconds(videoTimingInfo.end)\n }\n });\n });\n transmuxer.on('log', function (log) {\n self.postMessage({\n action: 'log',\n log\n });\n });\n };\n /**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\n class MessageHandlers {\n constructor(self, options) {\n this.options = options || {};\n this.self = self;\n this.init();\n }\n /**\n * initialize our web worker and wire all the events.\n */\n\n init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new transmuxer.Transmuxer(this.options);\n wireTransmuxerEvents(this.self, this.transmuxer);\n }\n pushMp4Captions(data) {\n if (!this.captionParser) {\n this.captionParser = new captionParser();\n this.captionParser.init();\n }\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n const parsed = this.captionParser.parse(segment, data.trackIds, data.timescales);\n this.self.postMessage({\n action: 'mp4Captions',\n captions: parsed && parsed.captions || [],\n logs: parsed && parsed.logs || [],\n data: segment.buffer\n }, [segment.buffer]);\n }\n probeMp4StartTime({\n timescales,\n data\n }) {\n const startTime = probe$2.startTime(timescales, data);\n this.self.postMessage({\n action: 'probeMp4StartTime',\n startTime,\n data\n }, [data.buffer]);\n }\n probeMp4Tracks({\n data\n }) {\n const tracks = probe$2.tracks(data);\n this.self.postMessage({\n action: 'probeMp4Tracks',\n tracks,\n data\n }, [data.buffer]);\n }\n /**\n * Probe an mpeg2-ts segment to determine the start time of the segment in it's\n * internal \"media time,\" as well as whether it contains video and/or audio.\n *\n * @private\n * @param {Uint8Array} bytes - segment bytes\n * @param {number} baseStartTime\n * Relative reference timestamp used when adjusting frame timestamps for rollover.\n * This value should be in seconds, as it's converted to a 90khz clock within the\n * function body.\n * @return {Object} The start time of the current segment in \"media time\" as well as\n * whether it contains video and/or audio\n */\n\n probeTs({\n data,\n baseStartTime\n }) {\n const tsStartTime = typeof baseStartTime === 'number' && !isNaN(baseStartTime) ? baseStartTime * clock$2.ONE_SECOND_IN_TS : void 0;\n const timeInfo = tsInspector.inspect(data, tsStartTime);\n let result = null;\n if (timeInfo) {\n result = {\n // each type's time info comes back as an array of 2 times, start and end\n hasVideo: timeInfo.video && timeInfo.video.length === 2 || false,\n hasAudio: timeInfo.audio && timeInfo.audio.length === 2 || false\n };\n if (result.hasVideo) {\n result.videoStart = timeInfo.video[0].ptsTime;\n }\n if (result.hasAudio) {\n result.audioStart = timeInfo.audio[0].ptsTime;\n }\n }\n this.self.postMessage({\n action: 'probeTs',\n result,\n data\n }, [data.buffer]);\n }\n clearAllMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearAllCaptions();\n }\n }\n clearParsedMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearParsedCaptions();\n }\n }\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n\n push(data) {\n // Cast array buffer to correct type for transmuxer\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n this.transmuxer.push(segment);\n }\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n\n reset() {\n this.transmuxer.reset();\n }\n /**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */\n\n setTimestampOffset(data) {\n const timestampOffset = data.timestampOffset || 0;\n this.transmuxer.setBaseMediaDecodeTime(Math.round(clock$2.secondsToVideoTs(timestampOffset)));\n }\n setAudioAppendStart(data) {\n this.transmuxer.setAudioAppendStart(Math.ceil(clock$2.secondsToVideoTs(data.appendStart)));\n }\n setRemux(data) {\n this.transmuxer.setRemux(data.remux);\n }\n /**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */\n\n flush(data) {\n this.transmuxer.flush(); // transmuxed done action is fired after both audio/video pipelines are flushed\n\n self.postMessage({\n action: 'done',\n type: 'transmuxed'\n });\n }\n endTimeline() {\n this.transmuxer.endTimeline(); // transmuxed endedtimeline action is fired after both audio/video pipelines end their\n // timelines\n\n self.postMessage({\n action: 'endedtimeline',\n type: 'transmuxed'\n });\n }\n alignGopsWith(data) {\n this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice());\n }\n }\n /**\n * Our web worker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(self, event.data.options);\n return;\n }\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers(self);\n }\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n}));\nvar TransmuxWorker = factory(workerCode$1);\n/* rollup-plugin-worker-factory end for worker!/Users/poneill/dev/http-streaming/src/transmuxer-worker.js */\n\nconst handleData_ = (event, transmuxedData, callback) => {\n const {\n type,\n initSegment,\n captions,\n captionStreams,\n metadata,\n videoFrameDtsTime,\n videoFramePtsTime\n } = event.data.segment;\n transmuxedData.buffer.push({\n captions,\n captionStreams,\n metadata\n });\n const boxes = event.data.segment.boxes || {\n data: event.data.segment.data\n };\n const result = {\n type,\n // cast ArrayBuffer to TypedArray\n data: new Uint8Array(boxes.data, boxes.data.byteOffset, boxes.data.byteLength),\n initSegment: new Uint8Array(initSegment.data, initSegment.byteOffset, initSegment.byteLength)\n };\n if (typeof videoFrameDtsTime !== 'undefined') {\n result.videoFrameDtsTime = videoFrameDtsTime;\n }\n if (typeof videoFramePtsTime !== 'undefined') {\n result.videoFramePtsTime = videoFramePtsTime;\n }\n callback(result);\n};\nconst handleDone_ = ({\n transmuxedData,\n callback\n}) => {\n // Previously we only returned data on data events,\n // not on done events. Clear out the buffer to keep that consistent.\n transmuxedData.buffer = []; // all buffers should have been flushed from the muxer, so start processing anything we\n // have received\n\n callback(transmuxedData);\n};\nconst handleGopInfo_ = (event, transmuxedData) => {\n transmuxedData.gopInfo = event.data.gopInfo;\n};\nconst processTransmux = options => {\n const {\n transmuxer,\n bytes,\n audioAppendStart,\n gopsToAlignWith,\n remux,\n onData,\n onTrackInfo,\n onAudioTimingInfo,\n onVideoTimingInfo,\n onVideoSegmentTimingInfo,\n onAudioSegmentTimingInfo,\n onId3,\n onCaptions,\n onDone,\n onEndedTimeline,\n onTransmuxerLog,\n isEndOfTimeline\n } = options;\n const transmuxedData = {\n buffer: []\n };\n let waitForEndedTimelineEvent = isEndOfTimeline;\n const handleMessage = event => {\n if (transmuxer.currentTransmux !== options) {\n // disposed\n return;\n }\n if (event.data.action === 'data') {\n handleData_(event, transmuxedData, onData);\n }\n if (event.data.action === 'trackinfo') {\n onTrackInfo(event.data.trackInfo);\n }\n if (event.data.action === 'gopInfo') {\n handleGopInfo_(event, transmuxedData);\n }\n if (event.data.action === 'audioTimingInfo') {\n onAudioTimingInfo(event.data.audioTimingInfo);\n }\n if (event.data.action === 'videoTimingInfo') {\n onVideoTimingInfo(event.data.videoTimingInfo);\n }\n if (event.data.action === 'videoSegmentTimingInfo') {\n onVideoSegmentTimingInfo(event.data.videoSegmentTimingInfo);\n }\n if (event.data.action === 'audioSegmentTimingInfo') {\n onAudioSegmentTimingInfo(event.data.audioSegmentTimingInfo);\n }\n if (event.data.action === 'id3Frame') {\n onId3([event.data.id3Frame], event.data.id3Frame.dispatchType);\n }\n if (event.data.action === 'caption') {\n onCaptions(event.data.caption);\n }\n if (event.data.action === 'endedtimeline') {\n waitForEndedTimelineEvent = false;\n onEndedTimeline();\n }\n if (event.data.action === 'log') {\n onTransmuxerLog(event.data.log);\n } // wait for the transmuxed event since we may have audio and video\n\n if (event.data.type !== 'transmuxed') {\n return;\n } // If the \"endedtimeline\" event has not yet fired, and this segment represents the end\n // of a timeline, that means there may still be data events before the segment\n // processing can be considerred complete. In that case, the final event should be\n // an \"endedtimeline\" event with the type \"transmuxed.\"\n\n if (waitForEndedTimelineEvent) {\n return;\n }\n transmuxer.onmessage = null;\n handleDone_({\n transmuxedData,\n callback: onDone\n });\n /* eslint-disable no-use-before-define */\n\n dequeue(transmuxer);\n /* eslint-enable */\n };\n\n transmuxer.onmessage = handleMessage;\n if (audioAppendStart) {\n transmuxer.postMessage({\n action: 'setAudioAppendStart',\n appendStart: audioAppendStart\n });\n } // allow empty arrays to be passed to clear out GOPs\n\n if (Array.isArray(gopsToAlignWith)) {\n transmuxer.postMessage({\n action: 'alignGopsWith',\n gopsToAlignWith\n });\n }\n if (typeof remux !== 'undefined') {\n transmuxer.postMessage({\n action: 'setRemux',\n remux\n });\n }\n if (bytes.byteLength) {\n const buffer = bytes instanceof ArrayBuffer ? bytes : bytes.buffer;\n const byteOffset = bytes instanceof ArrayBuffer ? 0 : bytes.byteOffset;\n transmuxer.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: buffer,\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset,\n byteLength: bytes.byteLength\n }, [buffer]);\n }\n if (isEndOfTimeline) {\n transmuxer.postMessage({\n action: 'endTimeline'\n });\n } // even if we didn't push any bytes, we have to make sure we flush in case we reached\n // the end of the segment\n\n transmuxer.postMessage({\n action: 'flush'\n });\n};\nconst dequeue = transmuxer => {\n transmuxer.currentTransmux = null;\n if (transmuxer.transmuxQueue.length) {\n transmuxer.currentTransmux = transmuxer.transmuxQueue.shift();\n if (typeof transmuxer.currentTransmux === 'function') {\n transmuxer.currentTransmux();\n } else {\n processTransmux(transmuxer.currentTransmux);\n }\n }\n};\nconst processAction = (transmuxer, action) => {\n transmuxer.postMessage({\n action\n });\n dequeue(transmuxer);\n};\nconst enqueueAction = (action, transmuxer) => {\n if (!transmuxer.currentTransmux) {\n transmuxer.currentTransmux = action;\n processAction(transmuxer, action);\n return;\n }\n transmuxer.transmuxQueue.push(processAction.bind(null, transmuxer, action));\n};\nconst reset = transmuxer => {\n enqueueAction('reset', transmuxer);\n};\nconst endTimeline = transmuxer => {\n enqueueAction('endTimeline', transmuxer);\n};\nconst transmux = options => {\n if (!options.transmuxer.currentTransmux) {\n options.transmuxer.currentTransmux = options;\n processTransmux(options);\n return;\n }\n options.transmuxer.transmuxQueue.push(options);\n};\nconst createTransmuxer = options => {\n const transmuxer = new TransmuxWorker();\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue = [];\n const term = transmuxer.terminate;\n transmuxer.terminate = () => {\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue.length = 0;\n return term.call(transmuxer);\n };\n transmuxer.postMessage({\n action: 'init',\n options\n });\n return transmuxer;\n};\nvar segmentTransmuxer = {\n reset,\n endTimeline,\n transmux,\n createTransmuxer\n};\nconst workerCallback = function (options) {\n const transmuxer = options.transmuxer;\n const endAction = options.endAction || options.action;\n const callback = options.callback;\n const message = _extends({}, options, {\n endAction: null,\n transmuxer: null,\n callback: null\n });\n const listenForEndEvent = event => {\n if (event.data.action !== endAction) {\n return;\n }\n transmuxer.removeEventListener('message', listenForEndEvent); // transfer ownership of bytes back to us.\n\n if (event.data.data) {\n event.data.data = new Uint8Array(event.data.data, options.byteOffset || 0, options.byteLength || event.data.data.byteLength);\n if (options.data) {\n options.data = event.data.data;\n }\n }\n callback(event.data);\n };\n transmuxer.addEventListener('message', listenForEndEvent);\n if (options.data) {\n const isArrayBuffer = options.data instanceof ArrayBuffer;\n message.byteOffset = isArrayBuffer ? 0 : options.data.byteOffset;\n message.byteLength = options.data.byteLength;\n const transfers = [isArrayBuffer ? options.data : options.data.buffer];\n transmuxer.postMessage(message, transfers);\n } else {\n transmuxer.postMessage(message);\n }\n};\nconst REQUEST_ERRORS = {\n FAILURE: 2,\n TIMEOUT: -101,\n ABORTED: -102\n};\n/**\n * Abort all requests\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n */\n\nconst abortAll = activeXhrs => {\n activeXhrs.forEach(xhr => {\n xhr.abort();\n });\n};\n/**\n * Gather important bandwidth stats once a request has completed\n *\n * @param {Object} request - the XHR request from which to gather stats\n */\n\nconst getRequestStats = request => {\n return {\n bandwidth: request.bandwidth,\n bytesReceived: request.bytesReceived || 0,\n roundTripTime: request.roundTripTime || 0\n };\n};\n/**\n * If possible gather bandwidth stats as a request is in\n * progress\n *\n * @param {Event} progressEvent - an event object from an XHR's progress event\n */\n\nconst getProgressStats = progressEvent => {\n const request = progressEvent.target;\n const roundTripTime = Date.now() - request.requestTime;\n const stats = {\n bandwidth: Infinity,\n bytesReceived: 0,\n roundTripTime: roundTripTime || 0\n };\n stats.bytesReceived = progressEvent.loaded; // This can result in Infinity if stats.roundTripTime is 0 but that is ok\n // because we should only use bandwidth stats on progress to determine when\n // abort a request early due to insufficient bandwidth\n\n stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1000);\n return stats;\n};\n/**\n * Handle all error conditions in one place and return an object\n * with all the information\n *\n * @param {Error|null} error - if non-null signals an error occured with the XHR\n * @param {Object} request - the XHR request that possibly generated the error\n */\n\nconst handleErrors = (error, request) => {\n if (request.timedout) {\n return {\n status: request.status,\n message: 'HLS request timed-out at URL: ' + request.uri,\n code: REQUEST_ERRORS.TIMEOUT,\n xhr: request\n };\n }\n if (request.aborted) {\n return {\n status: request.status,\n message: 'HLS request aborted at URL: ' + request.uri,\n code: REQUEST_ERRORS.ABORTED,\n xhr: request\n };\n }\n if (error) {\n return {\n status: request.status,\n message: 'HLS request errored at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n };\n }\n if (request.responseType === 'arraybuffer' && request.response.byteLength === 0) {\n return {\n status: request.status,\n message: 'Empty HLS response at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n };\n }\n return null;\n};\n/**\n * Handle responses for key data and convert the key data to the correct format\n * for the decryption step later\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Array} objects - objects to add the key bytes to.\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleKeyResponse = (segment, objects, finishProcessingFn) => (error, request) => {\n const response = request.response;\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n if (response.byteLength !== 16) {\n return finishProcessingFn({\n status: request.status,\n message: 'Invalid HLS key at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n const view = new DataView(response);\n const bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n for (let i = 0; i < objects.length; i++) {\n objects[i].bytes = bytes;\n }\n return finishProcessingFn(null, segment);\n};\nconst parseInitSegment = (segment, callback) => {\n const type = detectContainerForBytes(segment.map.bytes); // TODO: We should also handle ts init segments here, but we\n // only know how to parse mp4 init segments at the moment\n\n if (type !== 'mp4') {\n const uri = segment.map.resolvedUri || segment.map.uri;\n return callback({\n internal: true,\n message: `Found unsupported ${type || 'unknown'} container for initialization segment at URL: ${uri}`,\n code: REQUEST_ERRORS.FAILURE\n });\n }\n workerCallback({\n action: 'probeMp4Tracks',\n data: segment.map.bytes,\n transmuxer: segment.transmuxer,\n callback: ({\n tracks,\n data\n }) => {\n // transfer bytes back to us\n segment.map.bytes = data;\n tracks.forEach(function (track) {\n segment.map.tracks = segment.map.tracks || {}; // only support one track of each type for now\n\n if (segment.map.tracks[track.type]) {\n return;\n }\n segment.map.tracks[track.type] = track;\n if (typeof track.id === 'number' && track.timescale) {\n segment.map.timescales = segment.map.timescales || {};\n segment.map.timescales[track.id] = track.timescale;\n }\n });\n return callback(null);\n }\n });\n};\n/**\n * Handle init-segment responses\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleInitSegmentResponse = ({\n segment,\n finishProcessingFn\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n const bytes = new Uint8Array(request.response); // init segment is encypted, we will have to wait\n // until the key request is done to decrypt.\n\n if (segment.map.key) {\n segment.map.encryptedBytes = bytes;\n return finishProcessingFn(null, segment);\n }\n segment.map.bytes = bytes;\n parseInitSegment(segment, function (parseError) {\n if (parseError) {\n parseError.xhr = request;\n parseError.status = request.status;\n return finishProcessingFn(parseError, segment);\n }\n finishProcessingFn(null, segment);\n });\n};\n/**\n * Response handler for segment-requests being sure to set the correct\n * property depending on whether the segment is encryped or not\n * Also records and keeps track of stats that are used for ABR purposes\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleSegmentResponse = ({\n segment,\n finishProcessingFn,\n responseType\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n const newBytes =\n // although responseText \"should\" exist, this guard serves to prevent an error being\n // thrown for two primary cases:\n // 1. the mime type override stops working, or is not implemented for a specific\n // browser\n // 2. when using mock XHR libraries like sinon that do not allow the override behavior\n responseType === 'arraybuffer' || !request.responseText ? request.response : stringToArrayBuffer(request.responseText.substring(segment.lastReachedChar || 0));\n segment.stats = getRequestStats(request);\n if (segment.key) {\n segment.encryptedBytes = new Uint8Array(newBytes);\n } else {\n segment.bytes = new Uint8Array(newBytes);\n }\n return finishProcessingFn(null, segment);\n};\nconst transmuxAndNotify = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n const fmp4Tracks = segment.map && segment.map.tracks || {};\n const isMuxed = Boolean(fmp4Tracks.audio && fmp4Tracks.video); // Keep references to each function so we can null them out after we're done with them.\n // One reason for this is that in the case of full segments, we want to trust start\n // times from the probe, rather than the transmuxer.\n\n let audioStartFn = timingInfoFn.bind(null, segment, 'audio', 'start');\n const audioEndFn = timingInfoFn.bind(null, segment, 'audio', 'end');\n let videoStartFn = timingInfoFn.bind(null, segment, 'video', 'start');\n const videoEndFn = timingInfoFn.bind(null, segment, 'video', 'end');\n const finish = () => transmux({\n bytes,\n transmuxer: segment.transmuxer,\n audioAppendStart: segment.audioAppendStart,\n gopsToAlignWith: segment.gopsToAlignWith,\n remux: isMuxed,\n onData: result => {\n result.type = result.type === 'combined' ? 'video' : result.type;\n dataFn(segment, result);\n },\n onTrackInfo: trackInfo => {\n if (trackInfoFn) {\n if (isMuxed) {\n trackInfo.isMuxed = true;\n }\n trackInfoFn(segment, trackInfo);\n }\n },\n onAudioTimingInfo: audioTimingInfo => {\n // we only want the first start value we encounter\n if (audioStartFn && typeof audioTimingInfo.start !== 'undefined') {\n audioStartFn(audioTimingInfo.start);\n audioStartFn = null;\n } // we want to continually update the end time\n\n if (audioEndFn && typeof audioTimingInfo.end !== 'undefined') {\n audioEndFn(audioTimingInfo.end);\n }\n },\n onVideoTimingInfo: videoTimingInfo => {\n // we only want the first start value we encounter\n if (videoStartFn && typeof videoTimingInfo.start !== 'undefined') {\n videoStartFn(videoTimingInfo.start);\n videoStartFn = null;\n } // we want to continually update the end time\n\n if (videoEndFn && typeof videoTimingInfo.end !== 'undefined') {\n videoEndFn(videoTimingInfo.end);\n }\n },\n onVideoSegmentTimingInfo: videoSegmentTimingInfo => {\n videoSegmentTimingInfoFn(videoSegmentTimingInfo);\n },\n onAudioSegmentTimingInfo: audioSegmentTimingInfo => {\n audioSegmentTimingInfoFn(audioSegmentTimingInfo);\n },\n onId3: (id3Frames, dispatchType) => {\n id3Fn(segment, id3Frames, dispatchType);\n },\n onCaptions: captions => {\n captionsFn(segment, [captions]);\n },\n isEndOfTimeline,\n onEndedTimeline: () => {\n endedTimelineFn();\n },\n onTransmuxerLog,\n onDone: result => {\n if (!doneFn) {\n return;\n }\n result.type = result.type === 'combined' ? 'video' : result.type;\n doneFn(null, segment, result);\n }\n }); // In the transmuxer, we don't yet have the ability to extract a \"proper\" start time.\n // Meaning cached frame data may corrupt our notion of where this segment\n // really starts. To get around this, probe for the info needed.\n\n workerCallback({\n action: 'probeTs',\n transmuxer: segment.transmuxer,\n data: bytes,\n baseStartTime: segment.baseStartTime,\n callback: data => {\n segment.bytes = bytes = data.data;\n const probeResult = data.result;\n if (probeResult) {\n trackInfoFn(segment, {\n hasAudio: probeResult.hasAudio,\n hasVideo: probeResult.hasVideo,\n isMuxed\n });\n trackInfoFn = null;\n if (probeResult.hasAudio && !isMuxed) {\n audioStartFn(probeResult.audioStart);\n }\n if (probeResult.hasVideo) {\n videoStartFn(probeResult.videoStart);\n }\n audioStartFn = null;\n videoStartFn = null;\n }\n finish();\n }\n });\n};\nconst handleSegmentBytes = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n let bytesAsUint8Array = new Uint8Array(bytes); // TODO:\n // We should have a handler that fetches the number of bytes required\n // to check if something is fmp4. This will allow us to save bandwidth\n // because we can only exclude a playlist and abort requests\n // by codec after trackinfo triggers.\n\n if (isLikelyFmp4MediaSegment(bytesAsUint8Array)) {\n segment.isFmp4 = true;\n const {\n tracks\n } = segment.map;\n const trackInfo = {\n isFmp4: true,\n hasVideo: !!tracks.video,\n hasAudio: !!tracks.audio\n }; // if we have a audio track, with a codec that is not set to\n // encrypted audio\n\n if (tracks.audio && tracks.audio.codec && tracks.audio.codec !== 'enca') {\n trackInfo.audioCodec = tracks.audio.codec;\n } // if we have a video track, with a codec that is not set to\n // encrypted video\n\n if (tracks.video && tracks.video.codec && tracks.video.codec !== 'encv') {\n trackInfo.videoCodec = tracks.video.codec;\n }\n if (tracks.video && tracks.audio) {\n trackInfo.isMuxed = true;\n } // since we don't support appending fmp4 data on progress, we know we have the full\n // segment here\n\n trackInfoFn(segment, trackInfo); // The probe doesn't provide the segment end time, so only callback with the start\n // time. The end time can be roughly calculated by the receiver using the duration.\n //\n // Note that the start time returned by the probe reflects the baseMediaDecodeTime, as\n // that is the true start of the segment (where the playback engine should begin\n // decoding).\n\n const finishLoading = captions => {\n // if the track still has audio at this point it is only possible\n // for it to be audio only. See `tracks.video && tracks.audio` if statement\n // above.\n // we make sure to use segment.bytes here as that\n dataFn(segment, {\n data: bytesAsUint8Array,\n type: trackInfo.hasAudio && !trackInfo.isMuxed ? 'audio' : 'video'\n });\n if (captions && captions.length) {\n captionsFn(segment, captions);\n }\n doneFn(null, segment, {});\n };\n workerCallback({\n action: 'probeMp4StartTime',\n timescales: segment.map.timescales,\n data: bytesAsUint8Array,\n transmuxer: segment.transmuxer,\n callback: ({\n data,\n startTime\n }) => {\n // transfer bytes back to us\n bytes = data.buffer;\n segment.bytes = bytesAsUint8Array = data;\n if (trackInfo.hasAudio && !trackInfo.isMuxed) {\n timingInfoFn(segment, 'audio', 'start', startTime);\n }\n if (trackInfo.hasVideo) {\n timingInfoFn(segment, 'video', 'start', startTime);\n } // Run through the CaptionParser in case there are captions.\n // Initialize CaptionParser if it hasn't been yet\n\n if (!tracks.video || !data.byteLength || !segment.transmuxer) {\n finishLoading();\n return;\n }\n workerCallback({\n action: 'pushMp4Captions',\n endAction: 'mp4Captions',\n transmuxer: segment.transmuxer,\n data: bytesAsUint8Array,\n timescales: segment.map.timescales,\n trackIds: [tracks.video.id],\n callback: message => {\n // transfer bytes back to us\n bytes = message.data.buffer;\n segment.bytes = bytesAsUint8Array = message.data;\n message.logs.forEach(function (log) {\n onTransmuxerLog(merge(log, {\n stream: 'mp4CaptionParser'\n }));\n });\n finishLoading(message.captions);\n }\n });\n }\n });\n return;\n } // VTT or other segments that don't need processing\n\n if (!segment.transmuxer) {\n doneFn(null, segment, {});\n return;\n }\n if (typeof segment.container === 'undefined') {\n segment.container = detectContainerForBytes(bytesAsUint8Array);\n }\n if (segment.container !== 'ts' && segment.container !== 'aac') {\n trackInfoFn(segment, {\n hasAudio: false,\n hasVideo: false\n });\n doneFn(null, segment, {});\n return;\n } // ts or aac\n\n transmuxAndNotify({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n};\nconst decrypt = function ({\n id,\n key,\n encryptedBytes,\n decryptionWorker\n}, callback) {\n const decryptionHandler = event => {\n if (event.data.source === id) {\n decryptionWorker.removeEventListener('message', decryptionHandler);\n const decrypted = event.data.decrypted;\n callback(new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength));\n }\n };\n decryptionWorker.addEventListener('message', decryptionHandler);\n let keyBytes;\n if (key.bytes.slice) {\n keyBytes = key.bytes.slice();\n } else {\n keyBytes = new Uint32Array(Array.prototype.slice.call(key.bytes));\n } // incrementally decrypt the bytes\n\n decryptionWorker.postMessage(createTransferableMessage({\n source: id,\n encrypted: encryptedBytes,\n key: keyBytes,\n iv: key.iv\n }), [encryptedBytes.buffer, keyBytes.buffer]);\n};\n/**\n * Decrypt the segment via the decryption web worker\n *\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after decryption has completed\n */\n\nconst decryptSegment = ({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n decrypt({\n id: segment.requestId,\n key: segment.key,\n encryptedBytes: segment.encryptedBytes,\n decryptionWorker\n }, decryptedBytes => {\n segment.bytes = decryptedBytes;\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n });\n};\n/**\n * This function waits for all XHRs to finish (with either success or failure)\n * before continueing processing via it's callback. The function gathers errors\n * from each request into a single errors array so that the error status for\n * each request can be examined later.\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after all resources have been\n * downloaded and any decryption completed\n */\n\nconst waitForCompletion = ({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n let count = 0;\n let didError = false;\n return (error, segment) => {\n if (didError) {\n return;\n }\n if (error) {\n didError = true; // If there are errors, we have to abort any outstanding requests\n\n abortAll(activeXhrs); // Even though the requests above are aborted, and in theory we could wait until we\n // handle the aborted events from those requests, there are some cases where we may\n // never get an aborted event. For instance, if the network connection is lost and\n // there were two requests, the first may have triggered an error immediately, while\n // the second request remains unsent. In that case, the aborted algorithm will not\n // trigger an abort: see https://xhr.spec.whatwg.org/#the-abort()-method\n //\n // We also can't rely on the ready state of the XHR, since the request that\n // triggered the connection error may also show as a ready state of 0 (unsent).\n // Therefore, we have to finish this group of requests immediately after the first\n // seen error.\n\n return doneFn(error, segment);\n }\n count += 1;\n if (count === activeXhrs.length) {\n const segmentFinish = function () {\n if (segment.encryptedBytes) {\n return decryptSegment({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n } // Otherwise, everything is ready just continue\n\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n }; // Keep track of when *all* of the requests have completed\n\n segment.endOfAllRequests = Date.now();\n if (segment.map && segment.map.encryptedBytes && !segment.map.bytes) {\n return decrypt({\n decryptionWorker,\n // add -init to the \"id\" to differentiate between segment\n // and init segment decryption, just in case they happen\n // at the same time at some point in the future.\n id: segment.requestId + '-init',\n encryptedBytes: segment.map.encryptedBytes,\n key: segment.map.key\n }, decryptedBytes => {\n segment.map.bytes = decryptedBytes;\n parseInitSegment(segment, parseError => {\n if (parseError) {\n abortAll(activeXhrs);\n return doneFn(parseError, segment);\n }\n segmentFinish();\n });\n });\n }\n segmentFinish();\n }\n };\n};\n/**\n * Calls the abort callback if any request within the batch was aborted. Will only call\n * the callback once per batch of requests, even if multiple were aborted.\n *\n * @param {Object} loadendState - state to check to see if the abort function was called\n * @param {Function} abortFn - callback to call for abort\n */\n\nconst handleLoadEnd = ({\n loadendState,\n abortFn\n}) => event => {\n const request = event.target;\n if (request.aborted && abortFn && !loadendState.calledAbortFn) {\n abortFn();\n loadendState.calledAbortFn = true;\n }\n};\n/**\n * Simple progress event callback handler that gathers some stats before\n * executing a provided callback with the `segment` object\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that is executed each time a progress event\n * is received\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Event} event - the progress event object from XMLHttpRequest\n */\n\nconst handleProgress = ({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n}) => event => {\n const request = event.target;\n if (request.aborted) {\n return;\n }\n segment.stats = merge(segment.stats, getProgressStats(event)); // record the time that we receive the first byte of data\n\n if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) {\n segment.stats.firstBytesReceivedAt = Date.now();\n }\n return progressFn(event, segment);\n};\n/**\n * Load all resources and does any processing necessary for a media-segment\n *\n * Features:\n * decrypts the media-segment if it has a key uri and an iv\n * aborts *all* requests if *any* one request fails\n *\n * The segment object, at minimum, has the following format:\n * {\n * resolvedUri: String,\n * [transmuxer]: Object,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [key]: {\n * resolvedUri: String\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * iv: {\n * bytes: Uint32Array\n * }\n * },\n * [map]: {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [bytes]: Uint8Array\n * }\n * }\n * ...where [name] denotes optional properties\n *\n * @param {Function} xhr - an instance of the xhr wrapper in xhr.js\n * @param {Object} xhrOptions - the base options to provide to all xhr requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128\n * decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} abortFn - a callback called (only once) if any piece of a request was\n * aborted\n * @param {Function} progressFn - a callback that receives progress events from the main\n * segment's xhr request\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that receives data from the main segment's xhr\n * request, transmuxed if needed\n * @param {Function} doneFn - a callback that is executed only once all requests have\n * succeeded or failed\n * @return {Function} a function that, when invoked, immediately aborts all\n * outstanding requests\n */\n\nconst mediaSegmentRequest = ({\n xhr,\n xhrOptions,\n decryptionWorker,\n segment,\n abortFn,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n const activeXhrs = [];\n const finishProcessingFn = waitForCompletion({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n }); // optionally, request the decryption key\n\n if (segment.key && !segment.key.bytes) {\n const objects = [segment.key];\n if (segment.map && !segment.map.bytes && segment.map.key && segment.map.key.resolvedUri === segment.key.resolvedUri) {\n objects.push(segment.map.key);\n }\n const keyRequestOptions = merge(xhrOptions, {\n uri: segment.key.resolvedUri,\n responseType: 'arraybuffer'\n });\n const keyRequestCallback = handleKeyResponse(segment, objects, finishProcessingFn);\n const keyXhr = xhr(keyRequestOptions, keyRequestCallback);\n activeXhrs.push(keyXhr);\n } // optionally, request the associated media init segment\n\n if (segment.map && !segment.map.bytes) {\n const differentMapKey = segment.map.key && (!segment.key || segment.key.resolvedUri !== segment.map.key.resolvedUri);\n if (differentMapKey) {\n const mapKeyRequestOptions = merge(xhrOptions, {\n uri: segment.map.key.resolvedUri,\n responseType: 'arraybuffer'\n });\n const mapKeyRequestCallback = handleKeyResponse(segment, [segment.map.key], finishProcessingFn);\n const mapKeyXhr = xhr(mapKeyRequestOptions, mapKeyRequestCallback);\n activeXhrs.push(mapKeyXhr);\n }\n const initSegmentOptions = merge(xhrOptions, {\n uri: segment.map.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment.map)\n });\n const initSegmentRequestCallback = handleInitSegmentResponse({\n segment,\n finishProcessingFn\n });\n const initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback);\n activeXhrs.push(initSegmentXhr);\n }\n const segmentRequestOptions = merge(xhrOptions, {\n uri: segment.part && segment.part.resolvedUri || segment.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment)\n });\n const segmentRequestCallback = handleSegmentResponse({\n segment,\n finishProcessingFn,\n responseType: segmentRequestOptions.responseType\n });\n const segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback);\n segmentXhr.addEventListener('progress', handleProgress({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n }));\n activeXhrs.push(segmentXhr); // since all parts of the request must be considered, but should not make callbacks\n // multiple times, provide a shared state object\n\n const loadendState = {};\n activeXhrs.forEach(activeXhr => {\n activeXhr.addEventListener('loadend', handleLoadEnd({\n loadendState,\n abortFn\n }));\n });\n return () => abortAll(activeXhrs);\n};\n\n/**\n * @file - codecs.js - Handles tasks regarding codec strings such as translating them to\n * codec strings, or translating codec strings into objects that can be examined.\n */\nconst logFn$1 = logger('CodecUtils');\n/**\n * Returns a set of codec strings parsed from the playlist or the default\n * codec strings if no codecs were specified in the playlist\n *\n * @param {Playlist} media the current media playlist\n * @return {Object} an object with the video and audio codecs\n */\n\nconst getCodecs = function (media) {\n // if the codecs were explicitly specified, use them instead of the\n // defaults\n const mediaAttributes = media.attributes || {};\n if (mediaAttributes.CODECS) {\n return parseCodecs(mediaAttributes.CODECS);\n }\n};\nconst isMaat = (main, media) => {\n const mediaAttributes = media.attributes || {};\n return main && main.mediaGroups && main.mediaGroups.AUDIO && mediaAttributes.AUDIO && main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n};\nconst isMuxed = (main, media) => {\n if (!isMaat(main, media)) {\n return true;\n }\n const mediaAttributes = media.attributes || {};\n const audioGroup = main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n for (const groupId in audioGroup) {\n // If an audio group has a URI (the case for HLS, as HLS will use external playlists),\n // or there are listed playlists (the case for DASH, as the manifest will have already\n // provided all of the details necessary to generate the audio playlist, as opposed to\n // HLS' externally requested playlists), then the content is demuxed.\n if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) {\n return true;\n }\n }\n return false;\n};\nconst unwrapCodecList = function (codecList) {\n const codecs = {};\n codecList.forEach(({\n mediaType,\n type,\n details\n }) => {\n codecs[mediaType] = codecs[mediaType] || [];\n codecs[mediaType].push(translateLegacyCodec(`${type}${details}`));\n });\n Object.keys(codecs).forEach(function (mediaType) {\n if (codecs[mediaType].length > 1) {\n logFn$1(`multiple ${mediaType} codecs found as attributes: ${codecs[mediaType].join(', ')}. Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.`);\n codecs[mediaType] = null;\n return;\n }\n codecs[mediaType] = codecs[mediaType][0];\n });\n return codecs;\n};\nconst codecCount = function (codecObj) {\n let count = 0;\n if (codecObj.audio) {\n count++;\n }\n if (codecObj.video) {\n count++;\n }\n return count;\n};\n/**\n * Calculates the codec strings for a working configuration of\n * SourceBuffers to play variant streams in a main playlist. If\n * there is no possible working configuration, an empty object will be\n * returned.\n *\n * @param main {Object} the m3u8 object for the main playlist\n * @param media {Object} the m3u8 object for the variant playlist\n * @return {Object} the codec strings.\n *\n * @private\n */\n\nconst codecsForPlaylist = function (main, media) {\n const mediaAttributes = media.attributes || {};\n const codecInfo = unwrapCodecList(getCodecs(media) || []); // HLS with multiple-audio tracks must always get an audio codec.\n // Put another way, there is no way to have a video-only multiple-audio HLS!\n\n if (isMaat(main, media) && !codecInfo.audio) {\n if (!isMuxed(main, media)) {\n // It is possible for codecs to be specified on the audio media group playlist but\n // not on the rendition playlist. This is mostly the case for DASH, where audio and\n // video are always separate (and separately specified).\n const defaultCodecs = unwrapCodecList(codecsFromDefault(main, mediaAttributes.AUDIO) || []);\n if (defaultCodecs.audio) {\n codecInfo.audio = defaultCodecs.audio;\n }\n }\n }\n return codecInfo;\n};\nconst logFn = logger('PlaylistSelector');\nconst representationToString = function (representation) {\n if (!representation || !representation.playlist) {\n return;\n }\n const playlist = representation.playlist;\n return JSON.stringify({\n id: playlist.id,\n bandwidth: representation.bandwidth,\n width: representation.width,\n height: representation.height,\n codecs: playlist.attributes && playlist.attributes.CODECS || ''\n });\n}; // Utilities\n\n/**\n * Returns the CSS value for the specified property on an element\n * using `getComputedStyle`. Firefox has a long-standing issue where\n * getComputedStyle() may return null when running in an iframe with\n * `display: none`.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n * @param {HTMLElement} el the htmlelement to work on\n * @param {string} the proprety to get the style for\n */\n\nconst safeGetComputedStyle = function (el, property) {\n if (!el) {\n return '';\n }\n const result = window$1.getComputedStyle(el);\n if (!result) {\n return '';\n }\n return result[property];\n};\n/**\n * Resuable stable sort function\n *\n * @param {Playlists} array\n * @param {Function} sortFn Different comparators\n * @function stableSort\n */\n\nconst stableSort = function (array, sortFn) {\n const newArray = array.slice();\n array.sort(function (left, right) {\n const cmp = sortFn(left, right);\n if (cmp === 0) {\n return newArray.indexOf(left) - newArray.indexOf(right);\n }\n return cmp;\n });\n};\n/**\n * A comparator function to sort two playlist object by bandwidth.\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the bandwidth attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the bandwidth of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistBandwidth = function (left, right) {\n let leftBandwidth;\n let rightBandwidth;\n if (left.attributes.BANDWIDTH) {\n leftBandwidth = left.attributes.BANDWIDTH;\n }\n leftBandwidth = leftBandwidth || window$1.Number.MAX_VALUE;\n if (right.attributes.BANDWIDTH) {\n rightBandwidth = right.attributes.BANDWIDTH;\n }\n rightBandwidth = rightBandwidth || window$1.Number.MAX_VALUE;\n return leftBandwidth - rightBandwidth;\n};\n/**\n * A comparator function to sort two playlist object by resolution (width).\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the resolution.width attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the resolution.width of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistResolution = function (left, right) {\n let leftWidth;\n let rightWidth;\n if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) {\n leftWidth = left.attributes.RESOLUTION.width;\n }\n leftWidth = leftWidth || window$1.Number.MAX_VALUE;\n if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) {\n rightWidth = right.attributes.RESOLUTION.width;\n }\n rightWidth = rightWidth || window$1.Number.MAX_VALUE; // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions\n // have the same media dimensions/ resolution\n\n if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) {\n return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH;\n }\n return leftWidth - rightWidth;\n};\n/**\n * Chooses the appropriate media playlist based on bandwidth and player size\n *\n * @param {Object} main\n * Object representation of the main manifest\n * @param {number} playerBandwidth\n * Current calculated bandwidth of the player\n * @param {number} playerWidth\n * Current width of the player element (should account for the device pixel ratio)\n * @param {number} playerHeight\n * Current height of the player element (should account for the device pixel ratio)\n * @param {boolean} limitRenditionByPlayerDimensions\n * True if the player width and height should be used during the selection, false otherwise\n * @param {Object} playlistController\n * the current playlistController object\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nlet simpleSelector = function (main, playerBandwidth, playerWidth, playerHeight, limitRenditionByPlayerDimensions, playlistController) {\n // If we end up getting called before `main` is available, exit early\n if (!main) {\n return;\n }\n const options = {\n bandwidth: playerBandwidth,\n width: playerWidth,\n height: playerHeight,\n limitRenditionByPlayerDimensions\n };\n let playlists = main.playlists; // if playlist is audio only, select between currently active audio group playlists.\n\n if (Playlist.isAudioOnly(main)) {\n playlists = playlistController.getAudioTrackPlaylists_(); // add audioOnly to options so that we log audioOnly: true\n // at the buttom of this function for debugging.\n\n options.audioOnly = true;\n } // convert the playlists to an intermediary representation to make comparisons easier\n\n let sortedPlaylistReps = playlists.map(playlist => {\n let bandwidth;\n const width = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width;\n const height = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height;\n bandwidth = playlist.attributes && playlist.attributes.BANDWIDTH;\n bandwidth = bandwidth || window$1.Number.MAX_VALUE;\n return {\n bandwidth,\n width,\n height,\n playlist\n };\n });\n stableSort(sortedPlaylistReps, (left, right) => left.bandwidth - right.bandwidth); // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n sortedPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isIncompatible(rep.playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylistReps = sortedPlaylistReps.filter(rep => Playlist.isEnabled(rep.playlist));\n if (!enabledPlaylistReps.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isDisabled(rep.playlist));\n } // filter out any variant that has greater effective bitrate\n // than the current estimated bandwidth\n\n const bandwidthPlaylistReps = enabledPlaylistReps.filter(rep => rep.bandwidth * Config.BANDWIDTH_VARIANCE < playerBandwidth);\n let highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; // get all of the renditions with the same (highest) bandwidth\n // and then taking the very first element\n\n const bandwidthBestRep = bandwidthPlaylistReps.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; // if we're not going to limit renditions by player size, make an early decision.\n\n if (limitRenditionByPlayerDimensions === false) {\n const chosenRep = bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n }\n if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n } // filter out playlists without resolution information\n\n const haveResolution = bandwidthPlaylistReps.filter(rep => rep.width && rep.height); // sort variants by resolution\n\n stableSort(haveResolution, (left, right) => left.width - right.width); // if we have the exact resolution as the player use it\n\n const resolutionBestRepList = haveResolution.filter(rep => rep.width === playerWidth && rep.height === playerHeight);\n highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; // ensure that we pick the highest bandwidth variant that have exact resolution\n\n const resolutionBestRep = resolutionBestRepList.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n let resolutionPlusOneList;\n let resolutionPlusOneSmallest;\n let resolutionPlusOneRep; // find the smallest variant that is larger than the player\n // if there is no match of exact resolution\n\n if (!resolutionBestRep) {\n resolutionPlusOneList = haveResolution.filter(rep => rep.width > playerWidth || rep.height > playerHeight); // find all the variants have the same smallest resolution\n\n resolutionPlusOneSmallest = resolutionPlusOneList.filter(rep => rep.width === resolutionPlusOneList[0].width && rep.height === resolutionPlusOneList[0].height); // ensure that we also pick the highest bandwidth variant that\n // is just-larger-than the video player\n\n highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1];\n resolutionPlusOneRep = resolutionPlusOneSmallest.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n }\n let leastPixelDiffRep; // If this selector proves to be better than others,\n // resolutionPlusOneRep and resolutionBestRep and all\n // the code involving them should be removed.\n\n if (playlistController.leastPixelDiffSelector) {\n // find the variant that is closest to the player's pixel size\n const leastPixelDiffList = haveResolution.map(rep => {\n rep.pixelDiff = Math.abs(rep.width - playerWidth) + Math.abs(rep.height - playerHeight);\n return rep;\n }); // get the highest bandwidth, closest resolution playlist\n\n stableSort(leastPixelDiffList, (left, right) => {\n // sort by highest bandwidth if pixelDiff is the same\n if (left.pixelDiff === right.pixelDiff) {\n return right.bandwidth - left.bandwidth;\n }\n return left.pixelDiff - right.pixelDiff;\n });\n leastPixelDiffRep = leastPixelDiffList[0];\n } // fallback chain of variants\n\n const chosenRep = leastPixelDiffRep || resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (leastPixelDiffRep) {\n type = 'leastPixelDiffRep';\n } else if (resolutionPlusOneRep) {\n type = 'resolutionPlusOneRep';\n } else if (resolutionBestRep) {\n type = 'resolutionBestRep';\n } else if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n } else if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n};\n\n/**\n * Chooses the appropriate media playlist based on the most recent\n * bandwidth estimate and the player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nconst lastBandwidthSelector = function () {\n const pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n return simpleSelector(this.playlists.main, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n};\n/**\n * Chooses the appropriate media playlist based on an\n * exponential-weighted moving average of the bandwidth after\n * filtering for player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @param {number} decay - a number between 0 and 1. Higher values of\n * this parameter will cause previous bandwidth estimates to lose\n * significance more quickly.\n * @return {Function} a function which can be invoked to create a new\n * playlist selector function.\n * @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n */\n\nconst movingAverageBandwidthSelector = function (decay) {\n let average = -1;\n let lastSystemBandwidth = -1;\n if (decay < 0 || decay > 1) {\n throw new Error('Moving average bandwidth decay must be between 0 and 1.');\n }\n return function () {\n const pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n if (average < 0) {\n average = this.systemBandwidth;\n lastSystemBandwidth = this.systemBandwidth;\n } // stop the average value from decaying for every 250ms\n // when the systemBandwidth is constant\n // and\n // stop average from setting to a very low value when the\n // systemBandwidth becomes 0 in case of chunk cancellation\n\n if (this.systemBandwidth > 0 && this.systemBandwidth !== lastSystemBandwidth) {\n average = decay * this.systemBandwidth + (1 - decay) * average;\n lastSystemBandwidth = this.systemBandwidth;\n }\n return simpleSelector(this.playlists.main, average, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n };\n};\n/**\n * Chooses the appropriate media playlist based on the potential to rebuffer\n *\n * @param {Object} settings\n * Object of information required to use this selector\n * @param {Object} settings.main\n * Object representation of the main manifest\n * @param {number} settings.currentTime\n * The current time of the player\n * @param {number} settings.bandwidth\n * Current measured bandwidth\n * @param {number} settings.duration\n * Duration of the media\n * @param {number} settings.segmentDuration\n * Segment duration to be used in round trip time calculations\n * @param {number} settings.timeUntilRebuffer\n * Time left in seconds until the player has to rebuffer\n * @param {number} settings.currentTimeline\n * The current timeline segments are being loaded from\n * @param {SyncController} settings.syncController\n * SyncController for determining if we have a sync point for a given playlist\n * @return {Object|null}\n * {Object} return.playlist\n * The highest bandwidth playlist with the least amount of rebuffering\n * {Number} return.rebufferingImpact\n * The amount of time in seconds switching to this playlist will rebuffer. A\n * negative value means that switching will cause zero rebuffering.\n */\n\nconst minRebufferMaxBandwidthSelector = function (settings) {\n const {\n main,\n currentTime,\n bandwidth,\n duration,\n segmentDuration,\n timeUntilRebuffer,\n currentTimeline,\n syncController\n } = settings; // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n const compatiblePlaylists = main.playlists.filter(playlist => !Playlist.isIncompatible(playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylists = compatiblePlaylists.filter(Playlist.isEnabled);\n if (!enabledPlaylists.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylists = compatiblePlaylists.filter(playlist => !Playlist.isDisabled(playlist));\n }\n const bandwidthPlaylists = enabledPlaylists.filter(Playlist.hasAttribute.bind(null, 'BANDWIDTH'));\n const rebufferingEstimates = bandwidthPlaylists.map(playlist => {\n const syncPoint = syncController.getSyncPoint(playlist, duration, currentTimeline, currentTime); // If there is no sync point for this playlist, switching to it will require a\n // sync request first. This will double the request time\n\n const numRequests = syncPoint ? 1 : 2;\n const requestTimeEstimate = Playlist.estimateSegmentRequestTime(segmentDuration, bandwidth, playlist);\n const rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer;\n return {\n playlist,\n rebufferingImpact\n };\n });\n const noRebufferingPlaylists = rebufferingEstimates.filter(estimate => estimate.rebufferingImpact <= 0); // Sort by bandwidth DESC\n\n stableSort(noRebufferingPlaylists, (a, b) => comparePlaylistBandwidth(b.playlist, a.playlist));\n if (noRebufferingPlaylists.length) {\n return noRebufferingPlaylists[0];\n }\n stableSort(rebufferingEstimates, (a, b) => a.rebufferingImpact - b.rebufferingImpact);\n return rebufferingEstimates[0] || null;\n};\n/**\n * Chooses the appropriate media playlist, which in this case is the lowest bitrate\n * one with video. If no renditions with video exist, return the lowest audio rendition.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Object|null}\n * {Object} return.playlist\n * The lowest bitrate playlist that contains a video codec. If no such rendition\n * exists pick the lowest audio rendition.\n */\n\nconst lowestBitrateCompatibleVariantSelector = function () {\n // filter out any playlists that have been excluded due to\n // incompatible configurations or playback errors\n const playlists = this.playlists.main.playlists.filter(Playlist.isEnabled); // Sort ascending by bitrate\n\n stableSort(playlists, (a, b) => comparePlaylistBandwidth(a, b)); // Parse and assume that playlists with no video codec have no video\n // (this is not necessarily true, although it is generally true).\n //\n // If an entire manifest has no valid videos everything will get filtered\n // out.\n\n const playlistsWithVideo = playlists.filter(playlist => !!codecsForPlaylist(this.playlists.main, playlist).video);\n return playlistsWithVideo[0] || null;\n};\n\n/**\n * Combine all segments into a single Uint8Array\n *\n * @param {Object} segmentObj\n * @return {Uint8Array} concatenated bytes\n * @private\n */\nconst concatSegments = segmentObj => {\n let offset = 0;\n let tempBuffer;\n if (segmentObj.bytes) {\n tempBuffer = new Uint8Array(segmentObj.bytes); // combine the individual segments into one large typed-array\n\n segmentObj.segments.forEach(segment => {\n tempBuffer.set(segment, offset);\n offset += segment.byteLength;\n });\n }\n return tempBuffer;\n};\n\n/**\n * @file text-tracks.js\n */\n/**\n * Create captions text tracks on video.js if they do not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {Object} tech the video.js tech\n * @param {Object} captionStream the caption stream to create\n * @private\n */\n\nconst createCaptionsTrackIfNotExists = function (inbandTextTracks, tech, captionStream) {\n if (!inbandTextTracks[captionStream]) {\n tech.trigger({\n type: 'usage',\n name: 'vhs-608'\n });\n let instreamId = captionStream; // we need to translate SERVICEn for 708 to how mux.js currently labels them\n\n if (/^cc708_/.test(captionStream)) {\n instreamId = 'SERVICE' + captionStream.split('_')[1];\n }\n const track = tech.textTracks().getTrackById(instreamId);\n if (track) {\n // Resuse an existing track with a CC# id because this was\n // very likely created by videojs-contrib-hls from information\n // in the m3u8 for us to use\n inbandTextTracks[captionStream] = track;\n } else {\n // This section gets called when we have caption services that aren't specified in the manifest.\n // Manifest level caption services are handled in media-groups.js under CLOSED-CAPTIONS.\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let label = captionStream;\n let language = captionStream;\n let def = false;\n const captionService = captionServices[instreamId];\n if (captionService) {\n label = captionService.label;\n language = captionService.language;\n def = captionService.default;\n } // Otherwise, create a track with the default `CC#` label and\n // without a language\n\n inbandTextTracks[captionStream] = tech.addRemoteTextTrack({\n kind: 'captions',\n id: instreamId,\n // TODO: investigate why this doesn't seem to turn the caption on by default\n default: def,\n label,\n language\n }, false).track;\n }\n }\n};\n/**\n * Add caption text track data to a source handler given an array of captions\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {Array} captionArray an array of caption data\n * @private\n */\n\nconst addCaptionData = function ({\n inbandTextTracks,\n captionArray,\n timestampOffset\n}) {\n if (!captionArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n captionArray.forEach(caption => {\n const track = caption.stream;\n inbandTextTracks[track].addCue(new Cue(caption.startTime + timestampOffset, caption.endTime + timestampOffset, caption.text));\n });\n};\n/**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */\n\nconst deprecateOldCue = function (cue) {\n Object.defineProperties(cue.frame, {\n id: {\n get() {\n videojs.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');\n return cue.value.key;\n }\n },\n value: {\n get() {\n videojs.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n },\n privateData: {\n get() {\n videojs.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n }\n });\n};\n/**\n * Add metadata text track data to a source handler given an array of metadata\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {Array} metadataArray an array of meta data\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {number} videoDuration the duration of the video\n * @private\n */\n\nconst addMetadata = ({\n inbandTextTracks,\n metadataArray,\n timestampOffset,\n videoDuration\n}) => {\n if (!metadataArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const metadataTrack = inbandTextTracks.metadataTrack_;\n if (!metadataTrack) {\n return;\n }\n metadataArray.forEach(metadata => {\n const time = metadata.cueTime + timestampOffset; // if time isn't a finite number between 0 and Infinity, like NaN,\n // ignore this bit of metadata.\n // This likely occurs when you have an non-timed ID3 tag like TIT2,\n // which is the \"Title/Songname/Content description\" frame\n\n if (typeof time !== 'number' || window$1.isNaN(time) || time < 0 || !(time < Infinity)) {\n return;\n }\n metadata.frames.forEach(frame => {\n const cue = new Cue(time, time, frame.value || frame.url || frame.data || '');\n cue.frame = frame;\n cue.value = frame;\n deprecateOldCue(cue);\n metadataTrack.addCue(cue);\n });\n });\n if (!metadataTrack.cues || !metadataTrack.cues.length) {\n return;\n } // Updating the metadeta cues so that\n // the endTime of each cue is the startTime of the next cue\n // the endTime of last cue is the duration of the video\n\n const cues = metadataTrack.cues;\n const cuesArray = []; // Create a copy of the TextTrackCueList...\n // ...disregarding cues with a falsey value\n\n for (let i = 0; i < cues.length; i++) {\n if (cues[i]) {\n cuesArray.push(cues[i]);\n }\n } // Group cues by their startTime value\n\n const cuesGroupedByStartTime = cuesArray.reduce((obj, cue) => {\n const timeSlot = obj[cue.startTime] || [];\n timeSlot.push(cue);\n obj[cue.startTime] = timeSlot;\n return obj;\n }, {}); // Sort startTimes by ascending order\n\n const sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort((a, b) => Number(a) - Number(b)); // Map each cue group's endTime to the next group's startTime\n\n sortedStartTimes.forEach((startTime, idx) => {\n const cueGroup = cuesGroupedByStartTime[startTime];\n const nextTime = Number(sortedStartTimes[idx + 1]) || videoDuration; // Map each cue's endTime the next group's startTime\n\n cueGroup.forEach(cue => {\n cue.endTime = nextTime;\n });\n });\n};\n/**\n * Create metadata text track on video.js if it does not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {string} dispatchType the inband metadata track dispatch type\n * @param {Object} tech the video.js tech\n * @private\n */\n\nconst createMetadataTrackIfNotExists = (inbandTextTracks, dispatchType, tech) => {\n if (inbandTextTracks.metadataTrack_) {\n return;\n }\n inbandTextTracks.metadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'Timed Metadata'\n }, false).track;\n inbandTextTracks.metadataTrack_.inBandMetadataTrackDispatchType = dispatchType;\n};\n/**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */\n\nconst removeCuesFromTrack = function (start, end, track) {\n let i;\n let cue;\n if (!track) {\n return;\n }\n if (!track.cues) {\n return;\n }\n i = track.cues.length;\n while (i--) {\n cue = track.cues[i]; // Remove any cue within the provided start and end time\n\n if (cue.startTime >= start && cue.endTime <= end) {\n track.removeCue(cue);\n }\n }\n};\n/**\n * Remove duplicate cues from a track on video.js (a cue is considered a\n * duplicate if it has the same time interval and text as another)\n *\n * @param {Object} track the text track to remove the duplicate cues from\n * @private\n */\n\nconst removeDuplicateCuesFromTrack = function (track) {\n const cues = track.cues;\n if (!cues) {\n return;\n }\n for (let i = 0; i < cues.length; i++) {\n const duplicates = [];\n let occurrences = 0;\n for (let j = 0; j < cues.length; j++) {\n if (cues[i].startTime === cues[j].startTime && cues[i].endTime === cues[j].endTime && cues[i].text === cues[j].text) {\n occurrences++;\n if (occurrences > 1) {\n duplicates.push(cues[j]);\n }\n }\n }\n if (duplicates.length) {\n duplicates.forEach(dupe => track.removeCue(dupe));\n }\n }\n};\n\n/**\n * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in\n * front of current time.\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {number} currentTime\n * The current time\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n * @return {Array}\n * List of gops considered safe to append over\n */\n\nconst gopsSafeToAlignWith = (buffer, currentTime, mapping) => {\n if (typeof currentTime === 'undefined' || currentTime === null || !buffer.length) {\n return [];\n } // pts value for current time + 3 seconds to give a bit more wiggle room\n\n const currentTimePts = Math.ceil((currentTime - mapping + 3) * ONE_SECOND_IN_TS);\n let i;\n for (i = 0; i < buffer.length; i++) {\n if (buffer[i].pts > currentTimePts) {\n break;\n }\n }\n return buffer.slice(i);\n};\n/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Array} gops\n * List of new gop information\n * @param {boolean} replace\n * If true, replace the buffer with the new gop information. If false, append the\n * new gop information to the buffer in the right location of time.\n * @return {Array}\n * Updated list of gop information\n */\n\nconst updateGopBuffer = (buffer, gops, replace) => {\n if (!gops.length) {\n return buffer;\n }\n if (replace) {\n // If we are in safe append mode, then completely overwrite the gop buffer\n // with the most recent appeneded data. This will make sure that when appending\n // future segments, we only try to align with gops that are both ahead of current\n // time and in the last segment appended.\n return gops.slice();\n }\n const start = gops[0].pts;\n let i = 0;\n for (i; i < buffer.length; i++) {\n if (buffer[i].pts >= start) {\n break;\n }\n }\n return buffer.slice(0, i).concat(gops);\n};\n/**\n * Removes gop information in buffer that overlaps with provided start and end\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Double} start\n * position to start the remove at\n * @param {Double} end\n * position to end the remove at\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n */\n\nconst removeGopBuffer = (buffer, start, end, mapping) => {\n const startPts = Math.ceil((start - mapping) * ONE_SECOND_IN_TS);\n const endPts = Math.ceil((end - mapping) * ONE_SECOND_IN_TS);\n const updatedBuffer = buffer.slice();\n let i = buffer.length;\n while (i--) {\n if (buffer[i].pts <= endPts) {\n break;\n }\n }\n if (i === -1) {\n // no removal because end of remove range is before start of buffer\n return updatedBuffer;\n }\n let j = i + 1;\n while (j--) {\n if (buffer[j].pts <= startPts) {\n break;\n }\n } // clamp remove range start to 0 index\n\n j = Math.max(j, 0);\n updatedBuffer.splice(j, i - j + 1);\n return updatedBuffer;\n};\nconst shallowEqual = function (a, b) {\n // if both are undefined\n // or one or the other is undefined\n // they are not equal\n if (!a && !b || !a && b || a && !b) {\n return false;\n } // they are the same object and thus, equal\n\n if (a === b) {\n return true;\n } // sort keys so we can make sure they have\n // all the same keys later.\n\n const akeys = Object.keys(a).sort();\n const bkeys = Object.keys(b).sort(); // different number of keys, not equal\n\n if (akeys.length !== bkeys.length) {\n return false;\n }\n for (let i = 0; i < akeys.length; i++) {\n const key = akeys[i]; // different sorted keys, not equal\n\n if (key !== bkeys[i]) {\n return false;\n } // different values, not equal\n\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n};\n\n// https://www.w3.org/TR/WebIDL-1/#quotaexceedederror\nconst QUOTA_EXCEEDED_ERR = 22;\n\n/**\n * The segment loader has no recourse except to fetch a segment in the\n * current playlist and use the internal timestamps in that segment to\n * generate a syncPoint. This function returns a good candidate index\n * for that process.\n *\n * @param {Array} segments - the segments array from a playlist.\n * @return {number} An index of a segment from the playlist to load\n */\n\nconst getSyncSegmentCandidate = function (currentTimeline, segments, targetTime) {\n segments = segments || [];\n const timelineSegments = [];\n let time = 0;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (currentTimeline === segment.timeline) {\n timelineSegments.push(i);\n time += segment.duration;\n if (time > targetTime) {\n return i;\n }\n }\n }\n if (timelineSegments.length === 0) {\n return 0;\n } // default to the last timeline segment\n\n return timelineSegments[timelineSegments.length - 1];\n}; // In the event of a quota exceeded error, keep at least one second of back buffer. This\n// number was arbitrarily chosen and may be updated in the future, but seemed reasonable\n// as a start to prevent any potential issues with removing content too close to the\n// playhead.\n\nconst MIN_BACK_BUFFER = 1; // in ms\n\nconst CHECK_BUFFER_DELAY = 500;\nconst finite = num => typeof num === 'number' && isFinite(num); // With most content hovering around 30fps, if a segment has a duration less than a half\n// frame at 30fps or one frame at 60fps, the bandwidth and throughput calculations will\n// not accurately reflect the rest of the content.\n\nconst MIN_SEGMENT_DURATION_TO_SAVE_STATS = 1 / 60;\nconst illegalMediaSwitch = (loaderType, startingMedia, trackInfo) => {\n // Although these checks should most likely cover non 'main' types, for now it narrows\n // the scope of our checks.\n if (loaderType !== 'main' || !startingMedia || !trackInfo) {\n return null;\n }\n if (!trackInfo.hasAudio && !trackInfo.hasVideo) {\n return 'Neither audio nor video found in segment.';\n }\n if (startingMedia.hasVideo && !trackInfo.hasVideo) {\n return 'Only audio found in segment when we expected video.' + ' We can\\'t switch to audio only from a stream that had video.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n if (!startingMedia.hasVideo && trackInfo.hasVideo) {\n return 'Video found in segment when we expected only audio.' + ' We can\\'t switch to a stream with video from an audio only stream.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n return null;\n};\n/**\n * Calculates a time value that is safe to remove from the back buffer without interrupting\n * playback.\n *\n * @param {TimeRange} seekable\n * The current seekable range\n * @param {number} currentTime\n * The current time of the player\n * @param {number} targetDuration\n * The target duration of the current playlist\n * @return {number}\n * Time that is safe to remove from the back buffer without interrupting playback\n */\n\nconst safeBackBufferTrimTime = (seekable, currentTime, targetDuration) => {\n // 30 seconds before the playhead provides a safe default for trimming.\n //\n // Choosing a reasonable default is particularly important for high bitrate content and\n // VOD videos/live streams with large windows, as the buffer may end up overfilled and\n // throw an APPEND_BUFFER_ERR.\n let trimTime = currentTime - Config.BACK_BUFFER_LENGTH;\n if (seekable.length) {\n // Some live playlists may have a shorter window of content than the full allowed back\n // buffer. For these playlists, don't save content that's no longer within the window.\n trimTime = Math.max(trimTime, seekable.start(0));\n } // Don't remove within target duration of the current time to avoid the possibility of\n // removing the GOP currently being played, as removing it can cause playback stalls.\n\n const maxTrimTime = currentTime - targetDuration;\n return Math.min(maxTrimTime, trimTime);\n};\nconst segmentInfoString = segmentInfo => {\n const {\n startOfSegment,\n duration,\n segment,\n part,\n playlist: {\n mediaSequence: seq,\n id,\n segments = []\n },\n mediaIndex: index,\n partIndex,\n timeline\n } = segmentInfo;\n const segmentLen = segments.length - 1;\n let selection = 'mediaIndex/partIndex increment';\n if (segmentInfo.getMediaInfoForTime) {\n selection = `getMediaInfoForTime (${segmentInfo.getMediaInfoForTime})`;\n } else if (segmentInfo.isSyncRequest) {\n selection = 'getSyncSegmentCandidate (isSyncRequest)';\n }\n if (segmentInfo.independent) {\n selection += ` with independent ${segmentInfo.independent}`;\n }\n const hasPartIndex = typeof partIndex === 'number';\n const name = segmentInfo.segment.uri ? 'segment' : 'pre-segment';\n const zeroBasedPartCount = hasPartIndex ? getKnownPartCount({\n preloadSegment: segment\n }) - 1 : 0;\n return `${name} [${seq + index}/${seq + segmentLen}]` + (hasPartIndex ? ` part [${partIndex}/${zeroBasedPartCount}]` : '') + ` segment start/end [${segment.start} => ${segment.end}]` + (hasPartIndex ? ` part start/end [${part.start} => ${part.end}]` : '') + ` startOfSegment [${startOfSegment}]` + ` duration [${duration}]` + ` timeline [${timeline}]` + ` selected by [${selection}]` + ` playlist [${id}]`;\n};\nconst timingInfoPropertyForMedia = mediaType => `${mediaType}TimingInfo`;\n/**\n * Returns the timestamp offset to use for the segment.\n *\n * @param {number} segmentTimeline\n * The timeline of the segment\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} startOfSegment\n * The estimated segment start\n * @param {TimeRange[]} buffered\n * The loader's buffer\n * @param {boolean} overrideCheck\n * If true, no checks are made to see if the timestamp offset value should be set,\n * but sets it directly to a value.\n *\n * @return {number|null}\n * Either a number representing a new timestamp offset, or null if the segment is\n * part of the same timeline\n */\n\nconst timestampOffsetForSegment = ({\n segmentTimeline,\n currentTimeline,\n startOfSegment,\n buffered,\n overrideCheck\n}) => {\n // Check to see if we are crossing a discontinuity to see if we need to set the\n // timestamp offset on the transmuxer and source buffer.\n //\n // Previously, we changed the timestampOffset if the start of this segment was less than\n // the currently set timestampOffset, but this isn't desirable as it can produce bad\n // behavior, especially around long running live streams.\n if (!overrideCheck && segmentTimeline === currentTimeline) {\n return null;\n } // When changing renditions, it's possible to request a segment on an older timeline. For\n // instance, given two renditions with the following:\n //\n // #EXTINF:10\n // segment1\n // #EXT-X-DISCONTINUITY\n // #EXTINF:10\n // segment2\n // #EXTINF:10\n // segment3\n //\n // And the current player state:\n //\n // current time: 8\n // buffer: 0 => 20\n //\n // The next segment on the current rendition would be segment3, filling the buffer from\n // 20s onwards. However, if a rendition switch happens after segment2 was requested,\n // then the next segment to be requested will be segment1 from the new rendition in\n // order to fill time 8 and onwards. Using the buffered end would result in repeated\n // content (since it would position segment1 of the new rendition starting at 20s). This\n // case can be identified when the new segment's timeline is a prior value. Instead of\n // using the buffered end, the startOfSegment can be used, which, hopefully, will be\n // more accurate to the actual start time of the segment.\n\n if (segmentTimeline < currentTimeline) {\n return startOfSegment;\n } // segmentInfo.startOfSegment used to be used as the timestamp offset, however, that\n // value uses the end of the last segment if it is available. While this value\n // should often be correct, it's better to rely on the buffered end, as the new\n // content post discontinuity should line up with the buffered end as if it were\n // time 0 for the new content.\n\n return buffered.length ? buffered.end(buffered.length - 1) : startOfSegment;\n};\n/**\n * Returns whether or not the loader should wait for a timeline change from the timeline\n * change controller before processing the segment.\n *\n * Primary timing in VHS goes by video. This is different from most media players, as\n * audio is more often used as the primary timing source. For the foreseeable future, VHS\n * will continue to use video as the primary timing source, due to the current logic and\n * expectations built around it.\n\n * Since the timing follows video, in order to maintain sync, the video loader is\n * responsible for setting both audio and video source buffer timestamp offsets.\n *\n * Setting different values for audio and video source buffers could lead to\n * desyncing. The following examples demonstrate some of the situations where this\n * distinction is important. Note that all of these cases involve demuxed content. When\n * content is muxed, the audio and video are packaged together, therefore syncing\n * separate media playlists is not an issue.\n *\n * CASE 1: Audio prepares to load a new timeline before video:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the audio loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the video loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the audio loader goes ahead and loads and appends the 6th segment before the video\n * loader crosses the discontinuity, then when appended, the 6th audio segment will use\n * the timestamp offset from timeline 0. This will likely lead to desyncing. In addition,\n * the audio loader must provide the audioAppendStart value to trim the content in the\n * transmuxer, and that value relies on the audio timestamp offset. Since the audio\n * timestamp offset is set by the video (main) loader, the audio loader shouldn't load the\n * segment until that value is provided.\n *\n * CASE 2: Video prepares to load a new timeline before audio:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the video loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the audio loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the video loader goes ahead and loads and appends the 6th segment, then once the\n * segment is loaded and processed, both the video and audio timestamp offsets will be\n * set, since video is used as the primary timing source. This is to ensure content lines\n * up appropriately, as any modifications to the video timing are reflected by audio when\n * the video loader sets the audio and video timestamp offsets to the same value. However,\n * setting the timestamp offset for audio before audio has had a chance to change\n * timelines will likely lead to desyncing, as the audio loader will append segment 5 with\n * a timestamp intended to apply to segments from timeline 1 rather than timeline 0.\n *\n * CASE 3: When seeking, audio prepares to load a new timeline before video\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, both audio and video loaders are loading segments from timeline\n * 0, but imagine that the seek originated from timeline 1.\n *\n * When seeking to a new timeline, the timestamp offset will be set based on the expected\n * segment start of the loaded video segment. In order to maintain sync, the audio loader\n * must wait for the video loader to load its segment and update both the audio and video\n * timestamp offsets before it may load and append its own segment. This is the case\n * whether the seek results in a mismatched segment request (e.g., the audio loader\n * chooses to load segment 3 and the video loader chooses to load segment 4) or the\n * loaders choose to load the same segment index from each playlist, as the segments may\n * not be aligned perfectly, even for matching segment indexes.\n *\n * @param {Object} timelinechangeController\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} segmentTimeline\n * The timeline of the segment being loaded\n * @param {('main'|'audio')} loaderType\n * The loader type\n * @param {boolean} audioDisabled\n * Whether the audio is disabled for the loader. This should only be true when the\n * loader may have muxed audio in its segment, but should not append it, e.g., for\n * the main loader when an alternate audio playlist is active.\n *\n * @return {boolean}\n * Whether the loader should wait for a timeline change from the timeline change\n * controller before processing the segment\n */\n\nconst shouldWaitForTimelineChange = ({\n timelineChangeController,\n currentTimeline,\n segmentTimeline,\n loaderType,\n audioDisabled\n}) => {\n if (currentTimeline === segmentTimeline) {\n return false;\n }\n if (loaderType === 'audio') {\n const lastMainTimelineChange = timelineChangeController.lastTimelineChange({\n type: 'main'\n }); // Audio loader should wait if:\n //\n // * main hasn't had a timeline change yet (thus has not loaded its first segment)\n // * main hasn't yet changed to the timeline audio is looking to load\n\n return !lastMainTimelineChange || lastMainTimelineChange.to !== segmentTimeline;\n } // The main loader only needs to wait for timeline changes if there's demuxed audio.\n // Otherwise, there's nothing to wait for, since audio would be muxed into the main\n // loader's segments (or the content is audio/video only and handled by the main\n // loader).\n\n if (loaderType === 'main' && audioDisabled) {\n const pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({\n type: 'audio'\n }); // Main loader should wait for the audio loader if audio is not pending a timeline\n // change to the current timeline.\n //\n // Since the main loader is responsible for setting the timestamp offset for both\n // audio and video, the main loader must wait for audio to be about to change to its\n // timeline before setting the offset, otherwise, if audio is behind in loading,\n // segments from the previous timeline would be adjusted by the new timestamp offset.\n //\n // This requirement means that video will not cross a timeline until the audio is\n // about to cross to it, so that way audio and video will always cross the timeline\n // together.\n //\n // In addition to normal timeline changes, these rules also apply to the start of a\n // stream (going from a non-existent timeline, -1, to timeline 0). It's important\n // that these rules apply to the first timeline change because if they did not, it's\n // possible that the main loader will cross two timelines before the audio loader has\n // crossed one. Logic may be implemented to handle the startup as a special case, but\n // it's easier to simply treat all timeline changes the same.\n\n if (pendingAudioTimelineChange && pendingAudioTimelineChange.to === segmentTimeline) {\n return false;\n }\n return true;\n }\n return false;\n};\nconst mediaDuration = timingInfos => {\n let maxDuration = 0;\n ['video', 'audio'].forEach(function (type) {\n const typeTimingInfo = timingInfos[`${type}TimingInfo`];\n if (!typeTimingInfo) {\n return;\n }\n const {\n start,\n end\n } = typeTimingInfo;\n let duration;\n if (typeof start === 'bigint' || typeof end === 'bigint') {\n duration = window$1.BigInt(end) - window$1.BigInt(start);\n } else if (typeof start === 'number' && typeof end === 'number') {\n duration = end - start;\n }\n if (typeof duration !== 'undefined' && duration > maxDuration) {\n maxDuration = duration;\n }\n }); // convert back to a number if it is lower than MAX_SAFE_INTEGER\n // as we only need BigInt when we are above that.\n\n if (typeof maxDuration === 'bigint' && maxDuration < Number.MAX_SAFE_INTEGER) {\n maxDuration = Number(maxDuration);\n }\n return maxDuration;\n};\nconst segmentTooLong = ({\n segmentDuration,\n maxDuration\n}) => {\n // 0 duration segments are most likely due to metadata only segments or a lack of\n // information.\n if (!segmentDuration) {\n return false;\n } // For HLS:\n //\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1\n // The EXTINF duration of each Media Segment in the Playlist\n // file, when rounded to the nearest integer, MUST be less than or equal\n // to the target duration; longer segments can trigger playback stalls\n // or other errors.\n //\n // For DASH, the mpd-parser uses the largest reported segment duration as the target\n // duration. Although that reported duration is occasionally approximate (i.e., not\n // exact), a strict check may report that a segment is too long more often in DASH.\n\n return Math.round(segmentDuration) > maxDuration + TIME_FUDGE_FACTOR;\n};\nconst getTroublesomeSegmentDurationMessage = (segmentInfo, sourceType) => {\n // Right now we aren't following DASH's timing model exactly, so only perform\n // this check for HLS content.\n if (sourceType !== 'hls') {\n return null;\n }\n const segmentDuration = mediaDuration({\n audioTimingInfo: segmentInfo.audioTimingInfo,\n videoTimingInfo: segmentInfo.videoTimingInfo\n }); // Don't report if we lack information.\n //\n // If the segment has a duration of 0 it is either a lack of information or a\n // metadata only segment and shouldn't be reported here.\n\n if (!segmentDuration) {\n return null;\n }\n const targetDuration = segmentInfo.playlist.targetDuration;\n const isSegmentWayTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration * 2\n });\n const isSegmentSlightlyTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration\n });\n const segmentTooLongMessage = `Segment with index ${segmentInfo.mediaIndex} ` + `from playlist ${segmentInfo.playlist.id} ` + `has a duration of ${segmentDuration} ` + `when the reported duration is ${segmentInfo.duration} ` + `and the target duration is ${targetDuration}. ` + 'For HLS content, a duration in excess of the target duration may result in ' + 'playback issues. See the HLS specification section on EXT-X-TARGETDURATION for ' + 'more details: ' + 'https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1';\n if (isSegmentWayTooLong || isSegmentSlightlyTooLong) {\n return {\n severity: isSegmentWayTooLong ? 'warn' : 'info',\n message: segmentTooLongMessage\n };\n }\n return null;\n};\n/**\n * An object that manages segment loading and appending.\n *\n * @class SegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass SegmentLoader extends videojs.EventTarget {\n constructor(settings, options = {}) {\n super(); // check pre-conditions\n\n if (!settings) {\n throw new TypeError('Initialization settings are required');\n }\n if (typeof settings.currentTime !== 'function') {\n throw new TypeError('No currentTime getter specified');\n }\n if (!settings.mediaSource) {\n throw new TypeError('No MediaSource specified');\n } // public properties\n\n this.bandwidth = settings.bandwidth;\n this.throughput = {\n rate: 0,\n count: 0\n };\n this.roundTrip = NaN;\n this.resetStats_();\n this.mediaIndex = null;\n this.partIndex = null; // private settings\n\n this.hasPlayed_ = settings.hasPlayed;\n this.currentTime_ = settings.currentTime;\n this.seekable_ = settings.seekable;\n this.seeking_ = settings.seeking;\n this.duration_ = settings.duration;\n this.mediaSource_ = settings.mediaSource;\n this.vhs_ = settings.vhs;\n this.loaderType_ = settings.loaderType;\n this.currentMediaInfo_ = void 0;\n this.startingMediaInfo_ = void 0;\n this.segmentMetadataTrack_ = settings.segmentMetadataTrack;\n this.goalBufferLength_ = settings.goalBufferLength;\n this.sourceType_ = settings.sourceType;\n this.sourceUpdater_ = settings.sourceUpdater;\n this.inbandTextTracks_ = settings.inbandTextTracks;\n this.state_ = 'INIT';\n this.timelineChangeController_ = settings.timelineChangeController;\n this.shouldSaveSegmentTimingInfo_ = true;\n this.parse708captions_ = settings.parse708captions;\n this.useDtsForTimestampOffset_ = settings.useDtsForTimestampOffset;\n this.captionServices_ = settings.captionServices;\n this.exactManifestTimings = settings.exactManifestTimings; // private instance variables\n\n this.checkBufferTimeout_ = null;\n this.error_ = void 0;\n this.currentTimeline_ = -1;\n this.pendingSegment_ = null;\n this.xhrOptions_ = null;\n this.pendingSegments_ = [];\n this.audioDisabled_ = false;\n this.isPendingTimestampOffset_ = false; // TODO possibly move gopBuffer and timeMapping info to a separate controller\n\n this.gopBuffer_ = [];\n this.timeMapping_ = 0;\n this.safeAppend_ = videojs.browser.IE_VERSION >= 11;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.playlistOfLastInitSegment_ = {\n audio: null,\n video: null\n };\n this.callQueue_ = []; // If the segment loader prepares to load a segment, but does not have enough\n // information yet to start the loading process (e.g., if the audio loader wants to\n // load a segment from the next timeline but the main loader hasn't yet crossed that\n // timeline), then the load call will be added to the queue until it is ready to be\n // processed.\n\n this.loadQueue_ = [];\n this.metadataQueue_ = {\n id3: [],\n caption: []\n };\n this.waitingOnRemove_ = false;\n this.quotaExceededErrorRetryTimeout_ = null; // Fragmented mp4 playback\n\n this.activeInitSegmentId_ = null;\n this.initSegments_ = {}; // HLSe playback\n\n this.cacheEncryptionKeys_ = settings.cacheEncryptionKeys;\n this.keyCache_ = {};\n this.decrypter_ = settings.decrypter; // Manages the tracking and generation of sync-points, mappings\n // between a time in the display time and a segment index within\n // a playlist\n\n this.syncController_ = settings.syncController;\n this.syncPoint_ = {\n segmentIndex: 0,\n time: 0\n };\n this.transmuxer_ = this.createTransmuxer_();\n this.triggerSyncInfoUpdate_ = () => this.trigger('syncinfoupdate');\n this.syncController_.on('syncinfoupdate', this.triggerSyncInfoUpdate_);\n this.mediaSource_.addEventListener('sourceopen', () => {\n if (!this.isEndOfStream_()) {\n this.ended_ = false;\n }\n }); // ...for determining the fetch location\n\n this.fetchAtBuffer_ = false;\n this.logger_ = logger(`SegmentLoader[${this.loaderType_}]`);\n Object.defineProperty(this, 'state', {\n get() {\n return this.state_;\n },\n set(newState) {\n if (newState !== this.state_) {\n this.logger_(`${this.state_} -> ${newState}`);\n this.state_ = newState;\n this.trigger('statechange');\n }\n }\n });\n this.sourceUpdater_.on('ready', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }); // Only the main loader needs to listen for pending timeline changes, as the main\n // loader should wait for audio to be ready to change its timeline so that both main\n // and audio timelines change together. For more details, see the\n // shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'main') {\n this.timelineChangeController_.on('pendingtimelinechange', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n });\n } // The main loader only listens on pending timeline changes, but the audio loader,\n // since its loads follow main, needs to listen on timeline changes. For more details,\n // see the shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'audio') {\n this.timelineChangeController_.on('timelinechange', () => {\n if (this.hasEnoughInfoToLoad_()) {\n this.processLoadQueue_();\n }\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n });\n }\n }\n createTransmuxer_() {\n return segmentTransmuxer.createTransmuxer({\n remux: false,\n alignGopsAtEnd: this.safeAppend_,\n keepOriginalTimestamps: true,\n parse708captions: this.parse708captions_,\n captionServices: this.captionServices_\n });\n }\n /**\n * reset all of our media stats\n *\n * @private\n */\n\n resetStats_() {\n this.mediaBytesTransferred = 0;\n this.mediaRequests = 0;\n this.mediaRequestsAborted = 0;\n this.mediaRequestsTimedout = 0;\n this.mediaRequestsErrored = 0;\n this.mediaTransferDuration = 0;\n this.mediaSecondsLoaded = 0;\n this.mediaAppends = 0;\n }\n /**\n * dispose of the SegmentLoader and reset to the default state\n */\n\n dispose() {\n this.trigger('dispose');\n this.state = 'DISPOSED';\n this.pause();\n this.abort_();\n if (this.transmuxer_) {\n this.transmuxer_.terminate();\n }\n this.resetStats_();\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n if (this.syncController_ && this.triggerSyncInfoUpdate_) {\n this.syncController_.off('syncinfoupdate', this.triggerSyncInfoUpdate_);\n }\n this.off();\n }\n setAudio(enable) {\n this.audioDisabled_ = !enable;\n if (enable) {\n this.appendInitSegment_.audio = true;\n } else {\n // remove current track audio if it gets disabled\n this.sourceUpdater_.removeAudio(0, this.duration_());\n }\n }\n /**\n * abort anything that is currently doing on with the SegmentLoader\n * and reset to a default state\n */\n\n abort() {\n if (this.state !== 'WAITING') {\n if (this.pendingSegment_) {\n this.pendingSegment_ = null;\n }\n return;\n }\n this.abort_(); // We aborted the requests we were waiting on, so reset the loader's state to READY\n // since we are no longer \"waiting\" on any requests. XHR callback is not always run\n // when the request is aborted. This will prevent the loader from being stuck in the\n // WAITING state indefinitely.\n\n this.state = 'READY'; // don't wait for buffer check timeouts to begin fetching the\n // next segment\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * abort all pending xhr requests and null any pending segements\n *\n * @private\n */\n\n abort_() {\n if (this.pendingSegment_ && this.pendingSegment_.abortRequests) {\n this.pendingSegment_.abortRequests();\n } // clear out the segment being processed\n\n this.pendingSegment_ = null;\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_);\n this.waitingOnRemove_ = false;\n window$1.clearTimeout(this.quotaExceededErrorRetryTimeout_);\n this.quotaExceededErrorRetryTimeout_ = null;\n }\n checkForAbort_(requestId) {\n // If the state is APPENDING, then aborts will not modify the state, meaning the first\n // callback that happens should reset the state to READY so that loading can continue.\n if (this.state === 'APPENDING' && !this.pendingSegment_) {\n this.state = 'READY';\n return true;\n }\n if (!this.pendingSegment_ || this.pendingSegment_.requestId !== requestId) {\n return true;\n }\n return false;\n }\n /**\n * set an error on the segment loader and null out any pending segements\n *\n * @param {Error} error the error to set on the SegmentLoader\n * @return {Error} the error that was set or that is currently set\n */\n\n error(error) {\n if (typeof error !== 'undefined') {\n this.logger_('error occurred:', error);\n this.error_ = error;\n }\n this.pendingSegment_ = null;\n return this.error_;\n }\n endOfStream() {\n this.ended_ = true;\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.gopBuffer_.length = 0;\n this.pause();\n this.trigger('ended');\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n const trackInfo = this.getMediaInfo_();\n if (!this.sourceUpdater_ || !trackInfo) {\n return createTimeRanges();\n }\n if (this.loaderType_ === 'main') {\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && hasAudio && !this.audioDisabled_ && !isMuxed) {\n return this.sourceUpdater_.buffered();\n }\n if (hasVideo) {\n return this.sourceUpdater_.videoBuffered();\n }\n } // One case that can be ignored for now is audio only with alt audio,\n // as we don't yet have proper support for that.\n\n return this.sourceUpdater_.audioBuffered();\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: map.bytes,\n tracks: map.tracks,\n timescales: map.timescales\n };\n }\n return storedMap || map;\n }\n /**\n * Gets and sets key for the provided key\n *\n * @param {Object} key\n * The key object representing the key to get or set\n * @param {boolean=} set\n * If true, the key for the provided key should be saved\n * @return {Object}\n * Key object for desired key\n */\n\n segmentKey(key, set = false) {\n if (!key) {\n return null;\n }\n const id = segmentKeyId(key);\n let storedKey = this.keyCache_[id]; // TODO: We should use the HTTP Expires header to invalidate our cache per\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.2.3\n\n if (this.cacheEncryptionKeys_ && set && !storedKey && key.bytes) {\n this.keyCache_[id] = storedKey = {\n resolvedUri: key.resolvedUri,\n bytes: key.bytes\n };\n }\n const result = {\n resolvedUri: (storedKey || key).resolvedUri\n };\n if (storedKey) {\n result.bytes = storedKey.bytes;\n }\n return result;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && !this.paused();\n }\n /**\n * load a playlist and start to fill the buffer\n */\n\n load() {\n // un-pause\n this.monitorBuffer_(); // if we don't have a playlist yet, keep waiting for one to be\n // specified\n\n if (!this.playlist_) {\n return;\n } // if all the configuration is ready, initialize and begin loading\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n } // if we're in the middle of processing a segment already, don't\n // kick off an additional segment request\n\n if (!this.couldBeginLoading_() || this.state !== 'READY' && this.state !== 'INIT') {\n return;\n }\n this.state = 'READY';\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY'; // if this is the audio segment loader, and it hasn't been inited before, then any old\n // audio data from the muxed content should be removed\n\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * set a playlist on the segment loader\n *\n * @param {PlaylistLoader} media the playlist to set on the segment loader\n */\n\n playlist(newPlaylist, options = {}) {\n if (!newPlaylist) {\n return;\n }\n const oldPlaylist = this.playlist_;\n const segmentInfo = this.pendingSegment_;\n this.playlist_ = newPlaylist;\n this.xhrOptions_ = options; // when we haven't started playing yet, the start of a live playlist\n // is always our zero-time so force a sync update each time the playlist\n // is refreshed from the server\n //\n // Use the INIT state to determine if playback has started, as the playlist sync info\n // should be fixed once requests begin (as sync points are generated based on sync\n // info), but not before then.\n\n if (this.state === 'INIT') {\n newPlaylist.syncInfo = {\n mediaSequence: newPlaylist.mediaSequence,\n time: 0\n }; // Setting the date time mapping means mapping the program date time (if available)\n // to time 0 on the player's timeline. The playlist's syncInfo serves a similar\n // purpose, mapping the initial mediaSequence to time zero. Since the syncInfo can\n // be updated as the playlist is refreshed before the loader starts loading, the\n // program date time mapping needs to be updated as well.\n //\n // This mapping is only done for the main loader because a program date time should\n // map equivalently between playlists.\n\n if (this.loaderType_ === 'main') {\n this.syncController_.setDateTimeMappingForStart(newPlaylist);\n }\n }\n let oldId = null;\n if (oldPlaylist) {\n if (oldPlaylist.id) {\n oldId = oldPlaylist.id;\n } else if (oldPlaylist.uri) {\n oldId = oldPlaylist.uri;\n }\n }\n this.logger_(`playlist update [${oldId} => ${newPlaylist.id || newPlaylist.uri}]`); // in VOD, this is always a rendition switch (or we updated our syncInfo above)\n // in LIVE, we always want to update with new playlists (including refreshes)\n\n this.trigger('syncinfoupdate'); // if we were unpaused but waiting for a playlist, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n }\n if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) {\n if (this.mediaIndex !== null) {\n // we must reset/resync the segment loader when we switch renditions and\n // the segment loader is already synced to the previous rendition\n // on playlist changes we want it to be possible to fetch\n // at the buffer for vod but not for live. So we use resetLoader\n // for live and resyncLoader for vod. We want this because\n // if a playlist uses independent and non-independent segments/parts the\n // buffer may not accurately reflect the next segment that we should try\n // downloading.\n if (!newPlaylist.endList) {\n this.resetLoader();\n } else {\n this.resyncLoader();\n }\n }\n this.currentMediaInfo_ = void 0;\n this.trigger('playlistupdate'); // the rest of this function depends on `oldPlaylist` being defined\n\n return;\n } // we reloaded the same playlist so we are in a live scenario\n // and we will likely need to adjust the mediaIndex\n\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence;\n this.logger_(`live window shift [${mediaSequenceDiff}]`); // update the mediaIndex on the SegmentLoader\n // this is important because we can abort a request and this value must be\n // equal to the last appended mediaIndex\n\n if (this.mediaIndex !== null) {\n this.mediaIndex -= mediaSequenceDiff; // this can happen if we are going to load the first segment, but get a playlist\n // update during that. mediaIndex would go from 0 to -1 if mediaSequence in the\n // new playlist was incremented by 1.\n\n if (this.mediaIndex < 0) {\n this.mediaIndex = null;\n this.partIndex = null;\n } else {\n const segment = this.playlist_.segments[this.mediaIndex]; // partIndex should remain the same for the same segment\n // unless parts fell off of the playlist for this segment.\n // In that case we need to reset partIndex and resync\n\n if (this.partIndex && (!segment.parts || !segment.parts.length || !segment.parts[this.partIndex])) {\n const mediaIndex = this.mediaIndex;\n this.logger_(`currently processing part (index ${this.partIndex}) no longer exists.`);\n this.resetLoader(); // We want to throw away the partIndex and the data associated with it,\n // as the part was dropped from our current playlists segment.\n // The mediaIndex will still be valid so keep that around.\n\n this.mediaIndex = mediaIndex;\n }\n }\n } // update the mediaIndex on the SegmentInfo object\n // this is important because we will update this.mediaIndex with this value\n // in `handleAppendsDone_` after the segment has been successfully appended\n\n if (segmentInfo) {\n segmentInfo.mediaIndex -= mediaSequenceDiff;\n if (segmentInfo.mediaIndex < 0) {\n segmentInfo.mediaIndex = null;\n segmentInfo.partIndex = null;\n } else {\n // we need to update the referenced segment so that timing information is\n // saved for the new playlist's segment, however, if the segment fell off the\n // playlist, we can leave the old reference and just lose the timing info\n if (segmentInfo.mediaIndex >= 0) {\n segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex];\n }\n if (segmentInfo.partIndex >= 0 && segmentInfo.segment.parts) {\n segmentInfo.part = segmentInfo.segment.parts[segmentInfo.partIndex];\n }\n }\n }\n this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist);\n }\n /**\n * Prevent the loader from fetching additional segments. If there\n * is a segment request outstanding, it will finish processing\n * before the loader halts. A segment loader can be unpaused by\n * calling load().\n */\n\n pause() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n this.checkBufferTimeout_ = null;\n }\n }\n /**\n * Returns whether the segment loader is fetching additional\n * segments when given the opportunity. This property can be\n * modified through calls to pause() and load().\n */\n\n paused() {\n return this.checkBufferTimeout_ === null;\n }\n /**\n * Delete all the buffered data and reset the SegmentLoader\n *\n * @param {Function} [done] an optional callback to be executed when the remove\n * operation is complete\n */\n\n resetEverything(done) {\n this.ended_ = false;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.resetLoader(); // remove from 0, the earliest point, to Infinity, to signify removal of everything.\n // VTT Segment Loader doesn't need to do anything but in the regular SegmentLoader,\n // we then clamp the value to duration if necessary.\n\n this.remove(0, Infinity, done); // clears fmp4 captions\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n }); // reset the cache in the transmuxer\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n }\n }\n /**\n * Force the SegmentLoader to resync and start loading around the currentTime instead\n * of starting at the end of the buffer\n *\n * Useful for fast quality changes\n */\n\n resetLoader() {\n this.fetchAtBuffer_ = false;\n this.resyncLoader();\n }\n /**\n * Force the SegmentLoader to restart synchronization and make a conservative guess\n * before returning to the simple walk-forward method\n */\n\n resyncLoader() {\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.mediaIndex = null;\n this.partIndex = null;\n this.syncPoint_ = null;\n this.isPendingTimestampOffset_ = false;\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.abort();\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n * @param {Function} [done] - an optional callback to be executed when the remove\n * @param {boolean} force - force all remove operations to happen\n * operation is complete\n */\n\n remove(start, end, done = () => {}, force = false) {\n // clamp end to duration if we need to remove everything.\n // This is due to a browser bug that causes issues if we remove to Infinity.\n // videojs/videojs-contrib-hls#1225\n if (end === Infinity) {\n end = this.duration_();\n } // skip removes that would throw an error\n // commonly happens during a rendition switch at the start of a video\n // from start 0 to end 0\n\n if (end <= start) {\n this.logger_('skipping remove because end ${end} is <= start ${start}');\n return;\n }\n if (!this.sourceUpdater_ || !this.getMediaInfo_()) {\n this.logger_('skipping remove because no source updater or starting media info'); // nothing to remove if we haven't processed any media\n\n return;\n } // set it to one to complete this function's removes\n\n let removesRemaining = 1;\n const removeFinished = () => {\n removesRemaining--;\n if (removesRemaining === 0) {\n done();\n }\n };\n if (force || !this.audioDisabled_) {\n removesRemaining++;\n this.sourceUpdater_.removeAudio(start, end, removeFinished);\n } // While it would be better to only remove video if the main loader has video, this\n // should be safe with audio only as removeVideo will call back even if there's no\n // video buffer.\n //\n // In theory we can check to see if there's video before calling the remove, but in\n // the event that we're switching between renditions and from video to audio only\n // (when we add support for that), we may need to clear the video contents despite\n // what the new media will contain.\n\n if (force || this.loaderType_ === 'main') {\n this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start, end, this.timeMapping_);\n removesRemaining++;\n this.sourceUpdater_.removeVideo(start, end, removeFinished);\n } // remove any captions and ID3 tags\n\n for (const track in this.inbandTextTracks_) {\n removeCuesFromTrack(start, end, this.inbandTextTracks_[track]);\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_); // finished this function's removes\n\n removeFinished();\n }\n /**\n * (re-)schedule monitorBufferTick_ to run as soon as possible\n *\n * @private\n */\n\n monitorBuffer_() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), 1);\n }\n /**\n * As long as the SegmentLoader is in the READY state, periodically\n * invoke fillBuffer_().\n *\n * @private\n */\n\n monitorBufferTick_() {\n if (this.state === 'READY') {\n this.fillBuffer_();\n }\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // TODO since the source buffer maintains a queue, and we shouldn't call this function\n // except when we're ready for the next segment, this check can most likely be removed\n if (this.sourceUpdater_.updating()) {\n return;\n } // see if we need to begin loading immediately\n\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n if (typeof segmentInfo.timestampOffset === 'number') {\n this.isPendingTimestampOffset_ = false;\n this.timelineChangeController_.pendingTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n this.loadSegment_(segmentInfo);\n }\n /**\n * Determines if we should call endOfStream on the media source based\n * on the state of the buffer or if appened segment was the final\n * segment in the playlist.\n *\n * @param {number} [mediaIndex] the media index of segment we last appended\n * @param {Object} [playlist] a media playlist object\n * @return {boolean} do we need to call endOfStream on the MediaSource\n */\n\n isEndOfStream_(mediaIndex = this.mediaIndex, playlist = this.playlist_, partIndex = this.partIndex) {\n if (!playlist || !this.mediaSource_) {\n return false;\n }\n const segment = typeof mediaIndex === 'number' && playlist.segments[mediaIndex]; // mediaIndex is zero based but length is 1 based\n\n const appendedLastSegment = mediaIndex + 1 === playlist.segments.length; // true if there are no parts, or this is the last part.\n\n const appendedLastPart = !segment || !segment.parts || partIndex + 1 === segment.parts.length; // if we've buffered to the end of the video, we need to call endOfStream\n // so that MediaSources can trigger the `ended` event when it runs out of\n // buffered data instead of waiting for me\n\n return playlist.endList && this.mediaSource_.readyState === 'open' && appendedLastSegment && appendedLastPart;\n }\n /**\n * Determines what request should be made given current segment loader state.\n *\n * @return {Object} a request object that describes the segment/part to load\n */\n\n chooseNextRequest_() {\n const buffered = this.buffered_();\n const bufferedEnd = lastBufferedEnd(buffered) || 0;\n const bufferedTime = timeAheadOf(buffered, this.currentTime_());\n const preloaded = !this.hasPlayed_() && bufferedTime >= 1;\n const haveEnoughBuffer = bufferedTime >= this.goalBufferLength_();\n const segments = this.playlist_.segments; // return no segment if:\n // 1. we don't have segments\n // 2. The video has not yet played and we already downloaded a segment\n // 3. we already have enough buffered time\n\n if (!segments.length || preloaded || haveEnoughBuffer) {\n return null;\n }\n this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_());\n const next = {\n partIndex: null,\n mediaIndex: null,\n startOfSegment: null,\n playlist: this.playlist_,\n isSyncRequest: Boolean(!this.syncPoint_)\n };\n if (next.isSyncRequest) {\n next.mediaIndex = getSyncSegmentCandidate(this.currentTimeline_, segments, bufferedEnd);\n } else if (this.mediaIndex !== null) {\n const segment = segments[this.mediaIndex];\n const partIndex = typeof this.partIndex === 'number' ? this.partIndex : -1;\n next.startOfSegment = segment.end ? segment.end : bufferedEnd;\n if (segment.parts && segment.parts[partIndex + 1]) {\n next.mediaIndex = this.mediaIndex;\n next.partIndex = partIndex + 1;\n } else {\n next.mediaIndex = this.mediaIndex + 1;\n }\n } else {\n // Find the segment containing the end of the buffer or current time.\n const {\n segmentIndex,\n startTime,\n partIndex\n } = Playlist.getMediaInfoForTime({\n exactManifestTimings: this.exactManifestTimings,\n playlist: this.playlist_,\n currentTime: this.fetchAtBuffer_ ? bufferedEnd : this.currentTime_(),\n startingPartIndex: this.syncPoint_.partIndex,\n startingSegmentIndex: this.syncPoint_.segmentIndex,\n startTime: this.syncPoint_.time\n });\n next.getMediaInfoForTime = this.fetchAtBuffer_ ? `bufferedEnd ${bufferedEnd}` : `currentTime ${this.currentTime_()}`;\n next.mediaIndex = segmentIndex;\n next.startOfSegment = startTime;\n next.partIndex = partIndex;\n }\n const nextSegment = segments[next.mediaIndex];\n let nextPart = nextSegment && typeof next.partIndex === 'number' && nextSegment.parts && nextSegment.parts[next.partIndex]; // if the next segment index is invalid or\n // the next partIndex is invalid do not choose a next segment.\n\n if (!nextSegment || typeof next.partIndex === 'number' && !nextPart) {\n return null;\n } // if the next segment has parts, and we don't have a partIndex.\n // Set partIndex to 0\n\n if (typeof next.partIndex !== 'number' && nextSegment.parts) {\n next.partIndex = 0;\n nextPart = nextSegment.parts[0];\n } // if we have no buffered data then we need to make sure\n // that the next part we append is \"independent\" if possible.\n // So we check if the previous part is independent, and request\n // it if it is.\n\n if (!bufferedTime && nextPart && !nextPart.independent) {\n if (next.partIndex === 0) {\n const lastSegment = segments[next.mediaIndex - 1];\n const lastSegmentLastPart = lastSegment.parts && lastSegment.parts.length && lastSegment.parts[lastSegment.parts.length - 1];\n if (lastSegmentLastPart && lastSegmentLastPart.independent) {\n next.mediaIndex -= 1;\n next.partIndex = lastSegment.parts.length - 1;\n next.independent = 'previous segment';\n }\n } else if (nextSegment.parts[next.partIndex - 1].independent) {\n next.partIndex -= 1;\n next.independent = 'previous part';\n }\n }\n const ended = this.mediaSource_ && this.mediaSource_.readyState === 'ended'; // do not choose a next segment if all of the following:\n // 1. this is the last segment in the playlist\n // 2. end of stream has been called on the media source already\n // 3. the player is not seeking\n\n if (next.mediaIndex >= segments.length - 1 && ended && !this.seeking_()) {\n return null;\n }\n return this.generateSegmentInfo_(next);\n }\n generateSegmentInfo_(options) {\n const {\n independent,\n playlist,\n mediaIndex,\n startOfSegment,\n isSyncRequest,\n partIndex,\n forceTimestampOffset,\n getMediaInfoForTime\n } = options;\n const segment = playlist.segments[mediaIndex];\n const part = typeof partIndex === 'number' && segment.parts[partIndex];\n const segmentInfo = {\n requestId: 'segment-loader-' + Math.random(),\n // resolve the segment URL relative to the playlist\n uri: part && part.resolvedUri || segment.resolvedUri,\n // the segment's mediaIndex at the time it was requested\n mediaIndex,\n partIndex: part ? partIndex : null,\n // whether or not to update the SegmentLoader's state with this\n // segment's mediaIndex\n isSyncRequest,\n startOfSegment,\n // the segment's playlist\n playlist,\n // unencrypted bytes of the segment\n bytes: null,\n // when a key is defined for this segment, the encrypted bytes\n encryptedBytes: null,\n // The target timestampOffset for this segment when we append it\n // to the source buffer\n timestampOffset: null,\n // The timeline that the segment is in\n timeline: segment.timeline,\n // The expected duration of the segment in seconds\n duration: part && part.duration || segment.duration,\n // retain the segment in case the playlist updates while doing an async process\n segment,\n part,\n byteLength: 0,\n transmuxer: this.transmuxer_,\n // type of getMediaInfoForTime that was used to get this segment\n getMediaInfoForTime,\n independent\n };\n const overrideCheck = typeof forceTimestampOffset !== 'undefined' ? forceTimestampOffset : this.isPendingTimestampOffset_;\n segmentInfo.timestampOffset = this.timestampOffsetForSegment_({\n segmentTimeline: segment.timeline,\n currentTimeline: this.currentTimeline_,\n startOfSegment,\n buffered: this.buffered_(),\n overrideCheck\n });\n const audioBufferedEnd = lastBufferedEnd(this.sourceUpdater_.audioBuffered());\n if (typeof audioBufferedEnd === 'number') {\n // since the transmuxer is using the actual timing values, but the buffer is\n // adjusted by the timestamp offset, we must adjust the value here\n segmentInfo.audioAppendStart = audioBufferedEnd - this.sourceUpdater_.audioTimestampOffset();\n }\n if (this.sourceUpdater_.videoBuffered().length) {\n segmentInfo.gopsToAlignWith = gopsSafeToAlignWith(this.gopBuffer_,\n // since the transmuxer is using the actual timing values, but the time is\n // adjusted by the timestmap offset, we must adjust the value here\n this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_);\n }\n return segmentInfo;\n } // get the timestampoffset for a segment,\n // added so that vtt segment loader can override and prevent\n // adding timestamp offsets.\n\n timestampOffsetForSegment_(options) {\n return timestampOffsetForSegment(options);\n }\n /**\n * Determines if the network has enough bandwidth to complete the current segment\n * request in a timely manner. If not, the request will be aborted early and bandwidth\n * updated to trigger a playlist switch.\n *\n * @param {Object} stats\n * Object containing stats about the request timing and size\n * @private\n */\n\n earlyAbortWhenNeeded_(stats) {\n if (this.vhs_.tech_.paused() ||\n // Don't abort if the current playlist is on the lowestEnabledRendition\n // TODO: Replace using timeout with a boolean indicating whether this playlist is\n // the lowestEnabledRendition.\n !this.xhrOptions_.timeout ||\n // Don't abort if we have no bandwidth information to estimate segment sizes\n !this.playlist_.attributes.BANDWIDTH) {\n return;\n } // Wait at least 1 second since the first byte of data has been received before\n // using the calculated bandwidth from the progress event to allow the bitrate\n // to stabilize\n\n if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1000) {\n return;\n }\n const currentTime = this.currentTime_();\n const measuredBandwidth = stats.bandwidth;\n const segmentDuration = this.pendingSegment_.duration;\n const requestTimeRemaining = Playlist.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); // Subtract 1 from the timeUntilRebuffer so we still consider an early abort\n // if we are only left with less than 1 second when the request completes.\n // A negative timeUntilRebuffering indicates we are already rebuffering\n\n const timeUntilRebuffer$1 = timeUntilRebuffer(this.buffered_(), currentTime, this.vhs_.tech_.playbackRate()) - 1; // Only consider aborting early if the estimated time to finish the download\n // is larger than the estimated time until the player runs out of forward buffer\n\n if (requestTimeRemaining <= timeUntilRebuffer$1) {\n return;\n }\n const switchCandidate = minRebufferMaxBandwidthSelector({\n main: this.vhs_.playlists.main,\n currentTime,\n bandwidth: measuredBandwidth,\n duration: this.duration_(),\n segmentDuration,\n timeUntilRebuffer: timeUntilRebuffer$1,\n currentTimeline: this.currentTimeline_,\n syncController: this.syncController_\n });\n if (!switchCandidate) {\n return;\n }\n const rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$1;\n const timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact;\n let minimumTimeSaving = 0.5; // If we are already rebuffering, increase the amount of variance we add to the\n // potential round trip time of the new request so that we are not too aggressive\n // with switching to a playlist that might save us a fraction of a second.\n\n if (timeUntilRebuffer$1 <= TIME_FUDGE_FACTOR) {\n minimumTimeSaving = 1;\n }\n if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) {\n return;\n } // set the bandwidth to that of the desired playlist being sure to scale by\n // BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it\n // don't trigger a bandwidthupdate as the bandwidth is artifial\n\n this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config.BANDWIDTH_VARIANCE + 1;\n this.trigger('earlyabort');\n }\n handleAbort_(segmentInfo) {\n this.logger_(`Aborting ${segmentInfoString(segmentInfo)}`);\n this.mediaRequestsAborted += 1;\n }\n /**\n * XHR `progress` event handler\n *\n * @param {Event}\n * The XHR `progress` event\n * @param {Object} simpleSegment\n * A simplified segment object copy\n * @private\n */\n\n handleProgress_(event, simpleSegment) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n this.trigger('progress');\n }\n handleTrackInfo_(simpleSegment, trackInfo) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n if (this.checkForIllegalMediaSwitch(trackInfo)) {\n return;\n }\n trackInfo = trackInfo || {}; // When we have track info, determine what media types this loader is dealing with.\n // Guard against cases where we're not getting track info at all until we are\n // certain that all streams will provide it.\n\n if (!shallowEqual(this.currentMediaInfo_, trackInfo)) {\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.startingMediaInfo_ = trackInfo;\n this.currentMediaInfo_ = trackInfo;\n this.logger_('trackinfo update', trackInfo);\n this.trigger('trackinfo');\n } // trackinfo may cause an abort if the trackinfo\n // causes a codec change to an unsupported codec.\n\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // set trackinfo on the pending segment so that\n // it can append.\n\n this.pendingSegment_.trackInfo = trackInfo; // check if any calls were waiting on the track info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }\n handleTimingInfo_(simpleSegment, mediaType, timeType, time) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_;\n const timingInfoProperty = timingInfoPropertyForMedia(mediaType);\n segmentInfo[timingInfoProperty] = segmentInfo[timingInfoProperty] || {};\n segmentInfo[timingInfoProperty][timeType] = time;\n this.logger_(`timinginfo: ${mediaType} - ${timeType} - ${time}`); // check if any calls were waiting on the timing info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }\n handleCaptions_(simpleSegment, captionData) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // This could only happen with fmp4 segments, but\n // should still not happen in general\n\n if (captionData.length === 0) {\n this.logger_('SegmentLoader received no captions from a caption event');\n return;\n }\n const segmentInfo = this.pendingSegment_; // Wait until we have some video data so that caption timing\n // can be adjusted by the timestamp offset\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, simpleSegment, captionData));\n return;\n }\n const timestampOffset = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset();\n const captionTracks = {}; // get total start/end and captions for each track/stream\n\n captionData.forEach(caption => {\n // caption.stream is actually a track name...\n // set to the existing values in tracks or default values\n captionTracks[caption.stream] = captionTracks[caption.stream] || {\n // Infinity, as any other value will be less than this\n startTime: Infinity,\n captions: [],\n // 0 as an other value will be more than this\n endTime: 0\n };\n const captionTrack = captionTracks[caption.stream];\n captionTrack.startTime = Math.min(captionTrack.startTime, caption.startTime + timestampOffset);\n captionTrack.endTime = Math.max(captionTrack.endTime, caption.endTime + timestampOffset);\n captionTrack.captions.push(caption);\n });\n Object.keys(captionTracks).forEach(trackName => {\n const {\n startTime,\n endTime,\n captions\n } = captionTracks[trackName];\n const inbandTextTracks = this.inbandTextTracks_;\n this.logger_(`adding cues from ${startTime} -> ${endTime} for ${trackName}`);\n createCaptionsTrackIfNotExists(inbandTextTracks, this.vhs_.tech_, trackName); // clear out any cues that start and end at the same time period for the same track.\n // We do this because a rendition change that also changes the timescale for captions\n // will result in captions being re-parsed for certain segments. If we add them again\n // without clearing we will have two of the same captions visible.\n\n removeCuesFromTrack(startTime, endTime, inbandTextTracks[trackName]);\n addCaptionData({\n captionArray: captions,\n inbandTextTracks,\n timestampOffset\n });\n }); // Reset stored captions since we added parsed\n // captions to a text track at this point\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n handleId3_(simpleSegment, id3Frames, dispatchType) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_; // we need to have appended data in order for the timestamp offset to be set\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.id3.push(this.handleId3_.bind(this, simpleSegment, id3Frames, dispatchType));\n return;\n }\n const timestampOffset = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); // There's potentially an issue where we could double add metadata if there's a muxed\n // audio/video source with a metadata track, and an alt audio with a metadata track.\n // However, this probably won't happen, and if it does it can be handled then.\n\n createMetadataTrackIfNotExists(this.inbandTextTracks_, dispatchType, this.vhs_.tech_);\n addMetadata({\n inbandTextTracks: this.inbandTextTracks_,\n metadataArray: id3Frames,\n timestampOffset,\n videoDuration: this.duration_()\n });\n }\n processMetadataQueue_() {\n this.metadataQueue_.id3.forEach(fn => fn());\n this.metadataQueue_.caption.forEach(fn => fn());\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n }\n processCallQueue_() {\n const callQueue = this.callQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.callQueue_ = [];\n callQueue.forEach(fun => fun());\n }\n processLoadQueue_() {\n const loadQueue = this.loadQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.loadQueue_ = [];\n loadQueue.forEach(fun => fun());\n }\n /**\n * Determines whether the loader has enough info to load the next segment.\n *\n * @return {boolean}\n * Whether or not the loader has enough info to load the next segment\n */\n\n hasEnoughInfoToLoad_() {\n // Since primary timing goes by video, only the audio loader potentially needs to wait\n // to load.\n if (this.loaderType_ !== 'audio') {\n return true;\n }\n const segmentInfo = this.pendingSegment_; // A fill buffer must have already run to establish a pending segment before there's\n // enough info to load.\n\n if (!segmentInfo) {\n return false;\n } // The first segment can and should be loaded immediately so that source buffers are\n // created together (before appending). Source buffer creation uses the presence of\n // audio and video data to determine whether to create audio/video source buffers, and\n // uses processed (transmuxed or parsed) media to determine the types required.\n\n if (!this.getCurrentMediaInfo_()) {\n return true;\n }\n if (\n // Technically, instead of waiting to load a segment on timeline changes, a segment\n // can be requested and downloaded and only wait before it is transmuxed or parsed.\n // But in practice, there are a few reasons why it is better to wait until a loader\n // is ready to append that segment before requesting and downloading:\n //\n // 1. Because audio and main loaders cross discontinuities together, if this loader\n // is waiting for the other to catch up, then instead of requesting another\n // segment and using up more bandwidth, by not yet loading, more bandwidth is\n // allotted to the loader currently behind.\n // 2. media-segment-request doesn't have to have logic to consider whether a segment\n // is ready to be processed or not, isolating the queueing behavior to the loader.\n // 3. The audio loader bases some of its segment properties on timing information\n // provided by the main loader, meaning that, if the logic for waiting on\n // processing was in media-segment-request, then it would also need to know how\n // to re-generate the segment information after the main loader caught up.\n shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n getCurrentMediaInfo_(segmentInfo = this.pendingSegment_) {\n return segmentInfo && segmentInfo.trackInfo || this.currentMediaInfo_;\n }\n getMediaInfo_(segmentInfo = this.pendingSegment_) {\n return this.getCurrentMediaInfo_(segmentInfo) || this.startingMediaInfo_;\n }\n hasEnoughInfoToAppend_() {\n if (!this.sourceUpdater_.ready()) {\n return false;\n } // If content needs to be removed or the loader is waiting on an append reattempt,\n // then no additional content should be appended until the prior append is resolved.\n\n if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) {\n return false;\n }\n const segmentInfo = this.pendingSegment_;\n const trackInfo = this.getCurrentMediaInfo_(); // no segment to append any data for or\n // we do not have information on this specific\n // segment yet\n\n if (!segmentInfo || !trackInfo) {\n return false;\n }\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && !segmentInfo.videoTimingInfo) {\n return false;\n } // muxed content only relies on video timing information for now.\n\n if (hasAudio && !this.audioDisabled_ && !isMuxed && !segmentInfo.audioTimingInfo) {\n return false;\n }\n if (shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n handleData_(simpleSegment, result) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // If there's anything in the call queue, then this data came later and should be\n // executed after the calls currently queued.\n\n if (this.callQueue_.length || !this.hasEnoughInfoToAppend_()) {\n this.callQueue_.push(this.handleData_.bind(this, simpleSegment, result));\n return;\n }\n const segmentInfo = this.pendingSegment_; // update the time mapping so we can translate from display time to media time\n\n this.setTimeMapping_(segmentInfo.timeline); // for tracking overall stats\n\n this.updateMediaSecondsLoaded_(segmentInfo.part || segmentInfo.segment); // Note that the state isn't changed from loading to appending. This is because abort\n // logic may change behavior depending on the state, and changing state too early may\n // inflate our estimates of bandwidth. In the future this should be re-examined to\n // note more granular states.\n // don't process and append data if the mediaSource is closed\n\n if (this.mediaSource_.readyState === 'closed') {\n return;\n } // if this request included an initialization segment, save that data\n // to the initSegment cache\n\n if (simpleSegment.map) {\n simpleSegment.map = this.initSegmentForMap(simpleSegment.map, true); // move over init segment properties to media request\n\n segmentInfo.segment.map = simpleSegment.map;\n } // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n segmentInfo.isFmp4 = simpleSegment.isFmp4;\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n if (segmentInfo.isFmp4) {\n this.trigger('fmp4');\n segmentInfo.timingInfo.start = segmentInfo[timingInfoPropertyForMedia(result.type)].start;\n } else {\n const trackInfo = this.getCurrentMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n let firstVideoFrameTimeForData;\n if (useVideoTimingInfo) {\n firstVideoFrameTimeForData = segmentInfo.videoTimingInfo.start;\n } // Segment loader knows more about segment timing than the transmuxer (in certain\n // aspects), so make any changes required for a more accurate start time.\n // Don't set the end time yet, as the segment may not be finished processing.\n\n segmentInfo.timingInfo.start = this.trueSegmentStart_({\n currentStart: segmentInfo.timingInfo.start,\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex,\n currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(),\n useVideoTimingInfo,\n firstVideoFrameTimeForData,\n videoTimingInfo: segmentInfo.videoTimingInfo,\n audioTimingInfo: segmentInfo.audioTimingInfo\n });\n } // Init segments for audio and video only need to be appended in certain cases. Now\n // that data is about to be appended, we can check the final cases to determine\n // whether we should append an init segment.\n\n this.updateAppendInitSegmentStatus(segmentInfo, result.type); // Timestamp offset should be updated once we get new data and have its timing info,\n // as we use the start of the segment to offset the best guess (playlist provided)\n // timestamp offset.\n\n this.updateSourceBufferTimestampOffset_(segmentInfo); // if this is a sync request we need to determine whether it should\n // be appended or not.\n\n if (segmentInfo.isSyncRequest) {\n // first save/update our timing info for this segment.\n // this is what allows us to choose an accurate segment\n // and the main reason we make a sync request.\n this.updateTimingInfoEnd_(segmentInfo);\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n const next = this.chooseNextRequest_(); // If the sync request isn't the segment that would be requested next\n // after taking into account its timing info, do not append it.\n\n if (next.mediaIndex !== segmentInfo.mediaIndex || next.partIndex !== segmentInfo.partIndex) {\n this.logger_('sync segment was incorrect, not appending');\n return;\n } // otherwise append it like any other segment as our guess was correct.\n\n this.logger_('sync segment was correct, appending');\n } // Save some state so that in the future anything waiting on first append (and/or\n // timestamp offset(s)) can process immediately. While the extra state isn't optimal,\n // we need some notion of whether the timestamp offset or other relevant information\n // has had a chance to be set.\n\n segmentInfo.hasAppendedData_ = true; // Now that the timestamp offset should be set, we can append any waiting ID3 tags.\n\n this.processMetadataQueue_();\n this.appendData_(segmentInfo, result);\n }\n updateAppendInitSegmentStatus(segmentInfo, type) {\n // alt audio doesn't manage timestamp offset\n if (this.loaderType_ === 'main' && typeof segmentInfo.timestampOffset === 'number' &&\n // in the case that we're handling partial data, we don't want to append an init\n // segment for each chunk\n !segmentInfo.changedTimestampOffset) {\n // if the timestamp offset changed, the timeline may have changed, so we have to re-\n // append init segments\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n }\n if (this.playlistOfLastInitSegment_[type] !== segmentInfo.playlist) {\n // make sure we append init segment on playlist changes, in case the media config\n // changed\n this.appendInitSegment_[type] = true;\n }\n }\n getInitSegmentAndUpdateState_({\n type,\n initSegment,\n map,\n playlist\n }) {\n // \"The EXT-X-MAP tag specifies how to obtain the Media Initialization Section\n // (Section 3) required to parse the applicable Media Segments. It applies to every\n // Media Segment that appears after it in the Playlist until the next EXT-X-MAP tag\n // or until the end of the playlist.\"\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.5\n if (map) {\n const id = initSegmentId(map);\n if (this.activeInitSegmentId_ === id) {\n // don't need to re-append the init segment if the ID matches\n return null;\n } // a map-specified init segment takes priority over any transmuxed (or otherwise\n // obtained) init segment\n //\n // this also caches the init segment for later use\n\n initSegment = this.initSegmentForMap(map, true).bytes;\n this.activeInitSegmentId_ = id;\n } // We used to always prepend init segments for video, however, that shouldn't be\n // necessary. Instead, we should only append on changes, similar to what we've always\n // done for audio. This is more important (though may not be that important) for\n // frame-by-frame appending for LHLS, simply because of the increased quantity of\n // appends.\n\n if (initSegment && this.appendInitSegment_[type]) {\n // Make sure we track the playlist that we last used for the init segment, so that\n // we can re-append the init segment in the event that we get data from a new\n // playlist. Discontinuities and track changes are handled in other sections.\n this.playlistOfLastInitSegment_[type] = playlist; // Disable future init segment appends for this type. Until a change is necessary.\n\n this.appendInitSegment_[type] = false; // we need to clear out the fmp4 active init segment id, since\n // we are appending the muxer init segment\n\n this.activeInitSegmentId_ = null;\n return initSegment;\n }\n return null;\n }\n handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n const audioBuffered = this.sourceUpdater_.audioBuffered();\n const videoBuffered = this.sourceUpdater_.videoBuffered(); // For now we're ignoring any notion of gaps in the buffer, but they, in theory,\n // should be cleared out during the buffer removals. However, log in case it helps\n // debug.\n\n if (audioBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: ' + timeRangesToArray(audioBuffered).join(', '));\n }\n if (videoBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: ' + timeRangesToArray(videoBuffered).join(', '));\n }\n const audioBufferStart = audioBuffered.length ? audioBuffered.start(0) : 0;\n const audioBufferEnd = audioBuffered.length ? audioBuffered.end(audioBuffered.length - 1) : 0;\n const videoBufferStart = videoBuffered.length ? videoBuffered.start(0) : 0;\n const videoBufferEnd = videoBuffered.length ? videoBuffered.end(videoBuffered.length - 1) : 0;\n if (audioBufferEnd - audioBufferStart <= MIN_BACK_BUFFER && videoBufferEnd - videoBufferStart <= MIN_BACK_BUFFER) {\n // Can't remove enough buffer to make room for new segment (or the browser doesn't\n // allow for appends of segments this size). In the future, it may be possible to\n // split up the segment and append in pieces, but for now, error out this playlist\n // in an attempt to switch to a more manageable rendition.\n this.logger_('On QUOTA_EXCEEDED_ERR, single segment too large to append to ' + 'buffer, triggering an error. ' + `Appended byte length: ${bytes.byteLength}, ` + `audio buffer: ${timeRangesToArray(audioBuffered).join(', ')}, ` + `video buffer: ${timeRangesToArray(videoBuffered).join(', ')}, `);\n this.error({\n message: 'Quota exceeded error with append of a single segment of content',\n excludeUntil: Infinity\n });\n this.trigger('error');\n return;\n } // To try to resolve the quota exceeded error, clear back buffer and retry. This means\n // that the segment-loader should block on future events until this one is handled, so\n // that it doesn't keep moving onto further segments. Adding the call to the call\n // queue will prevent further appends until waitingOnRemove_ and\n // quotaExceededErrorRetryTimeout_ are cleared.\n //\n // Note that this will only block the current loader. In the case of demuxed content,\n // the other load may keep filling as fast as possible. In practice, this should be\n // OK, as it is a rare case when either audio has a high enough bitrate to fill up a\n // source buffer, or video fills without enough room for audio to append (and without\n // the availability of clearing out seconds of back buffer to make room for audio).\n // But it might still be good to handle this case in the future as a TODO.\n\n this.waitingOnRemove_ = true;\n this.callQueue_.push(this.appendToSourceBuffer_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n const currentTime = this.currentTime_(); // Try to remove as much audio and video as possible to make room for new content\n // before retrying.\n\n const timeToRemoveUntil = currentTime - MIN_BACK_BUFFER;\n this.logger_(`On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to ${timeToRemoveUntil}`);\n this.remove(0, timeToRemoveUntil, () => {\n this.logger_(`On QUOTA_EXCEEDED_ERR, retrying append in ${MIN_BACK_BUFFER}s`);\n this.waitingOnRemove_ = false; // wait the length of time alotted in the back buffer to prevent wasted\n // attempts (since we can't clear less than the minimum)\n\n this.quotaExceededErrorRetryTimeout_ = window$1.setTimeout(() => {\n this.logger_('On QUOTA_EXCEEDED_ERR, re-processing call queue');\n this.quotaExceededErrorRetryTimeout_ = null;\n this.processCallQueue_();\n }, MIN_BACK_BUFFER * 1000);\n }, true);\n }\n handleAppendError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n // if there's no error, nothing to do\n if (!error) {\n return;\n }\n if (error.code === QUOTA_EXCEEDED_ERR) {\n this.handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }); // A quota exceeded error should be recoverable with a future re-append, so no need\n // to trigger an append error.\n\n return;\n }\n this.logger_('Received non QUOTA_EXCEEDED_ERR on append', error);\n this.error(`${type} append of ${bytes.length}b failed for segment ` + `#${segmentInfo.mediaIndex} in playlist ${segmentInfo.playlist.id}`); // If an append errors, we often can't recover.\n // (see https://w3c.github.io/media-source/#sourcebuffer-append-error).\n //\n // Trigger a special error so that it can be handled separately from normal,\n // recoverable errors.\n\n this.trigger('appenderror');\n }\n appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data,\n bytes\n }) {\n // If this is a re-append, bytes were already created and don't need to be recreated\n if (!bytes) {\n const segments = [data];\n let byteLength = data.byteLength;\n if (initSegment) {\n // if the media initialization segment is changing, append it before the content\n // segment\n segments.unshift(initSegment);\n byteLength += initSegment.byteLength;\n } // Technically we should be OK appending the init segment separately, however, we\n // haven't yet tested that, and prepending is how we have always done things.\n\n bytes = concatSegments({\n bytes: byteLength,\n segments\n });\n }\n this.sourceUpdater_.appendBuffer({\n segmentInfo,\n type,\n bytes\n }, this.handleAppendError_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n }\n handleSegmentTimingInfo_(type, requestId, segmentTimingInfo) {\n if (!this.pendingSegment_ || requestId !== this.pendingSegment_.requestId) {\n return;\n }\n const segment = this.pendingSegment_.segment;\n const timingInfoProperty = `${type}TimingInfo`;\n if (!segment[timingInfoProperty]) {\n segment[timingInfoProperty] = {};\n }\n segment[timingInfoProperty].transmuxerPrependedSeconds = segmentTimingInfo.prependedContentDuration || 0;\n segment[timingInfoProperty].transmuxedPresentationStart = segmentTimingInfo.start.presentation;\n segment[timingInfoProperty].transmuxedDecodeStart = segmentTimingInfo.start.decode;\n segment[timingInfoProperty].transmuxedPresentationEnd = segmentTimingInfo.end.presentation;\n segment[timingInfoProperty].transmuxedDecodeEnd = segmentTimingInfo.end.decode; // mainly used as a reference for debugging\n\n segment[timingInfoProperty].baseMediaDecodeTime = segmentTimingInfo.baseMediaDecodeTime;\n }\n appendData_(segmentInfo, result) {\n const {\n type,\n data\n } = result;\n if (!data || !data.byteLength) {\n return;\n }\n if (type === 'audio' && this.audioDisabled_) {\n return;\n }\n const initSegment = this.getInitSegmentAndUpdateState_({\n type,\n initSegment: result.initSegment,\n playlist: segmentInfo.playlist,\n map: segmentInfo.isFmp4 ? segmentInfo.segment.map : null\n });\n this.appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data\n });\n }\n /**\n * load a specific segment from a request into the buffer\n *\n * @private\n */\n\n loadSegment_(segmentInfo) {\n this.state = 'WAITING';\n this.pendingSegment_ = segmentInfo;\n this.trimBackBuffer_(segmentInfo);\n if (typeof segmentInfo.timestampOffset === 'number') {\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n });\n }\n }\n if (!this.hasEnoughInfoToLoad_()) {\n this.loadQueue_.push(() => {\n // regenerate the audioAppendStart, timestampOffset, etc as they\n // may have changed since this function was added to the queue.\n const options = _extends({}, segmentInfo, {\n forceTimestampOffset: true\n });\n _extends(segmentInfo, this.generateSegmentInfo_(options));\n this.isPendingTimestampOffset_ = false;\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n });\n return;\n }\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n }\n updateTransmuxerAndRequestSegment_(segmentInfo) {\n // We'll update the source buffer's timestamp offset once we have transmuxed data, but\n // the transmuxer still needs to be updated before then.\n //\n // Even though keepOriginalTimestamps is set to true for the transmuxer, timestamp\n // offset must be passed to the transmuxer for stream correcting adjustments.\n if (this.shouldUpdateTransmuxerTimestampOffset_(segmentInfo.timestampOffset)) {\n this.gopBuffer_.length = 0; // gopsToAlignWith was set before the GOP buffer was cleared\n\n segmentInfo.gopsToAlignWith = [];\n this.timeMapping_ = 0; // reset values in the transmuxer since a discontinuity should start fresh\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n this.transmuxer_.postMessage({\n action: 'setTimestampOffset',\n timestampOffset: segmentInfo.timestampOffset\n });\n }\n const simpleSegment = this.createSimplifiedSegmentObj_(segmentInfo);\n const isEndOfStream = this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex);\n const isWalkingForward = this.mediaIndex !== null;\n const isDiscontinuity = segmentInfo.timeline !== this.currentTimeline_ &&\n // currentTimeline starts at -1, so we shouldn't end the timeline switching to 0,\n // the first timeline\n segmentInfo.timeline > 0;\n const isEndOfTimeline = isEndOfStream || isWalkingForward && isDiscontinuity;\n this.logger_(`Requesting ${segmentInfoString(segmentInfo)}`); // If there's an init segment associated with this segment, but it is not cached (identified by a lack of bytes),\n // then this init segment has never been seen before and should be appended.\n //\n // At this point the content type (audio/video or both) is not yet known, but it should be safe to set\n // both to true and leave the decision of whether to append the init segment to append time.\n\n if (simpleSegment.map && !simpleSegment.map.bytes) {\n this.logger_('going to request init segment.');\n this.appendInitSegment_ = {\n video: true,\n audio: true\n };\n }\n segmentInfo.abortRequests = mediaSegmentRequest({\n xhr: this.vhs_.xhr,\n xhrOptions: this.xhrOptions_,\n decryptionWorker: this.decrypter_,\n segment: simpleSegment,\n abortFn: this.handleAbort_.bind(this, segmentInfo),\n progressFn: this.handleProgress_.bind(this),\n trackInfoFn: this.handleTrackInfo_.bind(this),\n timingInfoFn: this.handleTimingInfo_.bind(this),\n videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'video', segmentInfo.requestId),\n audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'audio', segmentInfo.requestId),\n captionsFn: this.handleCaptions_.bind(this),\n isEndOfTimeline,\n endedTimelineFn: () => {\n this.logger_('received endedtimeline callback');\n },\n id3Fn: this.handleId3_.bind(this),\n dataFn: this.handleData_.bind(this),\n doneFn: this.segmentRequestFinished_.bind(this),\n onTransmuxerLog: ({\n message,\n level,\n stream\n }) => {\n this.logger_(`${segmentInfoString(segmentInfo)} logged from transmuxer stream ${stream} as a ${level}: ${message}`);\n }\n });\n }\n /**\n * trim the back buffer so that we don't have too much data\n * in the source buffer\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n */\n\n trimBackBuffer_(segmentInfo) {\n const removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); // Chrome has a hard limit of 150MB of\n // buffer and a very conservative \"garbage collector\"\n // We manually clear out the old buffer to ensure\n // we don't trigger the QuotaExceeded error\n // on the source buffer during subsequent appends\n\n if (removeToTime > 0) {\n this.remove(0, removeToTime);\n }\n }\n /**\n * created a simplified copy of the segment object with just the\n * information necessary to perform the XHR and decryption\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n * @return {Object} a simplified segment object copy\n */\n\n createSimplifiedSegmentObj_(segmentInfo) {\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const simpleSegment = {\n resolvedUri: part ? part.resolvedUri : segment.resolvedUri,\n byterange: part ? part.byterange : segment.byterange,\n requestId: segmentInfo.requestId,\n transmuxer: segmentInfo.transmuxer,\n audioAppendStart: segmentInfo.audioAppendStart,\n gopsToAlignWith: segmentInfo.gopsToAlignWith,\n part: segmentInfo.part\n };\n const previousSegment = segmentInfo.playlist.segments[segmentInfo.mediaIndex - 1];\n if (previousSegment && previousSegment.timeline === segment.timeline) {\n // The baseStartTime of a segment is used to handle rollover when probing the TS\n // segment to retrieve timing information. Since the probe only looks at the media's\n // times (e.g., PTS and DTS values of the segment), and doesn't consider the\n // player's time (e.g., player.currentTime()), baseStartTime should reflect the\n // media time as well. transmuxedDecodeEnd represents the end time of a segment, in\n // seconds of media time, so should be used here. The previous segment is used since\n // the end of the previous segment should represent the beginning of the current\n // segment, so long as they are on the same timeline.\n if (previousSegment.videoTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.videoTimingInfo.transmuxedDecodeEnd;\n } else if (previousSegment.audioTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.audioTimingInfo.transmuxedDecodeEnd;\n }\n }\n if (segment.key) {\n // if the media sequence is greater than 2^32, the IV will be incorrect\n // assuming 10s segments, that would be about 1300 years\n const iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]);\n simpleSegment.key = this.segmentKey(segment.key);\n simpleSegment.key.iv = iv;\n }\n if (segment.map) {\n simpleSegment.map = this.initSegmentForMap(segment.map);\n }\n return simpleSegment;\n }\n saveTransferStats_(stats) {\n // every request counts as a media request even if it has been aborted\n // or canceled due to a timeout\n this.mediaRequests += 1;\n if (stats) {\n this.mediaBytesTransferred += stats.bytesReceived;\n this.mediaTransferDuration += stats.roundTripTime;\n }\n }\n saveBandwidthRelatedStats_(duration, stats) {\n // byteLength will be used for throughput, and should be based on bytes receieved,\n // which we only know at the end of the request and should reflect total bytes\n // downloaded rather than just bytes processed from components of the segment\n this.pendingSegment_.byteLength = stats.bytesReceived;\n if (duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's bandwidth because its duration of ${duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n this.bandwidth = stats.bandwidth;\n this.roundTrip = stats.roundTripTime;\n }\n handleTimeout_() {\n // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functinality between segment loaders\n this.mediaRequestsTimedout += 1;\n this.bandwidth = 1;\n this.roundTrip = NaN;\n this.trigger('bandwidthupdate');\n this.trigger('timeout');\n }\n /**\n * Handle the callback from the segmentRequest function and set the\n * associated SegmentLoader state and errors if necessary\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n // TODO handle special cases, e.g., muxed audio/video but only audio in the segment\n // check the call queue directly since this function doesn't need to deal with any\n // data, and can continue even if the source buffers are not set up and we didn't get\n // any data from the segment\n if (this.callQueue_.length) {\n this.callQueue_.push(this.segmentRequestFinished_.bind(this, error, simpleSegment, result));\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // The request was aborted and the SegmentLoader has already been reset\n\n if (!this.pendingSegment_) {\n return;\n } // the request was aborted and the SegmentLoader has already started\n // another request. this can happen when the timeout for an aborted\n // request triggers due to a limitation in the XHR library\n // do not count this as any sort of request or we risk double-counting\n\n if (simpleSegment.requestId !== this.pendingSegment_.requestId) {\n return;\n } // an error occurred from the active pendingSegment_ so reset everything\n\n if (error) {\n this.pendingSegment_ = null;\n this.state = 'READY'; // aborts are not a true error condition and nothing corrective needs to be done\n\n if (error.code === REQUEST_ERRORS.ABORTED) {\n return;\n }\n this.pause(); // the error is really just that at least one of the requests timed-out\n // set the bandwidth to a very low value and trigger an ABR switch to\n // take emergency action\n\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n return;\n } // if control-flow has arrived here, then the error is real\n // emit an error event to exclude the current playlist\n\n this.mediaRequestsErrored += 1;\n this.error(error);\n this.trigger('error');\n return;\n }\n const segmentInfo = this.pendingSegment_; // the response was a success so set any bandwidth stats the request\n // generated for ABR purposes\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats);\n segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests;\n if (result.gopInfo) {\n this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, result.gopInfo, this.safeAppend_);\n } // Although we may have already started appending on progress, we shouldn't switch the\n // state away from loading until we are officially done loading the segment data.\n\n this.state = 'APPENDING'; // used for testing\n\n this.trigger('appending');\n this.waitForAppendsToComplete_(segmentInfo);\n }\n setTimeMapping_(timeline) {\n const timelineMapping = this.syncController_.mappingForTimeline(timeline);\n if (timelineMapping !== null) {\n this.timeMapping_ = timelineMapping;\n }\n }\n updateMediaSecondsLoaded_(segment) {\n if (typeof segment.start === 'number' && typeof segment.end === 'number') {\n this.mediaSecondsLoaded += segment.end - segment.start;\n } else {\n this.mediaSecondsLoaded += segment.duration;\n }\n }\n shouldUpdateTransmuxerTimestampOffset_(timestampOffset) {\n if (timestampOffset === null) {\n return false;\n } // note that we're potentially using the same timestamp offset for both video and\n // audio\n\n if (this.loaderType_ === 'main' && timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n return true;\n }\n if (!this.audioDisabled_ && timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n return true;\n }\n return false;\n }\n trueSegmentStart_({\n currentStart,\n playlist,\n mediaIndex,\n firstVideoFrameTimeForData,\n currentVideoTimestampOffset,\n useVideoTimingInfo,\n videoTimingInfo,\n audioTimingInfo\n }) {\n if (typeof currentStart !== 'undefined') {\n // if start was set once, keep using it\n return currentStart;\n }\n if (!useVideoTimingInfo) {\n return audioTimingInfo.start;\n }\n const previousSegment = playlist.segments[mediaIndex - 1]; // The start of a segment should be the start of the first full frame contained\n // within that segment. Since the transmuxer maintains a cache of incomplete data\n // from and/or the last frame seen, the start time may reflect a frame that starts\n // in the previous segment. Check for that case and ensure the start time is\n // accurate for the segment.\n\n if (mediaIndex === 0 || !previousSegment || typeof previousSegment.start === 'undefined' || previousSegment.end !== firstVideoFrameTimeForData + currentVideoTimestampOffset) {\n return firstVideoFrameTimeForData;\n }\n return videoTimingInfo.start;\n }\n waitForAppendsToComplete_(segmentInfo) {\n const trackInfo = this.getCurrentMediaInfo_(segmentInfo);\n if (!trackInfo) {\n this.error({\n message: 'No starting media returned, likely due to an unsupported media format.',\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return;\n } // Although transmuxing is done, appends may not yet be finished. Throw a marker\n // on each queue this loader is responsible for to ensure that the appends are\n // complete.\n\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n const waitForVideo = this.loaderType_ === 'main' && hasVideo;\n const waitForAudio = !this.audioDisabled_ && hasAudio && !isMuxed;\n segmentInfo.waitingOnAppends = 0; // segments with no data\n\n if (!segmentInfo.hasAppendedData_) {\n if (!segmentInfo.timingInfo && typeof segmentInfo.timestampOffset === 'number') {\n // When there's no audio or video data in the segment, there's no audio or video\n // timing information.\n //\n // If there's no audio or video timing information, then the timestamp offset\n // can't be adjusted to the appropriate value for the transmuxer and source\n // buffers.\n //\n // Therefore, the next segment should be used to set the timestamp offset.\n this.isPendingTimestampOffset_ = true;\n } // override settings for metadata only segments\n\n segmentInfo.timingInfo = {\n start: 0\n };\n segmentInfo.waitingOnAppends++;\n if (!this.isPendingTimestampOffset_) {\n // update the timestampoffset\n this.updateSourceBufferTimestampOffset_(segmentInfo); // make sure the metadata queue is processed even though we have\n // no video/audio data.\n\n this.processMetadataQueue_();\n } // append is \"done\" instantly with no data.\n\n this.checkAppendsDone_(segmentInfo);\n return;\n } // Since source updater could call back synchronously, do the increments first.\n\n if (waitForVideo) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForAudio) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForVideo) {\n this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n if (waitForAudio) {\n this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n }\n checkAppendsDone_(segmentInfo) {\n if (this.checkForAbort_(segmentInfo.requestId)) {\n return;\n }\n segmentInfo.waitingOnAppends--;\n if (segmentInfo.waitingOnAppends === 0) {\n this.handleAppendsDone_();\n }\n }\n checkForIllegalMediaSwitch(trackInfo) {\n const illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.getCurrentMediaInfo_(), trackInfo);\n if (illegalMediaSwitchError) {\n this.error({\n message: illegalMediaSwitchError,\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return true;\n }\n return false;\n }\n updateSourceBufferTimestampOffset_(segmentInfo) {\n if (segmentInfo.timestampOffset === null ||\n // we don't yet have the start for whatever media type (video or audio) has\n // priority, timing-wise, so we must wait\n typeof segmentInfo.timingInfo.start !== 'number' ||\n // already updated the timestamp offset for this segment\n segmentInfo.changedTimestampOffset ||\n // the alt audio loader should not be responsible for setting the timestamp offset\n this.loaderType_ !== 'main') {\n return;\n }\n let didChange = false; // Primary timing goes by video, and audio is trimmed in the transmuxer, meaning that\n // the timing info here comes from video. In the event that the audio is longer than\n // the video, this will trim the start of the audio.\n // This also trims any offset from 0 at the beginning of the media\n\n segmentInfo.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo: segmentInfo.segment.videoTimingInfo,\n audioTimingInfo: segmentInfo.segment.audioTimingInfo,\n timingInfo: segmentInfo.timingInfo\n }); // In the event that there are part segment downloads, each will try to update the\n // timestamp offset. Retaining this bit of state prevents us from updating in the\n // future (within the same segment), however, there may be a better way to handle it.\n\n segmentInfo.changedTimestampOffset = true;\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n this.sourceUpdater_.videoTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n this.sourceUpdater_.audioTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (didChange) {\n this.trigger('timestampoffset');\n }\n }\n getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo,\n audioTimingInfo,\n timingInfo\n }) {\n if (!this.useDtsForTimestampOffset_) {\n return timingInfo.start;\n }\n if (videoTimingInfo && typeof videoTimingInfo.transmuxedDecodeStart === 'number') {\n return videoTimingInfo.transmuxedDecodeStart;\n } // handle audio only\n\n if (audioTimingInfo && typeof audioTimingInfo.transmuxedDecodeStart === 'number') {\n return audioTimingInfo.transmuxedDecodeStart;\n } // handle content not transmuxed (e.g., MP4)\n\n return timingInfo.start;\n }\n updateTimingInfoEnd_(segmentInfo) {\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n const trackInfo = this.getMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n const prioritizedTimingInfo = useVideoTimingInfo && segmentInfo.videoTimingInfo ? segmentInfo.videoTimingInfo : segmentInfo.audioTimingInfo;\n if (!prioritizedTimingInfo) {\n return;\n }\n segmentInfo.timingInfo.end = typeof prioritizedTimingInfo.end === 'number' ?\n // End time may not exist in a case where we aren't parsing the full segment (one\n // current example is the case of fmp4), so use the rough duration to calculate an\n // end time.\n prioritizedTimingInfo.end : prioritizedTimingInfo.start + segmentInfo.duration;\n }\n /**\n * callback to run when appendBuffer is finished. detects if we are\n * in a good state to do things with the data we got, or if we need\n * to wait for more\n *\n * @private\n */\n\n handleAppendsDone_() {\n // appendsdone can cause an abort\n if (this.pendingSegment_) {\n this.trigger('appendsdone');\n }\n if (!this.pendingSegment_) {\n this.state = 'READY'; // TODO should this move into this.checkForAbort to speed up requests post abort in\n // all appending cases?\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n return;\n }\n const segmentInfo = this.pendingSegment_; // Now that the end of the segment has been reached, we can set the end time. It's\n // best to wait until all appends are done so we're sure that the primary media is\n // finished (and we have its end time).\n\n this.updateTimingInfoEnd_(segmentInfo);\n if (this.shouldSaveSegmentTimingInfo_) {\n // Timeline mappings should only be saved for the main loader. This is for multiple\n // reasons:\n //\n // 1) Only one mapping is saved per timeline, meaning that if both the audio loader\n // and the main loader try to save the timeline mapping, whichever comes later\n // will overwrite the first. In theory this is OK, as the mappings should be the\n // same, however, it breaks for (2)\n // 2) In the event of a live stream, the initial live point will make for a somewhat\n // arbitrary mapping. If audio and video streams are not perfectly in-sync, then\n // the mapping will be off for one of the streams, dependent on which one was\n // first saved (see (1)).\n // 3) Primary timing goes by video in VHS, so the mapping should be video.\n //\n // Since the audio loader will wait for the main loader to load the first segment,\n // the main loader will save the first timeline mapping, and ensure that there won't\n // be a case where audio loads two segments without saving a mapping (thus leading\n // to missing segment timing info).\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n }\n const segmentDurationMessage = getTroublesomeSegmentDurationMessage(segmentInfo, this.sourceType_);\n if (segmentDurationMessage) {\n if (segmentDurationMessage.severity === 'warn') {\n videojs.log.warn(segmentDurationMessage.message);\n } else {\n this.logger_(segmentDurationMessage.message);\n }\n }\n this.recordThroughput_(segmentInfo);\n this.pendingSegment_ = null;\n this.state = 'READY';\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate'); // if the sync request was not appended\n // then it was not the correct segment.\n // throw it away and use the data it gave us\n // to get the correct one.\n\n if (!segmentInfo.hasAppendedData_) {\n this.logger_(`Throwing away un-appended sync request ${segmentInfoString(segmentInfo)}`);\n return;\n }\n }\n this.logger_(`Appended ${segmentInfoString(segmentInfo)}`);\n this.addSegmentMetadataCue_(segmentInfo);\n this.fetchAtBuffer_ = true;\n if (this.currentTimeline_ !== segmentInfo.timeline) {\n this.timelineChangeController_.lastTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n }); // If audio is not disabled, the main segment loader is responsible for updating\n // the audio timeline as well. If the content is video only, this won't have any\n // impact.\n\n if (this.loaderType_ === 'main' && !this.audioDisabled_) {\n this.timelineChangeController_.lastTimelineChange({\n type: 'audio',\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n }\n this.currentTimeline_ = segmentInfo.timeline; // We must update the syncinfo to recalculate the seekable range before\n // the following conditional otherwise it may consider this a bad \"guess\"\n // and attempt to resync when the post-update seekable window and live\n // point would mean that this was the perfect segment to fetch\n\n this.trigger('syncinfoupdate');\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const badSegmentGuess = segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3;\n const badPartGuess = part && part.end && this.currentTime_() - part.end > segmentInfo.playlist.partTargetDuration * 3; // If we previously appended a segment/part that ends more than 3 part/targetDurations before\n // the currentTime_ that means that our conservative guess was too conservative.\n // In that case, reset the loader state so that we try to use any information gained\n // from the previous request to create a new, more accurate, sync-point.\n\n if (badSegmentGuess || badPartGuess) {\n this.logger_(`bad ${badSegmentGuess ? 'segment' : 'part'} ${segmentInfoString(segmentInfo)}`);\n this.resetEverything();\n return;\n }\n const isWalkingForward = this.mediaIndex !== null; // Don't do a rendition switch unless we have enough time to get a sync segment\n // and conservatively guess\n\n if (isWalkingForward) {\n this.trigger('bandwidthupdate');\n }\n this.trigger('progress');\n this.mediaIndex = segmentInfo.mediaIndex;\n this.partIndex = segmentInfo.partIndex; // any time an update finishes and the last segment is in the\n // buffer, end the stream. this ensures the \"ended\" event will\n // fire if playback reaches that point.\n\n if (this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex)) {\n this.endOfStream();\n } // used for testing\n\n this.trigger('appended');\n if (segmentInfo.hasAppendedData_) {\n this.mediaAppends++;\n }\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * Records the current throughput of the decrypt, transmux, and append\n * portion of the semgment pipeline. `throughput.rate` is a the cumulative\n * moving average of the throughput. `throughput.count` is the number of\n * data points in the average.\n *\n * @private\n * @param {Object} segmentInfo the object returned by loadSegment\n */\n\n recordThroughput_(segmentInfo) {\n if (segmentInfo.duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's throughput because its duration of ${segmentInfo.duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n const rate = this.throughput.rate; // Add one to the time to ensure that we don't accidentally attempt to divide\n // by zero in the case where the throughput is ridiculously high\n\n const segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; // Multiply by 8000 to convert from bytes/millisecond to bits/second\n\n const segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1000); // This is just a cumulative moving average calculation:\n // newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1)\n\n this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count;\n }\n /**\n * Adds a cue to the segment-metadata track with some metadata information about the\n * segment\n *\n * @private\n * @param {Object} segmentInfo\n * the object returned by loadSegment\n * @method addSegmentMetadataCue_\n */\n\n addSegmentMetadataCue_(segmentInfo) {\n if (!this.segmentMetadataTrack_) {\n return;\n }\n const segment = segmentInfo.segment;\n const start = segment.start;\n const end = segment.end; // Do not try adding the cue if the start and end times are invalid.\n\n if (!finite(start) || !finite(end)) {\n return;\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_);\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const value = {\n custom: segment.custom,\n dateTimeObject: segment.dateTimeObject,\n dateTimeString: segment.dateTimeString,\n bandwidth: segmentInfo.playlist.attributes.BANDWIDTH,\n resolution: segmentInfo.playlist.attributes.RESOLUTION,\n codecs: segmentInfo.playlist.attributes.CODECS,\n byteLength: segmentInfo.byteLength,\n uri: segmentInfo.uri,\n timeline: segmentInfo.timeline,\n playlist: segmentInfo.playlist.id,\n start,\n end\n };\n const data = JSON.stringify(value);\n const cue = new Cue(start, end, data); // Attach the metadata to the value property of the cue to keep consistency between\n // the differences of WebKitDataCue in safari and VTTCue in other browsers\n\n cue.value = value;\n this.segmentMetadataTrack_.addCue(cue);\n }\n}\nfunction noop() {}\nconst toTitleCase = function (string) {\n if (typeof string !== 'string') {\n return string;\n }\n return string.replace(/./, w => w.toUpperCase());\n};\n\n/**\n * @file source-updater.js\n */\nconst bufferTypes = ['video', 'audio'];\nconst updating = (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n return sourceBuffer && sourceBuffer.updating || sourceUpdater.queuePending[type];\n};\nconst nextQueueIndexOfType = (type, queue) => {\n for (let i = 0; i < queue.length; i++) {\n const queueEntry = queue[i];\n if (queueEntry.type === 'mediaSource') {\n // If the next entry is a media source entry (uses multiple source buffers), block\n // processing to allow it to go through first.\n return null;\n }\n if (queueEntry.type === type) {\n return i;\n }\n }\n return null;\n};\nconst shiftQueue = (type, sourceUpdater) => {\n if (sourceUpdater.queue.length === 0) {\n return;\n }\n let queueIndex = 0;\n let queueEntry = sourceUpdater.queue[queueIndex];\n if (queueEntry.type === 'mediaSource') {\n if (!sourceUpdater.updating() && sourceUpdater.mediaSource.readyState !== 'closed') {\n sourceUpdater.queue.shift();\n queueEntry.action(sourceUpdater);\n if (queueEntry.doneFn) {\n queueEntry.doneFn();\n } // Only specific source buffer actions must wait for async updateend events. Media\n // Source actions process synchronously. Therefore, both audio and video source\n // buffers are now clear to process the next queue entries.\n\n shiftQueue('audio', sourceUpdater);\n shiftQueue('video', sourceUpdater);\n } // Media Source actions require both source buffers, so if the media source action\n // couldn't process yet (because one or both source buffers are busy), block other\n // queue actions until both are available and the media source action can process.\n\n return;\n }\n if (type === 'mediaSource') {\n // If the queue was shifted by a media source action (this happens when pushing a\n // media source action onto the queue), then it wasn't from an updateend event from an\n // audio or video source buffer, so there's no change from previous state, and no\n // processing should be done.\n return;\n } // Media source queue entries don't need to consider whether the source updater is\n // started (i.e., source buffers are created) as they don't need the source buffers, but\n // source buffer queue entries do.\n\n if (!sourceUpdater.ready() || sourceUpdater.mediaSource.readyState === 'closed' || updating(type, sourceUpdater)) {\n return;\n }\n if (queueEntry.type !== type) {\n queueIndex = nextQueueIndexOfType(type, sourceUpdater.queue);\n if (queueIndex === null) {\n // Either there's no queue entry that uses this source buffer type in the queue, or\n // there's a media source queue entry before the next entry of this type, in which\n // case wait for that action to process first.\n return;\n }\n queueEntry = sourceUpdater.queue[queueIndex];\n }\n sourceUpdater.queue.splice(queueIndex, 1); // Keep a record that this source buffer type is in use.\n //\n // The queue pending operation must be set before the action is performed in the event\n // that the action results in a synchronous event that is acted upon. For instance, if\n // an exception is thrown that can be handled, it's possible that new actions will be\n // appended to an empty queue and immediately executed, but would not have the correct\n // pending information if this property was set after the action was performed.\n\n sourceUpdater.queuePending[type] = queueEntry;\n queueEntry.action(type, sourceUpdater);\n if (!queueEntry.doneFn) {\n // synchronous operation, process next entry\n sourceUpdater.queuePending[type] = null;\n shiftQueue(type, sourceUpdater);\n return;\n }\n};\nconst cleanupBuffer = (type, sourceUpdater) => {\n const buffer = sourceUpdater[`${type}Buffer`];\n const titleType = toTitleCase(type);\n if (!buffer) {\n return;\n }\n buffer.removeEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n buffer.removeEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = null;\n sourceUpdater[`${type}Buffer`] = null;\n};\nconst inSourceBuffers = (mediaSource, sourceBuffer) => mediaSource && sourceBuffer && Array.prototype.indexOf.call(mediaSource.sourceBuffers, sourceBuffer) !== -1;\nconst actions = {\n appendBuffer: (bytes, segmentInfo, onError) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Appending segment ${segmentInfo.mediaIndex}'s ${bytes.length} bytes to ${type}Buffer`);\n try {\n sourceBuffer.appendBuffer(bytes);\n } catch (e) {\n sourceUpdater.logger_(`Error with code ${e.code} ` + (e.code === QUOTA_EXCEEDED_ERR ? '(QUOTA_EXCEEDED_ERR) ' : '') + `when appending segment ${segmentInfo.mediaIndex} to ${type}Buffer`);\n sourceUpdater.queuePending[type] = null;\n onError(e);\n }\n },\n remove: (start, end) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${start} to ${end} from ${type}Buffer`);\n try {\n sourceBuffer.remove(start, end);\n } catch (e) {\n sourceUpdater.logger_(`Remove ${start} to ${end} from ${type}Buffer failed`);\n }\n },\n timestampOffset: offset => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Setting ${type}timestampOffset to ${offset}`);\n sourceBuffer.timestampOffset = offset;\n },\n callback: callback => (type, sourceUpdater) => {\n callback();\n },\n endOfStream: error => sourceUpdater => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n sourceUpdater.logger_(`Calling mediaSource endOfStream(${error || ''})`);\n try {\n sourceUpdater.mediaSource.endOfStream(error);\n } catch (e) {\n videojs.log.warn('Failed to call media source endOfStream', e);\n }\n },\n duration: duration => sourceUpdater => {\n sourceUpdater.logger_(`Setting mediaSource duration to ${duration}`);\n try {\n sourceUpdater.mediaSource.duration = duration;\n } catch (e) {\n videojs.log.warn('Failed to set media source duration', e);\n }\n },\n abort: () => (type, sourceUpdater) => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`calling abort on ${type}Buffer`);\n try {\n sourceBuffer.abort();\n } catch (e) {\n videojs.log.warn(`Failed to abort on ${type}Buffer`, e);\n }\n },\n addSourceBuffer: (type, codec) => sourceUpdater => {\n const titleType = toTitleCase(type);\n const mime = getMimeForCodec(codec);\n sourceUpdater.logger_(`Adding ${type}Buffer with codec ${codec} to mediaSource`);\n const sourceBuffer = sourceUpdater.mediaSource.addSourceBuffer(mime);\n sourceBuffer.addEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n sourceBuffer.addEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = codec;\n sourceUpdater[`${type}Buffer`] = sourceBuffer;\n },\n removeSourceBuffer: type => sourceUpdater => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n cleanupBuffer(type, sourceUpdater); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${type}Buffer with codec ${sourceUpdater.codecs[type]} from mediaSource`);\n try {\n sourceUpdater.mediaSource.removeSourceBuffer(sourceBuffer);\n } catch (e) {\n videojs.log.warn(`Failed to removeSourceBuffer ${type}Buffer`, e);\n }\n },\n changeType: codec => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n const mime = getMimeForCodec(codec); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n } // do not update codec if we don't need to.\n\n if (sourceUpdater.codecs[type] === codec) {\n return;\n }\n sourceUpdater.logger_(`changing ${type}Buffer codec from ${sourceUpdater.codecs[type]} to ${codec}`);\n sourceBuffer.changeType(mime);\n sourceUpdater.codecs[type] = codec;\n }\n};\nconst pushQueue = ({\n type,\n sourceUpdater,\n action,\n doneFn,\n name\n}) => {\n sourceUpdater.queue.push({\n type,\n action,\n doneFn,\n name\n });\n shiftQueue(type, sourceUpdater);\n};\nconst onUpdateend = (type, sourceUpdater) => e => {\n // Although there should, in theory, be a pending action for any updateend receieved,\n // there are some actions that may trigger updateend events without set definitions in\n // the w3c spec. For instance, setting the duration on the media source may trigger\n // updateend events on source buffers. This does not appear to be in the spec. As such,\n // if we encounter an updateend without a corresponding pending action from our queue\n // for that source buffer type, process the next action.\n if (sourceUpdater.queuePending[type]) {\n const doneFn = sourceUpdater.queuePending[type].doneFn;\n sourceUpdater.queuePending[type] = null;\n if (doneFn) {\n // if there's an error, report it\n doneFn(sourceUpdater[`${type}Error_`]);\n }\n }\n shiftQueue(type, sourceUpdater);\n};\n/**\n * A queue of callbacks to be serialized and applied when a\n * MediaSource and its associated SourceBuffers are not in the\n * updating state. It is used by the segment loader to update the\n * underlying SourceBuffers when new data is loaded, for instance.\n *\n * @class SourceUpdater\n * @param {MediaSource} mediaSource the MediaSource to create the SourceBuffer from\n * @param {string} mimeType the desired MIME type of the underlying SourceBuffer\n */\n\nclass SourceUpdater extends videojs.EventTarget {\n constructor(mediaSource) {\n super();\n this.mediaSource = mediaSource;\n this.sourceopenListener_ = () => shiftQueue('mediaSource', this);\n this.mediaSource.addEventListener('sourceopen', this.sourceopenListener_);\n this.logger_ = logger('SourceUpdater'); // initial timestamp offset is 0\n\n this.audioTimestampOffset_ = 0;\n this.videoTimestampOffset_ = 0;\n this.queue = [];\n this.queuePending = {\n audio: null,\n video: null\n };\n this.delayedAudioAppendQueue_ = [];\n this.videoAppendQueued_ = false;\n this.codecs = {};\n this.onVideoUpdateEnd_ = onUpdateend('video', this);\n this.onAudioUpdateEnd_ = onUpdateend('audio', this);\n this.onVideoError_ = e => {\n // used for debugging\n this.videoError_ = e;\n };\n this.onAudioError_ = e => {\n // used for debugging\n this.audioError_ = e;\n };\n this.createdSourceBuffers_ = false;\n this.initializedEme_ = false;\n this.triggeredReady_ = false;\n }\n initializedEme() {\n this.initializedEme_ = true;\n this.triggerReady();\n }\n hasCreatedSourceBuffers() {\n // if false, likely waiting on one of the segment loaders to get enough data to create\n // source buffers\n return this.createdSourceBuffers_;\n }\n hasInitializedAnyEme() {\n return this.initializedEme_;\n }\n ready() {\n return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme();\n }\n createSourceBuffers(codecs) {\n if (this.hasCreatedSourceBuffers()) {\n // already created them before\n return;\n } // the intial addOrChangeSourceBuffers will always be\n // two add buffers.\n\n this.addOrChangeSourceBuffers(codecs);\n this.createdSourceBuffers_ = true;\n this.trigger('createdsourcebuffers');\n this.triggerReady();\n }\n triggerReady() {\n // only allow ready to be triggered once, this prevents the case\n // where:\n // 1. we trigger createdsourcebuffers\n // 2. ie 11 synchronously initializates eme\n // 3. the synchronous initialization causes us to trigger ready\n // 4. We go back to the ready check in createSourceBuffers and ready is triggered again.\n if (this.ready() && !this.triggeredReady_) {\n this.triggeredReady_ = true;\n this.trigger('ready');\n }\n }\n /**\n * Add a type of source buffer to the media source.\n *\n * @param {string} type\n * The type of source buffer to add.\n *\n * @param {string} codec\n * The codec to add the source buffer with.\n */\n\n addSourceBuffer(type, codec) {\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.addSourceBuffer(type, codec),\n name: 'addSourceBuffer'\n });\n }\n /**\n * call abort on a source buffer.\n *\n * @param {string} type\n * The type of source buffer to call abort on.\n */\n\n abort(type) {\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.abort(type),\n name: 'abort'\n });\n }\n /**\n * Call removeSourceBuffer and remove a specific type\n * of source buffer on the mediaSource.\n *\n * @param {string} type\n * The type of source buffer to remove.\n */\n\n removeSourceBuffer(type) {\n if (!this.canRemoveSourceBuffer()) {\n videojs.log.error('removeSourceBuffer is not supported!');\n return;\n }\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.removeSourceBuffer(type),\n name: 'removeSourceBuffer'\n });\n }\n /**\n * Whether or not the removeSourceBuffer function is supported\n * on the mediaSource.\n *\n * @return {boolean}\n * if removeSourceBuffer can be called.\n */\n\n canRemoveSourceBuffer() {\n // IE reports that it supports removeSourceBuffer, but often throws\n // errors when attempting to use the function. So we report that it\n // does not support removeSourceBuffer. As of Firefox 83 removeSourceBuffer\n // throws errors, so we report that it does not support this as well.\n return !videojs.browser.IE_VERSION && !videojs.browser.IS_FIREFOX && window$1.MediaSource && window$1.MediaSource.prototype && typeof window$1.MediaSource.prototype.removeSourceBuffer === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n static canChangeType() {\n return window$1.SourceBuffer && window$1.SourceBuffer.prototype && typeof window$1.SourceBuffer.prototype.changeType === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n canChangeType() {\n return this.constructor.canChangeType();\n }\n /**\n * Call the changeType function on a source buffer, given the code and type.\n *\n * @param {string} type\n * The type of source buffer to call changeType on.\n *\n * @param {string} codec\n * The codec string to change type with on the source buffer.\n */\n\n changeType(type, codec) {\n if (!this.canChangeType()) {\n videojs.log.error('changeType is not supported!');\n return;\n }\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.changeType(codec),\n name: 'changeType'\n });\n }\n /**\n * Add source buffers with a codec or, if they are already created,\n * call changeType on source buffers using changeType.\n *\n * @param {Object} codecs\n * Codecs to switch to\n */\n\n addOrChangeSourceBuffers(codecs) {\n if (!codecs || typeof codecs !== 'object' || Object.keys(codecs).length === 0) {\n throw new Error('Cannot addOrChangeSourceBuffers to undefined codecs');\n }\n Object.keys(codecs).forEach(type => {\n const codec = codecs[type];\n if (!this.hasCreatedSourceBuffers()) {\n return this.addSourceBuffer(type, codec);\n }\n if (this.canChangeType()) {\n this.changeType(type, codec);\n }\n });\n }\n /**\n * Queue an update to append an ArrayBuffer.\n *\n * @param {MediaObject} object containing audioBytes and/or videoBytes\n * @param {Function} done the function to call when done\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data\n */\n\n appendBuffer(options, doneFn) {\n const {\n segmentInfo,\n type,\n bytes\n } = options;\n this.processedAppend_ = true;\n if (type === 'audio' && this.videoBuffer && !this.videoAppendQueued_) {\n this.delayedAudioAppendQueue_.push([options, doneFn]);\n this.logger_(`delayed audio append of ${bytes.length} until video append`);\n return;\n } // In the case of certain errors, for instance, QUOTA_EXCEEDED_ERR, updateend will\n // not be fired. This means that the queue will be blocked until the next action\n // taken by the segment-loader. Provide a mechanism for segment-loader to handle\n // these errors by calling the doneFn with the specific error.\n\n const onError = doneFn;\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.appendBuffer(bytes, segmentInfo || {\n mediaIndex: -1\n }, onError),\n doneFn,\n name: 'appendBuffer'\n });\n if (type === 'video') {\n this.videoAppendQueued_ = true;\n if (!this.delayedAudioAppendQueue_.length) {\n return;\n }\n const queue = this.delayedAudioAppendQueue_.slice();\n this.logger_(`queuing delayed audio ${queue.length} appendBuffers`);\n this.delayedAudioAppendQueue_.length = 0;\n queue.forEach(que => {\n this.appendBuffer.apply(this, que);\n });\n }\n }\n /**\n * Get the audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The audio buffer's buffered time range\n */\n\n audioBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.audioBuffer)) {\n return createTimeRanges();\n }\n return this.audioBuffer.buffered ? this.audioBuffer.buffered : createTimeRanges();\n }\n /**\n * Get the video buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The video buffer's buffered time range\n */\n\n videoBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.videoBuffer)) {\n return createTimeRanges();\n }\n return this.videoBuffer.buffered ? this.videoBuffer.buffered : createTimeRanges();\n }\n /**\n * Get a combined video/audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * the combined time range\n */\n\n buffered() {\n const video = inSourceBuffers(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null;\n const audio = inSourceBuffers(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null;\n if (audio && !video) {\n return this.audioBuffered();\n }\n if (video && !audio) {\n return this.videoBuffered();\n }\n return bufferIntersection(this.audioBuffered(), this.videoBuffered());\n }\n /**\n * Add a callback to the queue that will set duration on the mediaSource.\n *\n * @param {number} duration\n * The duration to set\n *\n * @param {Function} [doneFn]\n * function to run after duration has been set.\n */\n\n setDuration(duration, doneFn = noop) {\n // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.duration(duration),\n name: 'duration',\n doneFn\n });\n }\n /**\n * Add a mediaSource endOfStream call to the queue\n *\n * @param {Error} [error]\n * Call endOfStream with an error\n *\n * @param {Function} [doneFn]\n * A function that should be called when the\n * endOfStream call has finished.\n */\n\n endOfStream(error = null, doneFn = noop) {\n if (typeof error !== 'string') {\n error = undefined;\n } // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.endOfStream(error),\n name: 'endOfStream',\n doneFn\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeAudio(start, end, done = noop) {\n if (!this.audioBuffered().length || this.audioBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeVideo(start, end, done = noop) {\n if (!this.videoBuffered().length || this.videoBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Whether the underlying sourceBuffer is updating or not\n *\n * @return {boolean} the updating status of the SourceBuffer\n */\n\n updating() {\n // the audio/video source buffer is updating\n if (updating('audio', this) || updating('video', this)) {\n return true;\n }\n return false;\n }\n /**\n * Set/get the timestampoffset on the audio SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n audioTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.audioBuffer &&\n // no point in updating if it's the same\n this.audioTimestampOffset_ !== offset) {\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.audioTimestampOffset_ = offset;\n }\n return this.audioTimestampOffset_;\n }\n /**\n * Set/get the timestampoffset on the video SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n videoTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.videoBuffer &&\n // no point in updating if it's the same\n this.videoTimestampOffset !== offset) {\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.videoTimestampOffset_ = offset;\n }\n return this.videoTimestampOffset_;\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the audio queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n audioQueueCallback(callback) {\n if (!this.audioBuffer) {\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the video queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n videoQueueCallback(callback) {\n if (!this.videoBuffer) {\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * dispose of the source updater and the underlying sourceBuffer\n */\n\n dispose() {\n this.trigger('dispose');\n bufferTypes.forEach(type => {\n this.abort(type);\n if (this.canRemoveSourceBuffer()) {\n this.removeSourceBuffer(type);\n } else {\n this[`${type}QueueCallback`](() => cleanupBuffer(type, this));\n }\n });\n this.videoAppendQueued_ = false;\n this.delayedAudioAppendQueue_.length = 0;\n if (this.sourceopenListener_) {\n this.mediaSource.removeEventListener('sourceopen', this.sourceopenListener_);\n }\n this.off();\n }\n}\nconst uint8ToUtf8 = uintArray => decodeURIComponent(escape(String.fromCharCode.apply(null, uintArray)));\n\n/**\n * @file vtt-segment-loader.js\n */\nconst VTT_LINE_TERMINATORS = new Uint8Array('\\n\\n'.split('').map(char => char.charCodeAt(0)));\n/**\n * An object that manages segment loading and appending.\n *\n * @class VTTSegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass VTTSegmentLoader extends SegmentLoader {\n constructor(settings, options = {}) {\n super(settings, options); // SegmentLoader requires a MediaSource be specified or it will throw an error;\n // however, VTTSegmentLoader has no need of a media source, so delete the reference\n\n this.mediaSource_ = null;\n this.subtitlesTrack_ = null;\n this.loaderType_ = 'subtitle';\n this.featuresNativeTextTracks_ = settings.featuresNativeTextTracks; // The VTT segment will have its own time mappings. Saving VTT segment timing info in\n // the sync controller leads to improper behavior.\n\n this.shouldSaveSegmentTimingInfo_ = false;\n }\n createTransmuxer_() {\n // don't need to transmux any subtitles\n return null;\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) {\n return createTimeRanges();\n }\n const cues = this.subtitlesTrack_.cues;\n const start = cues[0].startTime;\n const end = cues[cues.length - 1].startTime;\n return createTimeRanges([[start, end]]);\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n // append WebVTT line terminators to the media initialization segment if it exists\n // to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that\n // requires two or more WebVTT line terminators between the WebVTT header and the\n // rest of the file\n const combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength;\n const combinedSegment = new Uint8Array(combinedByteLength);\n combinedSegment.set(map.bytes);\n combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength);\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: combinedSegment\n };\n }\n return storedMap || map;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && this.subtitlesTrack_ && !this.paused();\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY';\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * Set a subtitle track on the segment loader to add subtitles to\n *\n * @param {TextTrack=} track\n * The text track to add loaded subtitles to\n * @return {TextTrack}\n * Returns the subtitles track\n */\n\n track(track) {\n if (typeof track === 'undefined') {\n return this.subtitlesTrack_;\n }\n this.subtitlesTrack_ = track; // if we were unpaused but waiting for a sourceUpdater, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n this.init_();\n }\n return this.subtitlesTrack_;\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n */\n\n remove(start, end) {\n removeCuesFromTrack(start, end, this.subtitlesTrack_);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // see if we need to begin loading immediately\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) {\n // We don't have the timestamp offset that we need to sync subtitles.\n // Rerun on a timestamp offset or user interaction.\n const checkTimestampOffset = () => {\n this.state = 'READY';\n if (!this.paused()) {\n // if not paused, queue a buffer check as soon as possible\n this.monitorBuffer_();\n }\n };\n this.syncController_.one('timestampoffset', checkTimestampOffset);\n this.state = 'WAITING_ON_TIMELINE';\n return;\n }\n this.loadSegment_(segmentInfo);\n } // never set a timestamp offset for vtt segments.\n\n timestampOffsetForSegment_() {\n return null;\n }\n chooseNextRequest_() {\n return this.skipEmptySegments_(super.chooseNextRequest_());\n }\n /**\n * Prevents the segment loader from requesting segments we know contain no subtitles\n * by walking forward until we find the next segment that we don't know whether it is\n * empty or not.\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @return {Object}\n * a segment info object that describes the current segment\n */\n\n skipEmptySegments_(segmentInfo) {\n while (segmentInfo && segmentInfo.segment.empty) {\n // stop at the last possible segmentInfo\n if (segmentInfo.mediaIndex + 1 >= segmentInfo.playlist.segments.length) {\n segmentInfo = null;\n break;\n }\n segmentInfo = this.generateSegmentInfo_({\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex + 1,\n startOfSegment: segmentInfo.startOfSegment + segmentInfo.duration,\n isSyncRequest: segmentInfo.isSyncRequest\n });\n }\n return segmentInfo;\n }\n stopForError(error) {\n this.error(error);\n this.state = 'READY';\n this.pause();\n this.trigger('error');\n }\n /**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n if (!this.subtitlesTrack_) {\n this.state = 'READY';\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // the request was aborted\n\n if (!this.pendingSegment_) {\n this.state = 'READY';\n this.mediaRequestsAborted += 1;\n return;\n }\n if (error) {\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n }\n if (error.code === REQUEST_ERRORS.ABORTED) {\n this.mediaRequestsAborted += 1;\n } else {\n this.mediaRequestsErrored += 1;\n }\n this.stopForError(error);\n return;\n }\n const segmentInfo = this.pendingSegment_; // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functionality between segment loaders\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n this.state = 'APPENDING'; // used for tests\n\n this.trigger('appending');\n const segment = segmentInfo.segment;\n if (segment.map) {\n segment.map.bytes = simpleSegment.map.bytes;\n }\n segmentInfo.bytes = simpleSegment.bytes; // Make sure that vttjs has loaded, otherwise, wait till it finished loading\n\n if (typeof window$1.WebVTT !== 'function' && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) {\n let loadHandler;\n const errorHandler = () => {\n this.subtitlesTrack_.tech_.off('vttjsloaded', loadHandler);\n this.stopForError({\n message: 'Error loading vtt.js'\n });\n return;\n };\n loadHandler = () => {\n this.subtitlesTrack_.tech_.off('vttjserror', errorHandler);\n this.segmentRequestFinished_(error, simpleSegment, result);\n };\n this.state = 'WAITING_ON_VTTJS';\n this.subtitlesTrack_.tech_.one('vttjsloaded', loadHandler);\n this.subtitlesTrack_.tech_.one('vttjserror', errorHandler);\n return;\n }\n segment.requested = true;\n try {\n this.parseVTTCues_(segmentInfo);\n } catch (e) {\n this.stopForError({\n message: e.message\n });\n return;\n }\n this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_);\n if (segmentInfo.cues.length) {\n segmentInfo.timingInfo = {\n start: segmentInfo.cues[0].startTime,\n end: segmentInfo.cues[segmentInfo.cues.length - 1].endTime\n };\n } else {\n segmentInfo.timingInfo = {\n start: segmentInfo.startOfSegment,\n end: segmentInfo.startOfSegment + segmentInfo.duration\n };\n }\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate');\n this.pendingSegment_ = null;\n this.state = 'READY';\n return;\n }\n segmentInfo.byteLength = segmentInfo.bytes.byteLength;\n this.mediaSecondsLoaded += segment.duration; // Create VTTCue instances for each cue in the new segment and add them to\n // the subtitle track\n\n segmentInfo.cues.forEach(cue => {\n this.subtitlesTrack_.addCue(this.featuresNativeTextTracks_ ? new window$1.VTTCue(cue.startTime, cue.endTime, cue.text) : cue);\n }); // Remove any duplicate cues from the subtitle track. The WebVTT spec allows\n // cues to have identical time-intervals, but if the text is also identical\n // we can safely assume it is a duplicate that can be removed (ex. when a cue\n // \"overlaps\" VTT segments)\n\n removeDuplicateCuesFromTrack(this.subtitlesTrack_);\n this.handleAppendsDone_();\n }\n handleData_() {// noop as we shouldn't be getting video/audio data captions\n // that we do not support here.\n }\n updateTimingInfoEnd_() {// noop\n }\n /**\n * Uses the WebVTT parser to parse the segment response\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @private\n */\n\n parseVTTCues_(segmentInfo) {\n let decoder;\n let decodeBytesToString = false;\n if (typeof window$1.TextDecoder === 'function') {\n decoder = new window$1.TextDecoder('utf8');\n } else {\n decoder = window$1.WebVTT.StringDecoder();\n decodeBytesToString = true;\n }\n const parser = new window$1.WebVTT.Parser(window$1, window$1.vttjs, decoder);\n segmentInfo.cues = [];\n segmentInfo.timestampmap = {\n MPEGTS: 0,\n LOCAL: 0\n };\n parser.oncue = segmentInfo.cues.push.bind(segmentInfo.cues);\n parser.ontimestampmap = map => {\n segmentInfo.timestampmap = map;\n };\n parser.onparsingerror = error => {\n videojs.log.warn('Error encountered when parsing cues: ' + error.message);\n };\n if (segmentInfo.segment.map) {\n let mapData = segmentInfo.segment.map.bytes;\n if (decodeBytesToString) {\n mapData = uint8ToUtf8(mapData);\n }\n parser.parse(mapData);\n }\n let segmentData = segmentInfo.bytes;\n if (decodeBytesToString) {\n segmentData = uint8ToUtf8(segmentData);\n }\n parser.parse(segmentData);\n parser.flush();\n }\n /**\n * Updates the start and end times of any cues parsed by the WebVTT parser using\n * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping\n * from the SyncController\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @param {Object} mappingObj\n * object containing a mapping from TS to media time\n * @param {Object} playlist\n * the playlist object containing the segment\n * @private\n */\n\n updateTimeMapping_(segmentInfo, mappingObj, playlist) {\n const segment = segmentInfo.segment;\n if (!mappingObj) {\n // If the sync controller does not have a mapping of TS to Media Time for the\n // timeline, then we don't have enough information to update the cue\n // start/end times\n return;\n }\n if (!segmentInfo.cues.length) {\n // If there are no cues, we also do not have enough information to figure out\n // segment timing. Mark that the segment contains no cues so we don't re-request\n // an empty segment.\n segment.empty = true;\n return;\n }\n const timestampmap = segmentInfo.timestampmap;\n const diff = timestampmap.MPEGTS / ONE_SECOND_IN_TS - timestampmap.LOCAL + mappingObj.mapping;\n segmentInfo.cues.forEach(cue => {\n // First convert cue time to TS time using the timestamp-map provided within the vtt\n cue.startTime += diff;\n cue.endTime += diff;\n });\n if (!playlist.syncInfo) {\n const firstStart = segmentInfo.cues[0].startTime;\n const lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime;\n playlist.syncInfo = {\n mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex,\n time: Math.min(firstStart, lastStart - segment.duration)\n };\n }\n }\n}\n\n/**\n * @file ad-cue-tags.js\n */\n/**\n * Searches for an ad cue that overlaps with the given mediaTime\n *\n * @param {Object} track\n * the track to find the cue for\n *\n * @param {number} mediaTime\n * the time to find the cue at\n *\n * @return {Object|null}\n * the found cue or null\n */\n\nconst findAdCue = function (track, mediaTime) {\n const cues = track.cues;\n for (let i = 0; i < cues.length; i++) {\n const cue = cues[i];\n if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) {\n return cue;\n }\n }\n return null;\n};\nconst updateAdCues = function (media, track, offset = 0) {\n if (!media.segments) {\n return;\n }\n let mediaTime = offset;\n let cue;\n for (let i = 0; i < media.segments.length; i++) {\n const segment = media.segments[i];\n if (!cue) {\n // Since the cues will span for at least the segment duration, adding a fudge\n // factor of half segment duration will prevent duplicate cues from being\n // created when timing info is not exact (e.g. cue start time initialized\n // at 10.006677, but next call mediaTime is 10.003332 )\n cue = findAdCue(track, mediaTime + segment.duration / 2);\n }\n if (cue) {\n if ('cueIn' in segment) {\n // Found a CUE-IN so end the cue\n cue.endTime = mediaTime;\n cue.adEndTime = mediaTime;\n mediaTime += segment.duration;\n cue = null;\n continue;\n }\n if (mediaTime < cue.endTime) {\n // Already processed this mediaTime for this cue\n mediaTime += segment.duration;\n continue;\n } // otherwise extend cue until a CUE-IN is found\n\n cue.endTime += segment.duration;\n } else {\n if ('cueOut' in segment) {\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut);\n cue.adStartTime = mediaTime; // Assumes tag format to be\n // #EXT-X-CUE-OUT:30\n\n cue.adEndTime = mediaTime + parseFloat(segment.cueOut);\n track.addCue(cue);\n }\n if ('cueOutCont' in segment) {\n // Entered into the middle of an ad cue\n // Assumes tag formate to be\n // #EXT-X-CUE-OUT-CONT:10/30\n const [adOffset, adTotal] = segment.cueOutCont.split('/').map(parseFloat);\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, '');\n cue.adStartTime = mediaTime - adOffset;\n cue.adEndTime = cue.adStartTime + adTotal;\n track.addCue(cue);\n }\n }\n mediaTime += segment.duration;\n }\n};\n\n/**\n * @file sync-controller.js\n */\n// synchronize expired playlist segments.\n// the max media sequence diff is 48 hours of live stream\n// content with two second segments. Anything larger than that\n// will likely be invalid.\n\nconst MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC = 86400;\nconst syncPointStrategies = [\n// Stategy \"VOD\": Handle the VOD-case where the sync-point is *always*\n// the equivalence display-time 0 === segment-index 0\n{\n name: 'VOD',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (duration !== Infinity) {\n const syncPoint = {\n time: 0,\n segmentIndex: 0,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n},\n// Stategy \"ProgramDateTime\": We have a program-date-time tag in this playlist\n{\n name: 'ProgramDateTime',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (!Object.keys(syncController.timelineToDatetimeMappings).length) {\n return null;\n }\n let syncPoint = null;\n let lastDistance = null;\n const partsAndSegments = getPartsAndSegments(playlist);\n currentTime = currentTime || 0;\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const datetimeMapping = syncController.timelineToDatetimeMappings[segment.timeline];\n if (!datetimeMapping || !segment.dateTimeObject) {\n continue;\n }\n const segmentTime = segment.dateTimeObject.getTime() / 1000;\n let start = segmentTime + datetimeMapping; // take part duration into account.\n\n if (segment.parts && typeof partAndSegment.partIndex === 'number') {\n for (let z = 0; z < partAndSegment.partIndex; z++) {\n start += segment.parts[z].duration;\n }\n }\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, or if distance is 0, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && (distance === 0 || lastDistance < distance)) {\n break;\n }\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n return syncPoint;\n }\n},\n// Stategy \"Segment\": We have a known time mapping for a timeline and a\n// segment in the current timeline with timing data\n{\n name: 'Segment',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n let lastDistance = null;\n currentTime = currentTime || 0;\n const partsAndSegments = getPartsAndSegments(playlist);\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const start = partAndSegment.part && partAndSegment.part.start || segment && segment.start;\n if (segment.timeline === currentTimeline && typeof start !== 'undefined') {\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Discontinuity\": We have a discontinuity with a known\n// display-time\n{\n name: 'Discontinuity',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n currentTime = currentTime || 0;\n if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n let lastDistance = null;\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const discontinuitySync = syncController.discontinuities[discontinuity];\n if (discontinuitySync) {\n const distance = Math.abs(currentTime - discontinuitySync.time); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: discontinuitySync.time,\n segmentIndex,\n partIndex: null\n };\n }\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Playlist\": We have a playlist with a known mapping of\n// segment index to display time\n{\n name: 'Playlist',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (playlist.syncInfo) {\n const syncPoint = {\n time: playlist.syncInfo.time,\n segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n}];\nclass SyncController extends videojs.EventTarget {\n constructor(options = {}) {\n super(); // ...for synching across variants\n\n this.timelines = [];\n this.discontinuities = [];\n this.timelineToDatetimeMappings = {};\n this.logger_ = logger('SyncController');\n }\n /**\n * Find a sync-point for the playlist specified\n *\n * A sync-point is defined as a known mapping from display-time to\n * a segment-index in the current playlist.\n *\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinite if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @return {Object}\n * A sync-point object\n */\n\n getSyncPoint(playlist, duration, currentTimeline, currentTime) {\n const syncPoints = this.runStrategies_(playlist, duration, currentTimeline, currentTime);\n if (!syncPoints.length) {\n // Signal that we need to attempt to get a sync-point manually\n // by fetching a segment in the playlist and constructing\n // a sync-point from that information\n return null;\n } // Now find the sync-point that is closest to the currentTime because\n // that should result in the most accurate guess about which segment\n // to fetch\n\n return this.selectSyncPoint_(syncPoints, {\n key: 'time',\n value: currentTime\n });\n }\n /**\n * Calculate the amount of time that has expired off the playlist during playback\n *\n * @param {Playlist} playlist\n * Playlist object to calculate expired from\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playling a live source)\n * @return {number|null}\n * The amount of time that has expired off the playlist during playback. Null\n * if no sync-points for the playlist can be found.\n */\n\n getExpiredTime(playlist, duration) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n const syncPoints = this.runStrategies_(playlist, duration, playlist.discontinuitySequence, 0); // Without sync-points, there is not enough information to determine the expired time\n\n if (!syncPoints.length) {\n return null;\n }\n const syncPoint = this.selectSyncPoint_(syncPoints, {\n key: 'segmentIndex',\n value: 0\n }); // If the sync-point is beyond the start of the playlist, we want to subtract the\n // duration from index 0 to syncPoint.segmentIndex instead of adding.\n\n if (syncPoint.segmentIndex > 0) {\n syncPoint.time *= -1;\n }\n return Math.abs(syncPoint.time + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: syncPoint.segmentIndex,\n endIndex: 0\n }));\n }\n /**\n * Runs each sync-point strategy and returns a list of sync-points returned by the\n * strategies\n *\n * @private\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @return {Array}\n * A list of sync-point objects\n */\n\n runStrategies_(playlist, duration, currentTimeline, currentTime) {\n const syncPoints = []; // Try to find a sync-point in by utilizing various strategies...\n\n for (let i = 0; i < syncPointStrategies.length; i++) {\n const strategy = syncPointStrategies[i];\n const syncPoint = strategy.run(this, playlist, duration, currentTimeline, currentTime);\n if (syncPoint) {\n syncPoint.strategy = strategy.name;\n syncPoints.push({\n strategy: strategy.name,\n syncPoint\n });\n }\n }\n return syncPoints;\n }\n /**\n * Selects the sync-point nearest the specified target\n *\n * @private\n * @param {Array} syncPoints\n * List of sync-points to select from\n * @param {Object} target\n * Object specifying the property and value we are targeting\n * @param {string} target.key\n * Specifies the property to target. Must be either 'time' or 'segmentIndex'\n * @param {number} target.value\n * The value to target for the specified key.\n * @return {Object}\n * The sync-point nearest the target\n */\n\n selectSyncPoint_(syncPoints, target) {\n let bestSyncPoint = syncPoints[0].syncPoint;\n let bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value);\n let bestStrategy = syncPoints[0].strategy;\n for (let i = 1; i < syncPoints.length; i++) {\n const newDistance = Math.abs(syncPoints[i].syncPoint[target.key] - target.value);\n if (newDistance < bestDistance) {\n bestDistance = newDistance;\n bestSyncPoint = syncPoints[i].syncPoint;\n bestStrategy = syncPoints[i].strategy;\n }\n }\n this.logger_(`syncPoint for [${target.key}: ${target.value}] chosen with strategy` + ` [${bestStrategy}]: [time:${bestSyncPoint.time},` + ` segmentIndex:${bestSyncPoint.segmentIndex}` + (typeof bestSyncPoint.partIndex === 'number' ? `,partIndex:${bestSyncPoint.partIndex}` : '') + ']');\n return bestSyncPoint;\n }\n /**\n * Save any meta-data present on the segments when segments leave\n * the live window to the playlist to allow for synchronization at the\n * playlist level later.\n *\n * @param {Playlist} oldPlaylist - The previous active playlist\n * @param {Playlist} newPlaylist - The updated and most current playlist\n */\n\n saveExpiredSegmentInfo(oldPlaylist, newPlaylist) {\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; // Ignore large media sequence gaps\n\n if (mediaSequenceDiff > MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC) {\n videojs.log.warn(`Not saving expired segment info. Media sequence gap ${mediaSequenceDiff} is too large.`);\n return;\n } // When a segment expires from the playlist and it has a start time\n // save that information as a possible sync-point reference in future\n\n for (let i = mediaSequenceDiff - 1; i >= 0; i--) {\n const lastRemovedSegment = oldPlaylist.segments[i];\n if (lastRemovedSegment && typeof lastRemovedSegment.start !== 'undefined') {\n newPlaylist.syncInfo = {\n mediaSequence: oldPlaylist.mediaSequence + i,\n time: lastRemovedSegment.start\n };\n this.logger_(`playlist refresh sync: [time:${newPlaylist.syncInfo.time},` + ` mediaSequence: ${newPlaylist.syncInfo.mediaSequence}]`);\n this.trigger('syncinfoupdate');\n break;\n }\n }\n }\n /**\n * Save the mapping from playlist's ProgramDateTime to display. This should only happen\n * before segments start to load.\n *\n * @param {Playlist} playlist - The currently active playlist\n */\n\n setDateTimeMappingForStart(playlist) {\n // It's possible for the playlist to be updated before playback starts, meaning time\n // zero is not yet set. If, during these playlist refreshes, a discontinuity is\n // crossed, then the old time zero mapping (for the prior timeline) would be retained\n // unless the mappings are cleared.\n this.timelineToDatetimeMappings = {};\n if (playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) {\n const firstSegment = playlist.segments[0];\n const playlistTimestamp = firstSegment.dateTimeObject.getTime() / 1000;\n this.timelineToDatetimeMappings[firstSegment.timeline] = -playlistTimestamp;\n }\n }\n /**\n * Calculates and saves timeline mappings, playlist sync info, and segment timing values\n * based on the latest timing information.\n *\n * @param {Object} options\n * Options object\n * @param {SegmentInfo} options.segmentInfo\n * The current active request information\n * @param {boolean} options.shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved for timeline mapping and program date time mappings.\n */\n\n saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping\n }) {\n const didCalculateSegmentTimeMapping = this.calculateSegmentTimeMapping_(segmentInfo, segmentInfo.timingInfo, shouldSaveTimelineMapping);\n const segment = segmentInfo.segment;\n if (didCalculateSegmentTimeMapping) {\n this.saveDiscontinuitySyncInfo_(segmentInfo); // If the playlist does not have sync information yet, record that information\n // now with segment timing information\n\n if (!segmentInfo.playlist.syncInfo) {\n segmentInfo.playlist.syncInfo = {\n mediaSequence: segmentInfo.playlist.mediaSequence + segmentInfo.mediaIndex,\n time: segment.start\n };\n }\n }\n const dateTime = segment.dateTimeObject;\n if (segment.discontinuity && shouldSaveTimelineMapping && dateTime) {\n this.timelineToDatetimeMappings[segment.timeline] = -(dateTime.getTime() / 1000);\n }\n }\n timestampOffsetForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].time;\n }\n mappingForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].mapping;\n }\n /**\n * Use the \"media time\" for a segment to generate a mapping to \"display time\" and\n * save that display time to the segment.\n *\n * @private\n * @param {SegmentInfo} segmentInfo\n * The current active request information\n * @param {Object} timingInfo\n * The start and end time of the current segment in \"media time\"\n * @param {boolean} shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved in timelines.\n * @return {boolean}\n * Returns false if segment time mapping could not be calculated\n */\n\n calculateSegmentTimeMapping_(segmentInfo, timingInfo, shouldSaveTimelineMapping) {\n // TODO: remove side effects\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n let mappingObj = this.timelines[segmentInfo.timeline];\n let start;\n let end;\n if (typeof segmentInfo.timestampOffset === 'number') {\n mappingObj = {\n time: segmentInfo.startOfSegment,\n mapping: segmentInfo.startOfSegment - timingInfo.start\n };\n if (shouldSaveTimelineMapping) {\n this.timelines[segmentInfo.timeline] = mappingObj;\n this.trigger('timestampoffset');\n this.logger_(`time mapping for timeline ${segmentInfo.timeline}: ` + `[time: ${mappingObj.time}] [mapping: ${mappingObj.mapping}]`);\n }\n start = segmentInfo.startOfSegment;\n end = timingInfo.end + mappingObj.mapping;\n } else if (mappingObj) {\n start = timingInfo.start + mappingObj.mapping;\n end = timingInfo.end + mappingObj.mapping;\n } else {\n return false;\n }\n if (part) {\n part.start = start;\n part.end = end;\n } // If we don't have a segment start yet or the start value we got\n // is less than our current segment.start value, save a new start value.\n // We have to do this because parts will have segment timing info saved\n // multiple times and we want segment start to be the earliest part start\n // value for that segment.\n\n if (!segment.start || start < segment.start) {\n segment.start = start;\n }\n segment.end = end;\n return true;\n }\n /**\n * Each time we have discontinuity in the playlist, attempt to calculate the location\n * in display of the start of the discontinuity and save that. We also save an accuracy\n * value so that we save values with the most accuracy (closest to 0.)\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n */\n\n saveDiscontinuitySyncInfo_(segmentInfo) {\n const playlist = segmentInfo.playlist;\n const segment = segmentInfo.segment; // If the current segment is a discontinuity then we know exactly where\n // the start of the range and it's accuracy is 0 (greater accuracy values\n // mean more approximation)\n\n if (segment.discontinuity) {\n this.discontinuities[segment.timeline] = {\n time: segment.start,\n accuracy: 0\n };\n } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n // Search for future discontinuities that we can provide better timing\n // information for and save that information for sync purposes\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex;\n const accuracy = Math.abs(mediaIndexDiff);\n if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) {\n let time;\n if (mediaIndexDiff < 0) {\n time = segment.start - sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex,\n endIndex: segmentIndex\n });\n } else {\n time = segment.end + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex + 1,\n endIndex: segmentIndex\n });\n }\n this.discontinuities[discontinuity] = {\n time,\n accuracy\n };\n }\n }\n }\n }\n dispose() {\n this.trigger('dispose');\n this.off();\n }\n}\n\n/**\n * The TimelineChangeController acts as a source for segment loaders to listen for and\n * keep track of latest and pending timeline changes. This is useful to ensure proper\n * sync, as each loader may need to make a consideration for what timeline the other\n * loader is on before making changes which could impact the other loader's media.\n *\n * @class TimelineChangeController\n * @extends videojs.EventTarget\n */\n\nclass TimelineChangeController extends videojs.EventTarget {\n constructor() {\n super();\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n }\n clearPendingTimelineChange(type) {\n this.pendingTimelineChanges_[type] = null;\n this.trigger('pendingtimelinechange');\n }\n pendingTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.pendingTimelineChanges_[type] = {\n type,\n from,\n to\n };\n this.trigger('pendingtimelinechange');\n }\n return this.pendingTimelineChanges_[type];\n }\n lastTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.lastTimelineChanges_[type] = {\n type,\n from,\n to\n };\n delete this.pendingTimelineChanges_[type];\n this.trigger('timelinechange');\n }\n return this.lastTimelineChanges_[type];\n }\n dispose() {\n this.trigger('dispose');\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n this.off();\n }\n}\n\n/* rollup-plugin-worker-factory start for worker!/Users/poneill/dev/http-streaming/src/decrypter-worker.js */\nconst workerCode = transform(getWorkerString(function () {\n /**\n * @file stream.js\n */\n\n /**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\n\n var Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n var _proto = Stream.prototype;\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n return Stream;\n }();\n /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */\n\n /**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n *\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\n\n function unpad(padded) {\n return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);\n }\n /*! @name aes-decrypter @version 4.0.1 @license Apache-2.0 */\n\n /**\n * @file aes.js\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n\n const precompute = function () {\n const tables = [[[], [], [], [], []], [[], [], [], [], []]];\n const encTable = tables[0];\n const decTable = tables[1];\n const sbox = encTable[4];\n const sboxInv = decTable[4];\n let i;\n let x;\n let xInv;\n const d = [];\n const th = [];\n let x2;\n let x4;\n let x8;\n let s;\n let tEnc;\n let tDec; // Compute double and third tables\n\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x; // Compute MixColumns\n\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n } // Compactify. Considerable speedup on Firefox.\n\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n return tables;\n };\n let aesTables = null;\n /**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n\n class AES {\n constructor(key) {\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n // if we have yet to precompute the S-box tables\n // do so now\n if (!aesTables) {\n aesTables = precompute();\n } // then make a copy of that object for use\n\n this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];\n let i;\n let j;\n let tmp;\n const sbox = this._tables[0][4];\n const decTable = this._tables[1];\n const keyLen = key.length;\n let rcon = 1;\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size');\n }\n const encKey = key.slice(0);\n const decKey = [];\n this._key = [encKey, decKey]; // schedule encryption keys\n\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1]; // apply sbox\n\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon\n\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n encKey[i] = encKey[i - keyLen] ^ tmp;\n } // schedule decryption keys\n\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {number} encrypted0 the first word to decrypt\n * @param {number} encrypted1 the second word to decrypt\n * @param {number} encrypted2 the third word to decrypt\n * @param {number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n const key = this._key[1]; // state variables a,b,c,d are loaded with pre-whitened data\n\n let a = encrypted0 ^ key[0];\n let b = encrypted3 ^ key[1];\n let c = encrypted2 ^ key[2];\n let d = encrypted1 ^ key[3];\n let a2;\n let b2;\n let c2; // key.length === 2 ?\n\n const nInnerRounds = key.length / 4 - 2;\n let i;\n let kIndex = 4;\n const table = this._tables[1]; // load up the tables\n\n const table0 = table[0];\n const table1 = table[1];\n const table2 = table[2];\n const table3 = table[3];\n const sbox = table[4]; // Inner rounds. Cribbed from OpenSSL.\n\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n } // Last round.\n\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n }\n }\n /**\n * @file async-stream.js\n */\n\n /**\n * A wrapper around the Stream class to use setTimeout\n * and run stream \"jobs\" Asynchronously\n *\n * @class AsyncStream\n * @extends Stream\n */\n\n class AsyncStream extends Stream {\n constructor() {\n super(Stream);\n this.jobs = [];\n this.delay = 1;\n this.timeout_ = null;\n }\n /**\n * process an async job\n *\n * @private\n */\n\n processJob_() {\n this.jobs.shift()();\n if (this.jobs.length) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n } else {\n this.timeout_ = null;\n }\n }\n /**\n * push a job into the stream\n *\n * @param {Function} job the job to push into the stream\n */\n\n push(job) {\n this.jobs.push(job);\n if (!this.timeout_) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n }\n }\n }\n /**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */\n\n /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n\n const ntoh = function (word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n };\n /**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n\n const decrypt = function (encrypted, key, initVector) {\n // word-level access to the encrypted bytes\n const encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);\n const decipher = new AES(Array.prototype.slice.call(key)); // byte and word-level access for the decrypted output\n\n const decrypted = new Uint8Array(encrypted.byteLength);\n const decrypted32 = new Int32Array(decrypted.buffer); // temporary variables for working with the IV, encrypted, and\n // decrypted data\n\n let init0;\n let init1;\n let init2;\n let init3;\n let encrypted0;\n let encrypted1;\n let encrypted2;\n let encrypted3; // iteration variable\n\n let wordIx; // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n\n init0 = initVector[0];\n init1 = initVector[1];\n init2 = initVector[2];\n init3 = initVector[3]; // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ntoh(encrypted32[wordIx]);\n encrypted1 = ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ntoh(encrypted32[wordIx + 3]); // decrypt the block\n\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n\n decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); // setup the IV for the next round\n\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n return decrypted;\n };\n /**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */\n\n class Decrypter {\n constructor(encrypted, key, initVector, done) {\n const step = Decrypter.STEP;\n const encrypted32 = new Int32Array(encrypted.buffer);\n const decrypted = new Uint8Array(encrypted.byteLength);\n let i = 0;\n this.asyncStream_ = new AsyncStream(); // split up the encryption job and do the individual chunks asynchronously\n\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n } // invoke the done() callback when everything is finished\n\n this.asyncStream_.push(function () {\n // remove pkcs#7 padding from the decrypted bytes\n done(null, unpad(decrypted));\n });\n }\n /**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {number} the value of step 32000\n */\n\n static get STEP() {\n // 4 * 8000;\n return 32000;\n }\n /**\n * @private\n */\n\n decryptChunk_(encrypted, key, initVector, decrypted) {\n return function () {\n const bytes = decrypt(encrypted, key, initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n };\n }\n }\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n var isArrayBufferView = function isArrayBufferView(obj) {\n if (ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(obj);\n }\n return obj && obj.buffer instanceof ArrayBuffer;\n };\n var BigInt = window_1.BigInt || Number;\n [BigInt('0x1'), BigInt('0x100'), BigInt('0x10000'), BigInt('0x1000000'), BigInt('0x100000000'), BigInt('0x10000000000'), BigInt('0x1000000000000'), BigInt('0x100000000000000'), BigInt('0x10000000000000000')];\n (function () {\n var a = new Uint16Array([0xFFCC]);\n var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n if (b[0] === 0xFF) {\n return 'big';\n }\n if (b[0] === 0xCC) {\n return 'little';\n }\n return 'unknown';\n })();\n /**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */\n\n const createTransferableMessage = function (message) {\n const transferable = {};\n Object.keys(message).forEach(key => {\n const value = message[key];\n if (isArrayBufferView(value)) {\n transferable[key] = {\n bytes: value.buffer,\n byteOffset: value.byteOffset,\n byteLength: value.byteLength\n };\n } else {\n transferable[key] = value;\n }\n });\n return transferable;\n };\n /* global self */\n\n /**\n * Our web worker interface so that things can talk to aes-decrypter\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n */\n\n self.onmessage = function (event) {\n const data = event.data;\n const encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength);\n const key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4);\n const iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4);\n /* eslint-disable no-new, handle-callback-err */\n\n new Decrypter(encrypted, key, iv, function (err, bytes) {\n self.postMessage(createTransferableMessage({\n source: data.source,\n decrypted: bytes\n }), [bytes.buffer]);\n });\n /* eslint-enable */\n };\n}));\n\nvar Decrypter = factory(workerCode);\n/* rollup-plugin-worker-factory end for worker!/Users/poneill/dev/http-streaming/src/decrypter-worker.js */\n\n/**\n * Convert the properties of an HLS track into an audioTrackKind.\n *\n * @private\n */\n\nconst audioTrackKind_ = properties => {\n let kind = properties.default ? 'main' : 'alternative';\n if (properties.characteristics && properties.characteristics.indexOf('public.accessibility.describes-video') >= 0) {\n kind = 'main-desc';\n }\n return kind;\n};\n/**\n * Pause provided segment loader and playlist loader if active\n *\n * @param {SegmentLoader} segmentLoader\n * SegmentLoader to pause\n * @param {Object} mediaType\n * Active media type\n * @function stopLoaders\n */\n\nconst stopLoaders = (segmentLoader, mediaType) => {\n segmentLoader.abort();\n segmentLoader.pause();\n if (mediaType && mediaType.activePlaylistLoader) {\n mediaType.activePlaylistLoader.pause();\n mediaType.activePlaylistLoader = null;\n }\n};\n/**\n * Start loading provided segment loader and playlist loader\n *\n * @param {PlaylistLoader} playlistLoader\n * PlaylistLoader to start loading\n * @param {Object} mediaType\n * Active media type\n * @function startLoaders\n */\n\nconst startLoaders = (playlistLoader, mediaType) => {\n // Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the\n // playlist loader\n mediaType.activePlaylistLoader = playlistLoader;\n playlistLoader.load();\n};\n/**\n * Returns a function to be called when the media group changes. It performs a\n * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a\n * change of group is merely a rendition switch of the same content at another encoding,\n * rather than a change of content, such as switching audio from English to Spanish.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a non-destructive resync of SegmentLoader when the active media\n * group changes.\n * @function onGroupChanged\n */\n\nconst onGroupChanged = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastGroup = mediaType.lastGroup_; // the group did not change do nothing\n\n if (activeGroup && lastGroup && activeGroup.id === lastGroup.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup || activeGroup.isMainPlaylist) {\n // there is no group active or active group is a main playlist and won't change\n return;\n }\n if (!activeGroup.playlistLoader) {\n if (previousActiveLoader) {\n // The previous group had a playlist loader but the new active group does not\n // this means we are switching from demuxed to muxed audio. In this case we want to\n // do a destructive reset of the main segment loader and not restart the audio\n // loaders.\n mainSegmentLoader.resetEverything();\n }\n return;\n } // Non-destructive resync\n\n segmentLoader.resyncLoader();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onGroupChanging = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n mediaType.lastGroup_ = null;\n segmentLoader.abort();\n segmentLoader.pause();\n};\n/**\n * Returns a function to be called when the media track changes. It performs a\n * destructive reset of the SegmentLoader to ensure we start loading as close to\n * currentTime as possible.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a destructive reset of SegmentLoader when the active media\n * track changes.\n * @function onTrackChanged\n */\n\nconst onTrackChanged = (type, settings) => () => {\n const {\n mainPlaylistLoader,\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastTrack = mediaType.lastTrack_; // track did not change, do nothing\n\n if (lastTrack && activeTrack && lastTrack.id === activeTrack.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup) {\n // there is no group active so we do not want to restart loaders\n return;\n }\n if (activeGroup.isMainPlaylist) {\n // track did not change, do nothing\n if (!activeTrack || !lastTrack || activeTrack.id === lastTrack.id) {\n return;\n }\n const pc = settings.vhs.playlistController_;\n const newPlaylist = pc.selectPlaylist(); // media will not change do nothing\n\n if (pc.media() === newPlaylist) {\n return;\n }\n mediaType.logger_(`track change. Switching main audio from ${lastTrack.id} to ${activeTrack.id}`);\n mainPlaylistLoader.pause();\n mainSegmentLoader.resetEverything();\n pc.fastQualityChange_(newPlaylist);\n return;\n }\n if (type === 'AUDIO') {\n if (!activeGroup.playlistLoader) {\n // when switching from demuxed audio/video to muxed audio/video (noted by no\n // playlist loader for the audio group), we want to do a destructive reset of the\n // main segment loader and not restart the audio loaders\n mainSegmentLoader.setAudio(true); // don't have to worry about disabling the audio of the audio segment loader since\n // it should be stopped\n\n mainSegmentLoader.resetEverything();\n return;\n } // although the segment loader is an audio segment loader, call the setAudio\n // function to ensure it is prepared to re-append the init segment (or handle other\n // config changes)\n\n segmentLoader.setAudio(true);\n mainSegmentLoader.setAudio(false);\n }\n if (previousActiveLoader === activeGroup.playlistLoader) {\n // Nothing has actually changed. This can happen because track change events can fire\n // multiple times for a \"single\" change. One for enabling the new active track, and\n // one for disabling the track that was active\n startLoaders(activeGroup.playlistLoader, mediaType);\n return;\n }\n if (segmentLoader.track) {\n // For WebVTT, set the new text track in the segmentloader\n segmentLoader.track(activeTrack);\n } // destructive reset\n\n segmentLoader.resetEverything();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onError = {\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning (or error if the playlist is excluded) to\n * console and switches back to default audio track.\n * @function onError.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n },\n excludePlaylist\n } = settings;\n stopLoaders(segmentLoader, mediaType); // switch back to default audio track\n\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.activeGroup();\n const id = (activeGroup.filter(group => group.default)[0] || activeGroup[0]).id;\n const defaultTrack = mediaType.tracks[id];\n if (activeTrack === defaultTrack) {\n // Default track encountered an error. All we can do now is exclude the current\n // rendition and hope another will switch audio groups\n excludePlaylist({\n error: {\n message: 'Problem encountered loading the default audio track.'\n }\n });\n return;\n }\n videojs.log.warn('Problem encountered loading the alternate audio track.' + 'Switching back to default.');\n for (const trackId in mediaType.tracks) {\n mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack;\n }\n mediaType.onTrackChanged();\n },\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning to console and disables the active subtitle track\n * @function onError.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n videojs.log.warn('Problem encountered loading the subtitle track.' + 'Disabling subtitle track.');\n stopLoaders(segmentLoader, mediaType);\n const track = mediaType.activeTrack();\n if (track) {\n track.mode = 'disabled';\n }\n mediaType.onTrackChanged();\n }\n};\nconst setupListeners = {\n /**\n * Setup event listeners for audio playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.AUDIO\n */\n AUDIO: (type, playlistLoader, settings) => {\n if (!playlistLoader) {\n // no playlist loader means audio will be muxed with the video\n return;\n }\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup event listeners for subtitle playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.SUBTITLES\n */\n SUBTITLES: (type, playlistLoader, settings) => {\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions);\n segmentLoader.track(mediaType.activeTrack()); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n }\n};\nconst initialize = {\n /**\n * Setup PlaylistLoaders and AudioTracks for the audio groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.AUDIO\n */\n 'AUDIO': (type, settings) => {\n const {\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks,\n logger_\n }\n },\n mainPlaylistLoader\n } = settings;\n const audioOnlyMain = isAudioOnly(mainPlaylistLoader.main); // force a default if we have none\n\n if (!mediaGroups[type] || Object.keys(mediaGroups[type]).length === 0) {\n mediaGroups[type] = {\n main: {\n default: {\n default: true\n }\n }\n };\n if (audioOnlyMain) {\n mediaGroups[type].main.default.playlists = mainPlaylistLoader.main.playlists;\n }\n }\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (audioOnlyMain) {\n logger_(`AUDIO group '${groupId}' label '${variantLabel}' is a main playlist`);\n properties.isMainPlaylist = true;\n playlistLoader = null; // if vhs-json was provided as the source, and the media playlist was resolved,\n // use the resolved media playlist object\n } else if (sourceType === 'vhs-json' && properties.playlists) {\n playlistLoader = new PlaylistLoader(properties.playlists[0], vhs, requestOptions);\n } else if (properties.resolvedUri) {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions); // TODO: dash isn't the only type with properties.playlists\n // should we even have properties.playlists in this check.\n } else if (properties.playlists && sourceType === 'dash') {\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else {\n // no resolvedUri means the audio is muxed with the video when using this\n // audio track\n playlistLoader = null;\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = new videojs.AudioTrack({\n id: variantLabel,\n kind: audioTrackKind_(properties),\n enabled: false,\n language: properties.language,\n default: properties.default,\n label: variantLabel\n });\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup PlaylistLoaders and TextTracks for the subtitle groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.SUBTITLES\n */\n 'SUBTITLES': (type, settings) => {\n const {\n tech,\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n },\n mainPlaylistLoader\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n if (mediaGroups[type][groupId][variantLabel].forced) {\n // Subtitle playlists with the forced attribute are not selectable in Safari.\n // According to Apple's HLS Authoring Specification:\n // If content has forced subtitles and regular subtitles in a given language,\n // the regular subtitles track in that language MUST contain both the forced\n // subtitles and the regular subtitles for that language.\n // Because of this requirement and that Safari does not add forced subtitles,\n // forced subtitles are skipped here to maintain consistent experience across\n // all platforms\n continue;\n }\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (sourceType === 'hls') {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions);\n } else if (sourceType === 'dash') {\n const playlists = properties.playlists.filter(p => p.excludeUntil !== Infinity);\n if (!playlists.length) {\n return;\n }\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else if (sourceType === 'vhs-json') {\n playlistLoader = new PlaylistLoader(\n // if the vhs-json object included the media playlist, use the media playlist\n // as provided, otherwise use the resolved URI to load the playlist\n properties.playlists ? properties.playlists[0] : properties.resolvedUri, vhs, requestOptions);\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: variantLabel,\n kind: 'subtitles',\n default: properties.default && properties.autoselect,\n language: properties.language,\n label: variantLabel\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup TextTracks for the closed-caption groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize['CLOSED-CAPTIONS']\n */\n 'CLOSED-CAPTIONS': (type, settings) => {\n const {\n tech,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n }\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n const properties = mediaGroups[type][groupId][variantLabel]; // Look for either 608 (CCn) or 708 (SERVICEn) caption services\n\n if (!/^(?:CC|SERVICE)/.test(properties.instreamId)) {\n continue;\n }\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let newProps = {\n label: variantLabel,\n language: properties.language,\n instreamId: properties.instreamId,\n default: properties.default && properties.autoselect\n };\n if (captionServices[newProps.instreamId]) {\n newProps = merge(newProps, captionServices[newProps.instreamId]);\n }\n if (newProps.default === undefined) {\n delete newProps.default;\n } // No PlaylistLoader is required for Closed-Captions because the captions are\n // embedded within the video stream\n\n groups[groupId].push(merge({\n id: variantLabel\n }, properties));\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: newProps.instreamId,\n kind: 'captions',\n default: newProps.default,\n language: newProps.language,\n label: newProps.label\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n }\n }\n};\nconst groupMatch = (list, media) => {\n for (let i = 0; i < list.length; i++) {\n if (playlistMatch(media, list[i])) {\n return true;\n }\n if (list[i].playlists && groupMatch(list[i].playlists, media)) {\n return true;\n }\n }\n return false;\n};\n/**\n * Returns a function used to get the active group of the provided type\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media group for the provided type. Takes an\n * optional parameter {TextTrack} track. If no track is provided, a list of all\n * variants in the group, otherwise the variant corresponding to the provided\n * track is returned.\n * @function activeGroup\n */\n\nconst activeGroup = (type, settings) => track => {\n const {\n mainPlaylistLoader,\n mediaTypes: {\n [type]: {\n groups\n }\n }\n } = settings;\n const media = mainPlaylistLoader.media();\n if (!media) {\n return null;\n }\n let variants = null; // set to variants to main media active group\n\n if (media.attributes[type]) {\n variants = groups[media.attributes[type]];\n }\n const groupKeys = Object.keys(groups);\n if (!variants) {\n // find the mainPlaylistLoader media\n // that is in a media group if we are dealing\n // with audio only\n if (type === 'AUDIO' && groupKeys.length > 1 && isAudioOnly(settings.main)) {\n for (let i = 0; i < groupKeys.length; i++) {\n const groupPropertyList = groups[groupKeys[i]];\n if (groupMatch(groupPropertyList, media)) {\n variants = groupPropertyList;\n break;\n }\n } // use the main group if it exists\n } else if (groups.main) {\n variants = groups.main; // only one group, use that one\n } else if (groupKeys.length === 1) {\n variants = groups[groupKeys[0]];\n }\n }\n if (typeof track === 'undefined') {\n return variants;\n }\n if (track === null || !variants) {\n // An active track was specified so a corresponding group is expected. track === null\n // means no track is currently active so there is no corresponding group\n return null;\n }\n return variants.filter(props => props.id === track.id)[0] || null;\n};\nconst activeTrack = {\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].enabled) {\n return tracks[id];\n }\n }\n return null;\n },\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].mode === 'showing' || tracks[id].mode === 'hidden') {\n return tracks[id];\n }\n }\n return null;\n }\n};\nconst getActiveGroup = (type, {\n mediaTypes\n}) => () => {\n const activeTrack_ = mediaTypes[type].activeTrack();\n if (!activeTrack_) {\n return null;\n }\n return mediaTypes[type].activeGroup(activeTrack_);\n};\n/**\n * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles,\n * Closed-Captions) specified in the main manifest.\n *\n * @param {Object} settings\n * Object containing required information for setting up the media groups\n * @param {Tech} settings.tech\n * The tech of the player\n * @param {Object} settings.requestOptions\n * XHR request options used by the segment loaders\n * @param {PlaylistLoader} settings.mainPlaylistLoader\n * PlaylistLoader for the main source\n * @param {VhsHandler} settings.vhs\n * VHS SourceHandler\n * @param {Object} settings.main\n * The parsed main manifest\n * @param {Object} settings.mediaTypes\n * Object to store the loaders, tracks, and utility methods for each media type\n * @param {Function} settings.excludePlaylist\n * Excludes the current rendition and forces a rendition switch.\n * @function setupMediaGroups\n */\n\nconst setupMediaGroups = settings => {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n initialize[type](type, settings);\n });\n const {\n mediaTypes,\n mainPlaylistLoader,\n tech,\n vhs,\n segmentLoaders: {\n ['AUDIO']: audioSegmentLoader,\n main: mainSegmentLoader\n }\n } = settings; // setup active group and track getters and change event handlers\n\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n mediaTypes[type].activeGroup = activeGroup(type, settings);\n mediaTypes[type].activeTrack = activeTrack[type](type, settings);\n mediaTypes[type].onGroupChanged = onGroupChanged(type, settings);\n mediaTypes[type].onGroupChanging = onGroupChanging(type, settings);\n mediaTypes[type].onTrackChanged = onTrackChanged(type, settings);\n mediaTypes[type].getActiveGroup = getActiveGroup(type, settings);\n }); // DO NOT enable the default subtitle or caption track.\n // DO enable the default audio track\n\n const audioGroup = mediaTypes.AUDIO.activeGroup();\n if (audioGroup) {\n const groupId = (audioGroup.filter(group => group.default)[0] || audioGroup[0]).id;\n mediaTypes.AUDIO.tracks[groupId].enabled = true;\n mediaTypes.AUDIO.onGroupChanged();\n mediaTypes.AUDIO.onTrackChanged();\n const activeAudioGroup = mediaTypes.AUDIO.getActiveGroup(); // a similar check for handling setAudio on each loader is run again each time the\n // track is changed, but needs to be handled here since the track may not be considered\n // changed on the first call to onTrackChanged\n\n if (!activeAudioGroup.playlistLoader) {\n // either audio is muxed with video or the stream is audio only\n mainSegmentLoader.setAudio(true);\n } else {\n // audio is demuxed\n mainSegmentLoader.setAudio(false);\n audioSegmentLoader.setAudio(true);\n }\n }\n mainPlaylistLoader.on('mediachange', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanged());\n });\n mainPlaylistLoader.on('mediachanging', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanging());\n }); // custom audio track change event handler for usage event\n\n const onAudioTrackChanged = () => {\n mediaTypes.AUDIO.onTrackChanged();\n tech.trigger({\n type: 'usage',\n name: 'vhs-audio-change'\n });\n };\n tech.audioTracks().addEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().addEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n vhs.on('dispose', () => {\n tech.audioTracks().removeEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().removeEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n }); // clear existing audio tracks and add the ones we just created\n\n tech.clearTracks('audio');\n for (const id in mediaTypes.AUDIO.tracks) {\n tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]);\n }\n};\n/**\n * Creates skeleton object used to store the loaders, tracks, and utility methods for each\n * media type\n *\n * @return {Object}\n * Object to store the loaders, tracks, and utility methods for each media type\n * @function createMediaTypes\n */\n\nconst createMediaTypes = () => {\n const mediaTypes = {};\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n mediaTypes[type] = {\n groups: {},\n tracks: {},\n activePlaylistLoader: null,\n activeGroup: noop,\n activeTrack: noop,\n getActiveGroup: noop,\n onGroupChanged: noop,\n onTrackChanged: noop,\n lastTrack_: null,\n logger_: logger(`MediaGroups[${type}]`)\n };\n });\n return mediaTypes;\n};\n\n/**\n * @file playlist-controller.js\n */\nconst ABORT_EARLY_EXCLUSION_SECONDS = 60 * 2;\nlet Vhs$1; // SegmentLoader stats that need to have each loader's\n// values summed to calculate the final value\n\nconst loaderStats = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred', 'mediaAppends'];\nconst sumLoaderStat = function (stat) {\n return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat];\n};\nconst shouldSwitchToMedia = function ({\n currentPlaylist,\n buffered,\n currentTime,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration,\n bufferBasedABR,\n log\n}) {\n // we have no other playlist to switch to\n if (!nextPlaylist) {\n videojs.log.warn('We received no playlist to switch to. Please check your stream.');\n return false;\n }\n const sharedLogLine = `allowing switch ${currentPlaylist && currentPlaylist.id || 'null'} -> ${nextPlaylist.id}`;\n if (!currentPlaylist) {\n log(`${sharedLogLine} as current playlist is not set`);\n return true;\n } // no need to switch if playlist is the same\n\n if (nextPlaylist.id === currentPlaylist.id) {\n return false;\n } // determine if current time is in a buffered range.\n\n const isBuffered = Boolean(findRange(buffered, currentTime).length); // If the playlist is live, then we want to not take low water line into account.\n // This is because in LIVE, the player plays 3 segments from the end of the\n // playlist, and if `BUFFER_LOW_WATER_LINE` is greater than the duration availble\n // in those segments, a viewer will never experience a rendition upswitch.\n\n if (!currentPlaylist.endList) {\n // For LLHLS live streams, don't switch renditions before playback has started, as it almost\n // doubles the time to first playback.\n if (!isBuffered && typeof currentPlaylist.partTargetDuration === 'number') {\n log(`not ${sharedLogLine} as current playlist is live llhls, but currentTime isn't in buffered.`);\n return false;\n }\n log(`${sharedLogLine} as current playlist is live`);\n return true;\n }\n const forwardBuffer = timeAheadOf(buffered, currentTime);\n const maxBufferLowWaterLine = bufferBasedABR ? Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Config.MAX_BUFFER_LOW_WATER_LINE; // For the same reason as LIVE, we ignore the low water line when the VOD\n // duration is below the max potential low water line\n\n if (duration < maxBufferLowWaterLine) {\n log(`${sharedLogLine} as duration < max low water line (${duration} < ${maxBufferLowWaterLine})`);\n return true;\n }\n const nextBandwidth = nextPlaylist.attributes.BANDWIDTH;\n const currBandwidth = currentPlaylist.attributes.BANDWIDTH; // when switching down, if our buffer is lower than the high water line,\n // we can switch down\n\n if (nextBandwidth < currBandwidth && (!bufferBasedABR || forwardBuffer < bufferHighWaterLine)) {\n let logLine = `${sharedLogLine} as next bandwidth < current bandwidth (${nextBandwidth} < ${currBandwidth})`;\n if (bufferBasedABR) {\n logLine += ` and forwardBuffer < bufferHighWaterLine (${forwardBuffer} < ${bufferHighWaterLine})`;\n }\n log(logLine);\n return true;\n } // and if our buffer is higher than the low water line,\n // we can switch up\n\n if ((!bufferBasedABR || nextBandwidth > currBandwidth) && forwardBuffer >= bufferLowWaterLine) {\n let logLine = `${sharedLogLine} as forwardBuffer >= bufferLowWaterLine (${forwardBuffer} >= ${bufferLowWaterLine})`;\n if (bufferBasedABR) {\n logLine += ` and next bandwidth > current bandwidth (${nextBandwidth} > ${currBandwidth})`;\n }\n log(logLine);\n return true;\n }\n log(`not ${sharedLogLine} as no switching criteria met`);\n return false;\n};\n/**\n * the main playlist controller controller all interactons\n * between playlists and segmentloaders. At this time this mainly\n * involves a main playlist and a series of audio playlists\n * if they are available\n *\n * @class PlaylistController\n * @extends videojs.EventTarget\n */\n\nclass PlaylistController extends videojs.EventTarget {\n constructor(options) {\n super();\n const {\n src,\n withCredentials,\n tech,\n bandwidth,\n externVhs,\n useCueTags,\n playlistExclusionDuration,\n enableLowInitialPlaylist,\n sourceType,\n cacheEncryptionKeys,\n bufferBasedABR,\n leastPixelDiffSelector,\n captionServices\n } = options;\n if (!src) {\n throw new Error('A non-empty playlist URL or JSON manifest string is required');\n }\n let {\n maxPlaylistRetries\n } = options;\n if (maxPlaylistRetries === null || typeof maxPlaylistRetries === 'undefined') {\n maxPlaylistRetries = Infinity;\n }\n Vhs$1 = externVhs;\n this.bufferBasedABR = Boolean(bufferBasedABR);\n this.leastPixelDiffSelector = Boolean(leastPixelDiffSelector);\n this.withCredentials = withCredentials;\n this.tech_ = tech;\n this.vhs_ = tech.vhs;\n this.sourceType_ = sourceType;\n this.useCueTags_ = useCueTags;\n this.playlistExclusionDuration = playlistExclusionDuration;\n this.maxPlaylistRetries = maxPlaylistRetries;\n this.enableLowInitialPlaylist = enableLowInitialPlaylist;\n if (this.useCueTags_) {\n this.cueTagsTrack_ = this.tech_.addTextTrack('metadata', 'ad-cues');\n this.cueTagsTrack_.inBandMetadataTrackDispatchType = '';\n }\n this.requestOptions_ = {\n withCredentials,\n maxPlaylistRetries,\n timeout: null\n };\n this.on('error', this.pauseLoading);\n this.mediaTypes_ = createMediaTypes();\n this.mediaSource = new window$1.MediaSource();\n this.handleDurationChange_ = this.handleDurationChange_.bind(this);\n this.handleSourceOpen_ = this.handleSourceOpen_.bind(this);\n this.handleSourceEnded_ = this.handleSourceEnded_.bind(this);\n this.mediaSource.addEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.addEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.addEventListener('sourceended', this.handleSourceEnded_); // we don't have to handle sourceclose since dispose will handle termination of\n // everything, and the MediaSource should not be detached without a proper disposal\n\n this.seekable_ = createTimeRanges();\n this.hasPlayed_ = false;\n this.syncController_ = new SyncController(options);\n this.segmentMetadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'segment-metadata'\n }, false).track;\n this.decrypter_ = new Decrypter();\n this.sourceUpdater_ = new SourceUpdater(this.mediaSource);\n this.inbandTextTracks_ = {};\n this.timelineChangeController_ = new TimelineChangeController();\n const segmentLoaderSettings = {\n vhs: this.vhs_,\n parse708captions: options.parse708captions,\n useDtsForTimestampOffset: options.useDtsForTimestampOffset,\n captionServices,\n mediaSource: this.mediaSource,\n currentTime: this.tech_.currentTime.bind(this.tech_),\n seekable: () => this.seekable(),\n seeking: () => this.tech_.seeking(),\n duration: () => this.duration(),\n hasPlayed: () => this.hasPlayed_,\n goalBufferLength: () => this.goalBufferLength(),\n bandwidth,\n syncController: this.syncController_,\n decrypter: this.decrypter_,\n sourceType: this.sourceType_,\n inbandTextTracks: this.inbandTextTracks_,\n cacheEncryptionKeys,\n sourceUpdater: this.sourceUpdater_,\n timelineChangeController: this.timelineChangeController_,\n exactManifestTimings: options.exactManifestTimings\n }; // The source type check not only determines whether a special DASH playlist loader\n // should be used, but also covers the case where the provided src is a vhs-json\n // manifest object (instead of a URL). In the case of vhs-json, the default\n // PlaylistLoader should be used.\n\n this.mainPlaylistLoader_ = this.sourceType_ === 'dash' ? new DashPlaylistLoader(src, this.vhs_, this.requestOptions_) : new PlaylistLoader(src, this.vhs_, this.requestOptions_);\n this.setupMainPlaylistLoaderListeners_(); // setup segment loaders\n // combined audio/video or just video when alternate audio track is selected\n\n this.mainSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n segmentMetadataTrack: this.segmentMetadataTrack_,\n loaderType: 'main'\n }), options); // alternate audio track\n\n this.audioSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'audio'\n }), options);\n this.subtitleSegmentLoader_ = new VTTSegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'vtt',\n featuresNativeTextTracks: this.tech_.featuresNativeTextTracks\n }), options);\n this.setupSegmentLoaderListeners_();\n if (this.bufferBasedABR) {\n this.mainPlaylistLoader_.one('loadedplaylist', () => this.startABRTimer_());\n this.tech_.on('pause', () => this.stopABRTimer_());\n this.tech_.on('play', () => this.startABRTimer_());\n } // Create SegmentLoader stat-getters\n // mediaRequests_\n // mediaRequestsAborted_\n // mediaRequestsTimedout_\n // mediaRequestsErrored_\n // mediaTransferDuration_\n // mediaBytesTransferred_\n // mediaAppends_\n\n loaderStats.forEach(stat => {\n this[stat + '_'] = sumLoaderStat.bind(this, stat);\n });\n this.logger_ = logger('pc');\n this.triggeredFmp4Usage = false;\n if (this.tech_.preload() === 'none') {\n this.loadOnPlay_ = () => {\n this.loadOnPlay_ = null;\n this.mainPlaylistLoader_.load();\n };\n this.tech_.one('play', this.loadOnPlay_);\n } else {\n this.mainPlaylistLoader_.load();\n }\n this.timeToLoadedData__ = -1;\n this.mainAppendsToLoadedData__ = -1;\n this.audioAppendsToLoadedData__ = -1;\n const event = this.tech_.preload() === 'none' ? 'play' : 'loadstart'; // start the first frame timer on loadstart or play (for preload none)\n\n this.tech_.one(event, () => {\n const timeToLoadedDataStart = Date.now();\n this.tech_.one('loadeddata', () => {\n this.timeToLoadedData__ = Date.now() - timeToLoadedDataStart;\n this.mainAppendsToLoadedData__ = this.mainSegmentLoader_.mediaAppends;\n this.audioAppendsToLoadedData__ = this.audioSegmentLoader_.mediaAppends;\n });\n });\n }\n mainAppendsToLoadedData_() {\n return this.mainAppendsToLoadedData__;\n }\n audioAppendsToLoadedData_() {\n return this.audioAppendsToLoadedData__;\n }\n appendsToLoadedData_() {\n const main = this.mainAppendsToLoadedData_();\n const audio = this.audioAppendsToLoadedData_();\n if (main === -1 || audio === -1) {\n return -1;\n }\n return main + audio;\n }\n timeToLoadedData_() {\n return this.timeToLoadedData__;\n }\n /**\n * Run selectPlaylist and switch to the new playlist if we should\n *\n * @param {string} [reason=abr] a reason for why the ABR check is made\n * @private\n */\n\n checkABR_(reason = 'abr') {\n const nextPlaylist = this.selectPlaylist();\n if (nextPlaylist && this.shouldSwitchToMedia_(nextPlaylist)) {\n this.switchMedia_(nextPlaylist, reason);\n }\n }\n switchMedia_(playlist, cause, delay) {\n const oldMedia = this.media();\n const oldId = oldMedia && (oldMedia.id || oldMedia.uri);\n const newId = playlist.id || playlist.uri;\n if (oldId && oldId !== newId) {\n this.logger_(`switch media ${oldId} -> ${newId} from ${cause}`);\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-rendition-change-${cause}`\n });\n }\n this.mainPlaylistLoader_.media(playlist, delay);\n }\n /**\n * Start a timer that periodically calls checkABR_\n *\n * @private\n */\n\n startABRTimer_() {\n this.stopABRTimer_();\n this.abrTimer_ = window$1.setInterval(() => this.checkABR_(), 250);\n }\n /**\n * Stop the timer that periodically calls checkABR_\n *\n * @private\n */\n\n stopABRTimer_() {\n // if we're scrubbing, we don't need to pause.\n // This getter will be added to Video.js in version 7.11.\n if (this.tech_.scrubbing && this.tech_.scrubbing()) {\n return;\n }\n window$1.clearInterval(this.abrTimer_);\n this.abrTimer_ = null;\n }\n /**\n * Get a list of playlists for the currently selected audio playlist\n *\n * @return {Array} the array of audio playlists\n */\n\n getAudioTrackPlaylists_() {\n const main = this.main();\n const defaultPlaylists = main && main.playlists || []; // if we don't have any audio groups then we can only\n // assume that the audio tracks are contained in main\n // playlist array, use that or an empty array.\n\n if (!main || !main.mediaGroups || !main.mediaGroups.AUDIO) {\n return defaultPlaylists;\n }\n const AUDIO = main.mediaGroups.AUDIO;\n const groupKeys = Object.keys(AUDIO);\n let track; // get the current active track\n\n if (Object.keys(this.mediaTypes_.AUDIO.groups).length) {\n track = this.mediaTypes_.AUDIO.activeTrack(); // or get the default track from main if mediaTypes_ isn't setup yet\n } else {\n // default group is `main` or just the first group.\n const defaultGroup = AUDIO.main || groupKeys.length && AUDIO[groupKeys[0]];\n for (const label in defaultGroup) {\n if (defaultGroup[label].default) {\n track = {\n label\n };\n break;\n }\n }\n } // no active track no playlists.\n\n if (!track) {\n return defaultPlaylists;\n }\n const playlists = []; // get all of the playlists that are possible for the\n // active track.\n\n for (const group in AUDIO) {\n if (AUDIO[group][track.label]) {\n const properties = AUDIO[group][track.label];\n if (properties.playlists && properties.playlists.length) {\n playlists.push.apply(playlists, properties.playlists);\n } else if (properties.uri) {\n playlists.push(properties);\n } else if (main.playlists.length) {\n // if an audio group does not have a uri\n // see if we have main playlists that use it as a group.\n // if we do then add those to the playlists list.\n for (let i = 0; i < main.playlists.length; i++) {\n const playlist = main.playlists[i];\n if (playlist.attributes && playlist.attributes.AUDIO && playlist.attributes.AUDIO === group) {\n playlists.push(playlist);\n }\n }\n }\n }\n }\n if (!playlists.length) {\n return defaultPlaylists;\n }\n return playlists;\n }\n /**\n * Register event handlers on the main playlist loader. A helper\n * function for construction time.\n *\n * @private\n */\n\n setupMainPlaylistLoaderListeners_() {\n this.mainPlaylistLoader_.on('loadedmetadata', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n } // if this isn't a live video and preload permits, start\n // downloading segments\n\n if (media.endList && this.tech_.preload() !== 'none') {\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n this.mainSegmentLoader_.load();\n }\n setupMediaGroups({\n sourceType: this.sourceType_,\n segmentLoaders: {\n AUDIO: this.audioSegmentLoader_,\n SUBTITLES: this.subtitleSegmentLoader_,\n main: this.mainSegmentLoader_\n },\n tech: this.tech_,\n requestOptions: this.requestOptions_,\n mainPlaylistLoader: this.mainPlaylistLoader_,\n vhs: this.vhs_,\n main: this.main(),\n mediaTypes: this.mediaTypes_,\n excludePlaylist: this.excludePlaylist.bind(this)\n });\n this.triggerPresenceUsage_(this.main(), media);\n this.setupFirstPlay();\n if (!this.mediaTypes_.AUDIO.activePlaylistLoader || this.mediaTypes_.AUDIO.activePlaylistLoader.media()) {\n this.trigger('selectedinitialmedia');\n } else {\n // We must wait for the active audio playlist loader to\n // finish setting up before triggering this event so the\n // representations API and EME setup is correct\n this.mediaTypes_.AUDIO.activePlaylistLoader.one('loadedmetadata', () => {\n this.trigger('selectedinitialmedia');\n });\n }\n });\n this.mainPlaylistLoader_.on('loadedplaylist', () => {\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n let updatedPlaylist = this.mainPlaylistLoader_.media();\n if (!updatedPlaylist) {\n // exclude any variants that are not supported by the browser before selecting\n // an initial media as the playlist selectors do not consider browser support\n this.excludeUnsupportedVariants_();\n let selectedMedia;\n if (this.enableLowInitialPlaylist) {\n selectedMedia = this.selectInitialPlaylist();\n }\n if (!selectedMedia) {\n selectedMedia = this.selectPlaylist();\n }\n if (!selectedMedia || !this.shouldSwitchToMedia_(selectedMedia)) {\n return;\n }\n this.initialMedia_ = selectedMedia;\n this.switchMedia_(this.initialMedia_, 'initial'); // Under the standard case where a source URL is provided, loadedplaylist will\n // fire again since the playlist will be requested. In the case of vhs-json\n // (where the manifest object is provided as the source), when the media\n // playlist's `segments` list is already available, a media playlist won't be\n // requested, and loadedplaylist won't fire again, so the playlist handler must be\n // called on its own here.\n\n const haveJsonSource = this.sourceType_ === 'vhs-json' && this.initialMedia_.segments;\n if (!haveJsonSource) {\n return;\n }\n updatedPlaylist = this.initialMedia_;\n }\n this.handleUpdatedMediaPlaylist(updatedPlaylist);\n });\n this.mainPlaylistLoader_.on('error', () => {\n const error = this.mainPlaylistLoader_.error;\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainPlaylistLoader_.on('mediachanging', () => {\n this.mainSegmentLoader_.abort();\n this.mainSegmentLoader_.pause();\n });\n this.mainPlaylistLoader_.on('mediachange', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n }\n this.mainPlaylistLoader_.load(); // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `loadedplaylist`\n\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n this.mainSegmentLoader_.load();\n this.tech_.trigger({\n type: 'mediachange',\n bubbles: true\n });\n });\n this.mainPlaylistLoader_.on('playlistunchanged', () => {\n const updatedPlaylist = this.mainPlaylistLoader_.media(); // ignore unchanged playlists that have already been\n // excluded for not-changing. We likely just have a really slowly updating\n // playlist.\n\n if (updatedPlaylist.lastExcludeReason_ === 'playlist-unchanged') {\n return;\n }\n const playlistOutdated = this.stuckAtPlaylistEnd_(updatedPlaylist);\n if (playlistOutdated) {\n // Playlist has stopped updating and we're stuck at its end. Try to\n // exclude it and switch to another playlist in the hope that that\n // one is updating (and give the player a chance to re-adjust to the\n // safe live point).\n this.excludePlaylist({\n error: {\n message: 'Playlist no longer updating.',\n reason: 'playlist-unchanged'\n }\n }); // useful for monitoring QoS\n\n this.tech_.trigger('playliststuck');\n }\n });\n this.mainPlaylistLoader_.on('renditiondisabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-disabled'\n });\n });\n this.mainPlaylistLoader_.on('renditionenabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-enabled'\n });\n });\n }\n /**\n * Given an updated media playlist (whether it was loaded for the first time, or\n * refreshed for live playlists), update any relevant properties and state to reflect\n * changes in the media that should be accounted for (e.g., cues and duration).\n *\n * @param {Object} updatedPlaylist the updated media playlist object\n *\n * @private\n */\n\n handleUpdatedMediaPlaylist(updatedPlaylist) {\n if (this.useCueTags_) {\n this.updateAdCues_(updatedPlaylist);\n } // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `mediachange`\n\n this.mainSegmentLoader_.playlist(updatedPlaylist, this.requestOptions_);\n this.updateDuration(!updatedPlaylist.endList); // If the player isn't paused, ensure that the segment loader is running,\n // as it is possible that it was temporarily stopped while waiting for\n // a playlist (e.g., in case the playlist errored and we re-requested it).\n\n if (!this.tech_.paused()) {\n this.mainSegmentLoader_.load();\n if (this.audioSegmentLoader_) {\n this.audioSegmentLoader_.load();\n }\n }\n }\n /**\n * A helper function for triggerring presence usage events once per source\n *\n * @private\n */\n\n triggerPresenceUsage_(main, media) {\n const mediaGroups = main.mediaGroups || {};\n let defaultDemuxed = true;\n const audioGroupKeys = Object.keys(mediaGroups.AUDIO);\n for (const mediaGroup in mediaGroups.AUDIO) {\n for (const label in mediaGroups.AUDIO[mediaGroup]) {\n const properties = mediaGroups.AUDIO[mediaGroup][label];\n if (!properties.uri) {\n defaultDemuxed = false;\n }\n }\n }\n if (defaultDemuxed) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-demuxed'\n });\n }\n if (Object.keys(mediaGroups.SUBTITLES).length) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-webvtt'\n });\n }\n if (Vhs$1.Playlist.isAes(media)) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-aes'\n });\n }\n if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-alternate-audio'\n });\n }\n if (this.useCueTags_) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-playlist-cue-tags'\n });\n }\n }\n shouldSwitchToMedia_(nextPlaylist) {\n const currentPlaylist = this.mainPlaylistLoader_.media() || this.mainPlaylistLoader_.pendingMedia_;\n const currentTime = this.tech_.currentTime();\n const bufferLowWaterLine = this.bufferLowWaterLine();\n const bufferHighWaterLine = this.bufferHighWaterLine();\n const buffered = this.tech_.buffered();\n return shouldSwitchToMedia({\n buffered,\n currentTime,\n currentPlaylist,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration: this.duration(),\n bufferBasedABR: this.bufferBasedABR,\n log: this.logger_\n });\n }\n /**\n * Register event handlers on the segment loaders. A helper function\n * for construction time.\n *\n * @private\n */\n\n setupSegmentLoaderListeners_() {\n this.mainSegmentLoader_.on('bandwidthupdate', () => {\n // Whether or not buffer based ABR or another ABR is used, on a bandwidth change it's\n // useful to check to see if a rendition switch should be made.\n this.checkABR_('bandwidthupdate');\n this.tech_.trigger('bandwidthupdate');\n });\n this.mainSegmentLoader_.on('timeout', () => {\n if (this.bufferBasedABR) {\n // If a rendition change is needed, then it would've be done on `bandwidthupdate`.\n // Here the only consideration is that for buffer based ABR there's no guarantee\n // of an immediate switch (since the bandwidth is averaged with a timeout\n // bandwidth value of 1), so force a load on the segment loader to keep it going.\n this.mainSegmentLoader_.load();\n }\n }); // `progress` events are not reliable enough of a bandwidth measure to trigger buffer\n // based ABR.\n\n if (!this.bufferBasedABR) {\n this.mainSegmentLoader_.on('progress', () => {\n this.trigger('progress');\n });\n }\n this.mainSegmentLoader_.on('error', () => {\n const error = this.mainSegmentLoader_.error();\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainSegmentLoader_.on('appenderror', () => {\n this.error = this.mainSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.mainSegmentLoader_.on('timestampoffset', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-timestamp-offset'\n });\n });\n this.audioSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.audioSegmentLoader_.on('appenderror', () => {\n this.error = this.audioSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('ended', () => {\n this.logger_('main segment loader ended');\n this.onEndOfStream();\n });\n this.mainSegmentLoader_.on('earlyabort', event => {\n // never try to early abort with the new ABR algorithm\n if (this.bufferBasedABR) {\n return;\n }\n this.delegateLoaders_('all', ['abort']);\n this.excludePlaylist({\n error: {\n message: 'Aborted early because there isn\\'t enough bandwidth to complete ' + 'the request without rebuffering.'\n },\n playlistExclusionDuration: ABORT_EARLY_EXCLUSION_SECONDS\n });\n });\n const updateCodecs = () => {\n if (!this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return this.tryToCreateSourceBuffers_();\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.addOrChangeSourceBuffers(codecs);\n };\n this.mainSegmentLoader_.on('trackinfo', updateCodecs);\n this.audioSegmentLoader_.on('trackinfo', updateCodecs);\n this.mainSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('ended', () => {\n this.logger_('audioSegmentLoader ended');\n this.onEndOfStream();\n });\n }\n mediaSecondsLoaded_() {\n return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded);\n }\n /**\n * Call load on our SegmentLoaders\n */\n\n load() {\n this.mainSegmentLoader_.load();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.load();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.load();\n }\n }\n /**\n * Re-tune playback quality level for the current player\n * conditions. This method will perform destructive actions like removing\n * already buffered content in order to readjust the currently active\n * playlist quickly. This is good for manual quality changes\n *\n * @private\n */\n\n fastQualityChange_(media = this.selectPlaylist()) {\n if (media === this.mainPlaylistLoader_.media()) {\n this.logger_('skipping fastQualityChange because new media is same as old');\n return;\n }\n this.switchMedia_(media, 'fast-quality'); // Delete all buffered data to allow an immediate quality switch, then seek to give\n // the browser a kick to remove any cached frames from the previous rendtion (.04 seconds\n // ahead is roughly the minimum that will accomplish this across a variety of content\n // in IE and Edge, but seeking in place is sufficient on all other browsers)\n // Edge/IE bug: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14600375/\n // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=651904\n\n this.mainSegmentLoader_.resetEverything(() => {\n // Since this is not a typical seek, we avoid the seekTo method which can cause segments\n // from the previously enabled rendition to load before the new playlist has finished loading\n if (videojs.browser.IE_VERSION || videojs.browser.IS_EDGE) {\n this.tech_.setCurrentTime(this.tech_.currentTime() + 0.04);\n } else {\n this.tech_.setCurrentTime(this.tech_.currentTime());\n }\n }); // don't need to reset audio as it is reset when media changes\n }\n /**\n * Begin playback.\n */\n\n play() {\n if (this.setupFirstPlay()) {\n return;\n }\n if (this.tech_.ended()) {\n this.tech_.setCurrentTime(0);\n }\n if (this.hasPlayed_) {\n this.load();\n }\n const seekable = this.tech_.seekable(); // if the viewer has paused and we fell out of the live window,\n // seek forward to the live point\n\n if (this.tech_.duration() === Infinity) {\n if (this.tech_.currentTime() < seekable.start(0)) {\n return this.tech_.setCurrentTime(seekable.end(seekable.length - 1));\n }\n }\n }\n /**\n * Seek to the latest media position if this is a live video and the\n * player and video are loaded and initialized.\n */\n\n setupFirstPlay() {\n const media = this.mainPlaylistLoader_.media(); // Check that everything is ready to begin buffering for the first call to play\n // If 1) there is no active media\n // 2) the player is paused\n // 3) the first play has already been setup\n // then exit early\n\n if (!media || this.tech_.paused() || this.hasPlayed_) {\n return false;\n } // when the video is a live stream\n\n if (!media.endList) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // without a seekable range, the player cannot seek to begin buffering at the live\n // point\n return false;\n }\n if (videojs.browser.IE_VERSION && this.tech_.readyState() === 0) {\n // IE11 throws an InvalidStateError if you try to set currentTime while the\n // readyState is 0, so it must be delayed until the tech fires loadedmetadata.\n this.tech_.one('loadedmetadata', () => {\n this.trigger('firstplay');\n this.tech_.setCurrentTime(seekable.end(0));\n this.hasPlayed_ = true;\n });\n return false;\n } // trigger firstplay to inform the source handler to ignore the next seek event\n\n this.trigger('firstplay'); // seek to the live point\n\n this.tech_.setCurrentTime(seekable.end(0));\n }\n this.hasPlayed_ = true; // we can begin loading now that everything is ready\n\n this.load();\n return true;\n }\n /**\n * handle the sourceopen event on the MediaSource\n *\n * @private\n */\n\n handleSourceOpen_() {\n // Only attempt to create the source buffer if none already exist.\n // handleSourceOpen is also called when we are \"re-opening\" a source buffer\n // after `endOfStream` has been called (in response to a seek for instance)\n this.tryToCreateSourceBuffers_(); // if autoplay is enabled, begin playback. This is duplicative of\n // code in video.js but is required because play() must be invoked\n // *after* the media source has opened.\n\n if (this.tech_.autoplay()) {\n const playPromise = this.tech_.play(); // Catch/silence error when a pause interrupts a play request\n // on browsers which return a promise\n\n if (typeof playPromise !== 'undefined' && typeof playPromise.then === 'function') {\n playPromise.then(null, e => {});\n }\n }\n this.trigger('sourceopen');\n }\n /**\n * handle the sourceended event on the MediaSource\n *\n * @private\n */\n\n handleSourceEnded_() {\n if (!this.inbandTextTracks_.metadataTrack_) {\n return;\n }\n const cues = this.inbandTextTracks_.metadataTrack_.cues;\n if (!cues || !cues.length) {\n return;\n }\n const duration = this.duration();\n cues[cues.length - 1].endTime = isNaN(duration) || Math.abs(duration) === Infinity ? Number.MAX_VALUE : duration;\n }\n /**\n * handle the durationchange event on the MediaSource\n *\n * @private\n */\n\n handleDurationChange_() {\n this.tech_.trigger('durationchange');\n }\n /**\n * Calls endOfStream on the media source when all active stream types have called\n * endOfStream\n *\n * @param {string} streamType\n * Stream type of the segment loader that called endOfStream\n * @private\n */\n\n onEndOfStream() {\n let isEndOfStream = this.mainSegmentLoader_.ended_;\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n const mainMediaInfo = this.mainSegmentLoader_.getCurrentMediaInfo_(); // if the audio playlist loader exists, then alternate audio is active\n\n if (!mainMediaInfo || mainMediaInfo.hasVideo) {\n // if we do not know if the main segment loader contains video yet or if we\n // definitively know the main segment loader contains video, then we need to wait\n // for both main and audio segment loaders to call endOfStream\n isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_;\n } else {\n // otherwise just rely on the audio loader\n isEndOfStream = this.audioSegmentLoader_.ended_;\n }\n }\n if (!isEndOfStream) {\n return;\n }\n this.stopABRTimer_();\n this.sourceUpdater_.endOfStream();\n }\n /**\n * Check if a playlist has stopped being updated\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist has stopped being updated or not\n */\n\n stuckAtPlaylistEnd_(playlist) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // playlist doesn't have enough information to determine whether we are stuck\n return false;\n }\n const expired = this.syncController_.getExpiredTime(playlist, this.duration());\n if (expired === null) {\n return false;\n } // does not use the safe live end to calculate playlist end, since we\n // don't want to say we are stuck while there is still content\n\n const absolutePlaylistEnd = Vhs$1.Playlist.playlistEnd(playlist, expired);\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (!buffered.length) {\n // return true if the playhead reached the absolute end of the playlist\n return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA;\n }\n const bufferedEnd = buffered.end(buffered.length - 1); // return true if there is too little buffer left and buffer has reached absolute\n // end of playlist\n\n return bufferedEnd - currentTime <= SAFE_TIME_DELTA && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA;\n }\n /**\n * Exclude a playlist for a set amount of time, making it unavailable for selection by\n * the rendition selection algorithm, then force a new playlist (rendition) selection.\n *\n * @param {Object=} playlistToExclude\n * the playlist to exclude, defaults to the currently selected playlist\n * @param {Object=} error\n * an optional error\n * @param {number=} playlistExclusionDuration\n * an optional number of seconds to exclude the playlist\n */\n\n excludePlaylist({\n playlistToExclude = this.mainPlaylistLoader_.media(),\n error = {},\n playlistExclusionDuration\n }) {\n // If the `error` was generated by the playlist loader, it will contain\n // the playlist we were trying to load (but failed) and that should be\n // excluded instead of the currently selected playlist which is likely\n // out-of-date in this scenario\n playlistToExclude = playlistToExclude || this.mainPlaylistLoader_.media();\n playlistExclusionDuration = playlistExclusionDuration || error.playlistExclusionDuration || this.playlistExclusionDuration; // If there is no current playlist, then an error occurred while we were\n // trying to load the main OR while we were disposing of the tech\n\n if (!playlistToExclude) {\n this.error = error;\n if (this.mediaSource.readyState !== 'open') {\n this.trigger('error');\n } else {\n this.sourceUpdater_.endOfStream('network');\n }\n return;\n }\n playlistToExclude.playlistErrors_++;\n const playlists = this.mainPlaylistLoader_.main.playlists;\n const enabledPlaylists = playlists.filter(isEnabled);\n const isFinalRendition = enabledPlaylists.length === 1 && enabledPlaylists[0] === playlistToExclude; // Don't exclude the only playlist unless it was excluded\n // forever\n\n if (playlists.length === 1 && playlistExclusionDuration !== Infinity) {\n videojs.log.warn(`Problem encountered with playlist ${playlistToExclude.id}. ` + 'Trying again since it is the only playlist.');\n this.tech_.trigger('retryplaylist'); // if this is a final rendition, we should delay\n\n return this.mainPlaylistLoader_.load(isFinalRendition);\n }\n if (isFinalRendition) {\n // Since we're on the final non-excluded playlist, and we're about to exclude\n // it, instead of erring the player or retrying this playlist, clear out the current\n // exclusion list. This allows other playlists to be attempted in case any have been\n // fixed.\n let reincluded = false;\n playlists.forEach(playlist => {\n // skip current playlist which is about to be excluded\n if (playlist === playlistToExclude) {\n return;\n }\n const excludeUntil = playlist.excludeUntil; // a playlist cannot be reincluded if it wasn't excluded to begin with.\n\n if (typeof excludeUntil !== 'undefined' && excludeUntil !== Infinity) {\n reincluded = true;\n delete playlist.excludeUntil;\n }\n });\n if (reincluded) {\n videojs.log.warn('Removing other playlists from the exclusion list because the last ' + 'rendition is about to be excluded.'); // Technically we are retrying a playlist, in that we are simply retrying a previous\n // playlist. This is needed for users relying on the retryplaylist event to catch a\n // case where the player might be stuck and looping through \"dead\" playlists.\n\n this.tech_.trigger('retryplaylist');\n }\n } // Exclude this playlist\n\n let excludeUntil;\n if (playlistToExclude.playlistErrors_ > this.maxPlaylistRetries) {\n excludeUntil = Infinity;\n } else {\n excludeUntil = Date.now() + playlistExclusionDuration * 1000;\n }\n playlistToExclude.excludeUntil = excludeUntil;\n if (error.reason) {\n playlistToExclude.lastExcludeReason_ = error.reason;\n }\n this.tech_.trigger('excludeplaylist');\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-excluded'\n }); // TODO: only load a new playlist if we're excluding the current playlist\n // If this function was called with a playlist that's not the current active playlist\n // (e.g., media().id !== playlistToExclude.id),\n // then a new playlist should not be selected and loaded, as there's nothing wrong with the current playlist.\n\n const nextPlaylist = this.selectPlaylist();\n if (!nextPlaylist) {\n this.error = 'Playback cannot continue. No available working or supported playlists.';\n this.trigger('error');\n return;\n }\n const logFn = error.internal ? this.logger_ : videojs.log.warn;\n const errorMessage = error.message ? ' ' + error.message : '';\n logFn(`${error.internal ? 'Internal problem' : 'Problem'} encountered with playlist ${playlistToExclude.id}.` + `${errorMessage} Switching to playlist ${nextPlaylist.id}.`); // if audio group changed reset audio loaders\n\n if (nextPlaylist.attributes.AUDIO !== playlistToExclude.attributes.AUDIO) {\n this.delegateLoaders_('audio', ['abort', 'pause']);\n } // if subtitle group changed reset subtitle loaders\n\n if (nextPlaylist.attributes.SUBTITLES !== playlistToExclude.attributes.SUBTITLES) {\n this.delegateLoaders_('subtitle', ['abort', 'pause']);\n }\n this.delegateLoaders_('main', ['abort', 'pause']);\n const delayDuration = nextPlaylist.targetDuration / 2 * 1000 || 5 * 1000;\n const shouldDelay = typeof nextPlaylist.lastRequest === 'number' && Date.now() - nextPlaylist.lastRequest <= delayDuration; // delay if it's a final rendition or if the last refresh is sooner than half targetDuration\n\n return this.switchMedia_(nextPlaylist, 'exclude', isFinalRendition || shouldDelay);\n }\n /**\n * Pause all segment/playlist loaders\n */\n\n pauseLoading() {\n this.delegateLoaders_('all', ['abort', 'pause']);\n this.stopABRTimer_();\n }\n /**\n * Call a set of functions in order on playlist loaders, segment loaders,\n * or both types of loaders.\n *\n * @param {string} filter\n * Filter loaders that should call fnNames using a string. Can be:\n * * all - run on all loaders\n * * audio - run on all audio loaders\n * * subtitle - run on all subtitle loaders\n * * main - run on the main loaders\n *\n * @param {Array|string} fnNames\n * A string or array of function names to call.\n */\n\n delegateLoaders_(filter, fnNames) {\n const loaders = [];\n const dontFilterPlaylist = filter === 'all';\n if (dontFilterPlaylist || filter === 'main') {\n loaders.push(this.mainPlaylistLoader_);\n }\n const mediaTypes = [];\n if (dontFilterPlaylist || filter === 'audio') {\n mediaTypes.push('AUDIO');\n }\n if (dontFilterPlaylist || filter === 'subtitle') {\n mediaTypes.push('CLOSED-CAPTIONS');\n mediaTypes.push('SUBTITLES');\n }\n mediaTypes.forEach(mediaType => {\n const loader = this.mediaTypes_[mediaType] && this.mediaTypes_[mediaType].activePlaylistLoader;\n if (loader) {\n loaders.push(loader);\n }\n });\n ['main', 'audio', 'subtitle'].forEach(name => {\n const loader = this[`${name}SegmentLoader_`];\n if (loader && (filter === name || filter === 'all')) {\n loaders.push(loader);\n }\n });\n loaders.forEach(loader => fnNames.forEach(fnName => {\n if (typeof loader[fnName] === 'function') {\n loader[fnName]();\n }\n }));\n }\n /**\n * set the current time on all segment loaders\n *\n * @param {TimeRange} currentTime the current time to set\n * @return {TimeRange} the current time\n */\n\n setCurrentTime(currentTime) {\n const buffered = findRange(this.tech_.buffered(), currentTime);\n if (!(this.mainPlaylistLoader_ && this.mainPlaylistLoader_.media())) {\n // return immediately if the metadata is not ready yet\n return 0;\n } // it's clearly an edge-case but don't thrown an error if asked to\n // seek within an empty playlist\n\n if (!this.mainPlaylistLoader_.media().segments) {\n return 0;\n } // if the seek location is already buffered, continue buffering as usual\n\n if (buffered && buffered.length) {\n return currentTime;\n } // cancel outstanding requests so we begin buffering at the new\n // location\n\n this.mainSegmentLoader_.resetEverything();\n this.mainSegmentLoader_.abort();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.resetEverything();\n this.audioSegmentLoader_.abort();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.resetEverything();\n this.subtitleSegmentLoader_.abort();\n } // start segment loader loading in case they are paused\n\n this.load();\n }\n /**\n * get the current duration\n *\n * @return {TimeRange} the duration\n */\n\n duration() {\n if (!this.mainPlaylistLoader_) {\n return 0;\n }\n const media = this.mainPlaylistLoader_.media();\n if (!media) {\n // no playlists loaded yet, so can't determine a duration\n return 0;\n } // Don't rely on the media source for duration in the case of a live playlist since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, just return Infinity.\n\n if (!media.endList) {\n return Infinity;\n } // Since this is a VOD video, it is safe to rely on the media source's duration (if\n // available). If it's not available, fall back to a playlist-calculated estimate.\n\n if (this.mediaSource) {\n return this.mediaSource.duration;\n }\n return Vhs$1.Playlist.duration(media);\n }\n /**\n * check the seekable range\n *\n * @return {TimeRange} the seekable range\n */\n\n seekable() {\n return this.seekable_;\n }\n onSyncInfoUpdate_() {\n let audioSeekable; // TODO check for creation of both source buffers before updating seekable\n //\n // A fix was made to this function where a check for\n // this.sourceUpdater_.hasCreatedSourceBuffers\n // was added to ensure that both source buffers were created before seekable was\n // updated. However, it originally had a bug where it was checking for a true and\n // returning early instead of checking for false. Setting it to check for false to\n // return early though created other issues. A call to play() would check for seekable\n // end without verifying that a seekable range was present. In addition, even checking\n // for that didn't solve some issues, as handleFirstPlay is sometimes worked around\n // due to a media update calling load on the segment loaders, skipping a seek to live,\n // thereby starting live streams at the beginning of the stream rather than at the end.\n //\n // This conditional should be fixed to wait for the creation of two source buffers at\n // the same time as the other sections of code are fixed to properly seek to live and\n // not throw an error due to checking for a seekable end when no seekable range exists.\n //\n // For now, fall back to the older behavior, with the understanding that the seekable\n // range may not be completely correct, leading to a suboptimal initial live point.\n\n if (!this.mainPlaylistLoader_) {\n return;\n }\n let media = this.mainPlaylistLoader_.media();\n if (!media) {\n return;\n }\n let expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n // not enough information to update seekable\n return;\n }\n const main = this.mainPlaylistLoader_.main;\n const mainSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (mainSeekable.length === 0) {\n return;\n }\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n media = this.mediaTypes_.AUDIO.activePlaylistLoader.media();\n expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n return;\n }\n audioSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (audioSeekable.length === 0) {\n return;\n }\n }\n let oldEnd;\n let oldStart;\n if (this.seekable_ && this.seekable_.length) {\n oldEnd = this.seekable_.end(0);\n oldStart = this.seekable_.start(0);\n }\n if (!audioSeekable) {\n // seekable has been calculated based on buffering video data so it\n // can be returned directly\n this.seekable_ = mainSeekable;\n } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) {\n // seekables are pretty far off, rely on main\n this.seekable_ = mainSeekable;\n } else {\n this.seekable_ = createTimeRanges([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]);\n } // seekable is the same as last time\n\n if (this.seekable_ && this.seekable_.length) {\n if (this.seekable_.end(0) === oldEnd && this.seekable_.start(0) === oldStart) {\n return;\n }\n }\n this.logger_(`seekable updated [${printableRange(this.seekable_)}]`);\n this.tech_.trigger('seekablechanged');\n }\n /**\n * Update the player duration\n */\n\n updateDuration(isLive) {\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n this.updateDuration_ = null;\n }\n if (this.mediaSource.readyState !== 'open') {\n this.updateDuration_ = this.updateDuration.bind(this, isLive);\n this.mediaSource.addEventListener('sourceopen', this.updateDuration_);\n return;\n }\n if (isLive) {\n const seekable = this.seekable();\n if (!seekable.length) {\n return;\n } // Even in the case of a live playlist, the native MediaSource's duration should not\n // be set to Infinity (even though this would be expected for a live playlist), since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, the duration should be greater than or\n // equal to the last possible seekable value.\n // MediaSource duration starts as NaN\n // It is possible (and probable) that this case will never be reached for many\n // sources, since the MediaSource reports duration as the highest value without\n // accounting for timestamp offset. For example, if the timestamp offset is -100 and\n // we buffered times 0 to 100 with real times of 100 to 200, even though current\n // time will be between 0 and 100, the native media source may report the duration\n // as 200. However, since we report duration separate from the media source (as\n // Infinity), and as long as the native media source duration value is greater than\n // our reported seekable range, seeks will work as expected. The large number as\n // duration for live is actually a strategy used by some players to work around the\n // issue of live seekable ranges cited above.\n\n if (isNaN(this.mediaSource.duration) || this.mediaSource.duration < seekable.end(seekable.length - 1)) {\n this.sourceUpdater_.setDuration(seekable.end(seekable.length - 1));\n }\n return;\n }\n const buffered = this.tech_.buffered();\n let duration = Vhs$1.Playlist.duration(this.mainPlaylistLoader_.media());\n if (buffered.length > 0) {\n duration = Math.max(duration, buffered.end(buffered.length - 1));\n }\n if (this.mediaSource.duration !== duration) {\n this.sourceUpdater_.setDuration(duration);\n }\n }\n /**\n * dispose of the PlaylistController and everything\n * that it controls\n */\n\n dispose() {\n this.trigger('dispose');\n this.decrypter_.terminate();\n this.mainPlaylistLoader_.dispose();\n this.mainSegmentLoader_.dispose();\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n const groups = this.mediaTypes_[type].groups;\n for (const id in groups) {\n groups[id].forEach(group => {\n if (group.playlistLoader) {\n group.playlistLoader.dispose();\n }\n });\n }\n });\n this.audioSegmentLoader_.dispose();\n this.subtitleSegmentLoader_.dispose();\n this.sourceUpdater_.dispose();\n this.timelineChangeController_.dispose();\n this.stopABRTimer_();\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n }\n this.mediaSource.removeEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.removeEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.removeEventListener('sourceended', this.handleSourceEnded_);\n this.off();\n }\n /**\n * return the main playlist object if we have one\n *\n * @return {Object} the main playlist object that we parsed\n */\n\n main() {\n return this.mainPlaylistLoader_.main;\n }\n /**\n * return the currently selected playlist\n *\n * @return {Object} the currently selected playlist object that we parsed\n */\n\n media() {\n // playlist loader will not return media if it has not been fully loaded\n return this.mainPlaylistLoader_.media() || this.initialMedia_;\n }\n areMediaTypesKnown_() {\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n const hasMainMediaInfo = !!this.mainSegmentLoader_.getCurrentMediaInfo_(); // if we are not using an audio loader, then we have audio media info\n // otherwise check on the segment loader.\n\n const hasAudioMediaInfo = !usingAudioLoader ? true : !!this.audioSegmentLoader_.getCurrentMediaInfo_(); // one or both loaders has not loaded sufficently to get codecs\n\n if (!hasMainMediaInfo || !hasAudioMediaInfo) {\n return false;\n }\n return true;\n }\n getCodecsOrExclude_() {\n const media = {\n main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {},\n audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {}\n }; // set \"main\" media equal to video\n\n media.video = media.main;\n const playlistCodecs = codecsForPlaylist(this.main(), this.media());\n const codecs = {};\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n if (media.main.hasVideo) {\n codecs.video = playlistCodecs.video || media.main.videoCodec || DEFAULT_VIDEO_CODEC;\n }\n if (media.main.isMuxed) {\n codecs.video += `,${playlistCodecs.audio || media.main.audioCodec || DEFAULT_AUDIO_CODEC}`;\n }\n if (media.main.hasAudio && !media.main.isMuxed || media.audio.hasAudio || usingAudioLoader) {\n codecs.audio = playlistCodecs.audio || media.main.audioCodec || media.audio.audioCodec || DEFAULT_AUDIO_CODEC; // set audio isFmp4 so we use the correct \"supports\" function below\n\n media.audio.isFmp4 = media.main.hasAudio && !media.main.isMuxed ? media.main.isFmp4 : media.audio.isFmp4;\n } // no codecs, no playback.\n\n if (!codecs.audio && !codecs.video) {\n this.excludePlaylist({\n playlistToExclude: this.media(),\n error: {\n message: 'Could not determine codecs for playlist.'\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // fmp4 relies on browser support, while ts relies on muxer support\n\n const supportFunction = (isFmp4, codec) => isFmp4 ? browserSupportsCodec(codec) : muxerSupportsCodec(codec);\n const unsupportedCodecs = {};\n let unsupportedAudio;\n ['video', 'audio'].forEach(function (type) {\n if (codecs.hasOwnProperty(type) && !supportFunction(media[type].isFmp4, codecs[type])) {\n const supporter = media[type].isFmp4 ? 'browser' : 'muxer';\n unsupportedCodecs[supporter] = unsupportedCodecs[supporter] || [];\n unsupportedCodecs[supporter].push(codecs[type]);\n if (type === 'audio') {\n unsupportedAudio = supporter;\n }\n }\n });\n if (usingAudioLoader && unsupportedAudio && this.media().attributes.AUDIO) {\n const audioGroup = this.media().attributes.AUDIO;\n this.main().playlists.forEach(variant => {\n const variantAudioGroup = variant.attributes && variant.attributes.AUDIO;\n if (variantAudioGroup === audioGroup && variant !== this.media()) {\n variant.excludeUntil = Infinity;\n }\n });\n this.logger_(`excluding audio group ${audioGroup} as ${unsupportedAudio} does not support codec(s): \"${codecs.audio}\"`);\n } // if we have any unsupported codecs exclude this playlist.\n\n if (Object.keys(unsupportedCodecs).length) {\n const message = Object.keys(unsupportedCodecs).reduce((acc, supporter) => {\n if (acc) {\n acc += ', ';\n }\n acc += `${supporter} does not support codec(s): \"${unsupportedCodecs[supporter].join(',')}\"`;\n return acc;\n }, '') + '.';\n this.excludePlaylist({\n playlistToExclude: this.media(),\n error: {\n internal: true,\n message\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // check if codec switching is happening\n\n if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) {\n const switchMessages = [];\n ['video', 'audio'].forEach(type => {\n const newCodec = (parseCodecs(this.sourceUpdater_.codecs[type] || '')[0] || {}).type;\n const oldCodec = (parseCodecs(codecs[type] || '')[0] || {}).type;\n if (newCodec && oldCodec && newCodec.toLowerCase() !== oldCodec.toLowerCase()) {\n switchMessages.push(`\"${this.sourceUpdater_.codecs[type]}\" -> \"${codecs[type]}\"`);\n }\n });\n if (switchMessages.length) {\n this.excludePlaylist({\n playlistToExclude: this.media(),\n error: {\n message: `Codec switching not supported: ${switchMessages.join(', ')}.`,\n internal: true\n },\n playlistExclusionDuration: Infinity\n });\n return;\n }\n } // TODO: when using the muxer shouldn't we just return\n // the codecs that the muxer outputs?\n\n return codecs;\n }\n /**\n * Create source buffers and exlude any incompatible renditions.\n *\n * @private\n */\n\n tryToCreateSourceBuffers_() {\n // media source is not ready yet or sourceBuffers are already\n // created.\n if (this.mediaSource.readyState !== 'open' || this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return;\n }\n if (!this.areMediaTypesKnown_()) {\n return;\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.createSourceBuffers(codecs);\n const codecString = [codecs.video, codecs.audio].filter(Boolean).join(',');\n this.excludeIncompatibleVariants_(codecString);\n }\n /**\n * Excludes playlists with codecs that are unsupported by the muxer and browser.\n */\n\n excludeUnsupportedVariants_() {\n const playlists = this.main().playlists;\n const ids = []; // TODO: why don't we have a property to loop through all\n // playlist? Why did we ever mix indexes and keys?\n\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n\n if (ids.indexOf(variant.id) !== -1) {\n return;\n }\n ids.push(variant.id);\n const codecs = codecsForPlaylist(this.main, variant);\n const unsupported = [];\n if (codecs.audio && !muxerSupportsCodec(codecs.audio) && !browserSupportsCodec(codecs.audio)) {\n unsupported.push(`audio codec ${codecs.audio}`);\n }\n if (codecs.video && !muxerSupportsCodec(codecs.video) && !browserSupportsCodec(codecs.video)) {\n unsupported.push(`video codec ${codecs.video}`);\n }\n if (codecs.text && codecs.text === 'stpp.ttml.im1t') {\n unsupported.push(`text codec ${codecs.text}`);\n }\n if (unsupported.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id} for unsupported: ${unsupported.join(', ')}`);\n }\n });\n }\n /**\n * Exclude playlists that are known to be codec or\n * stream-incompatible with the SourceBuffer configuration. For\n * instance, Media Source Extensions would cause the video element to\n * stall waiting for video data if you switched from a variant with\n * video and audio to an audio-only one.\n *\n * @param {Object} media a media playlist compatible with the current\n * set of SourceBuffers. Variants in the current main playlist that\n * do not appear to have compatible codec or stream configurations\n * will be excluded from the default playlist selection algorithm\n * indefinitely.\n * @private\n */\n\n excludeIncompatibleVariants_(codecString) {\n const ids = [];\n const playlists = this.main().playlists;\n const codecs = unwrapCodecList(parseCodecs(codecString));\n const codecCount_ = codecCount(codecs);\n const videoDetails = codecs.video && parseCodecs(codecs.video)[0] || null;\n const audioDetails = codecs.audio && parseCodecs(codecs.audio)[0] || null;\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n // or it if it is already excluded forever.\n\n if (ids.indexOf(variant.id) !== -1 || variant.excludeUntil === Infinity) {\n return;\n }\n ids.push(variant.id);\n const exclusionReasons = []; // get codecs from the playlist for this variant\n\n const variantCodecs = codecsForPlaylist(this.mainPlaylistLoader_.main, variant);\n const variantCodecCount = codecCount(variantCodecs); // if no codecs are listed, we cannot determine that this\n // variant is incompatible. Wait for mux.js to probe\n\n if (!variantCodecs.audio && !variantCodecs.video) {\n return;\n } // TODO: we can support this by removing the\n // old media source and creating a new one, but it will take some work.\n // The number of streams cannot change\n\n if (variantCodecCount !== codecCount_) {\n exclusionReasons.push(`codec count \"${variantCodecCount}\" !== \"${codecCount_}\"`);\n } // only exclude playlists by codec change, if codecs cannot switch\n // during playback.\n\n if (!this.sourceUpdater_.canChangeType()) {\n const variantVideoDetails = variantCodecs.video && parseCodecs(variantCodecs.video)[0] || null;\n const variantAudioDetails = variantCodecs.audio && parseCodecs(variantCodecs.audio)[0] || null; // the video codec cannot change\n\n if (variantVideoDetails && videoDetails && variantVideoDetails.type.toLowerCase() !== videoDetails.type.toLowerCase()) {\n exclusionReasons.push(`video codec \"${variantVideoDetails.type}\" !== \"${videoDetails.type}\"`);\n } // the audio codec cannot change\n\n if (variantAudioDetails && audioDetails && variantAudioDetails.type.toLowerCase() !== audioDetails.type.toLowerCase()) {\n exclusionReasons.push(`audio codec \"${variantAudioDetails.type}\" !== \"${audioDetails.type}\"`);\n }\n }\n if (exclusionReasons.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id}: ${exclusionReasons.join(' && ')}`);\n }\n });\n }\n updateAdCues_(media) {\n let offset = 0;\n const seekable = this.seekable();\n if (seekable.length) {\n offset = seekable.start(0);\n }\n updateAdCues(media, this.cueTagsTrack_, offset);\n }\n /**\n * Calculates the desired forward buffer length based on current time\n *\n * @return {number} Desired forward buffer length in seconds\n */\n\n goalBufferLength() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.GOAL_BUFFER_LENGTH;\n const rate = Config.GOAL_BUFFER_LENGTH_RATE;\n const max = Math.max(initial, Config.MAX_GOAL_BUFFER_LENGTH);\n return Math.min(initial + currentTime * rate, max);\n }\n /**\n * Calculates the desired buffer low water line based on current time\n *\n * @return {number} Desired buffer low water line in seconds\n */\n\n bufferLowWaterLine() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.BUFFER_LOW_WATER_LINE;\n const rate = Config.BUFFER_LOW_WATER_LINE_RATE;\n const max = Math.max(initial, Config.MAX_BUFFER_LOW_WATER_LINE);\n const newMax = Math.max(initial, Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE);\n return Math.min(initial + currentTime * rate, this.bufferBasedABR ? newMax : max);\n }\n bufferHighWaterLine() {\n return Config.BUFFER_HIGH_WATER_LINE;\n }\n}\n\n/**\n * Returns a function that acts as the Enable/disable playlist function.\n *\n * @param {PlaylistLoader} loader - The main playlist loader\n * @param {string} playlistID - id of the playlist\n * @param {Function} changePlaylistFn - A function to be called after a\n * playlist's enabled-state has been changed. Will NOT be called if a\n * playlist's enabled-state is unchanged\n * @param {boolean=} enable - Value to set the playlist enabled-state to\n * or if undefined returns the current enabled-state for the playlist\n * @return {Function} Function for setting/getting enabled\n */\n\nconst enableFunction = (loader, playlistID, changePlaylistFn) => enable => {\n const playlist = loader.main.playlists[playlistID];\n const incompatible = isIncompatible(playlist);\n const currentlyEnabled = isEnabled(playlist);\n if (typeof enable === 'undefined') {\n return currentlyEnabled;\n }\n if (enable) {\n delete playlist.disabled;\n } else {\n playlist.disabled = true;\n }\n if (enable !== currentlyEnabled && !incompatible) {\n // Ensure the outside world knows about our changes\n changePlaylistFn();\n if (enable) {\n loader.trigger('renditionenabled');\n } else {\n loader.trigger('renditiondisabled');\n }\n }\n return enable;\n};\n/**\n * The representation object encapsulates the publicly visible information\n * in a media playlist along with a setter/getter-type function (enabled)\n * for changing the enabled-state of a particular playlist entry\n *\n * @class Representation\n */\n\nclass Representation {\n constructor(vhsHandler, playlist, id) {\n const {\n playlistController_: pc\n } = vhsHandler;\n const qualityChangeFunction = pc.fastQualityChange_.bind(pc); // some playlist attributes are optional\n\n if (playlist.attributes) {\n const resolution = playlist.attributes.RESOLUTION;\n this.width = resolution && resolution.width;\n this.height = resolution && resolution.height;\n this.bandwidth = playlist.attributes.BANDWIDTH;\n this.frameRate = playlist.attributes['FRAME-RATE'];\n }\n this.codecs = codecsForPlaylist(pc.main(), playlist);\n this.playlist = playlist; // The id is simply the ordinality of the media playlist\n // within the main playlist\n\n this.id = id; // Partially-apply the enableFunction to create a playlist-\n // specific variant\n\n this.enabled = enableFunction(vhsHandler.playlists, playlist.id, qualityChangeFunction);\n }\n}\n/**\n * A mixin function that adds the `representations` api to an instance\n * of the VhsHandler class\n *\n * @param {VhsHandler} vhsHandler - An instance of VhsHandler to add the\n * representation API into\n */\n\nconst renditionSelectionMixin = function (vhsHandler) {\n // Add a single API-specific function to the VhsHandler instance\n vhsHandler.representations = () => {\n const main = vhsHandler.playlistController_.main();\n const playlists = isAudioOnly(main) ? vhsHandler.playlistController_.getAudioTrackPlaylists_() : main.playlists;\n if (!playlists) {\n return [];\n }\n return playlists.filter(media => !isIncompatible(media)).map((e, i) => new Representation(vhsHandler, e, e.id));\n };\n};\n\n/**\n * @file playback-watcher.js\n *\n * Playback starts, and now my watch begins. It shall not end until my death. I shall\n * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns\n * and win no glory. I shall live and die at my post. I am the corrector of the underflow.\n * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge\n * my life and honor to the Playback Watch, for this Player and all the Players to come.\n */\n\nconst timerCancelEvents = ['seeking', 'seeked', 'pause', 'playing', 'error'];\n/**\n * @class PlaybackWatcher\n */\n\nclass PlaybackWatcher {\n /**\n * Represents an PlaybackWatcher object.\n *\n * @class\n * @param {Object} options an object that includes the tech and settings\n */\n constructor(options) {\n this.playlistController_ = options.playlistController;\n this.tech_ = options.tech;\n this.seekable = options.seekable;\n this.allowSeeksWithinUnsafeLiveWindow = options.allowSeeksWithinUnsafeLiveWindow;\n this.liveRangeSafeTimeDelta = options.liveRangeSafeTimeDelta;\n this.media = options.media;\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = null;\n this.checkCurrentTimeTimeout_ = null;\n this.logger_ = logger('PlaybackWatcher');\n this.logger_('initialize');\n const playHandler = () => this.monitorCurrentTime_();\n const canPlayHandler = () => this.monitorCurrentTime_();\n const waitingHandler = () => this.techWaiting_();\n const cancelTimerHandler = () => this.resetTimeUpdate_();\n const pc = this.playlistController_;\n const loaderTypes = ['main', 'subtitle', 'audio'];\n const loaderChecks = {};\n loaderTypes.forEach(type => {\n loaderChecks[type] = {\n reset: () => this.resetSegmentDownloads_(type),\n updateend: () => this.checkSegmentDownloads_(type)\n };\n pc[`${type}SegmentLoader_`].on('appendsdone', loaderChecks[type].updateend); // If a rendition switch happens during a playback stall where the buffer\n // isn't changing we want to reset. We cannot assume that the new rendition\n // will also be stalled, until after new appends.\n\n pc[`${type}SegmentLoader_`].on('playlistupdate', loaderChecks[type].reset); // Playback stalls should not be detected right after seeking.\n // This prevents one segment playlists (single vtt or single segment content)\n // from being detected as stalling. As the buffer will not change in those cases, since\n // the buffer is the entire video duration.\n\n this.tech_.on(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n /**\n * We check if a seek was into a gap through the following steps:\n * 1. We get a seeking event and we do not get a seeked event. This means that\n * a seek was attempted but not completed.\n * 2. We run `fixesBadSeeks_` on segment loader appends. This means that we already\n * removed everything from our buffer and appended a segment, and should be ready\n * to check for gaps.\n */\n\n const setSeekingHandlers = fn => {\n ['main', 'audio'].forEach(type => {\n pc[`${type}SegmentLoader_`][fn]('appended', this.seekingAppendCheck_);\n });\n };\n this.seekingAppendCheck_ = () => {\n if (this.fixesBadSeeks_()) {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = this.tech_.currentTime();\n setSeekingHandlers('off');\n }\n };\n this.clearSeekingAppendCheck_ = () => setSeekingHandlers('off');\n this.watchForBadSeeking_ = () => {\n this.clearSeekingAppendCheck_();\n setSeekingHandlers('on');\n };\n this.tech_.on('seeked', this.clearSeekingAppendCheck_);\n this.tech_.on('seeking', this.watchForBadSeeking_);\n this.tech_.on('waiting', waitingHandler);\n this.tech_.on(timerCancelEvents, cancelTimerHandler);\n this.tech_.on('canplay', canPlayHandler);\n /*\n An edge case exists that results in gaps not being skipped when they exist at the beginning of a stream. This case\n is surfaced in one of two ways:\n 1) The `waiting` event is fired before the player has buffered content, making it impossible\n to find or skip the gap. The `waiting` event is followed by a `play` event. On first play\n we can check if playback is stalled due to a gap, and skip the gap if necessary.\n 2) A source with a gap at the beginning of the stream is loaded programatically while the player\n is in a playing state. To catch this case, it's important that our one-time play listener is setup\n even if the player is in a playing state\n */\n\n this.tech_.one('play', playHandler); // Define the dispose function to clean up our events\n\n this.dispose = () => {\n this.clearSeekingAppendCheck_();\n this.logger_('dispose');\n this.tech_.off('waiting', waitingHandler);\n this.tech_.off(timerCancelEvents, cancelTimerHandler);\n this.tech_.off('canplay', canPlayHandler);\n this.tech_.off('play', playHandler);\n this.tech_.off('seeking', this.watchForBadSeeking_);\n this.tech_.off('seeked', this.clearSeekingAppendCheck_);\n loaderTypes.forEach(type => {\n pc[`${type}SegmentLoader_`].off('appendsdone', loaderChecks[type].updateend);\n pc[`${type}SegmentLoader_`].off('playlistupdate', loaderChecks[type].reset);\n this.tech_.off(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n }\n this.resetTimeUpdate_();\n };\n }\n /**\n * Periodically check current time to see if playback stopped\n *\n * @private\n */\n\n monitorCurrentTime_() {\n this.checkCurrentTime_();\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n } // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n\n this.checkCurrentTimeTimeout_ = window$1.setTimeout(this.monitorCurrentTime_.bind(this), 250);\n }\n /**\n * Reset stalled download stats for a specific type of loader\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#playlistupdate\n * @listens Tech#seeking\n * @listens Tech#seeked\n */\n\n resetSegmentDownloads_(type) {\n const loader = this.playlistController_[`${type}SegmentLoader_`];\n if (this[`${type}StalledDownloads_`] > 0) {\n this.logger_(`resetting possible stalled download count for ${type} loader`);\n }\n this[`${type}StalledDownloads_`] = 0;\n this[`${type}Buffered_`] = loader.buffered_();\n }\n /**\n * Checks on every segment `appendsdone` to see\n * if segment appends are making progress. If they are not\n * and we are still downloading bytes. We exclude the playlist.\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#appendsdone\n */\n\n checkSegmentDownloads_(type) {\n const pc = this.playlistController_;\n const loader = pc[`${type}SegmentLoader_`];\n const buffered = loader.buffered_();\n const isBufferedDifferent = isRangeDifferent(this[`${type}Buffered_`], buffered);\n this[`${type}Buffered_`] = buffered; // if another watcher is going to fix the issue or\n // the buffered value for this loader changed\n // appends are working\n\n if (isBufferedDifferent) {\n this.resetSegmentDownloads_(type);\n return;\n }\n this[`${type}StalledDownloads_`]++;\n this.logger_(`found #${this[`${type}StalledDownloads_`]} ${type} appends that did not increase buffer (possible stalled download)`, {\n playlistId: loader.playlist_ && loader.playlist_.id,\n buffered: timeRangesToArray(buffered)\n }); // after 10 possibly stalled appends with no reset, exclude\n\n if (this[`${type}StalledDownloads_`] < 10) {\n return;\n }\n this.logger_(`${type} loader stalled download exclusion`);\n this.resetSegmentDownloads_(type);\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-${type}-download-exclusion`\n });\n if (type === 'subtitle') {\n return;\n } // TODO: should we exclude audio tracks rather than main tracks\n // when type is audio?\n\n pc.excludePlaylist({\n error: {\n message: `Excessive ${type} segment downloading detected.`\n },\n playlistExclusionDuration: Infinity\n });\n }\n /**\n * The purpose of this function is to emulate the \"waiting\" event on\n * browsers that do not emit it when they are waiting for more\n * data to continue playback\n *\n * @private\n */\n\n checkCurrentTime_() {\n if (this.tech_.paused() || this.tech_.seeking()) {\n return;\n }\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) {\n // If current time is at the end of the final buffered region, then any playback\n // stall is most likely caused by buffering in a low bandwidth environment. The tech\n // should fire a `waiting` event in this scenario, but due to browser and tech\n // inconsistencies. Calling `techWaiting_` here allows us to simulate\n // responding to a native `waiting` event when the tech fails to emit one.\n return this.techWaiting_();\n }\n if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n this.waiting_();\n } else if (currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n } else {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = currentTime;\n }\n }\n /**\n * Resets the 'timeupdate' mechanism designed to detect that we are stalled\n *\n * @private\n */\n\n resetTimeUpdate_() {\n this.consecutiveUpdates = 0;\n }\n /**\n * Fixes situations where there's a bad seek\n *\n * @return {boolean} whether an action was taken to fix the seek\n * @private\n */\n\n fixesBadSeeks_() {\n const seeking = this.tech_.seeking();\n if (!seeking) {\n return false;\n } // TODO: It's possible that these seekable checks should be moved out of this function\n // and into a function that runs on seekablechange. It's also possible that we only need\n // afterSeekableWindow as the buffered check at the bottom is good enough to handle before\n // seekable range.\n\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n const isAfterSeekableRange = this.afterSeekableWindow_(seekable, currentTime, this.media(), this.allowSeeksWithinUnsafeLiveWindow);\n let seekTo;\n if (isAfterSeekableRange) {\n const seekableEnd = seekable.end(seekable.length - 1); // sync to live point (if VOD, our seekable was updated and we're simply adjusting)\n\n seekTo = seekableEnd;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const seekableStart = seekable.start(0); // sync to the beginning of the live window\n // provide a buffer of .1 seconds to handle rounding/imprecise numbers\n\n seekTo = seekableStart + (\n // if the playlist is too short and the seekable range is an exact time (can\n // happen in live with a 3 segment playlist), then don't use a time delta\n seekableStart === seekable.end(0) ? 0 : SAFE_TIME_DELTA);\n }\n if (typeof seekTo !== 'undefined') {\n this.logger_(`Trying to seek outside of seekable at time ${currentTime} with ` + `seekable range ${printableRange(seekable)}. Seeking to ` + `${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n const sourceUpdater = this.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const audioBuffered = sourceUpdater.audioBuffer ? sourceUpdater.audioBuffered() : null;\n const videoBuffered = sourceUpdater.videoBuffer ? sourceUpdater.videoBuffered() : null;\n const media = this.media(); // verify that at least two segment durations or one part duration have been\n // appended before checking for a gap.\n\n const minAppendedDuration = media.partTargetDuration ? media.partTargetDuration : (media.targetDuration - TIME_FUDGE_FACTOR) * 2; // verify that at least two segment durations have been\n // appended before checking for a gap.\n\n const bufferedToCheck = [audioBuffered, videoBuffered];\n for (let i = 0; i < bufferedToCheck.length; i++) {\n // skip null buffered\n if (!bufferedToCheck[i]) {\n continue;\n }\n const timeAhead = timeAheadOf(bufferedToCheck[i], currentTime); // if we are less than two video/audio segment durations or one part\n // duration behind we haven't appended enough to call this a bad seek.\n\n if (timeAhead < minAppendedDuration) {\n return false;\n }\n }\n const nextRange = findNextRange(buffered, currentTime); // we have appended enough content, but we don't have anything buffered\n // to seek over the gap\n\n if (nextRange.length === 0) {\n return false;\n }\n seekTo = nextRange.start(0) + SAFE_TIME_DELTA;\n this.logger_(`Buffered region starts (${nextRange.start(0)}) ` + ` just beyond seek point (${currentTime}). Seeking to ${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n /**\n * Handler for situations when we determine the player is waiting.\n *\n * @private\n */\n\n waiting_() {\n if (this.techWaiting_()) {\n return;\n } // All tech waiting checks failed. Use last resort correction\n\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n const currentRange = findRange(buffered, currentTime); // Sometimes the player can stall for unknown reasons within a contiguous buffered\n // region with no indication that anything is amiss (seen in Firefox). Seeking to\n // currentTime is usually enough to kickstart the player. This checks that the player\n // is currently within a buffered region before attempting a corrective seek.\n // Chrome does not appear to continue `timeupdate` events after a `waiting` event\n // until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also\n // make sure there is ~3 seconds of forward buffer before taking any corrective action\n // to avoid triggering an `unknownwaiting` event when the network is slow.\n\n if (currentRange.length && currentTime + 3 <= currentRange.end(0)) {\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime);\n this.logger_(`Stopped at ${currentTime} while inside a buffered region ` + `[${currentRange.start(0)} -> ${currentRange.end(0)}]. Attempting to resume ` + 'playback by seeking to the current time.'); // unknown waiting corrections may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-unknown-waiting'\n });\n return;\n }\n }\n /**\n * Handler for situations when the tech fires a `waiting` event\n *\n * @return {boolean}\n * True if an action (or none) was needed to correct the waiting. False if no\n * checks passed\n * @private\n */\n\n techWaiting_() {\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n if (this.tech_.seeking()) {\n // Tech is seeking or already waiting on another action, no action needed\n return true;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const livePoint = seekable.end(seekable.length - 1);\n this.logger_(`Fell out of live window at time ${currentTime}. Seeking to ` + `live point (seekable end) ${livePoint}`);\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(livePoint); // live window resyncs may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-live-resync'\n });\n return true;\n }\n const sourceUpdater = this.tech_.vhs.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const videoUnderflow = this.videoUnderflow_({\n audioBuffered: sourceUpdater.audioBuffered(),\n videoBuffered: sourceUpdater.videoBuffered(),\n currentTime\n });\n if (videoUnderflow) {\n // Even though the video underflowed and was stuck in a gap, the audio overplayed\n // the gap, leading currentTime into a buffered range. Seeking to currentTime\n // allows the video to catch up to the audio position without losing any audio\n // (only suffering ~3 seconds of frozen video and a pause in audio playback).\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime); // video underflow may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-video-underflow'\n });\n return true;\n }\n const nextRange = findNextRange(buffered, currentTime); // check for gap\n\n if (nextRange.length > 0) {\n this.logger_(`Stopped at ${currentTime} and seeking to ${nextRange.start(0)}`);\n this.resetTimeUpdate_();\n this.skipTheGap_(currentTime);\n return true;\n } // All checks failed. Returning false to indicate failure to correct waiting\n\n return false;\n }\n afterSeekableWindow_(seekable, currentTime, playlist, allowSeeksWithinUnsafeLiveWindow = false) {\n if (!seekable.length) {\n // we can't make a solid case if there's no seekable, default to false\n return false;\n }\n let allowedEnd = seekable.end(seekable.length - 1) + SAFE_TIME_DELTA;\n const isLive = !playlist.endList;\n if (isLive && allowSeeksWithinUnsafeLiveWindow) {\n allowedEnd = seekable.end(seekable.length - 1) + playlist.targetDuration * 3;\n }\n if (currentTime > allowedEnd) {\n return true;\n }\n return false;\n }\n beforeSeekableWindow_(seekable, currentTime) {\n if (seekable.length &&\n // can't fall before 0 and 0 seekable start identifies VOD stream\n seekable.start(0) > 0 && currentTime < seekable.start(0) - this.liveRangeSafeTimeDelta) {\n return true;\n }\n return false;\n }\n videoUnderflow_({\n videoBuffered,\n audioBuffered,\n currentTime\n }) {\n // audio only content will not have video underflow :)\n if (!videoBuffered) {\n return;\n }\n let gap; // find a gap in demuxed content.\n\n if (videoBuffered.length && audioBuffered.length) {\n // in Chrome audio will continue to play for ~3s when we run out of video\n // so we have to check that the video buffer did have some buffer in the\n // past.\n const lastVideoRange = findRange(videoBuffered, currentTime - 3);\n const videoRange = findRange(videoBuffered, currentTime);\n const audioRange = findRange(audioBuffered, currentTime);\n if (audioRange.length && !videoRange.length && lastVideoRange.length) {\n gap = {\n start: lastVideoRange.end(0),\n end: audioRange.end(0)\n };\n } // find a gap in muxed content.\n } else {\n const nextRange = findNextRange(videoBuffered, currentTime); // Even if there is no available next range, there is still a possibility we are\n // stuck in a gap due to video underflow.\n\n if (!nextRange.length) {\n gap = this.gapFromVideoUnderflow_(videoBuffered, currentTime);\n }\n }\n if (gap) {\n this.logger_(`Encountered a gap in video from ${gap.start} to ${gap.end}. ` + `Seeking to current time ${currentTime}`);\n return true;\n }\n return false;\n }\n /**\n * Timer callback. If playback still has not proceeded, then we seek\n * to the start of the next buffered region.\n *\n * @private\n */\n\n skipTheGap_(scheduledCurrentTime) {\n const buffered = this.tech_.buffered();\n const currentTime = this.tech_.currentTime();\n const nextRange = findNextRange(buffered, currentTime);\n this.resetTimeUpdate_();\n if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) {\n return;\n }\n this.logger_('skipTheGap_:', 'currentTime:', currentTime, 'scheduled currentTime:', scheduledCurrentTime, 'nextRange start:', nextRange.start(0)); // only seek if we still have not played\n\n this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR);\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-gap-skip'\n });\n }\n gapFromVideoUnderflow_(buffered, currentTime) {\n // At least in Chrome, if there is a gap in the video buffer, the audio will continue\n // playing for ~3 seconds after the video gap starts. This is done to account for\n // video buffer underflow/underrun (note that this is not done when there is audio\n // buffer underflow/underrun -- in that case the video will stop as soon as it\n // encounters the gap, as audio stalls are more noticeable/jarring to a user than\n // video stalls). The player's time will reflect the playthrough of audio, so the\n // time will appear as if we are in a buffered region, even if we are stuck in a\n // \"gap.\"\n //\n // Example:\n // video buffer: 0 => 10.1, 10.2 => 20\n // audio buffer: 0 => 20\n // overall buffer: 0 => 10.1, 10.2 => 20\n // current time: 13\n //\n // Chrome's video froze at 10 seconds, where the video buffer encountered the gap,\n // however, the audio continued playing until it reached ~3 seconds past the gap\n // (13 seconds), at which point it stops as well. Since current time is past the\n // gap, findNextRange will return no ranges.\n //\n // To check for this issue, we see if there is a gap that starts somewhere within\n // a 3 second range (3 seconds +/- 1 second) back from our current time.\n const gaps = findGaps(buffered);\n for (let i = 0; i < gaps.length; i++) {\n const start = gaps.start(i);\n const end = gaps.end(i); // gap is starts no more than 4 seconds back\n\n if (currentTime - start < 4 && currentTime - start > 2) {\n return {\n start,\n end\n };\n }\n }\n return null;\n }\n}\nconst defaultOptions = {\n errorInterval: 30,\n getSource(next) {\n const tech = this.tech({\n IWillNotUseThisInPlugins: true\n });\n const sourceObj = tech.currentSource_ || this.currentSource();\n return next(sourceObj);\n }\n};\n/**\n * Main entry point for the plugin\n *\n * @param {Player} player a reference to a videojs Player instance\n * @param {Object} [options] an object with plugin options\n * @private\n */\n\nconst initPlugin = function (player, options) {\n let lastCalled = 0;\n let seekTo = 0;\n const localOptions = merge(defaultOptions, options);\n player.ready(() => {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-initialized'\n });\n });\n /**\n * Player modifications to perform that must wait until `loadedmetadata`\n * has been triggered\n *\n * @private\n */\n\n const loadedMetadataHandler = function () {\n if (seekTo) {\n player.currentTime(seekTo);\n }\n };\n /**\n * Set the source on the player element, play, and seek if necessary\n *\n * @param {Object} sourceObj An object specifying the source url and mime-type to play\n * @private\n */\n\n const setSource = function (sourceObj) {\n if (sourceObj === null || sourceObj === undefined) {\n return;\n }\n seekTo = player.duration() !== Infinity && player.currentTime() || 0;\n player.one('loadedmetadata', loadedMetadataHandler);\n player.src(sourceObj);\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload'\n });\n player.play();\n };\n /**\n * Attempt to get a source from either the built-in getSource function\n * or a custom function provided via the options\n *\n * @private\n */\n\n const errorHandler = function () {\n // Do not attempt to reload the source if a source-reload occurred before\n // 'errorInterval' time has elapsed since the last source-reload\n if (Date.now() - lastCalled < localOptions.errorInterval * 1000) {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-canceled'\n });\n return;\n }\n if (!localOptions.getSource || typeof localOptions.getSource !== 'function') {\n videojs.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');\n return;\n }\n lastCalled = Date.now();\n return localOptions.getSource.call(player, setSource);\n };\n /**\n * Unbind any event handlers that were bound by the plugin\n *\n * @private\n */\n\n const cleanupEvents = function () {\n player.off('loadedmetadata', loadedMetadataHandler);\n player.off('error', errorHandler);\n player.off('dispose', cleanupEvents);\n };\n /**\n * Cleanup before re-initializing the plugin\n *\n * @param {Object} [newOptions] an object with plugin options\n * @private\n */\n\n const reinitPlugin = function (newOptions) {\n cleanupEvents();\n initPlugin(player, newOptions);\n };\n player.on('error', errorHandler);\n player.on('dispose', cleanupEvents); // Overwrite the plugin function so that we can correctly cleanup before\n // initializing the plugin\n\n player.reloadSourceOnError = reinitPlugin;\n};\n/**\n * Reload the source when an error is detected as long as there\n * wasn't an error previously within the last 30 seconds\n *\n * @param {Object} [options] an object with plugin options\n */\n\nconst reloadSourceOnError = function (options) {\n initPlugin(this, options);\n};\nvar version$4 = \"3.0.0\";\nvar version$3 = \"6.2.0\";\nvar version$2 = \"1.0.1\";\nvar version$1 = \"6.0.0\";\nvar version = \"4.0.1\";\n\n/**\n * @file videojs-http-streaming.js\n *\n * The main file for the VHS project.\n * License: https://github.com/videojs/videojs-http-streaming/blob/main/LICENSE\n */\nconst Vhs = {\n PlaylistLoader,\n Playlist,\n utils,\n STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector,\n INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector,\n lastBandwidthSelector,\n movingAverageBandwidthSelector,\n comparePlaylistBandwidth,\n comparePlaylistResolution,\n xhr: xhrFactory()\n}; // Define getter/setters for config properties\n\nObject.keys(Config).forEach(prop => {\n Object.defineProperty(Vhs, prop, {\n get() {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n return Config[prop];\n },\n set(value) {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n if (typeof value !== 'number' || value < 0) {\n videojs.log.warn(`value of Vhs.${prop} must be greater than or equal to 0`);\n return;\n }\n Config[prop] = value;\n }\n });\n});\nconst LOCAL_STORAGE_KEY = 'videojs-vhs';\n/**\n * Updates the selectedIndex of the QualityLevelList when a mediachange happens in vhs.\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to update.\n * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info.\n * @function handleVhsMediaChange\n */\n\nconst handleVhsMediaChange = function (qualityLevels, playlistLoader) {\n const newPlaylist = playlistLoader.media();\n let selectedIndex = -1;\n for (let i = 0; i < qualityLevels.length; i++) {\n if (qualityLevels[i].id === newPlaylist.id) {\n selectedIndex = i;\n break;\n }\n }\n qualityLevels.selectedIndex_ = selectedIndex;\n qualityLevels.trigger({\n selectedIndex,\n type: 'change'\n });\n};\n/**\n * Adds quality levels to list once playlist metadata is available\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to.\n * @param {Object} vhs Vhs object to listen to for media events.\n * @function handleVhsLoadedMetadata\n */\n\nconst handleVhsLoadedMetadata = function (qualityLevels, vhs) {\n vhs.representations().forEach(rep => {\n qualityLevels.addQualityLevel(rep);\n });\n handleVhsMediaChange(qualityLevels, vhs.playlists);\n}; // VHS is a source handler, not a tech. Make sure attempts to use it\n// as one do not cause exceptions.\n\nVhs.canPlaySource = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\nconst emeKeySystems = (keySystemOptions, mainPlaylist, audioPlaylist) => {\n if (!keySystemOptions) {\n return keySystemOptions;\n }\n let codecs = {};\n if (mainPlaylist && mainPlaylist.attributes && mainPlaylist.attributes.CODECS) {\n codecs = unwrapCodecList(parseCodecs(mainPlaylist.attributes.CODECS));\n }\n if (audioPlaylist && audioPlaylist.attributes && audioPlaylist.attributes.CODECS) {\n codecs.audio = audioPlaylist.attributes.CODECS;\n }\n const videoContentType = getMimeForCodec(codecs.video);\n const audioContentType = getMimeForCodec(codecs.audio); // upsert the content types based on the selected playlist\n\n const keySystemContentTypes = {};\n for (const keySystem in keySystemOptions) {\n keySystemContentTypes[keySystem] = {};\n if (audioContentType) {\n keySystemContentTypes[keySystem].audioContentType = audioContentType;\n }\n if (videoContentType) {\n keySystemContentTypes[keySystem].videoContentType = videoContentType;\n } // Default to using the video playlist's PSSH even though they may be different, as\n // videojs-contrib-eme will only accept one in the options.\n //\n // This shouldn't be an issue for most cases as early intialization will handle all\n // unique PSSH values, and if they aren't, then encrypted events should have the\n // specific information needed for the unique license.\n\n if (mainPlaylist.contentProtection && mainPlaylist.contentProtection[keySystem] && mainPlaylist.contentProtection[keySystem].pssh) {\n keySystemContentTypes[keySystem].pssh = mainPlaylist.contentProtection[keySystem].pssh;\n } // videojs-contrib-eme accepts the option of specifying: 'com.some.cdm': 'url'\n // so we need to prevent overwriting the URL entirely\n\n if (typeof keySystemOptions[keySystem] === 'string') {\n keySystemContentTypes[keySystem].url = keySystemOptions[keySystem];\n }\n }\n return merge(keySystemOptions, keySystemContentTypes);\n};\n/**\n * @typedef {Object} KeySystems\n *\n * keySystems configuration for https://github.com/videojs/videojs-contrib-eme\n * Note: not all options are listed here.\n *\n * @property {Uint8Array} [pssh]\n * Protection System Specific Header\n */\n\n/**\n * Goes through all the playlists and collects an array of KeySystems options objects\n * containing each playlist's keySystems and their pssh values, if available.\n *\n * @param {Object[]} playlists\n * The playlists to look through\n * @param {string[]} keySystems\n * The keySystems to collect pssh values for\n *\n * @return {KeySystems[]}\n * An array of KeySystems objects containing available key systems and their\n * pssh values\n */\n\nconst getAllPsshKeySystemsOptions = (playlists, keySystems) => {\n return playlists.reduce((keySystemsArr, playlist) => {\n if (!playlist.contentProtection) {\n return keySystemsArr;\n }\n const keySystemsOptions = keySystems.reduce((keySystemsObj, keySystem) => {\n const keySystemOptions = playlist.contentProtection[keySystem];\n if (keySystemOptions && keySystemOptions.pssh) {\n keySystemsObj[keySystem] = {\n pssh: keySystemOptions.pssh\n };\n }\n return keySystemsObj;\n }, {});\n if (Object.keys(keySystemsOptions).length) {\n keySystemsArr.push(keySystemsOptions);\n }\n return keySystemsArr;\n }, []);\n};\n/**\n * Returns a promise that waits for the\n * [eme plugin](https://github.com/videojs/videojs-contrib-eme) to create a key session.\n *\n * Works around https://bugs.chromium.org/p/chromium/issues/detail?id=895449 in non-IE11\n * browsers.\n *\n * As per the above ticket, this is particularly important for Chrome, where, if\n * unencrypted content is appended before encrypted content and the key session has not\n * been created, a MEDIA_ERR_DECODE will be thrown once the encrypted content is reached\n * during playback.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n * @param {Object[]} mainPlaylists\n * The playlists found on the main playlist object\n *\n * @return {Object}\n * Promise that resolves when the key session has been created\n */\n\nconst waitForKeySessionCreation = ({\n player,\n sourceKeySystems,\n audioMedia,\n mainPlaylists\n}) => {\n if (!player.eme.initializeMediaKeys) {\n return Promise.resolve();\n } // TODO should all audio PSSH values be initialized for DRM?\n //\n // All unique video rendition pssh values are initialized for DRM, but here only\n // the initial audio playlist license is initialized. In theory, an encrypted\n // event should be fired if the user switches to an alternative audio playlist\n // where a license is required, but this case hasn't yet been tested. In addition, there\n // may be many alternate audio playlists unlikely to be used (e.g., multiple different\n // languages).\n\n const playlists = audioMedia ? mainPlaylists.concat([audioMedia]) : mainPlaylists;\n const keySystemsOptionsArr = getAllPsshKeySystemsOptions(playlists, Object.keys(sourceKeySystems));\n const initializationFinishedPromises = [];\n const keySessionCreatedPromises = []; // Since PSSH values are interpreted as initData, EME will dedupe any duplicates. The\n // only place where it should not be deduped is for ms-prefixed APIs, but the early\n // return for IE11 above, and the existence of modern EME APIs in addition to\n // ms-prefixed APIs on Edge should prevent this from being a concern.\n // initializeMediaKeys also won't use the webkit-prefixed APIs.\n\n keySystemsOptionsArr.forEach(keySystemsOptions => {\n keySessionCreatedPromises.push(new Promise((resolve, reject) => {\n player.tech_.one('keysessioncreated', resolve);\n }));\n initializationFinishedPromises.push(new Promise((resolve, reject) => {\n player.eme.initializeMediaKeys({\n keySystems: keySystemsOptions\n }, err => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n }));\n }); // The reasons Promise.race is chosen over Promise.any:\n //\n // * Promise.any is only available in Safari 14+.\n // * None of these promises are expected to reject. If they do reject, it might be\n // better here for the race to surface the rejection, rather than mask it by using\n // Promise.any.\n\n return Promise.race([\n // If a session was previously created, these will all finish resolving without\n // creating a new session, otherwise it will take until the end of all license\n // requests, which is why the key session check is used (to make setup much faster).\n Promise.all(initializationFinishedPromises),\n // Once a single session is created, the browser knows DRM will be used.\n Promise.race(keySessionCreatedPromises)]);\n};\n/**\n * If the [eme](https://github.com/videojs/videojs-contrib-eme) plugin is available, and\n * there are keySystems on the source, sets up source options to prepare the source for\n * eme.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} media\n * The active media playlist\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n *\n * @return {boolean}\n * Whether or not options were configured and EME is available\n */\n\nconst setupEmeOptions = ({\n player,\n sourceKeySystems,\n media,\n audioMedia\n}) => {\n const sourceOptions = emeKeySystems(sourceKeySystems, media, audioMedia);\n if (!sourceOptions) {\n return false;\n }\n player.currentSource().keySystems = sourceOptions; // eme handles the rest of the setup, so if it is missing\n // do nothing.\n\n if (sourceOptions && !player.eme) {\n videojs.log.warn('DRM encrypted source cannot be decrypted without a DRM plugin');\n return false;\n }\n return true;\n};\nconst getVhsLocalStorage = () => {\n if (!window$1.localStorage) {\n return null;\n }\n const storedObject = window$1.localStorage.getItem(LOCAL_STORAGE_KEY);\n if (!storedObject) {\n return null;\n }\n try {\n return JSON.parse(storedObject);\n } catch (e) {\n // someone may have tampered with the value\n return null;\n }\n};\nconst updateVhsLocalStorage = options => {\n if (!window$1.localStorage) {\n return false;\n }\n let objectToStore = getVhsLocalStorage();\n objectToStore = objectToStore ? merge(objectToStore, options) : options;\n try {\n window$1.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(objectToStore));\n } catch (e) {\n // Throws if storage is full (e.g., always on iOS 5+ Safari private mode, where\n // storage is set to 0).\n // https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#Exceptions\n // No need to perform any operation.\n return false;\n }\n return objectToStore;\n};\n/**\n * Parses VHS-supported media types from data URIs. See\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * for information on data URIs.\n *\n * @param {string} dataUri\n * The data URI\n *\n * @return {string|Object}\n * The parsed object/string, or the original string if no supported media type\n * was found\n */\n\nconst expandDataUri = dataUri => {\n if (dataUri.toLowerCase().indexOf('data:application/vnd.videojs.vhs+json,') === 0) {\n return JSON.parse(dataUri.substring(dataUri.indexOf(',') + 1));\n } // no known case for this data URI, return the string as-is\n\n return dataUri;\n};\n/**\n * Whether the browser has built-in HLS support.\n */\n\nVhs.supportsNativeHls = function () {\n if (!document || !document.createElement) {\n return false;\n }\n const video = document.createElement('video'); // native HLS is definitely not supported if HTML5 video isn't\n\n if (!videojs.getTech('Html5').isSupported()) {\n return false;\n } // HLS manifests can go by many mime-types\n\n const canPlay = [\n // Apple santioned\n 'application/vnd.apple.mpegurl',\n // Apple sanctioned for backwards compatibility\n 'audio/mpegurl',\n // Very common\n 'audio/x-mpegurl',\n // Very common\n 'application/x-mpegurl',\n // Included for completeness\n 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl'];\n return canPlay.some(function (canItPlay) {\n return /maybe|probably/i.test(video.canPlayType(canItPlay));\n });\n}();\nVhs.supportsNativeDash = function () {\n if (!document || !document.createElement || !videojs.getTech('Html5').isSupported()) {\n return false;\n }\n return /maybe|probably/i.test(document.createElement('video').canPlayType('application/dash+xml'));\n}();\nVhs.supportsTypeNatively = type => {\n if (type === 'hls') {\n return Vhs.supportsNativeHls;\n }\n if (type === 'dash') {\n return Vhs.supportsNativeDash;\n }\n return false;\n};\n/**\n * VHS is a source handler, not a tech. Make sure attempts to use it\n * as one do not cause exceptions.\n */\n\nVhs.isSupported = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\nconst Component = videojs.getComponent('Component');\n/**\n * The Vhs Handler object, where we orchestrate all of the parts\n * of VHS to interact with video.js\n *\n * @class VhsHandler\n * @extends videojs.Component\n * @param {Object} source the soruce object\n * @param {Tech} tech the parent tech object\n * @param {Object} options optional and required options\n */\n\nclass VhsHandler extends Component {\n constructor(source, tech, options) {\n super(tech, options.vhs); // if a tech level `initialBandwidth` option was passed\n // use that over the VHS level `bandwidth` option\n\n if (typeof options.initialBandwidth === 'number') {\n this.options_.bandwidth = options.initialBandwidth;\n }\n this.logger_ = logger('VhsHandler'); // we need access to the player in some cases,\n // so, get it from Video.js via the `playerId`\n\n if (tech.options_ && tech.options_.playerId) {\n const _player = videojs.getPlayer(tech.options_.playerId);\n this.player_ = _player;\n }\n this.tech_ = tech;\n this.source_ = source;\n this.stats = {};\n this.ignoreNextSeekingEvent_ = false;\n this.setOptions_();\n if (this.options_.overrideNative && tech.overrideNativeAudioTracks && tech.overrideNativeVideoTracks) {\n tech.overrideNativeAudioTracks(true);\n tech.overrideNativeVideoTracks(true);\n } else if (this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) {\n // overriding native VHS only works if audio tracks have been emulated\n // error early if we're misconfigured\n throw new Error('Overriding native VHS requires emulated tracks. ' + 'See https://git.io/vMpjB');\n } // listen for fullscreenchange events for this player so that we\n // can adjust our quality selection quickly\n\n this.on(document, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], event => {\n const fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (fullscreenElement && fullscreenElement.contains(this.tech_.el())) {\n this.playlistController_.fastQualityChange_();\n } else {\n // When leaving fullscreen, since the in page pixel dimensions should be smaller\n // than full screen, see if there should be a rendition switch down to preserve\n // bandwidth.\n this.playlistController_.checkABR_();\n }\n });\n this.on(this.tech_, 'seeking', function () {\n if (this.ignoreNextSeekingEvent_) {\n this.ignoreNextSeekingEvent_ = false;\n return;\n }\n this.setCurrentTime(this.tech_.currentTime());\n });\n this.on(this.tech_, 'error', function () {\n // verify that the error was real and we are loaded\n // enough to have pc loaded.\n if (this.tech_.error() && this.playlistController_) {\n this.playlistController_.pauseLoading();\n }\n });\n this.on(this.tech_, 'play', this.play);\n }\n setOptions_() {\n // defaults\n this.options_.withCredentials = this.options_.withCredentials || false;\n this.options_.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions === false ? false : true;\n this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || false;\n this.options_.useBandwidthFromLocalStorage = typeof this.source_.useBandwidthFromLocalStorage !== 'undefined' ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || false;\n this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || false;\n this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || false;\n this.options_.customTagParsers = this.options_.customTagParsers || [];\n this.options_.customTagMappers = this.options_.customTagMappers || [];\n this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || false;\n this.options_.llhls = this.options_.llhls === false ? false : true;\n this.options_.bufferBasedABR = this.options_.bufferBasedABR || false;\n if (typeof this.options_.playlistExclusionDuration !== 'number') {\n this.options_.playlistExclusionDuration = 5 * 60;\n }\n if (typeof this.options_.bandwidth !== 'number') {\n if (this.options_.useBandwidthFromLocalStorage) {\n const storedObject = getVhsLocalStorage();\n if (storedObject && storedObject.bandwidth) {\n this.options_.bandwidth = storedObject.bandwidth;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-bandwidth-from-local-storage'\n });\n }\n if (storedObject && storedObject.throughput) {\n this.options_.throughput = storedObject.throughput;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-throughput-from-local-storage'\n });\n }\n }\n } // if bandwidth was not set by options or pulled from local storage, start playlist\n // selection at a reasonable bandwidth\n\n if (typeof this.options_.bandwidth !== 'number') {\n this.options_.bandwidth = Config.INITIAL_BANDWIDTH;\n } // If the bandwidth number is unchanged from the initial setting\n // then this takes precedence over the enableLowInitialPlaylist option\n\n this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === Config.INITIAL_BANDWIDTH; // grab options passed to player.src\n\n ['withCredentials', 'useDevicePixelRatio', 'limitRenditionByPlayerDimensions', 'bandwidth', 'customTagParsers', 'customTagMappers', 'cacheEncryptionKeys', 'playlistSelector', 'initialPlaylistSelector', 'bufferBasedABR', 'liveRangeSafeTimeDelta', 'llhls', 'useNetworkInformationApi', 'useDtsForTimestampOffset', 'exactManifestTimings', 'leastPixelDiffSelector'].forEach(option => {\n if (typeof this.source_[option] !== 'undefined') {\n this.options_[option] = this.source_[option];\n }\n });\n this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions;\n this.useDevicePixelRatio = this.options_.useDevicePixelRatio;\n }\n /**\n * called when player.src gets called, handle a new source\n *\n * @param {Object} src the source object to handle\n */\n\n src(src, type) {\n // do nothing if the src is falsey\n if (!src) {\n return;\n }\n this.setOptions_(); // add main playlist controller options\n\n this.options_.src = expandDataUri(this.source_.src);\n this.options_.tech = this.tech_;\n this.options_.externVhs = Vhs;\n this.options_.sourceType = simpleTypeFromSourceType(type); // Whenever we seek internally, we should update the tech\n\n this.options_.seekTo = time => {\n this.tech_.setCurrentTime(time);\n };\n this.playlistController_ = new PlaylistController(this.options_);\n const playbackWatcherOptions = merge({\n liveRangeSafeTimeDelta: SAFE_TIME_DELTA\n }, this.options_, {\n seekable: () => this.seekable(),\n media: () => this.playlistController_.media(),\n playlistController: this.playlistController_\n });\n this.playbackWatcher_ = new PlaybackWatcher(playbackWatcherOptions);\n this.playlistController_.on('error', () => {\n const player = videojs.players[this.tech_.options_.playerId];\n let error = this.playlistController_.error;\n if (typeof error === 'object' && !error.code) {\n error.code = 3;\n } else if (typeof error === 'string') {\n error = {\n message: error,\n code: 3\n };\n }\n player.error(error);\n });\n const defaultSelector = this.options_.bufferBasedABR ? Vhs.movingAverageBandwidthSelector(0.55) : Vhs.STANDARD_PLAYLIST_SELECTOR; // `this` in selectPlaylist should be the VhsHandler for backwards\n // compatibility with < v2\n\n this.playlistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : defaultSelector.bind(this);\n this.playlistController_.selectInitialPlaylist = Vhs.INITIAL_PLAYLIST_SELECTOR.bind(this); // re-expose some internal objects for backwards compatibility with < v2\n\n this.playlists = this.playlistController_.mainPlaylistLoader_;\n this.mediaSource = this.playlistController_.mediaSource; // Proxy assignment of some properties to the main playlist\n // controller. Using a custom property for backwards compatibility\n // with < v2\n\n Object.defineProperties(this, {\n selectPlaylist: {\n get() {\n return this.playlistController_.selectPlaylist;\n },\n set(selectPlaylist) {\n this.playlistController_.selectPlaylist = selectPlaylist.bind(this);\n }\n },\n throughput: {\n get() {\n return this.playlistController_.mainSegmentLoader_.throughput.rate;\n },\n set(throughput) {\n this.playlistController_.mainSegmentLoader_.throughput.rate = throughput; // By setting `count` to 1 the throughput value becomes the starting value\n // for the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput.count = 1;\n }\n },\n bandwidth: {\n get() {\n let playerBandwidthEst = this.playlistController_.mainSegmentLoader_.bandwidth;\n const networkInformation = window$1.navigator.connection || window$1.navigator.mozConnection || window$1.navigator.webkitConnection;\n const tenMbpsAsBitsPerSecond = 10e6;\n if (this.options_.useNetworkInformationApi && networkInformation) {\n // downlink returns Mbps\n // https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlink\n const networkInfoBandwidthEstBitsPerSec = networkInformation.downlink * 1000 * 1000; // downlink maxes out at 10 Mbps. In the event that both networkInformationApi and the player\n // estimate a bandwidth greater than 10 Mbps, use the larger of the two estimates to ensure that\n // high quality streams are not filtered out.\n\n if (networkInfoBandwidthEstBitsPerSec >= tenMbpsAsBitsPerSecond && playerBandwidthEst >= tenMbpsAsBitsPerSecond) {\n playerBandwidthEst = Math.max(playerBandwidthEst, networkInfoBandwidthEstBitsPerSec);\n } else {\n playerBandwidthEst = networkInfoBandwidthEstBitsPerSec;\n }\n }\n return playerBandwidthEst;\n },\n set(bandwidth) {\n this.playlistController_.mainSegmentLoader_.bandwidth = bandwidth; // setting the bandwidth manually resets the throughput counter\n // `count` is set to zero that current value of `rate` isn't included\n // in the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput = {\n rate: 0,\n count: 0\n };\n }\n },\n /**\n * `systemBandwidth` is a combination of two serial processes bit-rates. The first\n * is the network bitrate provided by `bandwidth` and the second is the bitrate of\n * the entire process after that - decryption, transmuxing, and appending - provided\n * by `throughput`.\n *\n * Since the two process are serial, the overall system bandwidth is given by:\n * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput)\n */\n systemBandwidth: {\n get() {\n const invBandwidth = 1 / (this.bandwidth || 1);\n let invThroughput;\n if (this.throughput > 0) {\n invThroughput = 1 / this.throughput;\n } else {\n invThroughput = 0;\n }\n const systemBitrate = Math.floor(1 / (invBandwidth + invThroughput));\n return systemBitrate;\n },\n set() {\n videojs.log.error('The \"systemBandwidth\" property is read-only');\n }\n }\n });\n if (this.options_.bandwidth) {\n this.bandwidth = this.options_.bandwidth;\n }\n if (this.options_.throughput) {\n this.throughput = this.options_.throughput;\n }\n Object.defineProperties(this.stats, {\n bandwidth: {\n get: () => this.bandwidth || 0,\n enumerable: true\n },\n mediaRequests: {\n get: () => this.playlistController_.mediaRequests_() || 0,\n enumerable: true\n },\n mediaRequestsAborted: {\n get: () => this.playlistController_.mediaRequestsAborted_() || 0,\n enumerable: true\n },\n mediaRequestsTimedout: {\n get: () => this.playlistController_.mediaRequestsTimedout_() || 0,\n enumerable: true\n },\n mediaRequestsErrored: {\n get: () => this.playlistController_.mediaRequestsErrored_() || 0,\n enumerable: true\n },\n mediaTransferDuration: {\n get: () => this.playlistController_.mediaTransferDuration_() || 0,\n enumerable: true\n },\n mediaBytesTransferred: {\n get: () => this.playlistController_.mediaBytesTransferred_() || 0,\n enumerable: true\n },\n mediaSecondsLoaded: {\n get: () => this.playlistController_.mediaSecondsLoaded_() || 0,\n enumerable: true\n },\n mediaAppends: {\n get: () => this.playlistController_.mediaAppends_() || 0,\n enumerable: true\n },\n mainAppendsToLoadedData: {\n get: () => this.playlistController_.mainAppendsToLoadedData_() || 0,\n enumerable: true\n },\n audioAppendsToLoadedData: {\n get: () => this.playlistController_.audioAppendsToLoadedData_() || 0,\n enumerable: true\n },\n appendsToLoadedData: {\n get: () => this.playlistController_.appendsToLoadedData_() || 0,\n enumerable: true\n },\n timeToLoadedData: {\n get: () => this.playlistController_.timeToLoadedData_() || 0,\n enumerable: true\n },\n buffered: {\n get: () => timeRangesToArray(this.tech_.buffered()),\n enumerable: true\n },\n currentTime: {\n get: () => this.tech_.currentTime(),\n enumerable: true\n },\n currentSource: {\n get: () => this.tech_.currentSource_,\n enumerable: true\n },\n currentTech: {\n get: () => this.tech_.name_,\n enumerable: true\n },\n duration: {\n get: () => this.tech_.duration(),\n enumerable: true\n },\n main: {\n get: () => this.playlists.main,\n enumerable: true\n },\n playerDimensions: {\n get: () => this.tech_.currentDimensions(),\n enumerable: true\n },\n seekable: {\n get: () => timeRangesToArray(this.tech_.seekable()),\n enumerable: true\n },\n timestamp: {\n get: () => Date.now(),\n enumerable: true\n },\n videoPlaybackQuality: {\n get: () => this.tech_.getVideoPlaybackQuality(),\n enumerable: true\n }\n });\n this.tech_.one('canplay', this.playlistController_.setupFirstPlay.bind(this.playlistController_));\n this.tech_.on('bandwidthupdate', () => {\n if (this.options_.useBandwidthFromLocalStorage) {\n updateVhsLocalStorage({\n bandwidth: this.bandwidth,\n throughput: Math.round(this.throughput)\n });\n }\n });\n this.playlistController_.on('selectedinitialmedia', () => {\n // Add the manual rendition mix-in to VhsHandler\n renditionSelectionMixin(this);\n });\n this.playlistController_.sourceUpdater_.on('createdsourcebuffers', () => {\n this.setupEme_();\n }); // the bandwidth of the primary segment loader is our best\n // estimate of overall bandwidth\n\n this.on(this.playlistController_, 'progress', function () {\n this.tech_.trigger('progress');\n }); // In the live case, we need to ignore the very first `seeking` event since\n // that will be the result of the seek-to-live behavior\n\n this.on(this.playlistController_, 'firstplay', function () {\n this.ignoreNextSeekingEvent_ = true;\n });\n this.setupQualityLevels_(); // do nothing if the tech has been disposed already\n // this can occur if someone sets the src in player.ready(), for instance\n\n if (!this.tech_.el()) {\n return;\n }\n this.mediaSourceUrl_ = window$1.URL.createObjectURL(this.playlistController_.mediaSource);\n this.tech_.src(this.mediaSourceUrl_);\n }\n createKeySessions_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n this.logger_('waiting for EME key session creation');\n waitForKeySessionCreation({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media(),\n mainPlaylists: this.playlists.main.playlists\n }).then(() => {\n this.logger_('created EME key session');\n this.playlistController_.sourceUpdater_.initializedEme();\n }).catch(err => {\n this.logger_('error while creating EME key session', err);\n this.player_.error({\n message: 'Failed to initialize media keys for EME',\n code: 3\n });\n });\n }\n handleWaitingForKey_() {\n // If waitingforkey is fired, it's possible that the data that's necessary to retrieve\n // the key is in the manifest. While this should've happened on initial source load, it\n // may happen again in live streams where the keys change, and the manifest info\n // reflects the update.\n //\n // Because videojs-contrib-eme compares the PSSH data we send to that of PSSH data it's\n // already requested keys for, we don't have to worry about this generating extraneous\n // requests.\n this.logger_('waitingforkey fired, attempting to create any new key sessions');\n this.createKeySessions_();\n }\n /**\n * If necessary and EME is available, sets up EME options and waits for key session\n * creation.\n *\n * This function also updates the source updater so taht it can be used, as for some\n * browsers, EME must be configured before content is appended (if appending unencrypted\n * content before encrypted content).\n */\n\n setupEme_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n const didSetupEmeOptions = setupEmeOptions({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n media: this.playlists.media(),\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media()\n });\n this.player_.tech_.on('keystatuschange', e => {\n if (e.status !== 'output-restricted') {\n return;\n }\n const mainPlaylist = this.playlistController_.main();\n if (!mainPlaylist || !mainPlaylist.playlists) {\n return;\n }\n const excludedHDPlaylists = []; // Assume all HD streams are unplayable and exclude them from ABR selection\n\n mainPlaylist.playlists.forEach(playlist => {\n if (playlist && playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height >= 720) {\n if (!playlist.excludeUntil || playlist.excludeUntil < Infinity) {\n playlist.excludeUntil = Infinity;\n excludedHDPlaylists.push(playlist);\n }\n }\n });\n if (excludedHDPlaylists.length) {\n videojs.log.warn('DRM keystatus changed to \"output-restricted.\" Removing the following HD playlists ' + 'that will most likely fail to play and clearing the buffer. ' + 'This may be due to HDCP restrictions on the stream and the capabilities of the current device.', ...excludedHDPlaylists); // Clear the buffer before switching playlists, since it may already contain unplayable segments\n\n this.playlistController_.fastQualityChange_();\n }\n });\n this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this);\n this.player_.tech_.on('waitingforkey', this.handleWaitingForKey_); // In IE11 this is too early to initialize media keys, and IE11 does not support\n // promises.\n\n if (videojs.browser.IE_VERSION === 11 || !didSetupEmeOptions) {\n // If EME options were not set up, we've done all we could to initialize EME.\n this.playlistController_.sourceUpdater_.initializedEme();\n return;\n }\n this.createKeySessions_();\n }\n /**\n * Initializes the quality levels and sets listeners to update them.\n *\n * @method setupQualityLevels_\n * @private\n */\n\n setupQualityLevels_() {\n const player = videojs.players[this.tech_.options_.playerId]; // if there isn't a player or there isn't a qualityLevels plugin\n // or qualityLevels_ listeners have already been setup, do nothing.\n\n if (!player || !player.qualityLevels || this.qualityLevels_) {\n return;\n }\n this.qualityLevels_ = player.qualityLevels();\n this.playlistController_.on('selectedinitialmedia', () => {\n handleVhsLoadedMetadata(this.qualityLevels_, this);\n });\n this.playlists.on('mediachange', () => {\n handleVhsMediaChange(this.qualityLevels_, this.playlists);\n });\n }\n /**\n * return the version\n */\n\n static version() {\n return {\n '@videojs/http-streaming': version$4,\n 'mux.js': version$3,\n 'mpd-parser': version$2,\n 'm3u8-parser': version$1,\n 'aes-decrypter': version\n };\n }\n /**\n * return the version\n */\n\n version() {\n return this.constructor.version();\n }\n canChangeType() {\n return SourceUpdater.canChangeType();\n }\n /**\n * Begin playing the video.\n */\n\n play() {\n this.playlistController_.play();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n setCurrentTime(currentTime) {\n this.playlistController_.setCurrentTime(currentTime);\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n duration() {\n return this.playlistController_.duration();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n seekable() {\n return this.playlistController_.seekable();\n }\n /**\n * Abort all outstanding work and cleanup.\n */\n\n dispose() {\n if (this.playbackWatcher_) {\n this.playbackWatcher_.dispose();\n }\n if (this.playlistController_) {\n this.playlistController_.dispose();\n }\n if (this.qualityLevels_) {\n this.qualityLevels_.dispose();\n }\n if (this.tech_ && this.tech_.vhs) {\n delete this.tech_.vhs;\n }\n if (this.mediaSourceUrl_ && window$1.URL.revokeObjectURL) {\n window$1.URL.revokeObjectURL(this.mediaSourceUrl_);\n this.mediaSourceUrl_ = null;\n }\n if (this.tech_) {\n this.tech_.off('waitingforkey', this.handleWaitingForKey_);\n }\n super.dispose();\n }\n convertToProgramTime(time, callback) {\n return getProgramTime({\n playlist: this.playlistController_.media(),\n time,\n callback\n });\n } // the player must be playing before calling this\n\n seekToProgramTime(programTime, callback, pauseAfterSeek = true, retryCount = 2) {\n return seekToProgramTime({\n programTime,\n playlist: this.playlistController_.media(),\n retryCount,\n pauseAfterSeek,\n seekTo: this.options_.seekTo,\n tech: this.options_.tech,\n callback\n });\n }\n}\n/**\n * The Source Handler object, which informs video.js what additional\n * MIME types are supported and sets up playback. It is registered\n * automatically to the appropriate tech based on the capabilities of\n * the browser it is running in. It is not necessary to use or modify\n * this object in normal usage.\n */\n\nconst VhsSourceHandler = {\n name: 'videojs-http-streaming',\n VERSION: version$4,\n canHandleSource(srcObj, options = {}) {\n const localOptions = merge(videojs.options, options);\n return VhsSourceHandler.canPlayType(srcObj.type, localOptions);\n },\n handleSource(source, tech, options = {}) {\n const localOptions = merge(videojs.options, options);\n tech.vhs = new VhsHandler(source, tech, localOptions);\n tech.vhs.xhr = xhrFactory();\n tech.vhs.src(source.src, source.type);\n return tech.vhs;\n },\n canPlayType(type, options = {}) {\n const {\n vhs: {\n overrideNative = !videojs.browser.IS_ANY_SAFARI\n } = {}\n } = merge(videojs.options, options);\n const supportedType = simpleTypeFromSourceType(type);\n const canUseMsePlayback = supportedType && (!Vhs.supportsTypeNatively(supportedType) || overrideNative);\n return canUseMsePlayback ? 'maybe' : '';\n }\n};\n/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {boolean} if native media sources are supported\n */\n\nconst supportsNativeMediaSources = () => {\n return browserSupportsCodec('avc1.4d400d,mp4a.40.2');\n}; // register source handlers with the appropriate techs\n\nif (supportsNativeMediaSources()) {\n videojs.getTech('Html5').registerSourceHandler(VhsSourceHandler, 0);\n}\nvideojs.VhsHandler = VhsHandler;\nvideojs.VhsSourceHandler = VhsSourceHandler;\nvideojs.Vhs = Vhs;\nif (!videojs.use) {\n videojs.registerComponent('Vhs', Vhs);\n}\nvideojs.options.vhs = videojs.options.vhs || {};\nif (!videojs.getPlugin || !videojs.getPlugin('reloadSourceOnError')) {\n videojs.registerPlugin('reloadSourceOnError', reloadSourceOnError);\n}\n\nexport { videojs as default };\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar document = require('global/document');\n\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0].trim();\n var v = kv[1].trim();\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"center\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n try {\n cue.line = settings.get(\"line\", \"auto\");\n } catch (e) {}\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n // Safari still uses the old middle value and won't accept center\n try {\n cue.align = settings.get(\"align\", \"center\");\n } catch (e) {\n cue.align = settings.get(\"align\", \"middle\");\n }\n try {\n cue.position = settings.get(\"position\", \"auto\");\n } catch (e) {\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n center: 50,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n }\n\n\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n center: \"center\",\n middle: \"center\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\n// When evaluating this file as part of a Webpack bundle for server\n// side rendering, `document` is an empty object.\nvar TEXTAREA_ELEMENT = document.createElement && document.createElement(\"textarea\");\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\n// 5.1 default text color\n// 5.2 default text background color is equivalent to text color with bg_ prefix\nvar DEFAULT_COLOR_CLASS = {\n white: 'rgba(255,255,255,1)',\n lime: 'rgba(0,255,0,1)',\n cyan: 'rgba(0,255,255,1)',\n red: 'rgba(255,0,0,1)',\n yellow: 'rgba(255,255,0,1)',\n magenta: 'rgba(255,0,255,1)',\n blue: 'rgba(0,0,255,1)',\n black: 'rgba(0,0,0,1)'\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n function unescape(s) {\n TEXTAREA_ELEMENT.innerHTML = s;\n s = TEXTAREA_ELEMENT.textContent;\n TEXTAREA_ELEMENT.textContent = \"\";\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n var classes = m[2].split('.');\n\n classes.forEach(function(cl) {\n var bgColor = /^bg_/.test(cl);\n // slice out `bg_` if it's a background color\n var colorName = bgColor ? cl.slice(3) : cl;\n\n if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) {\n var propName = bgColor ? 'background-color' : 'color';\n var propValue = DEFAULT_COLOR_CLASS[colorName];\n\n node.style[propName] = propValue;\n }\n });\n\n node.className = classes.join(' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: \"rgba(255, 255, 255, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\",\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\"\n };\n\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except middle instead of center on Safari.\n this.div = window.document.createElement(\"div\");\n styles = {\n direction: determineBidi(this.cueDiv),\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\",\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n this.applyStyles(styles);\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"center\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"center\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n // Safari still uses the old middle value and won't accept center\n try {\n self.cue.align = \"center\";\n } catch (e) {\n self.cue.align = \"middle\";\n }\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n');\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": 1,\n \"lr\": 1,\n \"rl\": 1\n};\nvar alignSetting = {\n \"start\": 1,\n \"center\": 1,\n \"end\": 1,\n \"left\": 1,\n \"right\": 1,\n \"auto\": 1,\n \"line-left\": 1,\n \"line-right\": 1\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n this.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = \"auto\";\n var _positionAlign = \"auto\";\n var _size = 100;\n var _align = \"center\";\n\n Object.defineProperties(this, {\n \"id\": {\n enumerable: true,\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n },\n\n \"pauseOnExit\": {\n enumerable: true,\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n },\n\n \"startTime\": {\n enumerable: true,\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"endTime\": {\n enumerable: true,\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"text\": {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n },\n\n \"region\": {\n enumerable: true,\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n },\n\n \"vertical\": {\n enumerable: true,\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"Vertical: an invalid or illegal direction string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n },\n\n \"snapToLines\": {\n enumerable: true,\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n },\n\n \"line\": {\n enumerable: true,\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"Line: an invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n },\n\n \"lineAlign\": {\n enumerable: true,\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"lineAlign: an invalid or illegal string was specified.\");\n } else {\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"position\": {\n enumerable: true,\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n },\n\n \"positionAlign\": {\n enumerable: true,\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"positionAlign: an invalid or illegal string was specified.\");\n } else {\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"size\": {\n enumerable: true,\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n },\n\n \"align\": {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"align: an invalid or illegal alignment string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }\n });\n\n /**\n * Other