@mux/mux-video 0.20.2 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/polyfills/index.ts", "../src/env.ts", "../../../node_modules/custom-media-element/custom-media-element.js", "../../../node_modules/castable-video/castable-utils.js", "../../../node_modules/castable-video/castable-remote-playback.js", "../../../node_modules/castable-video/castable-mixin.js", "../../../node_modules/media-tracks/dist/track-event.js", "../../../node_modules/media-tracks/dist/utils.js", "../../../node_modules/media-tracks/dist/video-track-list.js", "../../../node_modules/media-tracks/dist/rendition-event.js", "../../../node_modules/media-tracks/dist/video-rendition-list.js", "../../../node_modules/media-tracks/dist/video-rendition.js", "../../../node_modules/media-tracks/dist/video-track.js", "../../../node_modules/media-tracks/dist/audio-rendition-list.js", "../../../node_modules/media-tracks/dist/audio-rendition.js", "../../../node_modules/media-tracks/dist/audio-track-list.js", "../../../node_modules/media-tracks/dist/audio-track.js", "../../../node_modules/media-tracks/dist/mixin.js"],
4
- "sourcesContent": ["import { globalThis } from './polyfills';\nimport {\n initialize,\n teardown,\n generatePlayerInitTime,\n MuxMediaProps,\n StreamTypes,\n PlaybackTypes,\n toMuxVideoURL,\n Metadata,\n MediaError,\n getError,\n CmcdTypes,\n CmcdTypeValues,\n addCuePoints,\n getCuePoints,\n getActiveCuePoint,\n addChapters,\n getActiveChapter,\n getStartDate,\n getCurrentPdt,\n getStreamType,\n getTargetLiveWindow,\n getLiveEdgeStart,\n getSeekable,\n getEnded,\n getChapters,\n toPlaybackIdFromSrc,\n // isMuxVideoSrc,\n} from '@mux/playback-core';\nimport type {\n PlaybackCore,\n PlaybackEngine,\n Autoplay,\n ExtensionMimeTypeMap,\n ValueOf,\n MaxResolutionValue,\n MinResolutionValue,\n RenditionOrderValue,\n} from '@mux/playback-core';\nimport { getPlayerVersion } from './env';\n// this must be imported after playback-core for the polyfill to be included\nimport { CustomVideoElement, Events as VideoEvents } from 'custom-media-element';\nimport { CastableMediaMixin } from 'castable-video/castable-mixin.js';\nimport { MediaTracksMixin } from 'media-tracks';\nimport type { HlsConfig } from 'hls.js';\n\n// Must mutate so the added events are available in custom-media-element.\nVideoEvents.push('castchange', 'entercast', 'leavecast');\n\nexport const Attributes = {\n BEACON_COLLECTION_DOMAIN: 'beacon-collection-domain',\n CUSTOM_DOMAIN: 'custom-domain',\n DEBUG: 'debug',\n DISABLE_TRACKING: 'disable-tracking',\n DISABLE_COOKIES: 'disable-cookies',\n DRM_TOKEN: 'drm-token',\n ENV_KEY: 'env-key',\n MAX_RESOLUTION: 'max-resolution',\n MIN_RESOLUTION: 'min-resolution',\n RENDITION_ORDER: 'rendition-order',\n PROGRAM_START_TIME: 'program-start-time',\n PROGRAM_END_TIME: 'program-end-time',\n METADATA_URL: 'metadata-url',\n PLAYBACK_ID: 'playback-id',\n PLAYER_SOFTWARE_NAME: 'player-software-name',\n PLAYER_SOFTWARE_VERSION: 'player-software-version',\n PREFER_CMCD: 'prefer-cmcd',\n PREFER_PLAYBACK: 'prefer-playback',\n START_TIME: 'start-time',\n STREAM_TYPE: 'stream-type',\n TARGET_LIVE_WINDOW: 'target-live-window',\n LIVE_EDGE_OFFSET: 'live-edge-offset',\n TYPE: 'type',\n} as const;\n\nconst AttributeNameValues = Object.values(Attributes);\n\nconst playerSoftwareVersion = getPlayerVersion();\nconst playerSoftwareName = 'mux-video';\n\nclass MuxVideoBaseElement extends CustomVideoElement implements Partial<MuxMediaProps> {\n static get observedAttributes() {\n return [...AttributeNameValues, ...(CustomVideoElement.observedAttributes ?? [])];\n }\n\n #core?: PlaybackCore;\n #loadRequested?: Promise<void> | null;\n #playerInitTime: number;\n #metadata: Readonly<Metadata> = {};\n #_hlsConfig?: Partial<HlsConfig>;\n #playerSoftwareVersion?: string;\n #playerSoftwareName?: string;\n #errorTranslator?: (errorEvent: any) => any;\n\n constructor() {\n super();\n this.#playerInitTime = generatePlayerInitTime();\n }\n\n get preferCmcd() {\n return (this.getAttribute(Attributes.PREFER_CMCD) as ValueOf<CmcdTypes>) ?? undefined;\n }\n\n set preferCmcd(value: ValueOf<CmcdTypes> | undefined) {\n if (value === this.preferCmcd) return;\n if (!value) {\n this.removeAttribute(Attributes.PREFER_CMCD);\n } else if (CmcdTypeValues.includes(value)) {\n this.setAttribute(Attributes.PREFER_CMCD, value);\n } else {\n console.warn(`Invalid value for preferCmcd. Must be one of ${CmcdTypeValues.join()}`);\n }\n }\n\n get playerInitTime() {\n return this.#playerInitTime;\n }\n\n get playerSoftwareName() {\n return this.#playerSoftwareName ?? playerSoftwareName;\n }\n\n set playerSoftwareName(value: string | undefined) {\n this.#playerSoftwareName = value;\n }\n\n get playerSoftwareVersion() {\n return this.#playerSoftwareVersion ?? playerSoftwareVersion;\n }\n\n set playerSoftwareVersion(value: string | undefined) {\n this.#playerSoftwareVersion = value;\n }\n\n // Keeping this named \"_hls\" since it's exposed for unadvertised \"advanced usage\" via getter that assumes specifically hls.js (CJP)\n get _hls(): PlaybackEngine | undefined {\n return this.#core?.engine;\n }\n\n get mux(): Readonly<HTMLVideoElement['mux']> | undefined {\n return this.nativeEl?.mux;\n }\n\n get error() {\n return getError(this.nativeEl) ?? null;\n }\n\n get errorTranslator(): ((errorEvent: any) => any) | undefined {\n return this.#errorTranslator;\n }\n\n set errorTranslator(value: ((errorEvent: any) => any) | undefined) {\n this.#errorTranslator = value;\n }\n\n get src() {\n // Use the attribute value as the source of truth.\n // No need to store it in two places.\n // This avoids needing a to read the attribute initially and update the src.\n return this.getAttribute('src') as string;\n }\n\n set src(val: string) {\n // If being set by attributeChangedCallback,\n // dont' cause an infinite loop\n if (val === this.src) return;\n\n if (val == null) {\n this.removeAttribute('src');\n } else {\n this.setAttribute('src', val);\n }\n }\n\n get type(): ValueOf<ExtensionMimeTypeMap> | undefined {\n return (this.getAttribute(Attributes.TYPE) as ValueOf<ExtensionMimeTypeMap>) ?? undefined;\n }\n\n set type(val: ValueOf<ExtensionMimeTypeMap> | undefined) {\n // dont' cause an infinite loop\n if (val === this.type) return;\n\n if (val) {\n this.setAttribute(Attributes.TYPE, val);\n } else {\n this.removeAttribute(Attributes.TYPE);\n }\n }\n\n /** @ts-ignore */\n get autoplay(): Autoplay {\n const attr = this.getAttribute('autoplay');\n\n if (attr === null) {\n return false;\n } else if (attr === '') {\n return true;\n } else {\n return attr as Autoplay;\n }\n }\n\n /** @ts-ignore */\n set autoplay(val: Autoplay) {\n const currentVal = this.autoplay;\n if (val === currentVal) {\n return;\n }\n\n if (val) {\n this.setAttribute('autoplay', typeof val === 'string' ? val : '');\n } else {\n this.removeAttribute('autoplay');\n }\n }\n\n get preload() {\n const val = this.getAttribute('preload') as HTMLMediaElement['preload'];\n if (val === '') return 'auto';\n if (['none', 'metadata', 'auto'].includes(val)) return val;\n return super.preload;\n }\n\n set preload(val) {\n // don't cause an infinite loop\n // check the attribute because an empty string maps to the `auto` prop\n if (val == this.getAttribute('preload')) return;\n\n if (['', 'none', 'metadata', 'auto'].includes(val)) {\n this.setAttribute('preload', val);\n } else {\n this.removeAttribute('preload');\n }\n }\n\n get debug() {\n return this.getAttribute(Attributes.DEBUG) != null;\n }\n\n set debug(val) {\n // dont' cause an infinite loop\n if (val === this.debug) return;\n\n if (val) {\n this.setAttribute(Attributes.DEBUG, '');\n } else {\n this.removeAttribute(Attributes.DEBUG);\n }\n }\n\n get disableTracking() {\n return this.hasAttribute(Attributes.DISABLE_TRACKING);\n }\n\n set disableTracking(val) {\n // dont' cause an infinite loop\n if (val === this.disableTracking) return;\n\n this.toggleAttribute(Attributes.DISABLE_TRACKING, !!val);\n }\n\n get disableCookies() {\n return this.hasAttribute(Attributes.DISABLE_COOKIES);\n }\n\n set disableCookies(val) {\n // dont' cause an infinite loop\n if (val === this.disableCookies) return;\n\n if (val) {\n this.setAttribute(Attributes.DISABLE_COOKIES, '');\n } else {\n this.removeAttribute(Attributes.DISABLE_COOKIES);\n }\n }\n\n get startTime(): number | undefined {\n const val = this.getAttribute(Attributes.START_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set startTime(val: number | undefined) {\n // dont' cause an infinite loop\n if (val === this.startTime) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.START_TIME);\n } else {\n this.setAttribute(Attributes.START_TIME, `${val}`);\n }\n }\n\n get playbackId(): string | undefined {\n if (this.hasAttribute(Attributes.PLAYBACK_ID)) {\n return this.getAttribute(Attributes.PLAYBACK_ID) as string;\n }\n\n return toPlaybackIdFromSrc(this.src) ?? undefined;\n }\n\n set playbackId(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.playbackId) return;\n\n if (val) {\n this.setAttribute(Attributes.PLAYBACK_ID, val);\n } else {\n this.removeAttribute(Attributes.PLAYBACK_ID);\n }\n }\n\n get maxResolution() {\n return (this.getAttribute(Attributes.MAX_RESOLUTION) as MaxResolutionValue) ?? undefined;\n }\n\n set maxResolution(val: MaxResolutionValue | undefined) {\n if (val === this.maxResolution) return;\n\n if (val) {\n this.setAttribute(Attributes.MAX_RESOLUTION, val);\n } else {\n this.removeAttribute(Attributes.MAX_RESOLUTION);\n }\n }\n\n get minResolution() {\n return (this.getAttribute(Attributes.MIN_RESOLUTION) as MinResolutionValue) ?? undefined;\n }\n\n set minResolution(val: MinResolutionValue | undefined) {\n if (val === this.minResolution) return;\n\n if (val) {\n this.setAttribute(Attributes.MIN_RESOLUTION, val);\n } else {\n this.removeAttribute(Attributes.MIN_RESOLUTION);\n }\n }\n\n get renditionOrder() {\n return (this.getAttribute(Attributes.RENDITION_ORDER) as RenditionOrderValue) ?? undefined;\n }\n\n set renditionOrder(val: RenditionOrderValue | undefined) {\n if (val === this.renditionOrder) return;\n\n if (val) {\n this.setAttribute(Attributes.RENDITION_ORDER, val);\n } else {\n this.removeAttribute(Attributes.RENDITION_ORDER);\n }\n }\n\n get programStartTime() {\n const val = this.getAttribute(Attributes.PROGRAM_START_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set programStartTime(val: number | undefined) {\n if (val == undefined) {\n this.removeAttribute(Attributes.PROGRAM_START_TIME);\n } else {\n this.setAttribute(Attributes.PROGRAM_START_TIME, `${val}`);\n }\n }\n\n get programEndTime() {\n const val = this.getAttribute(Attributes.PROGRAM_END_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set programEndTime(val: number | undefined) {\n if (val == undefined) {\n this.removeAttribute(Attributes.PROGRAM_END_TIME);\n } else {\n this.setAttribute(Attributes.PROGRAM_END_TIME, `${val}`);\n }\n }\n\n get customDomain() {\n return this.getAttribute(Attributes.CUSTOM_DOMAIN) ?? undefined;\n }\n\n set customDomain(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.customDomain) return;\n\n if (val) {\n this.setAttribute(Attributes.CUSTOM_DOMAIN, val);\n } else {\n this.removeAttribute(Attributes.CUSTOM_DOMAIN);\n }\n }\n\n get drmToken() {\n return this.getAttribute(Attributes.DRM_TOKEN) ?? undefined;\n }\n\n set drmToken(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.drmToken) return;\n\n if (val) {\n this.setAttribute(Attributes.DRM_TOKEN, val);\n } else {\n this.removeAttribute(Attributes.DRM_TOKEN);\n }\n }\n\n get ended() {\n // This ensures that edge case media that doesn't properly end will\n // still announce itself as \"ended\".\n return getEnded(this.nativeEl, this._hls);\n }\n\n get envKey(): string | undefined {\n return this.getAttribute(Attributes.ENV_KEY) ?? undefined;\n }\n\n set envKey(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.envKey) return;\n\n if (val) {\n this.setAttribute(Attributes.ENV_KEY, val);\n } else {\n this.removeAttribute(Attributes.ENV_KEY);\n }\n }\n\n get beaconCollectionDomain(): string | undefined {\n return this.getAttribute(Attributes.BEACON_COLLECTION_DOMAIN) ?? undefined;\n }\n\n set beaconCollectionDomain(val: string | undefined) {\n // don't cause an infinite loop\n if (val === this.beaconCollectionDomain) return;\n\n if (val) {\n this.setAttribute(Attributes.BEACON_COLLECTION_DOMAIN, val);\n } else {\n this.removeAttribute(Attributes.BEACON_COLLECTION_DOMAIN);\n }\n }\n\n get streamType(): ValueOf<StreamTypes> | undefined {\n // Allow overriding inferred `streamType`\n return (this.getAttribute(Attributes.STREAM_TYPE) as ValueOf<StreamTypes>) ?? getStreamType(this.nativeEl);\n }\n\n set streamType(val: ValueOf<StreamTypes> | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val === this.streamType) return;\n\n if (val) {\n this.setAttribute(Attributes.STREAM_TYPE, val);\n } else {\n this.removeAttribute(Attributes.STREAM_TYPE);\n }\n }\n\n get targetLiveWindow() {\n // Allow overriding inferred `targetLiveWindow`\n if (this.hasAttribute(Attributes.TARGET_LIVE_WINDOW)) {\n return +(this.getAttribute(Attributes.TARGET_LIVE_WINDOW) as string) as number;\n }\n return getTargetLiveWindow(this.nativeEl);\n }\n\n set targetLiveWindow(val: number | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val == this.targetLiveWindow) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.TARGET_LIVE_WINDOW);\n } else {\n this.setAttribute(Attributes.TARGET_LIVE_WINDOW, `${+val}`);\n }\n }\n\n get liveEdgeStart() {\n if (this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) {\n const { liveEdgeOffset } = this;\n const seekableEnd = this.nativeEl.seekable.end(0) ?? 0;\n const seekableStart = this.nativeEl.seekable.start(0) ?? 0;\n return Math.max(seekableStart, seekableEnd - (liveEdgeOffset as number));\n }\n return getLiveEdgeStart(this.nativeEl);\n }\n\n get liveEdgeOffset() {\n if (!this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) return undefined;\n return +(this.getAttribute(Attributes.LIVE_EDGE_OFFSET) as string) as number;\n }\n\n set liveEdgeOffset(val: number | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val == this.targetLiveWindow) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.LIVE_EDGE_OFFSET);\n } else {\n this.setAttribute(Attributes.LIVE_EDGE_OFFSET, `${+val}`);\n }\n }\n\n get seekable() {\n return getSeekable(this.nativeEl);\n }\n\n async addCuePoints<T = any>(cuePoints: { time: number; value: T }[]) {\n return addCuePoints(this.nativeEl, cuePoints);\n }\n\n get activeCuePoint() {\n return getActiveCuePoint(this.nativeEl);\n }\n\n get cuePoints() {\n return getCuePoints(this.nativeEl);\n }\n\n async addChapters(chapters: { startTime: number; endTime: number; value: string }[]) {\n return addChapters(this.nativeEl, chapters);\n }\n\n get activeChapter() {\n return getActiveChapter(this.nativeEl);\n }\n\n get chapters() {\n return getChapters(this.nativeEl);\n }\n\n getStartDate() {\n return getStartDate(this.nativeEl, this._hls);\n }\n\n get currentPdt() {\n return getCurrentPdt(this.nativeEl, this._hls);\n }\n\n get preferPlayback(): ValueOf<PlaybackTypes> | undefined {\n const val = this.getAttribute(Attributes.PREFER_PLAYBACK);\n if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) return val;\n return undefined;\n }\n\n set preferPlayback(val: ValueOf<PlaybackTypes> | undefined) {\n if (val === this.preferPlayback) return;\n\n if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) {\n this.setAttribute(Attributes.PREFER_PLAYBACK, val);\n } else {\n this.removeAttribute(Attributes.PREFER_PLAYBACK);\n }\n }\n\n get metadata() {\n const inferredMetadataAttrs: { [key: string]: string } = this.getAttributeNames()\n .filter((attrName) => {\n return attrName.startsWith('metadata-') && !([Attributes.METADATA_URL] as string[]).includes(attrName);\n })\n .reduce(\n (currAttrs, attrName) => {\n const value = this.getAttribute(attrName);\n if (value != null) {\n currAttrs[attrName.replace(/^metadata-/, '').replace(/-/g, '_') as string] = value;\n }\n return currAttrs;\n },\n {} as { [key: string]: string }\n );\n\n return {\n ...inferredMetadataAttrs,\n ...this.#metadata,\n };\n }\n\n set metadata(val: Readonly<Metadata> | undefined) {\n this.#metadata = val ?? {};\n if (!!this.mux) {\n this.mux.emit('hb', this.#metadata);\n }\n }\n\n get _hlsConfig() {\n return this.#_hlsConfig;\n }\n\n set _hlsConfig(val: Readonly<Partial<HlsConfig>> | undefined) {\n this.#_hlsConfig = val;\n }\n\n async #requestLoad() {\n if (this.#loadRequested) return;\n await (this.#loadRequested = Promise.resolve());\n this.#loadRequested = null;\n this.load();\n }\n\n load() {\n this.#core = initialize(this as Partial<MuxMediaProps>, this.nativeEl, this.#core);\n }\n\n unload() {\n teardown(this.nativeEl, this.#core);\n this.#core = undefined;\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n // Only forward the attributes to the native media element that are not handled.\n const isNativeAttr = CustomVideoElement.observedAttributes.includes(attrName);\n if (isNativeAttr && !['src', 'autoplay', 'preload'].includes(attrName)) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n\n switch (attrName) {\n case Attributes.PLAYER_SOFTWARE_NAME:\n this.playerSoftwareName = newValue ?? undefined;\n break;\n case Attributes.PLAYER_SOFTWARE_VERSION:\n this.playerSoftwareVersion = newValue ?? undefined;\n break;\n case 'src': {\n const hadSrc = !!oldValue;\n const hasSrc = !!newValue;\n if (!hadSrc && hasSrc) {\n this.#requestLoad();\n } else if (hadSrc && !hasSrc) {\n this.unload();\n } else if (hadSrc && hasSrc) {\n this.unload();\n this.#requestLoad();\n }\n break;\n }\n case 'autoplay':\n if (newValue === oldValue) {\n break;\n }\n /** In case newValue is an empty string or null, use this.autoplay which translates to booleans (WL) */\n this.#core?.setAutoplay(this.autoplay);\n break;\n case 'preload':\n if (newValue === oldValue) {\n break;\n }\n this.#core?.setPreload(newValue as HTMLMediaElement['preload']);\n break;\n case Attributes.PLAYBACK_ID:\n this.src = toMuxVideoURL(this) as string;\n break;\n case Attributes.DEBUG: {\n const debug = this.debug;\n if (!!this.mux) {\n /** @TODO Link to docs for a more detailed discussion (CJP) */\n console.info(\n 'Cannot toggle debug mode of mux data after initialization. Make sure you set all metadata to override before setting the src.'\n );\n }\n if (!!this._hls) {\n this._hls.config.debug = debug;\n }\n break;\n }\n case Attributes.METADATA_URL:\n if (newValue) {\n fetch(newValue)\n .then((resp) => resp.json())\n .then((json) => (this.metadata = json))\n .catch(() => console.error(`Unable to load or parse metadata JSON from metadata-url ${newValue}!`));\n }\n break;\n case Attributes.STREAM_TYPE:\n // If the newValue is unset\n if (newValue == null || newValue !== oldValue) {\n this.dispatchEvent(new CustomEvent('streamtypechange', { composed: true, bubbles: true }));\n }\n break;\n case Attributes.TARGET_LIVE_WINDOW:\n if (newValue == null || newValue !== oldValue) {\n this.dispatchEvent(\n new CustomEvent('targetlivewindowchange', { composed: true, bubbles: true, detail: this.targetLiveWindow })\n );\n }\n break;\n default:\n break;\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback?.();\n if (this.nativeEl && this.src && !this.#core) {\n this.#requestLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.unload();\n }\n}\n\n// castable-video should be mixed in last so that it can override load().\nclass MuxVideoElement extends CastableMediaMixin(MediaTracksMixin(MuxVideoBaseElement)) {}\n\ntype MuxVideoElementType = typeof MuxVideoElement;\ndeclare global {\n var MuxVideoElement: MuxVideoElementType; // eslint-disable-line\n}\n\nif (!globalThis.customElements.get('mux-video')) {\n globalThis.customElements.define('mux-video', MuxVideoElement);\n globalThis.MuxVideoElement = MuxVideoElement;\n}\n\nexport { PlaybackEngine, PlaybackEngine as Hls, ExtensionMimeTypeMap as MimeTypes, MediaError, VideoEvents };\n\nexport default MuxVideoElement;\n", "/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "export const isMaybeBrowser = () => typeof window != 'undefined';\n// @ts-ignore\nexport const isMaybeServer = () => typeof global != 'undefined';\n\nconst getEnvPlayerVersion = () => {\n try {\n // @ts-ignore\n return PLAYER_VERSION as string;\n } catch {}\n return 'UNKNOWN';\n};\n\nconst player_version: string = getEnvPlayerVersion();\n\nexport const getPlayerVersion = () => player_version;\n", "/**\n * Custom Media Element\n * Based on https://github.com/muxinc/custom-video-element - Mux - MIT License\n *\n * The goal is to create an element that works just like the video element\n * but can be extended/sub-classed, because native elements cannot be\n * extended today across browsers.\n */\n\n// The onevent like props are weirdly set on the HTMLElement prototype with other\n// generic events making it impossible to pick these specific to HTMLMediaElement.\nexport const Events = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'encrypted',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting',\n 'waitingforkey',\n 'resize',\n 'enterpictureinpicture',\n 'leavepictureinpicture',\n 'webkitbeginfullscreen',\n 'webkitendfullscreen',\n 'webkitpresentationmodechanged',\n];\n\nfunction getAudioTemplateHTML(attrs) {\n return /*html*/`\n <style>\n :host {\n display: inline-flex;\n line-height: 0;\n flex-direction: column;\n justify-content: end;\n }\n\n audio {\n width: 100%;\n }\n </style>\n <slot name=\"media\">\n <audio${serializeAttributes(attrs)}></audio>\n </slot>\n <slot></slot>\n `;\n}\n\n// If the `media` slot is used leave the styling up to the user.\n// It's a more consistent behavior pre and post custom element upgrade.\n\nfunction getVideoTemplateHTML(attrs) {\n return /*html*/`\n <style>\n :host {\n display: inline-block;\n line-height: 0;\n }\n\n video {\n max-width: 100%;\n max-height: 100%;\n min-width: 100%;\n min-height: 100%;\n object-fit: var(--media-object-fit, contain);\n object-position: var(--media-object-position, 50% 50%);\n }\n\n video::-webkit-media-text-track-container {\n transform: var(--media-webkit-text-track-transform);\n transition: var(--media-webkit-text-track-transition);\n }\n </style>\n <slot name=\"media\">\n <video${serializeAttributes(attrs)}></video>\n </slot>\n <slot></slot>\n `;\n}\n\n/**\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n */\nexport const CustomMediaMixin = (superclass, { tag, is }) => {\n\n // `is` makes it possible to extend a custom built-in. e.g. castable-video\n const nativeElTest = globalThis.document?.createElement?.(tag, { is });\n const nativeElProps = nativeElTest ? getNativeElProps(nativeElTest) : [];\n\n return class CustomMedia extends superclass {\n static getTemplateHTML = tag.endsWith('audio') ? getAudioTemplateHTML : getVideoTemplateHTML;\n static shadowRootOptions = { mode: 'open' };\n static Events = Events;\n static #isDefined;\n\n static get observedAttributes() {\n CustomMedia.#define();\n\n // Include any attributes from the custom built-in.\n const natAttrs = nativeElTest?.constructor?.observedAttributes ?? [];\n\n return [\n ...natAttrs,\n 'autopictureinpicture',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'autoplay',\n 'controls',\n 'controlslist',\n 'crossorigin',\n 'loop',\n 'muted',\n 'playsinline',\n 'poster',\n 'preload',\n 'src',\n ];\n }\n\n static #define() {\n if (this.#isDefined) return;\n this.#isDefined = true;\n\n const propsToAttrs = new Set(this.observedAttributes);\n // defaultMuted maps to the muted attribute, handled manually below.\n propsToAttrs.delete('muted');\n\n // Passthrough native el functions from the custom el to the native el\n for (let prop of nativeElProps) {\n if (prop in this.prototype) continue;\n\n const type = typeof nativeElTest[prop];\n if (type == 'function') {\n // Function\n this.prototype[prop] = function (...args) {\n this.#init();\n\n const fn = () => {\n if (this.call) return this.call(prop, ...args);\n return this.nativeEl[prop].apply(this.nativeEl, args);\n };\n\n return fn();\n };\n } else {\n // Some properties like src, preload, defaultMuted are handled manually.\n\n // Getter\n let config = {\n get() {\n this.#init();\n\n let attr = prop.toLowerCase();\n if (propsToAttrs.has(attr)) {\n const val = this.getAttribute(attr);\n return val === null ? false : val === '' ? true : val;\n }\n\n return this.get?.(prop) ?? this.nativeEl?.[prop];\n },\n };\n\n if (prop !== prop.toUpperCase()) {\n // Setter (not a CONSTANT)\n config.set = function (val) {\n this.#init();\n\n let attr = prop.toLowerCase();\n if (propsToAttrs.has(attr)) {\n if (val === true || val === false || val == null) {\n this.toggleAttribute(attr, Boolean(val));\n } else {\n this.setAttribute(attr, val);\n }\n return;\n }\n\n if (this.set) {\n this.set(prop, val);\n return;\n }\n\n this.nativeEl[prop] = val;\n };\n }\n\n Object.defineProperty(this.prototype, prop, config);\n }\n }\n }\n\n #isInit;\n #nativeEl;\n #childMap = new Map();\n\n constructor() {\n super();\n\n // If the custom element is defined before the custom element's HTML is parsed\n // no attributes will be available in the constructor (construction process).\n // Wait until initializing in the attributeChangedCallback or\n // connectedCallback or accessing any properties.\n }\n\n get nativeEl() {\n this.#init();\n return this.#nativeEl\n ?? this.shadowRoot.querySelector(tag)\n ?? this.querySelector(':scope > [slot=media]')\n ?? this.querySelector(tag);\n }\n\n set nativeEl(val) {\n this.#nativeEl = val;\n }\n\n get defaultMuted() {\n return this.hasAttribute('muted');\n }\n\n set defaultMuted(val) {\n this.toggleAttribute('muted', Boolean(val));\n }\n\n get src() {\n return this.getAttribute('src');\n }\n\n set src(val) {\n this.setAttribute('src', `${val}`);\n }\n\n get preload() {\n return this.getAttribute('preload') ?? this.nativeEl?.preload;\n }\n\n set preload(val) {\n this.setAttribute('preload', `${val}`);\n }\n\n #init() {\n if (this.#isInit) return;\n this.#isInit = true;\n this.init();\n }\n\n init() {\n if (!this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n\n const attrs = namedNodeMapToObject(this.attributes);\n if (is) attrs.is = is;\n if (tag) attrs.part = tag;\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n\n // Neither Chrome or Firefox support setting the muted attribute\n // after using document.createElement.\n // Get around this by setting the muted property manually.\n this.nativeEl.muted = this.hasAttribute('muted');\n\n for (let prop of nativeElProps) {\n this.#upgradeProperty(prop);\n }\n\n this.shadowRoot.addEventListener('slotchange', this);\n this.#syncMediaChildren();\n\n for (let type of this.constructor.Events) {\n this.shadowRoot.addEventListener?.(type, this, true);\n }\n }\n\n handleEvent(event) {\n\n if (event.type === 'slotchange') {\n this.#syncMediaChildren();\n return;\n }\n\n if (event.target === this.nativeEl) {\n // The video events are dispatched on the CustomMediaElement instance.\n // This makes it possible to add event listeners before the element is upgraded.\n this.dispatchEvent(new CustomEvent(event.type, { detail: event.detail }));\n }\n }\n\n /**\n * Keep some native child elements like track and source in sync.\n * An unnamed <slot> will be filled with all of the custom element's\n * top-level child nodes that do not have the slot attribute.\n */\n #syncMediaChildren() {\n const removeNativeChildren = new Map(this.#childMap);\n\n this.shadowRoot.querySelector('slot:not([name])')\n .assignedElements({ flatten: true })\n .filter((el) => ['track', 'source'].includes(el.localName))\n .forEach((el) => {\n // If the source or track is still in the assigned elements keep it.\n removeNativeChildren.delete(el);\n // Re-use clones if possible.\n let clone = this.#childMap.get(el);\n if (!clone) {\n clone = el.cloneNode();\n this.#childMap.set(el, clone);\n }\n this.nativeEl.append?.(clone);\n\n // https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks\n // If there are any text tracks in the media element's list of text\n // tracks whose text track kind is chapters or metadata that\n // correspond to track elements with a default attribute set whose\n // text track mode is set to disabled, then set the text track\n // mode of all such tracks to hidden.\n if (\n clone.localName === 'track' &&\n clone.default &&\n (clone.kind === 'chapters' || clone.kind === 'metadata') &&\n clone.track.mode === 'disabled'\n ) {\n clone.track.mode = 'hidden';\n }\n });\n\n removeNativeChildren.forEach((el) => el.remove());\n }\n\n #upgradeProperty(prop) {\n // Sets properties that are set before the custom element is upgraded.\n // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n // Delete the set property from this instance.\n delete this[prop];\n // Set the value again via the (prototype) setter on this class.\n this[prop] = value;\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n // Initialize right after construction when the attributes become available.\n this.#init();\n this.#forwardAttribute(attrName, oldValue, newValue);\n }\n\n #forwardAttribute(attrName, oldValue, newValue) {\n // Ignore a few that don't need to be passed.\n if (['id', 'class'].includes(attrName)) {\n return;\n }\n\n // Ignore setting custom attributes from the child class.\n // They should not have any effect on the native element, it adds noise in the DOM.\n if (!CustomMedia.observedAttributes.includes(attrName)\n && this.constructor.observedAttributes.includes(attrName)\n ) {\n return;\n }\n\n if (newValue === null) {\n this.nativeEl.removeAttribute?.(attrName);\n } else {\n if (this.nativeEl.getAttribute?.(attrName) != newValue) {\n this.nativeEl.setAttribute?.(attrName, newValue);\n }\n }\n }\n\n connectedCallback() {\n this.#init();\n }\n };\n};\n\nfunction getNativeElProps(nativeElTest) {\n // Map all native element properties to the custom element\n // so that they're applied to the native element.\n // Skipping HTMLElement because of things like \"attachShadow\"\n // causing issues. Most of those props still need to apply to\n // the custom element.\n let nativeElProps = [];\n\n // Walk the prototype chain up to HTMLElement.\n // This will grab all super class props in between.\n // i.e. VideoElement and MediaElement\n for (\n let proto = Object.getPrototypeOf(nativeElTest);\n proto && proto !== HTMLElement.prototype;\n proto = Object.getPrototypeOf(proto)\n ) {\n nativeElProps.push(...Object.getOwnPropertyNames(proto));\n }\n\n return nativeElProps;\n}\n\nfunction serializeAttributes(attrs) {\n let html = '';\n for (const key in attrs) {\n const value = attrs[key];\n if (value === '') html += ` ${key}`;\n else html += ` ${key}=\"${value}\"`;\n }\n return html;\n}\n\nfunction namedNodeMapToObject(namedNodeMap) {\n let obj = {};\n for (let attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\n\nexport const CustomVideoElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'video' });\n\nexport const CustomAudioElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'audio' });\n", "/* global WeakRef */\n\nexport const privateProps = new WeakMap();\n\nexport class InvalidStateError extends Error {}\nexport class NotSupportedError extends Error {}\nexport class NotFoundError extends Error {}\n\n// Fallback to a plain Set if WeakRef is not available.\nexport const IterableWeakSet = globalThis.WeakRef ?\n class extends Set {\n add(el) {\n super.add(new WeakRef(el));\n }\n forEach(fn) {\n super.forEach((ref) => {\n const value = ref.deref();\n if (value) fn(value);\n });\n }\n } : Set;\n\nexport function onCastApiAvailable(callback) {\n if (!globalThis.chrome?.cast?.isAvailable) {\n globalThis.__onGCastApiAvailable = () => {\n // The globalThis.__onGCastApiAvailable callback alone is not reliable for\n // the added cast.framework. It's loaded in a separate JS file.\n // https://www.gstatic.com/eureka/clank/101/cast_sender.js\n // https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n };\n } else if (!globalThis.cast?.framework) {\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n } else {\n callback();\n }\n}\n\nexport function requiresCastFramework() {\n // todo: exclude for Android>=56 which supports the Remote Playback API natively.\n return globalThis.chrome;\n}\n\nexport function loadCastFramework() {\n const sdkUrl = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1';\n if (globalThis.chrome?.cast || document.querySelector(`script[src=\"${sdkUrl}\"]`)) return;\n\n const script = document.createElement('script');\n script.src = sdkUrl;\n document.head.append(script);\n}\n\nexport function castContext() {\n return globalThis.cast?.framework?.CastContext.getInstance();\n}\n\nexport function currentSession() {\n return castContext()?.getCurrentSession();\n}\n\nexport function currentMedia() {\n return currentSession()?.getSessionObj().media[0];\n}\n\nexport function editTracksInfo(request) {\n return new Promise((resolve, reject) => {\n currentMedia().editTracksInfo(request, resolve, reject);\n });\n}\n\nexport function getMediaStatus(request) {\n return new Promise((resolve, reject) => {\n currentMedia().getStatus(request, resolve, reject);\n });\n}\n\nexport function setCastOptions(options) {\n return castContext().setOptions({\n ...getDefaultCastOptions(),\n ...options,\n });\n}\n\nexport function getDefaultCastOptions() {\n return {\n // Set the receiver application ID to your own (created in the\n // Google Cast Developer Console), or optionally\n // use the chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID\n receiverApplicationId: 'CC1AD845',\n\n // Auto join policy can be one of the following three:\n // ORIGIN_SCOPED - Auto connect from same appId and page origin\n // TAB_AND_ORIGIN_SCOPED - Auto connect from same appId, page origin, and tab\n // PAGE_SCOPED - No auto connect\n autoJoinPolicy: 'origin_scoped',\n\n // The following flag enables Cast Connect(requires Chrome 87 or higher)\n // https://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html\n androidReceiverCompatible: false,\n\n language: 'en-US',\n resumeSavedSession: true,\n };\n}\n", "/* global chrome, cast */\nimport {\n privateProps,\n IterableWeakSet,\n InvalidStateError,\n NotSupportedError,\n onCastApiAvailable,\n castContext,\n currentSession,\n currentMedia,\n editTracksInfo,\n getMediaStatus,\n setCastOptions\n} from './castable-utils.js';\n\nconst remoteInstances = new IterableWeakSet();\nconst castElementRef = new WeakSet();\n\nlet cf;\n\nonCastApiAvailable(() => {\n if (!globalThis.chrome?.cast?.isAvailable) {\n // Useful to see in verbose logs if this shows undefined or false.\n console.debug('chrome.cast.isAvailable', globalThis.chrome?.cast?.isAvailable);\n return;\n }\n\n if (!cf) {\n cf = cast.framework;\n\n castContext().addEventListener(cf.CastContextEventType.CAST_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onCastStateChanged?.(e));\n });\n\n castContext().addEventListener(cf.CastContextEventType.SESSION_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onSessionStateChanged?.(e));\n });\n\n remoteInstances.forEach((r) => privateProps.get(r).init?.());\n }\n});\n\n\nlet remotePlaybackCallbackIdCount = 0;\n\n/**\n * Remote Playback shim for the Google cast SDK.\n * https://w3c.github.io/remote-playback/\n */\nexport class RemotePlayback extends EventTarget {\n #media;\n #isInit;\n #remotePlayer;\n #remoteListeners;\n #state = 'disconnected';\n #available = false;\n #callbacks = new Set();\n #callbackIds = new WeakMap();\n\n constructor(media) {\n super();\n\n this.#media = media;\n\n remoteInstances.add(this);\n privateProps.set(this, {\n init: () => this.#init(),\n onCastStateChanged: () => this.#onCastStateChanged(),\n onSessionStateChanged: () => this.#onSessionStateChanged(),\n getCastPlayer: () => this.#castPlayer,\n });\n\n this.#init();\n }\n\n get #castPlayer() {\n if (castElementRef.has(this.#media)) return this.#remotePlayer;\n return undefined;\n }\n\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n * @return {'disconnected'|'connecting'|'connected'}\n */\n get state() {\n return this.#state;\n }\n\n async watchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n this.#callbackIds.set(callback, ++remotePlaybackCallbackIdCount);\n this.#callbacks.add(callback);\n\n return remotePlaybackCallbackIdCount;\n }\n\n async cancelWatchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (callback) {\n this.#callbacks.delete(callback);\n } else {\n this.#callbacks.clear();\n }\n }\n\n async prompt() {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (!globalThis.chrome?.cast?.isAvailable) {\n throw new NotSupportedError('The RemotePlayback API is disabled on this platform.');\n }\n\n const willDisconnect = castElementRef.has(this.#media);\n castElementRef.add(this.#media);\n\n setCastOptions(this.#media.castOptions);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n try {\n // Open browser cast menu.\n await castContext().requestSession();\n } catch (err) {\n // Don't throw an error if disconnecting or cancelling.\n if (err === 'cancel') {\n // If there will be no disconnect, reset some state here.\n if (!willDisconnect) {\n castElementRef.delete(this.#media);\n }\n return;\n }\n\n throw new Error(err);\n }\n\n privateProps.get(this.#media)?.loadOnPrompt?.();\n }\n\n #disconnect() {\n if (!castElementRef.has(this.#media)) return;\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.removeEventListener(event, listener);\n });\n\n castElementRef.delete(this.#media);\n\n // isMuted is not in savedPlayerState. should we sync this back to local?\n this.#media.muted = this.#remotePlayer.isMuted;\n this.#media.currentTime = this.#remotePlayer.savedPlayerState.currentTime;\n if (this.#remotePlayer.savedPlayerState.isPaused === false) {\n this.#media.play();\n }\n }\n\n #onCastStateChanged() {\n // Cast state: NO_DEVICES_AVAILABLE, NOT_CONNECTED, CONNECTING, CONNECTED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.CastState\n const castState = castContext().getCastState();\n\n if (castElementRef.has(this.#media)) {\n if (castState === 'CONNECTING') {\n this.#state = 'connecting';\n this.dispatchEvent(new Event('connecting'));\n }\n }\n\n if (!this.#available && castState?.includes('CONNECT')) {\n this.#available = true;\n for (let callback of this.#callbacks) callback(true);\n }\n else if (this.#available && (!castState || castState === 'NO_DEVICES_AVAILABLE')) {\n this.#available = false;\n for (let callback of this.#callbacks) callback(false);\n }\n }\n\n async #onSessionStateChanged() {\n // Session states: NO_SESSION, SESSION_STARTING, SESSION_STARTED, SESSION_START_FAILED,\n // SESSION_ENDING, SESSION_ENDED, SESSION_RESUMED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.SessionState\n\n const { SESSION_RESUMED } = cf.SessionState;\n if (castContext().getSessionState() === SESSION_RESUMED) {\n /**\n * Figure out if this was the video that started the resumed session.\n * @TODO make this more specific than just checking against the video src!! (WL)\n *\n * If this video element can get the same unique id on each browser refresh\n * it would be possible to pass this unique id w/ `LoadRequest.customData`\n * and verify against currentMedia().customData below.\n */\n if (this.#media.castSrc === currentMedia()?.media.contentId) {\n castElementRef.add(this.#media);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n /**\n * There is cast framework resume session bug when you refresh the page a few\n * times the this.#remotePlayer.currentTime will not be in sync with the receiver :(\n * The below status request syncs it back up.\n */\n try {\n await getMediaStatus(new chrome.cast.media.GetStatusRequest());\n } catch (error) {\n console.error(error);\n }\n\n // Dispatch the play, playing events manually to sync remote playing state.\n this.#remoteListeners[cf.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n this.#remoteListeners[cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n }\n }\n }\n\n #init() {\n if (!cf || this.#isInit) return;\n this.#isInit = true;\n\n setCastOptions(this.#media.castOptions);\n\n /**\n * @TODO add listeners for addtrack, removetrack (WL)\n * This only has an impact on <track> with a `src` because these have to be\n * loaded manually in the load() method. This will require a new load() call\n * for each added/removed track w/ src.\n */\n this.#media.textTracks.addEventListener('change', () => this.#updateRemoteTextTrack());\n\n this.#onCastStateChanged();\n\n this.#remotePlayer = new cf.RemotePlayer();\n new cf.RemotePlayerController(this.#remotePlayer);\n\n this.#remoteListeners = {\n [cf.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value }) => {\n if (value === true) {\n this.#state = 'connected';\n this.dispatchEvent(new Event('connect'));\n } else {\n this.#disconnect();\n this.#state = 'disconnected';\n this.dispatchEvent(new Event('disconnect'));\n }\n },\n [cf.RemotePlayerEventType.DURATION_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('durationchange'));\n },\n [cf.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n this.#media.dispatchEvent(new Event('timeupdate'));\n },\n [cf.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('resize'));\n },\n [cf.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event(this.paused ? 'pause' : 'play'));\n },\n [cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n // Player states: IDLE, PLAYING, PAUSED, BUFFERING\n // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media#.PlayerState\n\n // pause event is handled above.\n if (this.#castPlayer?.playerState === chrome.cast.media.PlayerState.PAUSED) {\n return;\n }\n\n this.#media.dispatchEvent(\n new Event(\n {\n [chrome.cast.media.PlayerState.PLAYING]: 'playing',\n [chrome.cast.media.PlayerState.BUFFERING]: 'waiting',\n [chrome.cast.media.PlayerState.IDLE]: 'emptied',\n }[this.#castPlayer?.playerState]\n )\n );\n },\n [cf.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n\n // mediaInfo is not immediately available due to a bug? wait one tick\n await Promise.resolve();\n this.#onRemoteMediaLoaded();\n },\n };\n }\n\n #onRemoteMediaLoaded() {\n this.#updateRemoteTextTrack();\n }\n\n async #updateRemoteTextTrack() {\n if (!this.#castPlayer) return;\n\n // Get the tracks w/ trackId's that have been loaded; manually or via a playlist like a M3U8 or MPD.\n const remoteTracks = this.#remotePlayer.mediaInfo?.tracks ?? [];\n const remoteSubtitles = remoteTracks.filter(\n ({ type }) => type === chrome.cast.media.TrackType.TEXT\n );\n\n const localSubtitles = [...this.#media.textTracks].filter(\n ({ kind }) => kind === 'subtitles' || kind === 'captions'\n );\n\n // Create a new array from the local subs w/ the trackId's from the remote subs.\n const subtitles = remoteSubtitles\n .map(({ language, name, trackId }) => {\n // Find the corresponding local text track and assign the trackId.\n const { mode } =\n localSubtitles.find(\n (local) => local.language === language && local.label === name\n ) ?? {};\n if (mode) return { mode, trackId };\n return false;\n })\n .filter(Boolean);\n\n const hiddenSubtitles = subtitles.filter(\n ({ mode }) => mode !== 'showing'\n );\n const hiddenTrackIds = hiddenSubtitles.map(({ trackId }) => trackId);\n const showingSubtitle = subtitles.find(({ mode }) => mode === 'showing');\n\n // Note this could also include audio or video tracks, diff against local state.\n const activeTrackIds =\n currentSession()?.getSessionObj().media[0]\n ?.activeTrackIds ?? [];\n let requestTrackIds = activeTrackIds;\n\n if (activeTrackIds.length) {\n // Filter out all local hidden subtitle trackId's.\n requestTrackIds = requestTrackIds.filter(\n (id) => !hiddenTrackIds.includes(id)\n );\n }\n\n if (showingSubtitle?.trackId) {\n requestTrackIds = [...requestTrackIds, showingSubtitle.trackId];\n }\n\n // Remove duplicate ids.\n requestTrackIds = [...new Set(requestTrackIds)];\n\n const arrayEquals = (a, b) =>\n a.length === b.length && a.every((a) => b.includes(a));\n if (!arrayEquals(activeTrackIds, requestTrackIds)) {\n try {\n const request = new chrome.cast.media.EditTracksInfoRequest(\n requestTrackIds\n );\n await editTracksInfo(request);\n } catch (error) {\n console.error(error);\n }\n }\n }\n}\n", "/* global chrome */\nimport { RemotePlayback } from './castable-remote-playback.js';\nimport {\n privateProps,\n requiresCastFramework,\n loadCastFramework,\n currentSession,\n getDefaultCastOptions\n} from './castable-utils.js';\n\n/**\n * CastableMediaMixin\n *\n * This mixin function provides a way to compose multiple classes.\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n *\n * @param {HTMLMediaElement} superclass - HTMLMediaElement or an extended class of it.\n * @return {CastableMedia}\n */\nexport const CastableMediaMixin = (superclass) =>\n class CastableMedia extends superclass {\n\n static observedAttributes = [\n ...(superclass.observedAttributes ?? []),\n 'cast-src',\n 'cast-content-type',\n 'cast-stream-type',\n 'cast-receiver',\n ];\n\n #localState = { paused: false };\n #castOptions = getDefaultCastOptions();\n #remote;\n\n get remote() {\n if (this.#remote) return this.#remote;\n\n if (requiresCastFramework()) {\n loadCastFramework();\n\n privateProps.set(this, {\n loadOnPrompt: () => this.#loadOnPrompt()\n });\n\n return (this.#remote = new RemotePlayback(this));\n }\n\n return super.remote;\n }\n\n get #castPlayer() {\n return privateProps.get(this.remote)?.getCastPlayer?.();\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n\n if (attrName === 'cast-receiver' && newValue) {\n this.#castOptions.receiverApplicationId = newValue;\n return;\n }\n\n if (!this.#castPlayer) return;\n\n switch (attrName) {\n case 'cast-stream-type':\n case 'cast-src':\n this.load();\n break;\n }\n }\n\n async #loadOnPrompt() {\n // Pause locally when the session is created.\n this.#localState.paused = super.paused;\n super.pause();\n\n // Sync over the muted state but not volume, 100% is different on TV's :P\n this.muted = super.muted;\n\n try {\n await this.load();\n } catch (err) {\n console.error(err);\n }\n }\n\n async load() {\n if (!this.#castPlayer) return super.load();\n\n const mediaInfo = new chrome.cast.media.MediaInfo(this.castSrc, this.castContentType);\n\n // Manually add text tracks with a `src` attribute.\n // M3U8's load text tracks in the receiver, handle these in the media loaded event.\n const subtitles = [...this.querySelectorAll('track')].filter(\n ({ kind, src }) => src && (kind === 'subtitles' || kind === 'captions')\n );\n\n const activeTrackIds = [];\n let textTrackIdCount = 0;\n\n if (subtitles.length) {\n mediaInfo.tracks = subtitles.map((trackEl) => {\n const trackId = ++textTrackIdCount;\n // only activate 1 subtitle text track.\n if (activeTrackIds.length === 0 && trackEl.track.mode === 'showing') {\n activeTrackIds.push(trackId);\n }\n\n const track = new chrome.cast.media.Track(\n trackId,\n chrome.cast.media.TrackType.TEXT\n );\n track.trackContentId = trackEl.src;\n track.trackContentType = 'text/vtt';\n track.subtype =\n trackEl.kind === 'captions'\n ? chrome.cast.media.TextTrackType.CAPTIONS\n : chrome.cast.media.TextTrackType.SUBTITLES;\n track.name = trackEl.label;\n track.language = trackEl.srclang;\n return track;\n });\n }\n\n if (this.castStreamType === 'live') {\n mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;\n } else {\n mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;\n }\n\n mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n mediaInfo.metadata.title = this.title;\n mediaInfo.metadata.images = [{ url: this.poster }];\n\n const request = new chrome.cast.media.LoadRequest(mediaInfo);\n request.currentTime = super.currentTime ?? 0;\n request.autoplay = !this.#localState.paused;\n request.activeTrackIds = activeTrackIds;\n\n await currentSession()?.loadMedia(request);\n\n this.dispatchEvent(new Event('volumechange'));\n }\n\n play() {\n if (this.#castPlayer) {\n if (this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n return super.play();\n }\n\n pause() {\n if (this.#castPlayer) {\n if (!this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n super.pause();\n }\n\n /**\n * @see https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastOptions\n * @readonly\n *\n * @typedef {Object} CastOptions\n * @property {string} [receiverApplicationId='CC1AD845'] - The app id of the cast receiver.\n * @property {string} [autoJoinPolicy='origin_scoped'] - The auto join policy.\n * @property {string} [language='en-US'] - The language to use for the cast receiver.\n * @property {boolean} [androidReceiverCompatible=false] - Whether to use the Cast Connect.\n * @property {boolean} [resumeSavedSession=true] - Whether to resume the last session.\n *\n * @return {CastOptions}\n */\n get castOptions() {\n return this.#castOptions;\n }\n\n get castReceiver() {\n return this.getAttribute('cast-receiver') ?? undefined;\n }\n\n set castReceiver(val) {\n if (this.castReceiver == val) return;\n this.setAttribute('cast-receiver', `${val}`);\n }\n\n // Allow the cast source url to be different than <video src>, could be a blob.\n get castSrc() {\n // Try the first <source src> for usage with even more native markup.\n return (\n this.getAttribute('cast-src') ??\n this.querySelector('source')?.src ??\n this.currentSrc\n );\n }\n\n set castSrc(val) {\n if (this.castSrc == val) return;\n this.setAttribute('cast-src', `${val}`);\n }\n\n get castContentType() {\n return this.getAttribute('cast-content-type') ?? undefined;\n }\n\n set castContentType(val) {\n this.setAttribute('cast-content-type', `${val}`);\n }\n\n get castStreamType() {\n // NOTE: Per https://github.com/video-dev/media-ui-extensions/issues/3 `streamType` may yield `\"unknown\"`\n return this.getAttribute('cast-stream-type') ?? this.streamType ?? undefined;\n }\n\n set castStreamType(val) {\n this.setAttribute('cast-stream-type', `${val}`);\n }\n\n get readyState() {\n if (this.#castPlayer) {\n switch (this.#castPlayer.playerState) {\n case chrome.cast.media.PlayerState.IDLE:\n return 0;\n case chrome.cast.media.PlayerState.BUFFERING:\n return 2;\n default:\n return 3;\n }\n }\n return super.readyState;\n }\n\n get paused() {\n if (this.#castPlayer) return this.#castPlayer.isPaused;\n return super.paused;\n }\n\n get muted() {\n if (this.#castPlayer) return this.#castPlayer?.isMuted;\n return super.muted;\n }\n\n set muted(val) {\n if (this.#castPlayer) {\n if (\n (val && !this.#castPlayer.isMuted) ||\n (!val && this.#castPlayer.isMuted)\n ) {\n this.#castPlayer.controller?.muteOrUnmute();\n }\n return;\n }\n super.muted = val;\n }\n\n get volume() {\n if (this.#castPlayer) return this.#castPlayer?.volumeLevel ?? 1;\n return super.volume;\n }\n\n set volume(val) {\n if (this.#castPlayer) {\n this.#castPlayer.volumeLevel = +val;\n this.#castPlayer.controller?.setVolumeLevel();\n return;\n }\n super.volume = val;\n }\n\n get duration() {\n // castPlayer duration returns `0` when no media is loaded.\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.duration ?? NaN;\n }\n return super.duration;\n }\n\n get currentTime() {\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.currentTime ?? 0;\n }\n return super.currentTime;\n }\n\n set currentTime(val) {\n if (this.#castPlayer) {\n this.#castPlayer.currentTime = val;\n this.#castPlayer.controller?.seek();\n return;\n }\n super.currentTime = val;\n }\n };\n\nexport const CastableVideoMixin = CastableMediaMixin;\n", "class TrackEvent extends Event {\n track;\n constructor(type, init) {\n super(type);\n this.track = init.track;\n }\n}\nexport {\n TrackEvent\n};\n", "const privateProps = /* @__PURE__ */ new WeakMap();\nfunction getPrivate(instance) {\n return privateProps.get(instance) ?? setPrivate(instance, {});\n}\nfunction setPrivate(instance, props) {\n let saved = privateProps.get(instance);\n if (!saved)\n privateProps.set(instance, saved = {});\n return Object.assign(saved, props);\n}\nexport {\n getPrivate,\n setPrivate\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addVideoTrack(media, track) {\n const trackList = media.videoTracks;\n getPrivate(track).media = media;\n if (!getPrivate(track).renditionSet) {\n getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n }\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.add(track);\n const index = trackSet.size - 1;\n if (!(index in VideoTrackList.prototype)) {\n Object.defineProperty(VideoTrackList.prototype, index, {\n get() {\n return [...getPrivate(this).trackSet][index];\n }\n });\n }\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n });\n}\nfunction removeVideoTrack(track) {\n const trackList = getPrivate(track).media?.videoTracks;\n if (!trackList)\n return;\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.delete(track);\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n });\n}\nfunction selectedChanged(selected) {\n const trackList = getPrivate(selected).media.videoTracks ?? [];\n let hasUnselected = false;\n for (const track of trackList) {\n if (track === selected)\n continue;\n track.selected = false;\n hasUnselected = true;\n }\n if (hasUnselected) {\n if (getPrivate(trackList).changeRequested)\n return;\n getPrivate(trackList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(trackList).changeRequested;\n trackList.dispatchEvent(new Event(\"change\"));\n });\n }\n}\nclass VideoTrackList extends EventTarget {\n #addTrackCallback;\n #removeTrackCallback;\n #changeCallback;\n constructor() {\n super();\n getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n }\n get #tracks() {\n return getPrivate(this).trackSet;\n }\n [Symbol.iterator]() {\n return this.#tracks.values();\n }\n get length() {\n return this.#tracks.size;\n }\n getTrackById(id) {\n return [...this.#tracks].find((track) => track.id === id) ?? null;\n }\n get selectedIndex() {\n return [...this.#tracks].findIndex((track) => track.selected);\n }\n get onaddtrack() {\n return this.#addTrackCallback;\n }\n set onaddtrack(callback) {\n if (this.#addTrackCallback) {\n this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n this.#addTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addTrackCallback = callback;\n this.addEventListener(\"addtrack\", callback);\n }\n }\n get onremovetrack() {\n return this.#removeTrackCallback;\n }\n set onremovetrack(callback) {\n if (this.#removeTrackCallback) {\n this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n this.#removeTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeTrackCallback = callback;\n this.addEventListener(\"removetrack\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n VideoTrackList,\n addVideoTrack,\n removeVideoTrack,\n selectedChanged\n};\n", "class RenditionEvent extends Event {\n rendition;\n constructor(type, init) {\n super(type);\n this.rendition = init.rendition;\n }\n}\nexport {\n RenditionEvent\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n const renditionList = getPrivate(track).media.videoRenditions;\n getPrivate(rendition).media = getPrivate(track).media;\n getPrivate(rendition).track = track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.add(rendition);\n const index = renditionSet.size - 1;\n if (!(index in VideoRenditionList.prototype)) {\n Object.defineProperty(VideoRenditionList.prototype, index, {\n get() {\n return getCurrentRenditions(this)[index];\n }\n });\n }\n queueMicrotask(() => {\n if (!track.selected)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n });\n}\nfunction removeRendition(rendition) {\n const renditionList = getPrivate(rendition).media.videoRenditions;\n const track = getPrivate(rendition).track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.delete(rendition);\n queueMicrotask(() => {\n const track2 = getPrivate(rendition).track;\n if (!track2.selected)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n });\n}\nfunction selectedChanged(rendition) {\n const renditionList = getPrivate(rendition).media.videoRenditions;\n if (!renditionList || getPrivate(renditionList).changeRequested)\n return;\n getPrivate(renditionList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(renditionList).changeRequested;\n const track = getPrivate(rendition).track;\n if (!track.selected)\n return;\n renditionList.dispatchEvent(new Event(\"change\"));\n });\n}\nfunction getCurrentRenditions(renditionList) {\n const media = getPrivate(renditionList).media;\n return [...media.videoTracks].filter((track) => track.selected).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass VideoRenditionList extends EventTarget {\n #addRenditionCallback;\n #removeRenditionCallback;\n #changeCallback;\n [Symbol.iterator]() {\n return getCurrentRenditions(this).values();\n }\n get length() {\n return getCurrentRenditions(this).length;\n }\n getRenditionById(id) {\n return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n }\n get selectedIndex() {\n return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n }\n set selectedIndex(index) {\n for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n rendition.selected = i === index;\n }\n }\n get onaddrendition() {\n return this.#addRenditionCallback;\n }\n set onaddrendition(callback) {\n if (this.#addRenditionCallback) {\n this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n this.#addRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addRenditionCallback = callback;\n this.addEventListener(\"addrendition\", callback);\n }\n }\n get onremoverendition() {\n return this.#removeRenditionCallback;\n }\n set onremoverendition(callback) {\n if (this.#removeRenditionCallback) {\n this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n this.#removeRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeRenditionCallback = callback;\n this.addEventListener(\"removerendition\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n VideoRenditionList,\n addRendition,\n removeRendition,\n selectedChanged\n};\n", "import { selectedChanged } from \"./video-rendition-list.js\";\nclass VideoRendition {\n src;\n id;\n width;\n height;\n bitrate;\n frameRate;\n codec;\n #selected = false;\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n selectedChanged(this);\n }\n}\nexport {\n VideoRendition\n};\n", "import { selectedChanged } from \"./video-track-list.js\";\nimport { VideoRendition } from \"./video-rendition.js\";\nimport { addRendition, removeRendition } from \"./video-rendition-list.js\";\nconst VideoTrackKind = {\n alternative: \"alternative\",\n captions: \"captions\",\n main: \"main\",\n sign: \"sign\",\n subtitles: \"subtitles\",\n commentary: \"commentary\"\n};\nclass VideoTrack {\n id;\n kind;\n label = \"\";\n language = \"\";\n sourceBuffer;\n #selected = false;\n addRendition(src, width, height, codec, bitrate, frameRate) {\n const rendition = new VideoRendition();\n rendition.src = src;\n rendition.width = width;\n rendition.height = height;\n rendition.frameRate = frameRate;\n rendition.bitrate = bitrate;\n rendition.codec = codec;\n addRendition(this, rendition);\n return rendition;\n }\n removeRendition(rendition) {\n removeRendition(rendition);\n }\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n if (val !== true)\n return;\n selectedChanged(this);\n }\n}\nexport {\n VideoTrack,\n VideoTrackKind\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n const renditionList = getPrivate(track).media.audioRenditions;\n getPrivate(rendition).media = getPrivate(track).media;\n getPrivate(rendition).track = track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.add(rendition);\n const index = renditionSet.size - 1;\n if (!(index in AudioRenditionList.prototype)) {\n Object.defineProperty(AudioRenditionList.prototype, index, {\n get() {\n return getCurrentRenditions(this)[index];\n }\n });\n }\n queueMicrotask(() => {\n if (!track.enabled)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n });\n}\nfunction removeRendition(rendition) {\n const renditionList = getPrivate(rendition).media.audioRenditions;\n const track = getPrivate(rendition).track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.delete(rendition);\n queueMicrotask(() => {\n const track2 = getPrivate(rendition).track;\n if (!track2.enabled)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n });\n}\nfunction selectedChanged(rendition) {\n const renditionList = getPrivate(rendition).media.audioRenditions;\n if (!renditionList || getPrivate(renditionList).changeRequested)\n return;\n getPrivate(renditionList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(renditionList).changeRequested;\n const track = getPrivate(rendition).track;\n if (!track.enabled)\n return;\n renditionList.dispatchEvent(new Event(\"change\"));\n });\n}\nfunction getCurrentRenditions(renditionList) {\n const media = getPrivate(renditionList).media;\n return [...media.audioTracks].filter((track) => track.enabled).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass AudioRenditionList extends EventTarget {\n #addRenditionCallback;\n #removeRenditionCallback;\n #changeCallback;\n [Symbol.iterator]() {\n return getCurrentRenditions(this).values();\n }\n get length() {\n return getCurrentRenditions(this).length;\n }\n getRenditionById(id) {\n return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n }\n get selectedIndex() {\n return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n }\n set selectedIndex(index) {\n for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n rendition.selected = i === index;\n }\n }\n get onaddrendition() {\n return this.#addRenditionCallback;\n }\n set onaddrendition(callback) {\n if (this.#addRenditionCallback) {\n this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n this.#addRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addRenditionCallback = callback;\n this.addEventListener(\"addrendition\", callback);\n }\n }\n get onremoverendition() {\n return this.#removeRenditionCallback;\n }\n set onremoverendition(callback) {\n if (this.#removeRenditionCallback) {\n this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n this.#removeRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeRenditionCallback = callback;\n this.addEventListener(\"removerendition\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n AudioRenditionList,\n addRendition,\n removeRendition,\n selectedChanged\n};\n", "import { selectedChanged } from \"./audio-rendition-list.js\";\nclass AudioRendition {\n src;\n id;\n bitrate;\n codec;\n #selected = false;\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n selectedChanged(this);\n }\n}\nexport {\n AudioRendition\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addAudioTrack(media, track) {\n const trackList = media.audioTracks;\n getPrivate(track).media = media;\n if (!getPrivate(track).renditionSet) {\n getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n }\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.add(track);\n const index = trackSet.size - 1;\n if (!(index in AudioTrackList.prototype)) {\n Object.defineProperty(AudioTrackList.prototype, index, {\n get() {\n return [...getPrivate(this).trackSet][index];\n }\n });\n }\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n });\n}\nfunction removeAudioTrack(track) {\n const trackList = getPrivate(track).media?.audioTracks;\n if (!trackList)\n return;\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.delete(track);\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n });\n}\nfunction enabledChanged(track) {\n const trackList = getPrivate(track).media.audioTracks;\n if (!trackList || getPrivate(trackList).changeRequested)\n return;\n getPrivate(trackList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(trackList).changeRequested;\n trackList.dispatchEvent(new Event(\"change\"));\n });\n}\nclass AudioTrackList extends EventTarget {\n #addTrackCallback;\n #removeTrackCallback;\n #changeCallback;\n constructor() {\n super();\n getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n }\n get #tracks() {\n return getPrivate(this).trackSet;\n }\n [Symbol.iterator]() {\n return this.#tracks.values();\n }\n get length() {\n return this.#tracks.size;\n }\n getTrackById(id) {\n return [...this.#tracks].find((track) => track.id === id) ?? null;\n }\n get onaddtrack() {\n return this.#addTrackCallback;\n }\n set onaddtrack(callback) {\n if (this.#addTrackCallback) {\n this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n this.#addTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addTrackCallback = callback;\n this.addEventListener(\"addtrack\", callback);\n }\n }\n get onremovetrack() {\n return this.#removeTrackCallback;\n }\n set onremovetrack(callback) {\n if (this.#removeTrackCallback) {\n this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n this.#removeTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeTrackCallback = callback;\n this.addEventListener(\"removetrack\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n AudioTrackList,\n addAudioTrack,\n enabledChanged,\n removeAudioTrack\n};\n", "import { AudioRendition } from \"./audio-rendition.js\";\nimport { enabledChanged } from \"./audio-track-list.js\";\nimport { addRendition, removeRendition } from \"./audio-rendition-list.js\";\nconst AudioTrackKind = {\n alternative: \"alternative\",\n descriptions: \"descriptions\",\n main: \"main\",\n \"main-desc\": \"main-desc\",\n translation: \"translation\",\n commentary: \"commentary\"\n};\nclass AudioTrack {\n id;\n kind;\n label = \"\";\n language = \"\";\n sourceBuffer;\n #enabled = false;\n addRendition(src, codec, bitrate) {\n const rendition = new AudioRendition();\n rendition.src = src;\n rendition.codec = codec;\n rendition.bitrate = bitrate;\n addRendition(this, rendition);\n return rendition;\n }\n removeRendition(rendition) {\n removeRendition(rendition);\n }\n get enabled() {\n return this.#enabled;\n }\n set enabled(val) {\n if (this.#enabled === val)\n return;\n this.#enabled = val;\n enabledChanged(this);\n }\n}\nexport {\n AudioTrack,\n AudioTrackKind\n};\n", "import { VideoTrack } from \"./video-track.js\";\nimport { VideoTrackList, addVideoTrack, removeVideoTrack } from \"./video-track-list.js\";\nimport { AudioTrack } from \"./audio-track.js\";\nimport { AudioTrackList, addAudioTrack, removeAudioTrack } from \"./audio-track-list.js\";\nimport { VideoRenditionList } from \"./video-rendition-list.js\";\nimport { AudioRenditionList } from \"./audio-rendition-list.js\";\nimport { getPrivate } from \"./utils.js\";\nconst nativeVideoTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"video\");\nconst nativeAudioTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"audio\");\nfunction MediaTracksMixin(MediaElementClass) {\n if (!MediaElementClass?.prototype)\n return MediaElementClass;\n const videoTracksFn = getBaseMediaTracksFn(MediaElementClass, \"video\");\n if (!videoTracksFn || `${videoTracksFn}`.includes(\"[native code]\")) {\n Object.defineProperty(MediaElementClass.prototype, \"videoTracks\", {\n get() {\n return getVideoTracks(this);\n }\n });\n }\n const audioTracksFn = getBaseMediaTracksFn(MediaElementClass, \"audio\");\n if (!audioTracksFn || `${audioTracksFn}`.includes(\"[native code]\")) {\n Object.defineProperty(MediaElementClass.prototype, \"audioTracks\", {\n get() {\n return getAudioTracks(this);\n }\n });\n }\n if (!(\"addVideoTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.addVideoTrack = function(kind, label = \"\", language = \"\") {\n const track = new VideoTrack();\n track.kind = kind;\n track.label = label;\n track.language = language;\n addVideoTrack(this, track);\n return track;\n };\n }\n if (!(\"removeVideoTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.removeVideoTrack = removeVideoTrack;\n }\n if (!(\"addAudioTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.addAudioTrack = function(kind, label = \"\", language = \"\") {\n const track = new AudioTrack();\n track.kind = kind;\n track.label = label;\n track.language = language;\n addAudioTrack(this, track);\n return track;\n };\n }\n if (!(\"removeAudioTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.removeAudioTrack = removeAudioTrack;\n }\n if (!(\"videoRenditions\" in MediaElementClass.prototype)) {\n Object.defineProperty(MediaElementClass.prototype, \"videoRenditions\", {\n get() {\n return initVideoRenditions(this);\n }\n });\n }\n const initVideoRenditions = (media) => {\n let renditions = getPrivate(media).videoRenditions;\n if (!renditions) {\n renditions = new VideoRenditionList();\n getPrivate(renditions).media = media;\n getPrivate(media).videoRenditions = renditions;\n }\n return renditions;\n };\n if (!(\"audioRenditions\" in MediaElementClass.prototype)) {\n Object.defineProperty(MediaElementClass.prototype, \"audioRenditions\", {\n get() {\n return initAudioRenditions(this);\n }\n });\n }\n const initAudioRenditions = (media) => {\n let renditions = getPrivate(media).audioRenditions;\n if (!renditions) {\n renditions = new AudioRenditionList();\n getPrivate(renditions).media = media;\n getPrivate(media).audioRenditions = renditions;\n }\n return renditions;\n };\n return MediaElementClass;\n}\nfunction getBaseMediaTracksFn(MediaElementClass, type) {\n if (MediaElementClass?.prototype) {\n return Object.getOwnPropertyDescriptor(MediaElementClass.prototype, `${type}Tracks`)?.get;\n }\n}\nfunction getVideoTracks(media) {\n let tracks = getPrivate(media).videoTracks;\n if (!tracks) {\n tracks = new VideoTrackList();\n getPrivate(media).videoTracks = tracks;\n if (nativeVideoTracksFn) {\n const nativeTracks = nativeVideoTracksFn.call(media.nativeEl ?? media);\n for (const nativeTrack of nativeTracks) {\n addVideoTrack(media, nativeTrack);\n }\n nativeTracks.addEventListener(\"change\", () => {\n tracks.dispatchEvent(new Event(\"change\"));\n });\n nativeTracks.addEventListener(\"addtrack\", (event) => {\n if ([...tracks].some((t) => t instanceof VideoTrack)) {\n for (const nativeTrack of nativeTracks) {\n removeVideoTrack(nativeTrack);\n }\n return;\n }\n addVideoTrack(media, event.track);\n });\n nativeTracks.addEventListener(\"removetrack\", (event) => {\n removeVideoTrack(event.track);\n });\n }\n }\n return tracks;\n}\nfunction getAudioTracks(media) {\n let tracks = getPrivate(media).audioTracks;\n if (!tracks) {\n tracks = new AudioTrackList();\n getPrivate(media).audioTracks = tracks;\n if (nativeAudioTracksFn) {\n const nativeTracks = nativeAudioTracksFn.call(media.nativeEl ?? media);\n for (const nativeTrack of nativeTracks) {\n addAudioTrack(media, nativeTrack);\n }\n nativeTracks.addEventListener(\"change\", () => {\n tracks.dispatchEvent(new Event(\"change\"));\n });\n nativeTracks.addEventListener(\"addtrack\", (event) => {\n if ([...tracks].some((t) => t instanceof AudioTrack)) {\n for (const nativeTrack of nativeTracks) {\n removeAudioTrack(nativeTrack);\n }\n return;\n }\n addAudioTrack(media, event.track);\n });\n nativeTracks.addEventListener(\"removetrack\", (event) => {\n removeAudioTrack(event.track);\n });\n }\n }\n return tracks;\n}\nexport {\n MediaTracksMixin\n};\n"],
5
- "mappings": "ihCAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,gBAAAE,EAAA,4CAAAC,GAAA,YAAAC,KAAA,eAAAC,GAAAL,ICEA,IAAMM,GAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAe,CAC3B,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,EAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,GAAN,cAA0BH,EAAY,CAAC,EACjCI,GAAN,cAA+BJ,EAAY,CAAC,EAEtCK,GAAwC,CAC5C,IAAIC,EAAe,CAEnB,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,QAAQC,EAAO,CAAC,EAChB,YAAYH,EAAO,CACjB,OAAO,QAAQ,QAAQH,EAAkD,CAC3E,CACF,EA7BAO,GA+BMC,GAAN,KAAkB,CAKhB,YAAYC,EAAiBC,EAAiC,CAAC,EAAG,CAJlEC,EAAA,KAAAJ,GAAA,QAMEK,EAAA,KAAKL,GAAUG,GAAA,YAAAA,EAAe,OAChC,CANA,IAAI,QAAS,CACX,OAAOG,EAAA,KAAKN,GACd,CAKA,iBAAkB,CAAC,CACrB,EATEA,GAAA,YAWF,SAASO,GAAcC,EAAkBV,EAAgD,CACvF,OAAO,IAAIL,EACb,CAEA,IAAMgB,GAAiB,CACrB,SAAU,CACR,cAAAF,EACF,EACA,iBACA,eAAAZ,GACA,YAAAM,GACA,YAAAX,GACA,YAAAG,GACA,iBAAAC,EACF,EAOMgB,GAAW,OAAO,QAAW,aAAe,OAAO,WAAW,gBAAmB,YAEjFC,GAAkCD,GAAWD,GAAiB,WAC9DG,GAA8BF,GAAWD,GAAe,SAAW,WAAW,SDlEpF,IAAAI,EA4BO,8BEzBP,IAAMC,GAAsB,IAAM,CAChC,GAAI,CAEF,MAAO,QACT,MAAQ,CAAC,CACT,MAAO,SACT,EAEMC,GAAyBD,GAAoB,EAEtCE,GAAmB,IAAMD,GCH/B,IAAME,GAAS,CACpB,QACA,UACA,iBACA,iBACA,UACA,YACA,QACA,QACA,aACA,iBACA,YACA,QACA,OACA,UACA,WACA,aACA,SACA,UACA,UACA,UACA,aACA,eACA,UACA,gBACA,SACA,wBACA,wBACA,wBACA,sBACA,+BACF,EAEA,SAASC,GAAqBC,EAAO,CACnC,MAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAcHC,GAAoBD,CAAK,CAAC;AAAA;AAAA;AAAA,GAIxC,CAKA,SAASE,GAAqBF,EAAO,CACnC,MAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAsBHC,GAAoBD,CAAK,CAAC;AAAA;AAAA;AAAA,GAIxC,CAKO,IAAMG,GAAmB,CAACC,EAAY,CAAE,IAAAC,EAAK,GAAAC,CAAG,IAAM,CApG7D,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,EAAAC,EAAAC,GAAAC,EAAAC,GAAAC,EAAAC,GAAAC,EAAAC,GAuGE,IAAMC,GAAehB,GAAAD,EAAA,WAAW,WAAX,YAAAA,EAAqB,gBAArB,YAAAC,EAAA,KAAAD,EAAqCF,EAAK,CAAE,GAAAC,CAAG,GAC9DmB,EAAgBD,EAAeE,GAAiBF,CAAY,EAAI,CAAC,EAEvE,OAAOf,EAAA,cAA0BL,CAAW,CA0G1C,aAAc,CACZ,MAAM,EA4CRuB,EAAA,KAAAX,GAoDAW,EAAA,KAAAT,GAoCAS,EAAA,KAAAP,GAkBAO,EAAA,KAAAL,GA3JAK,EAAA,KAAAd,GAAA,QACAc,EAAA,KAAAb,EAAA,QACAa,EAAA,KAAAZ,EAAY,IAAI,IAShB,CA3GA,WAAW,oBAAqB,CAhHpC,IAAAR,EAAAC,EAAAC,EAiHM,OAAAmB,EAAArB,EAAAE,EAAYE,EAAAC,IAAZ,KAAAL,GAKO,CACL,IAHeE,GAAAD,EAAAgB,GAAA,YAAAA,EAAc,cAAd,YAAAhB,EAA2B,qBAA3B,KAAAC,EAAiD,CAAC,EAIjE,uBACA,0BACA,wBACA,WACA,WACA,eACA,cACA,OACA,QACA,cACA,SACA,UACA,KACF,CACF,CAuFA,IAAI,UAAW,CA7NnB,IAAAF,EAAAC,EAAAC,EA8NM,OAAAmB,EAAA,KAAKZ,EAAAC,IAAL,YACOR,GAAAD,GAAAD,EAAAsB,EAAA,KAAKf,KAAL,KAAAP,EACF,KAAK,WAAW,cAAcF,CAAG,IAD/B,KAAAG,EAEF,KAAK,cAAc,uBAAuB,IAFxC,KAAAC,EAGF,KAAK,cAAcJ,CAAG,CAC7B,CAEA,IAAI,SAASyB,EAAK,CAChBC,EAAA,KAAKjB,EAAYgB,EACnB,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,aAAa,OAAO,CAClC,CAEA,IAAI,aAAaA,EAAK,CACpB,KAAK,gBAAgB,QAAS,EAAQA,CAAI,CAC5C,CAEA,IAAI,KAAM,CACR,OAAO,KAAK,aAAa,KAAK,CAChC,CAEA,IAAI,IAAIA,EAAK,CACX,KAAK,aAAa,MAAO,GAAGA,CAAG,EAAE,CACnC,CAEA,IAAI,SAAU,CAzPlB,IAAAvB,EAAAC,EA0PM,OAAOA,EAAA,KAAK,aAAa,SAAS,IAA3B,KAAAA,GAAgCD,EAAA,KAAK,WAAL,YAAAA,EAAe,OACxD,CAEA,IAAI,QAAQuB,EAAK,CACf,KAAK,aAAa,UAAW,GAAGA,CAAG,EAAE,CACvC,CAQA,MAAO,CAvQX,IAAAvB,EAAAC,EAwQM,GAAI,CAAC,KAAK,WAAY,CACpB,KAAK,aAAa,CAAE,KAAM,MAAO,CAAC,EAElC,IAAMR,EAAQgC,GAAqB,KAAK,UAAU,EAC9C1B,IAAIN,EAAM,GAAKM,GACfD,IAAKL,EAAM,KAAOK,GACtB,KAAK,WAAW,UAAY,KAAK,YAAY,gBAAgBL,CAAK,CACpE,CAKA,KAAK,SAAS,MAAQ,KAAK,aAAa,OAAO,EAE/C,QAASiC,KAAQR,EACfG,EAAA,KAAKR,EAAAC,IAAL,UAAsBY,GAGxB,KAAK,WAAW,iBAAiB,aAAc,IAAI,EACnDL,EAAA,KAAKV,EAAAC,IAAL,WAEA,QAASe,KAAQ,KAAK,YAAY,QAChC1B,GAAAD,EAAA,KAAK,YAAW,mBAAhB,MAAAC,EAAA,KAAAD,EAAmC2B,EAAM,KAAM,GAEnD,CAEA,YAAYC,EAAO,CAEjB,GAAIA,EAAM,OAAS,aAAc,CAC/BP,EAAA,KAAKV,EAAAC,IAAL,WACA,MACF,CAEIgB,EAAM,SAAW,KAAK,UAGxB,KAAK,cAAc,IAAI,YAAYA,EAAM,KAAM,CAAE,OAAQA,EAAM,MAAO,CAAC,CAAC,CAE5E,CAuDA,yBAAyBC,EAAUC,EAAUC,EAAU,CAErDV,EAAA,KAAKZ,EAAAC,IAAL,WACAW,EAAA,KAAKN,EAAAC,IAAL,UAAuBa,EAAUC,EAAUC,EAC7C,CAyBA,mBAAoB,CAClBV,EAAA,KAAKZ,EAAAC,IAAL,UACF,CACF,EAvRSP,EAAA,YA0BAC,EAAA,YAAAC,GAAO,UAAG,CACf,GAAIiB,EAAA,KAAKnB,GAAY,OACrBqB,EAAA,KAAKrB,EAAa,IAElB,IAAM6B,EAAe,IAAI,IAAI,KAAK,kBAAkB,EAEpDA,EAAa,OAAO,OAAO,EAG3B,QAASN,KAAQR,EAAe,CAC9B,GAAIQ,KAAQ,KAAK,UAAW,SAG5B,GADa,OAAOT,EAAaS,CAAI,GACzB,WAEV,KAAK,UAAUA,CAAI,EAAI,YAAaO,EAAM,CACxC,OAAAZ,EAAA,KAAKZ,EAAAC,IAAL,WAGM,KAAK,KAAa,KAAK,KAAKgB,EAAM,GAAGO,CAAI,EACtC,KAAK,SAASP,CAAI,EAAE,MAAM,KAAK,SAAUO,CAAI,CAIxD,MACK,CAIL,IAAIC,EAAS,CACX,KAAM,CAtKlB,IAAAlC,EAAAC,GAAAC,GAuKcmB,EAAA,KAAKZ,EAAAC,IAAL,WAEA,IAAIyB,EAAOT,EAAK,YAAY,EAC5B,GAAIM,EAAa,IAAIG,CAAI,EAAG,CAC1B,IAAMZ,GAAM,KAAK,aAAaY,CAAI,EAClC,OAAOZ,KAAQ,KAAO,GAAQA,KAAQ,GAAK,GAAOA,EACpD,CAEA,OAAOrB,IAAAF,EAAA,KAAK,MAAL,YAAAA,EAAA,UAAW0B,KAAX,KAAAxB,IAAoBD,GAAA,KAAK,WAAL,YAAAA,GAAgByB,EAC7C,CACF,EAEIA,IAASA,EAAK,YAAY,IAE5BQ,EAAO,IAAM,SAAUX,EAAK,CAC1BF,EAAA,KAAKZ,EAAAC,IAAL,WAEA,IAAIyB,EAAOT,EAAK,YAAY,EAC5B,GAAIM,EAAa,IAAIG,CAAI,EAAG,CACtBZ,IAAQ,IAAQA,IAAQ,IAASA,GAAO,KAC1C,KAAK,gBAAgBY,EAAM,EAAQZ,CAAI,EAEvC,KAAK,aAAaY,EAAMZ,CAAG,EAE7B,MACF,CAEA,GAAI,KAAK,IAAK,CACZ,KAAK,IAAIG,EAAMH,CAAG,EAClB,MACF,CAEA,KAAK,SAASG,CAAI,EAAIH,CACxB,GAGF,OAAO,eAAe,KAAK,UAAWG,EAAMQ,CAAM,CACpD,CACF,CACF,EAEA5B,GAAA,YACAC,EAAA,YACAC,EAAA,YA+CAC,EAAA,YAAAC,GAAK,UAAG,CACFY,EAAA,KAAKhB,MACTkB,EAAA,KAAKlB,GAAU,IACf,KAAK,KAAK,EACZ,EAgDAK,EAAA,YAAAC,GAAkB,UAAG,CACnB,IAAMwB,EAAuB,IAAI,IAAId,EAAA,KAAKd,EAAS,EAEnD,KAAK,WAAW,cAAc,kBAAkB,EAC7C,iBAAiB,CAAE,QAAS,EAAK,CAAC,EAClC,OAAQ6B,GAAO,CAAC,QAAS,QAAQ,EAAE,SAASA,EAAG,SAAS,CAAC,EACzD,QAASA,GAAO,CA3TzB,IAAArC,EAAAC,EA6TUmC,EAAqB,OAAOC,CAAE,EAE9B,IAAIC,EAAQhB,EAAA,KAAKd,GAAU,IAAI6B,CAAE,EAC5BC,IACHA,EAAQD,EAAG,UAAU,EACrBf,EAAA,KAAKd,GAAU,IAAI6B,EAAIC,CAAK,IAE9BrC,GAAAD,EAAA,KAAK,UAAS,SAAd,MAAAC,EAAA,KAAAD,EAAuBsC,GASrBA,EAAM,YAAc,SACpBA,EAAM,UACLA,EAAM,OAAS,YAAcA,EAAM,OAAS,aAC7CA,EAAM,MAAM,OAAS,aAErBA,EAAM,MAAM,KAAO,SAEvB,CAAC,EAEHF,EAAqB,QAASC,GAAOA,EAAG,OAAO,CAAC,CAClD,EAEAxB,EAAA,YAAAC,GAAgB,SAACY,EAAM,CAGrB,GAAI,OAAO,UAAU,eAAe,KAAK,KAAMA,CAAI,EAAG,CACpD,IAAMa,EAAQ,KAAKb,CAAI,EAEvB,OAAO,KAAKA,CAAI,EAEhB,KAAKA,CAAI,EAAIa,CACf,CACF,EAQAxB,EAAA,YAAAC,GAAiB,SAACa,EAAUC,EAAUC,EAAU,CA3WpD,IAAA/B,EAAAC,EAAAC,EAAAsC,GAAAC,GAAAC,GA6WU,CAAC,KAAM,OAAO,EAAE,SAASb,CAAQ,GAMjC,CAAC3B,EAAY,mBAAmB,SAAS2B,CAAQ,GAChD,KAAK,YAAY,mBAAmB,SAASA,CAAQ,IAKtDE,IAAa,MACf9B,GAAAD,EAAA,KAAK,UAAS,kBAAd,MAAAC,EAAA,KAAAD,EAAgC6B,KAE5BW,IAAAtC,EAAA,KAAK,UAAS,eAAd,YAAAsC,GAAA,KAAAtC,EAA6B2B,KAAaE,KAC5CW,IAAAD,GAAA,KAAK,UAAS,eAAd,MAAAC,GAAA,KAAAD,GAA6BZ,EAAUE,IAG7C,EAxPAX,EA9BKlB,EA8BEE,GA7BPuC,EADKzC,EACE,kBAAkBJ,EAAI,SAAS,OAAO,EAAIN,GAAuBG,IACxEgD,EAFKzC,EAEE,oBAAoB,CAAE,KAAM,MAAO,GAC1CyC,EAHKzC,EAGE,SAASX,IAChB6B,EAJKlB,EAIEC,EAAP,QAJKD,CA4RT,EAEA,SAASiB,GAAiBF,EAAc,CAMtC,IAAIC,EAAgB,CAAC,EAKrB,QACM0B,EAAQ,OAAO,eAAe3B,CAAY,EAC9C2B,GAASA,IAAU,YAAY,UAC/BA,EAAQ,OAAO,eAAeA,CAAK,EAEnC1B,EAAc,KAAK,GAAG,OAAO,oBAAoB0B,CAAK,CAAC,EAGzD,OAAO1B,CACT,CAEA,SAASxB,GAAoBD,EAAO,CAClC,IAAIoD,EAAO,GACX,QAAWC,KAAOrD,EAAO,CACvB,IAAM8C,EAAQ9C,EAAMqD,CAAG,EACnBP,IAAU,GAAIM,GAAQ,IAAIC,CAAG,GAC5BD,GAAQ,IAAIC,CAAG,KAAKP,CAAK,GAChC,CACA,OAAOM,CACT,CAEA,SAASpB,GAAqBsB,EAAc,CAC1C,IAAIC,EAAM,CAAC,EACX,QAASb,KAAQY,EACfC,EAAIb,EAAK,IAAI,EAAIA,EAAK,MAExB,OAAOa,CACT,CA9aA,IAAAhD,GAgbaiD,GAAqBrD,IAAiBI,GAAA,WAAW,cAAX,KAAAA,GAA0B,KAAM,CAAC,EAAG,CAAE,IAAK,OAAQ,CAAC,EAhbvGA,GAkbakD,GAAqBtD,IAAiBI,GAAA,WAAW,cAAX,KAAAA,GAA0B,KAAM,CAAC,EAAG,CAAE,IAAK,OAAQ,CAAC,EChbhG,IAAMmD,EAAe,IAAI,QAEnBC,GAAN,cAAgC,KAAM,CAAC,EACjCC,GAAN,cAAgC,KAAM,CAAC,EAIvC,IAAMC,GAAkB,WAAW,QACxC,cAAc,GAAI,CAChB,IAAIC,EAAI,CACN,MAAM,IAAI,IAAI,QAAQA,CAAE,CAAC,CAC3B,CACA,QAAQC,EAAI,CACV,MAAM,QAASC,GAAQ,CACrB,IAAMC,EAAQD,EAAI,MAAM,EACpBC,GAAOF,EAAGE,CAAK,CACrB,CAAC,CACH,CACF,EAAI,IAEC,SAASC,GAAmBC,EAAU,CAtB7C,IAAAC,EAAAC,EAAAC,GAuBOD,GAAAD,EAAA,WAAW,SAAX,YAAAA,EAAmB,OAAnB,MAAAC,EAAyB,aAUlBC,EAAA,WAAW,OAAX,MAAAA,EAAiB,UAK3BH,EAAS,EAJT,eACG,YAAY,oBAAoB,EAChC,KAAKA,CAAQ,EAZhB,WAAW,sBAAwB,IAAM,CAKvC,eACG,YAAY,oBAAoB,EAChC,KAAKA,CAAQ,CAClB,CAQJ,CAEO,SAASI,IAAwB,CAEtC,OAAO,WAAW,MACpB,CAEO,SAASC,IAAoB,CA/CpC,IAAAJ,EAgDE,IAAMK,EAAS,6EACf,IAAIL,EAAA,WAAW,SAAX,MAAAA,EAAmB,MAAQ,SAAS,cAAc,eAAeK,CAAM,IAAI,EAAG,OAElF,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9CA,EAAO,IAAMD,EACb,SAAS,KAAK,OAAOC,CAAM,CAC7B,CAEO,SAASC,GAAc,CAxD9B,IAAAP,EAAAC,EAyDE,OAAOA,GAAAD,EAAA,WAAW,OAAX,YAAAA,EAAiB,YAAjB,YAAAC,EAA4B,YAAY,aACjD,CAEO,SAASO,IAAiB,CA5DjC,IAAAR,EA6DE,OAAOA,EAAAO,EAAY,IAAZ,YAAAP,EAAe,mBACxB,CAEO,SAASS,IAAe,CAhE/B,IAAAT,EAiEE,OAAOA,EAAAQ,GAAe,IAAf,YAAAR,EAAkB,gBAAgB,MAAM,EACjD,CAEO,SAASU,GAAeC,EAAS,CACtC,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtCJ,GAAa,EAAE,eAAeE,EAASC,EAASC,CAAM,CACxD,CAAC,CACH,CAEO,SAASC,GAAeH,EAAS,CACtC,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtCJ,GAAa,EAAE,UAAUE,EAASC,EAASC,CAAM,CACnD,CAAC,CACH,CAEO,SAASE,GAAeC,EAAS,CACtC,OAAOT,EAAY,EAAE,WAAW,CAC9B,GAAGU,GAAsB,EACzB,GAAGD,CACL,CAAC,CACH,CAEO,SAASC,IAAwB,CACtC,MAAO,CAIL,sBAAuB,WAMvB,eAAgB,gBAIhB,0BAA2B,GAE3B,SAAU,QACV,mBAAoB,EACtB,CACF,CC5FA,IAAMC,GAAkB,IAAIC,GACtBC,EAAiB,IAAI,QAEvBC,EAEJC,GAAmB,IAAM,CApBzB,IAAAC,EAAAC,EAAAC,EAAAC,EAqBE,GAAI,GAACF,GAAAD,EAAA,WAAW,SAAX,YAAAA,EAAmB,OAAnB,MAAAC,EAAyB,aAAa,CAEzC,QAAQ,MAAM,2BAA2BE,GAAAD,EAAA,WAAW,SAAX,YAAAA,EAAmB,OAAnB,YAAAC,EAAyB,WAAW,EAC7E,MACF,CAEKL,IACHA,EAAK,KAAK,UAEVM,EAAY,EAAE,iBAAiBN,EAAG,qBAAqB,mBAAqBO,GAAM,CAChFV,GAAgB,QAASW,GAAG,CA/BlC,IAAAN,EAAAC,EA+BqC,OAAAA,GAAAD,EAAAO,EAAa,IAAID,CAAC,GAAE,qBAApB,YAAAL,EAAA,KAAAD,EAAyCK,GAAE,CAC5E,CAAC,EAEDD,EAAY,EAAE,iBAAiBN,EAAG,qBAAqB,sBAAwBO,GAAM,CACnFV,GAAgB,QAASW,GAAG,CAnClC,IAAAN,EAAAC,EAmCqC,OAAAA,GAAAD,EAAAO,EAAa,IAAID,CAAC,GAAE,wBAApB,YAAAL,EAAA,KAAAD,EAA4CK,GAAE,CAC/E,CAAC,EAEDV,GAAgB,QAASW,GAAG,CAtChC,IAAAN,EAAAC,EAsCmC,OAAAA,GAAAD,EAAAO,EAAa,IAAID,CAAC,GAAE,OAApB,YAAAL,EAAA,KAAAD,GAA4B,EAE/D,CAAC,EAGD,IAAIQ,GAAgC,EA3CpCC,EAAAC,GAAAC,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAiDaC,GAAN,cAA6B,WAAY,CAU9C,YAAYC,EAAO,CACjB,MAAM,EAeRC,EAAA,KAAIhB,GAyEJgB,EAAA,KAAAd,IAiBAc,EAAA,KAAAZ,IAsBAY,EAAA,KAAMV,IAwCNU,EAAA,KAAAR,IA8EAQ,EAAA,KAAAN,IAIAM,EAAA,KAAMJ,IAnQNI,EAAA,KAAAxB,EAAA,QACAwB,EAAA,KAAAvB,GAAA,QACAuB,EAAA,KAAAtB,EAAA,QACAsB,EAAA,KAAArB,EAAA,QACAqB,EAAA,KAAApB,GAAS,gBACToB,EAAA,KAAAnB,GAAa,IACbmB,EAAA,KAAAlB,EAAa,IAAI,KACjBkB,EAAA,KAAAjB,GAAe,IAAI,SAKjBkB,EAAA,KAAKzB,EAASuB,GAEdrC,GAAgB,IAAI,IAAI,EACxBY,EAAa,IAAI,KAAM,CACrB,KAAM,IAAM4B,EAAA,KAAKV,GAAAC,IAAL,WACZ,mBAAoB,IAAMS,EAAA,KAAKd,GAAAC,IAAL,WAC1B,sBAAuB,IAAMa,EAAA,KAAKZ,GAAAC,IAAL,WAC7B,cAAe,IAAMY,EAAA,KAAKnB,EAAAC,GAC5B,CAAC,EAEDiB,EAAA,KAAKV,GAAAC,IAAL,UACF,CAWA,IAAI,OAAQ,CACV,OAAOU,EAAA,KAAKvB,GACd,CAEA,MAAM,kBAAkBwB,EAAU,CAChC,GAAID,EAAA,KAAK3B,GAAO,sBACd,MAAM,IAAI6B,GAAkB,6CAA6C,EAG3E,OAAAF,EAAA,KAAKpB,IAAa,IAAIqB,EAAU,EAAE7B,EAA6B,EAC/D4B,EAAA,KAAKrB,GAAW,IAAIsB,CAAQ,EAErB7B,EACT,CAEA,MAAM,wBAAwB6B,EAAU,CACtC,GAAID,EAAA,KAAK3B,GAAO,sBACd,MAAM,IAAI6B,GAAkB,6CAA6C,EAGvED,EACFD,EAAA,KAAKrB,GAAW,OAAOsB,CAAQ,EAE/BD,EAAA,KAAKrB,GAAW,MAAM,CAE1B,CAEA,MAAM,QAAS,CA/GjB,IAAAf,EAAAC,EAAAC,EAAAC,EAgHI,GAAIiC,EAAA,KAAK3B,GAAO,sBACd,MAAM,IAAI6B,GAAkB,6CAA6C,EAG3E,GAAI,GAACrC,GAAAD,EAAA,WAAW,SAAX,YAAAA,EAAmB,OAAnB,MAAAC,EAAyB,aAC5B,MAAM,IAAIsC,GAAkB,sDAAsD,EAGpF,IAAMC,EAAiB3C,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,EACrDZ,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,EAE9BgC,GAAeL,EAAA,KAAK3B,GAAO,WAAW,EAEtC,OAAO,QAAQ2B,EAAA,KAAKxB,EAAgB,EAAE,QAAQ,CAAC,CAAC8B,EAAOC,CAAQ,IAAM,CACnEP,EAAA,KAAKzB,GAAc,WAAW,iBAAiB+B,EAAOC,CAAQ,CAChE,CAAC,EAED,GAAI,CAEF,MAAMvC,EAAY,EAAE,eAAe,CACrC,OAASwC,EAAK,CAEZ,GAAIA,IAAQ,SAAU,CAEfJ,GACH3C,EAAe,OAAOuC,EAAA,KAAK3B,EAAM,EAEnC,MACF,CAEA,MAAM,IAAI,MAAMmC,CAAG,CACrB,EAEAzC,GAAAD,EAAAK,EAAa,IAAI6B,EAAA,KAAK3B,EAAM,IAA5B,YAAAP,EAA+B,eAA/B,MAAAC,EAAA,KAAAD,EACF,CAoOF,EApUEO,EAAA,YACAC,GAAA,YACAC,EAAA,YACAC,EAAA,YACAC,GAAA,YACAC,GAAA,YACAC,EAAA,YACAC,GAAA,YAkBIC,EAAA,YAAAC,GAAW,UAAG,CAChB,GAAIrB,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,EAAG,OAAO2B,EAAA,KAAKzB,EAEnD,EAsEAQ,GAAA,YAAAC,GAAW,UAAG,CACPvB,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,IAEnC,OAAO,QAAQ2B,EAAA,KAAKxB,EAAgB,EAAE,QAAQ,CAAC,CAAC8B,EAAOC,CAAQ,IAAM,CACnEP,EAAA,KAAKzB,GAAc,WAAW,oBAAoB+B,EAAOC,CAAQ,CACnE,CAAC,EAED9C,EAAe,OAAOuC,EAAA,KAAK3B,EAAM,EAGjC2B,EAAA,KAAK3B,GAAO,MAAQ2B,EAAA,KAAKzB,GAAc,QACvCyB,EAAA,KAAK3B,GAAO,YAAc2B,EAAA,KAAKzB,GAAc,iBAAiB,YAC1DyB,EAAA,KAAKzB,GAAc,iBAAiB,WAAa,IACnDyB,EAAA,KAAK3B,GAAO,KAAK,EAErB,EAEAY,GAAA,YAAAC,GAAmB,UAAG,CAGpB,IAAMuB,EAAYzC,EAAY,EAAE,aAAa,EAS7C,GAPIP,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,GAC5BoC,IAAc,eAChBX,EAAA,KAAKrB,GAAS,cACd,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC,GAI1C,CAACuB,EAAA,KAAKtB,MAAc+B,GAAA,MAAAA,EAAW,SAAS,YAAY,CACtDX,EAAA,KAAKpB,GAAa,IAClB,QAASuB,KAAYD,EAAA,KAAKrB,GAAYsB,EAAS,EAAI,CACrD,SACSD,EAAA,KAAKtB,MAAe,CAAC+B,GAAaA,IAAc,wBAAyB,CAChFX,EAAA,KAAKpB,GAAa,IAClB,QAASuB,KAAYD,EAAA,KAAKrB,GAAYsB,EAAS,EAAK,CACtD,CACF,EAEMd,GAAA,YAAAC,GAAsB,gBAAG,CA3LjC,IAAAxB,EAgMI,GAAM,CAAE,gBAAA8C,CAAgB,EAAIhD,EAAG,aAC/B,GAAIM,EAAY,EAAE,gBAAgB,IAAM0C,GASlCV,EAAA,KAAK3B,GAAO,YAAYT,EAAA+C,GAAa,IAAb,YAAA/C,EAAgB,MAAM,WAAW,CAC3DH,EAAe,IAAIuC,EAAA,KAAK3B,EAAM,EAE9B,OAAO,QAAQ2B,EAAA,KAAKxB,EAAgB,EAAE,QAAQ,CAAC,CAAC8B,EAAOC,CAAQ,IAAM,CACnEP,EAAA,KAAKzB,GAAc,WAAW,iBAAiB+B,EAAOC,CAAQ,CAChE,CAAC,EAOD,GAAI,CACF,MAAMK,GAAe,IAAI,OAAO,KAAK,MAAM,gBAAkB,CAC/D,OAASC,EAAO,CACd,QAAQ,MAAMA,CAAK,CACrB,CAGAb,EAAA,KAAKxB,GAAiBd,EAAG,sBAAsB,iBAAiB,EAAE,EAClEsC,EAAA,KAAKxB,GAAiBd,EAAG,sBAAsB,oBAAoB,EAAE,CACvE,CAEJ,EAEA2B,GAAA,YAAAC,GAAK,UAAG,CACF,CAAC5B,GAAMsC,EAAA,KAAK1B,MAChBwB,EAAA,KAAKxB,GAAU,IAEf+B,GAAeL,EAAA,KAAK3B,GAAO,WAAW,EAQtC2B,EAAA,KAAK3B,GAAO,WAAW,iBAAiB,SAAU,IAAM0B,EAAA,KAAKN,GAAAC,IAAL,UAA6B,EAErFK,EAAA,KAAKd,GAAAC,IAAL,WAEAY,EAAA,KAAKvB,EAAgB,IAAIb,EAAG,cAC5B,IAAIA,EAAG,uBAAuBsC,EAAA,KAAKzB,EAAa,EAEhDuB,EAAA,KAAKtB,EAAmB,CACtB,CAACd,EAAG,sBAAsB,oBAAoB,EAAG,CAAC,CAAE,MAAAoD,CAAM,IAAM,CAC1DA,IAAU,IACZhB,EAAA,KAAKrB,GAAS,aACd,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC,IAEvCsB,EAAA,KAAKhB,GAAAC,IAAL,WACAc,EAAA,KAAKrB,GAAS,gBACd,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC,EAE9C,EACA,CAACf,EAAG,sBAAsB,gBAAgB,EAAG,IAAM,CACjDsC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,gBAAgB,CAAC,CACvD,EACA,CAACX,EAAG,sBAAsB,oBAAoB,EAAG,IAAM,CACrDsC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,cAAc,CAAC,CACrD,EACA,CAACX,EAAG,sBAAsB,gBAAgB,EAAG,IAAM,CACjDsC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,cAAc,CAAC,CACrD,EACA,CAACX,EAAG,sBAAsB,oBAAoB,EAAG,IAAM,CA1Q7D,IAAAE,GA2QaA,EAAAoC,EAAA,KAAKnB,EAAAC,MAAL,MAAAlB,EAAkB,eACvBoC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,YAAY,CAAC,CACnD,EACA,CAACX,EAAG,sBAAsB,kBAAkB,EAAG,IAAM,CACnDsC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC/C,EACA,CAACX,EAAG,sBAAsB,iBAAiB,EAAG,IAAM,CAClDsC,EAAA,KAAK3B,GAAO,cAAc,IAAI,MAAM,KAAK,OAAS,QAAU,MAAM,CAAC,CACrE,EACA,CAACX,EAAG,sBAAsB,oBAAoB,EAAG,IAAM,CApR7D,IAAAE,EAAAC,IAyRYD,EAAAoC,EAAA,KAAKnB,EAAAC,MAAL,YAAAlB,EAAkB,eAAgB,OAAO,KAAK,MAAM,YAAY,QAIpEoC,EAAA,KAAK3B,GAAO,cACV,IAAI,MACF,CACE,CAAC,OAAO,KAAK,MAAM,YAAY,OAAO,EAAG,UACzC,CAAC,OAAO,KAAK,MAAM,YAAY,SAAS,EAAG,UAC3C,CAAC,OAAO,KAAK,MAAM,YAAY,IAAI,EAAG,SACxC,GAAER,EAAAmC,EAAA,KAAKnB,EAAAC,MAAL,YAAAjB,EAAkB,WAAW,CACjC,CACF,CACF,EACA,CAACH,EAAG,sBAAsB,uBAAuB,EAAG,SAAY,CAvStE,IAAAE,GAwSaA,EAAAoC,EAAA,KAAKnB,EAAAC,MAAL,MAAAlB,EAAkB,gBAGvB,MAAM,QAAQ,QAAQ,EACtBmC,EAAA,KAAKR,GAAAC,IAAL,WACF,CACF,GACF,EAEAD,GAAA,YAAAC,GAAoB,UAAG,CACrBO,EAAA,KAAKN,GAAAC,IAAL,UACF,EAEMD,GAAA,YAAAC,GAAsB,gBAAG,CArTjC,IAAA9B,EAAAC,EAAAC,EAAAC,GAAAgD,EAsTI,GAAI,CAACf,EAAA,KAAKnB,EAAAC,IAAa,OAIvB,IAAMkC,IADenD,GAAAD,EAAAoC,EAAA,KAAKzB,GAAc,YAAnB,YAAAX,EAA8B,SAA9B,KAAAC,EAAwC,CAAC,GACzB,OACnC,CAAC,CAAE,KAAAoD,CAAK,IAAMA,IAAS,OAAO,KAAK,MAAM,UAAU,IACrD,EAEMC,EAAiB,CAAC,GAAGlB,EAAA,KAAK3B,GAAO,UAAU,EAAE,OACjD,CAAC,CAAE,KAAA8C,CAAK,IAAMA,IAAS,aAAeA,IAAS,UACjD,EAGMC,EAAYJ,EACf,IAAI,CAAC,CAAE,SAAAK,EAAU,KAAAC,EAAM,QAAAC,CAAQ,IAAM,CApU5C,IAAA3D,EAsUQ,GAAM,CAAE,KAAA4D,CAAK,GACX5D,EAAAsD,EAAe,KACZO,IAAUA,GAAM,WAAaJ,GAAYI,GAAM,QAAUH,CAC5D,IAFA,KAAA1D,EAEK,CAAC,EACR,OAAI4D,EAAa,CAAE,KAAAA,EAAM,QAAAD,CAAQ,EAC1B,EACT,CAAC,EACA,OAAO,OAAO,EAKXG,EAHkBN,EAAU,OAChC,CAAC,CAAE,KAAAI,CAAK,IAAMA,IAAS,SACzB,EACuC,IAAI,CAAC,CAAE,QAAAD,CAAQ,IAAMA,CAAO,EAC7DI,EAAkBP,EAAU,KAAK,CAAC,CAAE,KAAAI,CAAK,IAAMA,IAAS,SAAS,EAGjEI,GACJb,GAAAhD,IAAAD,EAAA+D,GAAe,IAAf,YAAA/D,EAAkB,gBAAgB,MAAM,KAAxC,YAAAC,GACI,iBADJ,KAAAgD,EACsB,CAAC,EACrBe,EAAkBF,EAkBtB,GAhBIA,EAAe,SAEjBE,EAAkBA,EAAgB,OAC/BC,GAAO,CAACL,EAAe,SAASK,CAAE,CACrC,GAGEJ,GAAA,MAAAA,EAAiB,UACnBG,EAAkB,CAAC,GAAGA,EAAiBH,EAAgB,OAAO,GAIhEG,EAAkB,CAAC,GAAG,IAAI,IAAIA,CAAe,CAAC,EAI1C,EAFgB,CAACE,EAAGC,IACtBD,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAOA,GAAMC,EAAE,SAASD,CAAC,CAAC,GACtCJ,EAAgBE,CAAe,EAC9C,GAAI,CACF,IAAMI,EAAU,IAAI,OAAO,KAAK,MAAM,sBACpCJ,CACF,EACA,MAAMK,GAAeD,CAAO,CAC9B,OAASrB,EAAO,CACd,QAAQ,MAAMA,CAAK,CACrB,CAEJ,EClWK,IAAMuB,GAAsBC,GAAY,CAnB/C,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAoBE,OAAAP,EAAA,cAA4BF,CAAW,CAAvC,kCA8BEU,EAAA,KAAIJ,GAsBJI,EAAA,KAAMF,GA1CNE,EAAA,KAAAP,EAAc,CAAE,OAAQ,EAAM,GAC9BO,EAAA,KAAAN,EAAeO,GAAsB,GACrCD,EAAA,KAAAL,EAAA,QAEA,IAAI,QAAS,CACX,OAAIO,EAAA,KAAKP,GAAgBO,EAAA,KAAKP,GAE1BQ,GAAsB,GACxBC,GAAkB,EAElBC,EAAa,IAAI,KAAM,CACrB,aAAc,IAAMC,EAAA,KAAKR,EAAAC,IAAL,UACtB,CAAC,EAEOQ,EAAA,KAAKZ,EAAU,IAAIa,GAAe,IAAI,IAGzC,MAAM,MACf,CAMA,yBAAyBC,EAAUC,EAAUC,EAAU,CAGrD,GAFA,MAAM,yBAAyBF,EAAUC,EAAUC,CAAQ,EAEvDF,IAAa,iBAAmBE,EAAU,CAC5CT,EAAA,KAAKR,GAAa,sBAAwBiB,EAC1C,MACF,CAEA,GAAKT,EAAA,KAAKN,EAAAC,GAEV,OAAQY,EAAU,CAChB,IAAK,mBACL,IAAK,WACH,KAAK,KAAK,EACV,KACJ,CACF,CAiBA,MAAM,MAAO,CAvFjB,IAAAlB,EAAAC,EAwFM,GAAI,CAACU,EAAA,KAAKN,EAAAC,GAAa,OAAO,MAAM,KAAK,EAEzC,IAAMe,EAAY,IAAI,OAAO,KAAK,MAAM,UAAU,KAAK,QAAS,KAAK,eAAe,EAI9EC,EAAY,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAAE,OACpD,CAAC,CAAE,KAAAC,EAAM,IAAAC,CAAI,IAAMA,IAAQD,IAAS,aAAeA,IAAS,WAC9D,EAEME,EAAiB,CAAC,EACpBC,GAAmB,EAEnBJ,EAAU,SACZD,EAAU,OAASC,EAAU,IAAKK,GAAY,CAC5C,IAAMC,EAAU,EAAEF,GAEdD,EAAe,SAAW,GAAKE,EAAQ,MAAM,OAAS,WACxDF,EAAe,KAAKG,CAAO,EAG7B,IAAMC,EAAQ,IAAI,OAAO,KAAK,MAAM,MAClCD,EACA,OAAO,KAAK,MAAM,UAAU,IAC9B,EACA,OAAAC,EAAM,eAAiBF,EAAQ,IAC/BE,EAAM,iBAAmB,WACzBA,EAAM,QACJF,EAAQ,OAAS,WACb,OAAO,KAAK,MAAM,cAAc,SAChC,OAAO,KAAK,MAAM,cAAc,UACtCE,EAAM,KAAOF,EAAQ,MACrBE,EAAM,SAAWF,EAAQ,QAClBE,CACT,CAAC,GAGC,KAAK,iBAAmB,OAC1BR,EAAU,WAAa,OAAO,KAAK,MAAM,WAAW,KAEpDA,EAAU,WAAa,OAAO,KAAK,MAAM,WAAW,SAGtDA,EAAU,SAAW,IAAI,OAAO,KAAK,MAAM,qBAC3CA,EAAU,SAAS,MAAQ,KAAK,MAChCA,EAAU,SAAS,OAAS,CAAC,CAAE,IAAK,KAAK,MAAO,CAAC,EAEjD,IAAMS,EAAU,IAAI,OAAO,KAAK,MAAM,YAAYT,CAAS,EAC3DS,EAAQ,aAAc9B,EAAA,MAAM,cAAN,KAAAA,EAAqB,EAC3C8B,EAAQ,SAAW,CAACnB,EAAA,KAAKT,GAAY,OACrC4B,EAAQ,eAAiBL,EAEzB,OAAMxB,EAAA8B,GAAe,IAAf,YAAA9B,EAAkB,UAAU6B,IAElC,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC,CAC9C,CAEA,MAAO,CAjJX,IAAA9B,EAkJM,GAAIW,EAAA,KAAKN,EAAAC,GAAa,CAChBK,EAAA,KAAKN,EAAAC,GAAY,YACnBN,EAAAW,EAAA,KAAKN,EAAAC,GAAY,aAAjB,MAAAN,EAA6B,eAE/B,MACF,CACA,OAAO,MAAM,KAAK,CACpB,CAEA,OAAQ,CA3JZ,IAAAA,EA4JM,GAAIW,EAAA,KAAKN,EAAAC,GAAa,CACfK,EAAA,KAAKN,EAAAC,GAAY,WACpBN,EAAAW,EAAA,KAAKN,EAAAC,GAAY,aAAjB,MAAAN,EAA6B,cAE/B,MACF,CACA,MAAM,MAAM,CACd,CAeA,IAAI,aAAc,CAChB,OAAOW,EAAA,KAAKR,EACd,CAEA,IAAI,cAAe,CAtLvB,IAAAH,EAuLM,OAAOA,EAAA,KAAK,aAAa,eAAe,IAAjC,KAAAA,EAAsC,MAC/C,CAEA,IAAI,aAAagC,EAAK,CAChB,KAAK,cAAgBA,GACzB,KAAK,aAAa,gBAAiB,GAAGA,CAAG,EAAE,CAC7C,CAGA,IAAI,SAAU,CAhMlB,IAAAhC,EAAAC,EAAAgC,EAkMM,OACEA,GAAAhC,EAAA,KAAK,aAAa,UAAU,IAA5B,KAAAA,GACAD,EAAA,KAAK,cAAc,QAAQ,IAA3B,YAAAA,EAA8B,MAD9B,KAAAiC,EAEA,KAAK,UAET,CAEA,IAAI,QAAQD,EAAK,CACX,KAAK,SAAWA,GACpB,KAAK,aAAa,WAAY,GAAGA,CAAG,EAAE,CACxC,CAEA,IAAI,iBAAkB,CA9M1B,IAAAhC,EA+MM,OAAOA,EAAA,KAAK,aAAa,mBAAmB,IAArC,KAAAA,EAA0C,MACnD,CAEA,IAAI,gBAAgBgC,EAAK,CACvB,KAAK,aAAa,oBAAqB,GAAGA,CAAG,EAAE,CACjD,CAEA,IAAI,gBAAiB,CAtNzB,IAAAhC,EAAAC,EAwNM,OAAOA,GAAAD,EAAA,KAAK,aAAa,kBAAkB,IAApC,KAAAA,EAAyC,KAAK,aAA9C,KAAAC,EAA4D,MACrE,CAEA,IAAI,eAAe+B,EAAK,CACtB,KAAK,aAAa,mBAAoB,GAAGA,CAAG,EAAE,CAChD,CAEA,IAAI,YAAa,CACf,GAAIrB,EAAA,KAAKN,EAAAC,GACP,OAAQK,EAAA,KAAKN,EAAAC,GAAY,YAAa,CACpC,KAAK,OAAO,KAAK,MAAM,YAAY,KACjC,MAAO,GACT,KAAK,OAAO,KAAK,MAAM,YAAY,UACjC,MAAO,GACT,QACE,MAAO,EACX,CAEF,OAAO,MAAM,UACf,CAEA,IAAI,QAAS,CACX,OAAIK,EAAA,KAAKN,EAAAC,GAAoBK,EAAA,KAAKN,EAAAC,GAAY,SACvC,MAAM,MACf,CAEA,IAAI,OAAQ,CAlPhB,IAAAN,EAmPM,OAAIW,EAAA,KAAKN,EAAAC,IAAoBN,EAAAW,EAAA,KAAKN,EAAAC,KAAL,YAAAN,EAAkB,QACxC,MAAM,KACf,CAEA,IAAI,MAAMgC,EAAK,CAvPnB,IAAAhC,EAwPM,GAAIW,EAAA,KAAKN,EAAAC,GAAa,EAEjB0B,GAAO,CAACrB,EAAA,KAAKN,EAAAC,GAAY,SACzB,CAAC0B,GAAOrB,EAAA,KAAKN,EAAAC,GAAY,YAE1BN,EAAAW,EAAA,KAAKN,EAAAC,GAAY,aAAjB,MAAAN,EAA6B,gBAE/B,MACF,CACA,MAAM,MAAQgC,CAChB,CAEA,IAAI,QAAS,CApQjB,IAAAhC,EAAAC,EAqQM,OAAIU,EAAA,KAAKN,EAAAC,IAAoBL,GAAAD,EAAAW,EAAA,KAAKN,EAAAC,KAAL,YAAAN,EAAkB,cAAlB,KAAAC,EAAiC,EACvD,MAAM,MACf,CAEA,IAAI,OAAO+B,EAAK,CAzQpB,IAAAhC,EA0QM,GAAIW,EAAA,KAAKN,EAAAC,GAAa,CACpBK,EAAA,KAAKN,EAAAC,GAAY,YAAc,CAAC0B,GAChChC,EAAAW,EAAA,KAAKN,EAAAC,GAAY,aAAjB,MAAAN,EAA6B,iBAC7B,MACF,CACA,MAAM,OAASgC,CACjB,CAEA,IAAI,UAAW,CAlRnB,IAAAhC,EAAAC,EAAAgC,EAoRM,OAAItB,EAAA,KAAKN,EAAAC,MAAeN,EAAAW,EAAA,KAAKN,EAAAC,KAAL,MAAAN,EAAkB,gBACjCiC,GAAAhC,EAAAU,EAAA,KAAKN,EAAAC,KAAL,YAAAL,EAAkB,WAAlB,KAAAgC,EAA8B,IAEhC,MAAM,QACf,CAEA,IAAI,aAAc,CA1RtB,IAAAjC,EAAAC,EAAAgC,EA2RM,OAAItB,EAAA,KAAKN,EAAAC,MAAeN,EAAAW,EAAA,KAAKN,EAAAC,KAAL,MAAAN,EAAkB,gBACjCiC,GAAAhC,EAAAU,EAAA,KAAKN,EAAAC,KAAL,YAAAL,EAAkB,cAAlB,KAAAgC,EAAiC,EAEnC,MAAM,WACf,CAEA,IAAI,YAAYD,EAAK,CAjSzB,IAAAhC,EAkSM,GAAIW,EAAA,KAAKN,EAAAC,GAAa,CACpBK,EAAA,KAAKN,EAAAC,GAAY,YAAc0B,GAC/BhC,EAAAW,EAAA,KAAKN,EAAAC,GAAY,aAAjB,MAAAN,EAA6B,OAC7B,MACF,CACA,MAAM,YAAcgC,CACtB,CACF,EA3QE9B,EAAA,YACAC,EAAA,YACAC,EAAA,YAkBIC,EAAA,YAAAC,EAAW,UAAG,CAlDtB,IAAAN,EAAAC,EAmDM,OAAOA,GAAAD,EAAAc,EAAa,IAAI,KAAK,MAAM,IAA5B,YAAAd,EAA+B,gBAA/B,YAAAC,EAAA,KAAAD,EACT,EAoBMO,EAAA,YAAAC,GAAa,gBAAG,CAEpBG,EAAA,KAAKT,GAAY,OAASgC,GAAAjC,EAAA,eAAM,UAChCiC,GAAAjC,EAAA,eAAM,cAAN,IAAY,EAGZ,KAAK,MAAQiC,GAAAjC,EAAA,eAAM,SAEnB,GAAI,CACF,MAAM,KAAK,KAAK,CAClB,OAASkC,EAAK,CACZ,QAAQ,MAAMA,CAAG,CACnB,CACF,EA/DAC,EAFFnC,EAES,qBAAqB,CAC1B,IAAID,EAAAD,EAAW,qBAAX,KAAAC,EAAiC,CAAC,EACtC,WACA,oBACA,mBACA,eACF,GARFC,GCpBF,IAAMoC,EAAN,cAAyB,KAAM,CAE7B,YAAYC,EAAMC,EAAM,CACtB,MAAMD,CAAI,EAFZE,EAAA,cAGE,KAAK,MAAQD,EAAK,KACpB,CACF,ECNA,IAAME,GAA+B,IAAI,QACzC,SAASC,EAAWC,EAAU,CAD9B,IAAAC,EAEE,OAAOA,EAAAH,GAAa,IAAIE,CAAQ,IAAzB,KAAAC,EAA8BC,GAAWF,EAAU,CAAC,CAAC,CAC9D,CACA,SAASE,GAAWF,EAAUG,EAAO,CACnC,IAAIC,EAAQN,GAAa,IAAIE,CAAQ,EACrC,OAAKI,GACHN,GAAa,IAAIE,EAAUI,EAAQ,CAAC,CAAC,EAChC,OAAO,OAAOA,EAAOD,CAAK,CACnC,CCPA,SAASE,GAAcC,EAAOC,EAAO,CACnC,IAAMC,EAAYF,EAAM,YACxBG,EAAWF,CAAK,EAAE,MAAQD,EACrBG,EAAWF,CAAK,EAAE,eACrBE,EAAWF,CAAK,EAAE,aAA+B,IAAI,KAEvD,IAAMG,EAAWD,EAAWD,CAAS,EAAE,SACvCE,EAAS,IAAIH,CAAK,EAClB,IAAMI,EAAQD,EAAS,KAAO,EACxBC,KAASC,GAAe,WAC5B,OAAO,eAAeA,GAAe,UAAWD,EAAO,CACrD,KAAM,CACJ,MAAO,CAAC,GAAGF,EAAW,IAAI,EAAE,QAAQ,EAAEE,CAAK,CAC7C,CACF,CAAC,EAEH,eAAe,IAAM,CACnBH,EAAU,cAAc,IAAIK,EAAW,WAAY,CAAE,MAAAN,CAAM,CAAC,CAAC,CAC/D,CAAC,CACH,CACA,SAASO,GAAiBP,EAAO,CAtBjC,IAAAQ,EAuBE,IAAMP,GAAYO,EAAAN,EAAWF,CAAK,EAAE,QAAlB,YAAAQ,EAAyB,YAC3C,GAAI,CAACP,EACH,OACeC,EAAWD,CAAS,EAAE,SAC9B,OAAOD,CAAK,EACrB,eAAe,IAAM,CACnBC,EAAU,cAAc,IAAIK,EAAW,cAAe,CAAE,MAAAN,CAAM,CAAC,CAAC,CAClE,CAAC,CACH,CACA,SAASS,GAAgBC,EAAU,CAhCnC,IAAAF,EAiCE,IAAMP,GAAYO,EAAAN,EAAWQ,CAAQ,EAAE,MAAM,cAA3B,KAAAF,EAA0C,CAAC,EACzDG,EAAgB,GACpB,QAAWX,KAASC,EACdD,IAAUU,IAEdV,EAAM,SAAW,GACjBW,EAAgB,IAElB,GAAIA,EAAe,CACjB,GAAIT,EAAWD,CAAS,EAAE,gBACxB,OACFC,EAAWD,CAAS,EAAE,gBAAkB,GACxC,eAAe,IAAM,CACnB,OAAOC,EAAWD,CAAS,EAAE,gBAC7BA,EAAU,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC7C,CAAC,CACH,CACF,CAlDA,IAAAW,EAAAC,EAAAC,EAAAC,GAAAC,GAmDMX,GAAN,cAA6B,WAAY,CAIvC,aAAc,CACZ,MAAM,EAGRY,EAAA,KAAIF,IAPJE,EAAA,KAAAL,EAAA,QACAK,EAAA,KAAAJ,EAAA,QACAI,EAAA,KAAAH,EAAA,QAGEZ,EAAW,IAAI,EAAE,SAA2B,IAAI,GAClD,CAIA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAOgB,EAAA,KAAKH,GAAAC,IAAQ,OAAO,CAC7B,CACA,IAAI,QAAS,CACX,OAAOE,EAAA,KAAKH,GAAAC,IAAQ,IACtB,CACA,aAAaG,EAAI,CApEnB,IAAAX,EAqEI,OAAOA,EAAA,CAAC,GAAGU,EAAA,KAAKH,GAAAC,GAAO,EAAE,KAAMhB,GAAUA,EAAM,KAAOmB,CAAE,IAAjD,KAAAX,EAAsD,IAC/D,CACA,IAAI,eAAgB,CAClB,MAAO,CAAC,GAAGU,EAAA,KAAKH,GAAAC,GAAO,EAAE,UAAWhB,GAAUA,EAAM,QAAQ,CAC9D,CACA,IAAI,YAAa,CACf,OAAOkB,EAAA,KAAKN,EACd,CACA,IAAI,WAAWQ,EAAU,CACnBF,EAAA,KAAKN,KACP,KAAK,oBAAoB,WAAYM,EAAA,KAAKN,EAAiB,EAC3DS,EAAA,KAAKT,EAAoB,SAEvB,OAAOQ,GAAY,aACrBC,EAAA,KAAKT,EAAoBQ,GACzB,KAAK,iBAAiB,WAAYA,CAAQ,EAE9C,CACA,IAAI,eAAgB,CAClB,OAAOF,EAAA,KAAKL,EACd,CACA,IAAI,cAAcO,EAAU,CACtBF,EAAA,KAAKL,KACP,KAAK,oBAAoB,cAAeK,EAAA,KAAKL,EAAoB,EACjEQ,EAAA,KAAKR,EAAuB,SAE1B,OAAOO,GAAY,aACrBC,EAAA,KAAKR,EAAuBO,GAC5B,KAAK,iBAAiB,cAAeA,CAAQ,EAEjD,CACA,IAAI,UAAW,CACb,OAAOF,EAAA,KAAKJ,EACd,CACA,IAAI,SAASM,EAAU,CACjBF,EAAA,KAAKJ,KACP,KAAK,oBAAoB,SAAUI,EAAA,KAAKJ,EAAe,EACvDO,EAAA,KAAKP,EAAkB,SAErB,OAAOM,GAAY,aACrBC,EAAA,KAAKP,EAAkBM,GACvB,KAAK,iBAAiB,SAAUA,CAAQ,EAE5C,CACF,EA7DER,EAAA,YACAC,EAAA,YACAC,EAAA,YAKIC,GAAA,YAAAC,GAAO,UAAG,CACZ,OAAOd,EAAW,IAAI,EAAE,QAC1B,EC7DF,IAAMoB,EAAN,cAA6B,KAAM,CAEjC,YAAYC,EAAMC,EAAM,CACtB,MAAMD,CAAI,EAFZE,EAAA,kBAGE,KAAK,UAAYD,EAAK,SACxB,CACF,ECJA,SAASE,GAAaC,EAAOC,EAAW,CACtC,IAAMC,EAAgBC,EAAWH,CAAK,EAAE,MAAM,gBAC9CG,EAAWF,CAAS,EAAE,MAAQE,EAAWH,CAAK,EAAE,MAChDG,EAAWF,CAAS,EAAE,MAAQD,EAC9B,IAAMI,EAAeD,EAAWH,CAAK,EAAE,aACvCI,EAAa,IAAIH,CAAS,EAC1B,IAAMI,EAAQD,EAAa,KAAO,EAC5BC,KAASC,GAAmB,WAChC,OAAO,eAAeA,GAAmB,UAAWD,EAAO,CACzD,KAAM,CACJ,OAAOE,GAAqB,IAAI,EAAEF,CAAK,CACzC,CACF,CAAC,EAEH,eAAe,IAAM,CACdL,EAAM,UAEXE,EAAc,cAAc,IAAIM,EAAe,eAAgB,CAAE,UAAAP,CAAU,CAAC,CAAC,CAC/E,CAAC,CACH,CACA,SAASQ,GAAgBR,EAAW,CAClC,IAAMC,EAAgBC,EAAWF,CAAS,EAAE,MAAM,gBAC5CD,EAAQG,EAAWF,CAAS,EAAE,MACfE,EAAWH,CAAK,EAAE,aAC1B,OAAOC,CAAS,EAC7B,eAAe,IAAM,CACJE,EAAWF,CAAS,EAAE,MACzB,UAEZC,EAAc,cAAc,IAAIM,EAAe,kBAAmB,CAAE,UAAAP,CAAU,CAAC,CAAC,CAClF,CAAC,CACH,CACA,SAASS,GAAgBT,EAAW,CAClC,IAAMC,EAAgBC,EAAWF,CAAS,EAAE,MAAM,gBAC9C,CAACC,GAAiBC,EAAWD,CAAa,EAAE,kBAEhDC,EAAWD,CAAa,EAAE,gBAAkB,GAC5C,eAAe,IAAM,CACnB,OAAOC,EAAWD,CAAa,EAAE,gBACnBC,EAAWF,CAAS,EAAE,MACzB,UAEXC,EAAc,cAAc,IAAI,MAAM,QAAQ,CAAC,CACjD,CAAC,EACH,CACA,SAASK,GAAqBL,EAAe,CAE3C,MAAO,CAAC,GADMC,EAAWD,CAAa,EAAE,MACvB,WAAW,EAAE,OAAQF,GAAUA,EAAM,QAAQ,EAAE,QAASA,GAAU,CAAC,GAAGG,EAAWH,CAAK,EAAE,YAAY,CAAC,CACxH,CAlDA,IAAAW,EAAAC,EAAAC,EAmDMP,GAAN,cAAiC,WAAY,CAA7C,kCACEQ,EAAA,KAAAH,EAAA,QACAG,EAAA,KAAAF,EAAA,QACAE,EAAA,KAAAD,EAAA,QACA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAON,GAAqB,IAAI,EAAE,OAAO,CAC3C,CACA,IAAI,QAAS,CACX,OAAOA,GAAqB,IAAI,EAAE,MACpC,CACA,iBAAiBQ,EAAI,CA7DvB,IAAAC,EA8DI,OAAOA,EAAAT,GAAqB,IAAI,EAAE,KAAMN,GAAc,GAAGA,EAAU,EAAE,IAAO,GAAGc,CAAE,EAAE,IAA5E,KAAAC,EAAiF,IAC1F,CACA,IAAI,eAAgB,CAClB,OAAOT,GAAqB,IAAI,EAAE,UAAWN,GAAcA,EAAU,QAAQ,CAC/E,CACA,IAAI,cAAcI,EAAO,CACvB,OAAW,CAACY,EAAGhB,CAAS,IAAKM,GAAqB,IAAI,EAAE,QAAQ,EAC9DN,EAAU,SAAWgB,IAAMZ,CAE/B,CACA,IAAI,gBAAiB,CACnB,OAAOa,EAAA,KAAKP,EACd,CACA,IAAI,eAAeQ,EAAU,CACvBD,EAAA,KAAKP,KACP,KAAK,oBAAoB,eAAgBO,EAAA,KAAKP,EAAqB,EACnES,EAAA,KAAKT,EAAwB,SAE3B,OAAOQ,GAAY,aACrBC,EAAA,KAAKT,EAAwBQ,GAC7B,KAAK,iBAAiB,eAAgBA,CAAQ,EAElD,CACA,IAAI,mBAAoB,CACtB,OAAOD,EAAA,KAAKN,EACd,CACA,IAAI,kBAAkBO,EAAU,CAC1BD,EAAA,KAAKN,KACP,KAAK,oBAAoB,kBAAmBM,EAAA,KAAKN,EAAwB,EACzEQ,EAAA,KAAKR,EAA2B,SAE9B,OAAOO,GAAY,aACrBC,EAAA,KAAKR,EAA2BO,GAChC,KAAK,iBAAiB,kBAAmBA,CAAQ,EAErD,CACA,IAAI,UAAW,CACb,OAAOD,EAAA,KAAKL,EACd,CACA,IAAI,SAASM,EAAU,CACjBD,EAAA,KAAKL,KACP,KAAK,oBAAoB,SAAUK,EAAA,KAAKL,EAAe,EACvDO,EAAA,KAAKP,EAAkB,SAErB,OAAOM,GAAY,aACrBC,EAAA,KAAKP,EAAkBM,GACvB,KAAK,iBAAiB,SAAUA,CAAQ,EAE5C,CACF,EA3DER,EAAA,YACAC,EAAA,YACAC,EAAA,YCtDF,IAAAQ,GACMC,GAAN,KAAqB,CAArB,cACEC,EAAA,YACAA,EAAA,WACAA,EAAA,cACAA,EAAA,eACAA,EAAA,gBACAA,EAAA,kBACAA,EAAA,cACAC,EAAA,KAAAH,GAAY,IACZ,IAAI,UAAW,CACb,OAAOI,EAAA,KAAKJ,GACd,CACA,IAAI,SAASK,EAAK,CACZD,EAAA,KAAKJ,MAAcK,IAEvBC,EAAA,KAAKN,GAAYK,GACjBE,GAAgB,IAAI,EACtB,CACF,EAVEP,GAAA,YCTF,IAAAQ,GAWMC,GAAN,KAAiB,CAAjB,cACEC,EAAA,WACAA,EAAA,aACAA,EAAA,aAAQ,IACRA,EAAA,gBAAW,IACXA,EAAA,qBACAC,EAAA,KAAAH,GAAY,IACZ,aAAaI,EAAKC,EAAOC,EAAQC,EAAOC,EAASC,EAAW,CAC1D,IAAMC,EAAY,IAAIC,GACtB,OAAAD,EAAU,IAAMN,EAChBM,EAAU,MAAQL,EAClBK,EAAU,OAASJ,EACnBI,EAAU,UAAYD,EACtBC,EAAU,QAAUF,EACpBE,EAAU,MAAQH,EAClBK,GAAa,KAAMF,CAAS,EACrBA,CACT,CACA,gBAAgBA,EAAW,CACzBG,GAAgBH,CAAS,CAC3B,CACA,IAAI,UAAW,CACb,OAAOI,EAAA,KAAKd,GACd,CACA,IAAI,SAASe,EAAK,CACZD,EAAA,KAAKd,MAAce,IAEvBC,EAAA,KAAKhB,GAAYe,GACbA,IAAQ,IAEZE,GAAgB,IAAI,EACtB,CACF,EA1BEjB,GAAA,YCfF,SAASkB,GAAaC,EAAOC,EAAW,CACtC,IAAMC,EAAgBC,EAAWH,CAAK,EAAE,MAAM,gBAC9CG,EAAWF,CAAS,EAAE,MAAQE,EAAWH,CAAK,EAAE,MAChDG,EAAWF,CAAS,EAAE,MAAQD,EAC9B,IAAMI,EAAeD,EAAWH,CAAK,EAAE,aACvCI,EAAa,IAAIH,CAAS,EAC1B,IAAMI,EAAQD,EAAa,KAAO,EAC5BC,KAASC,GAAmB,WAChC,OAAO,eAAeA,GAAmB,UAAWD,EAAO,CACzD,KAAM,CACJ,OAAOE,GAAqB,IAAI,EAAEF,CAAK,CACzC,CACF,CAAC,EAEH,eAAe,IAAM,CACdL,EAAM,SAEXE,EAAc,cAAc,IAAIM,EAAe,eAAgB,CAAE,UAAAP,CAAU,CAAC,CAAC,CAC/E,CAAC,CACH,CACA,SAASQ,GAAgBR,EAAW,CAClC,IAAMC,EAAgBC,EAAWF,CAAS,EAAE,MAAM,gBAC5CD,EAAQG,EAAWF,CAAS,EAAE,MACfE,EAAWH,CAAK,EAAE,aAC1B,OAAOC,CAAS,EAC7B,eAAe,IAAM,CACJE,EAAWF,CAAS,EAAE,MACzB,SAEZC,EAAc,cAAc,IAAIM,EAAe,kBAAmB,CAAE,UAAAP,CAAU,CAAC,CAAC,CAClF,CAAC,CACH,CACA,SAASS,GAAgBT,EAAW,CAClC,IAAMC,EAAgBC,EAAWF,CAAS,EAAE,MAAM,gBAC9C,CAACC,GAAiBC,EAAWD,CAAa,EAAE,kBAEhDC,EAAWD,CAAa,EAAE,gBAAkB,GAC5C,eAAe,IAAM,CACnB,OAAOC,EAAWD,CAAa,EAAE,gBACnBC,EAAWF,CAAS,EAAE,MACzB,SAEXC,EAAc,cAAc,IAAI,MAAM,QAAQ,CAAC,CACjD,CAAC,EACH,CACA,SAASK,GAAqBL,EAAe,CAE3C,MAAO,CAAC,GADMC,EAAWD,CAAa,EAAE,MACvB,WAAW,EAAE,OAAQF,GAAUA,EAAM,OAAO,EAAE,QAASA,GAAU,CAAC,GAAGG,EAAWH,CAAK,EAAE,YAAY,CAAC,CACvH,CAlDA,IAAAW,EAAAC,GAAAC,GAmDMP,GAAN,cAAiC,WAAY,CAA7C,kCACEQ,EAAA,KAAAH,EAAA,QACAG,EAAA,KAAAF,GAAA,QACAE,EAAA,KAAAD,GAAA,QACA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAON,GAAqB,IAAI,EAAE,OAAO,CAC3C,CACA,IAAI,QAAS,CACX,OAAOA,GAAqB,IAAI,EAAE,MACpC,CACA,iBAAiBQ,EAAI,CA7DvB,IAAAC,EA8DI,OAAOA,EAAAT,GAAqB,IAAI,EAAE,KAAMN,GAAc,GAAGA,EAAU,EAAE,IAAO,GAAGc,CAAE,EAAE,IAA5E,KAAAC,EAAiF,IAC1F,CACA,IAAI,eAAgB,CAClB,OAAOT,GAAqB,IAAI,EAAE,UAAWN,GAAcA,EAAU,QAAQ,CAC/E,CACA,IAAI,cAAcI,EAAO,CACvB,OAAW,CAACY,EAAGhB,CAAS,IAAKM,GAAqB,IAAI,EAAE,QAAQ,EAC9DN,EAAU,SAAWgB,IAAMZ,CAE/B,CACA,IAAI,gBAAiB,CACnB,OAAOa,EAAA,KAAKP,EACd,CACA,IAAI,eAAeQ,EAAU,CACvBD,EAAA,KAAKP,KACP,KAAK,oBAAoB,eAAgBO,EAAA,KAAKP,EAAqB,EACnES,EAAA,KAAKT,EAAwB,SAE3B,OAAOQ,GAAY,aACrBC,EAAA,KAAKT,EAAwBQ,GAC7B,KAAK,iBAAiB,eAAgBA,CAAQ,EAElD,CACA,IAAI,mBAAoB,CACtB,OAAOD,EAAA,KAAKN,GACd,CACA,IAAI,kBAAkBO,EAAU,CAC1BD,EAAA,KAAKN,MACP,KAAK,oBAAoB,kBAAmBM,EAAA,KAAKN,GAAwB,EACzEQ,EAAA,KAAKR,GAA2B,SAE9B,OAAOO,GAAY,aACrBC,EAAA,KAAKR,GAA2BO,GAChC,KAAK,iBAAiB,kBAAmBA,CAAQ,EAErD,CACA,IAAI,UAAW,CACb,OAAOD,EAAA,KAAKL,GACd,CACA,IAAI,SAASM,EAAU,CACjBD,EAAA,KAAKL,MACP,KAAK,oBAAoB,SAAUK,EAAA,KAAKL,GAAe,EACvDO,EAAA,KAAKP,GAAkB,SAErB,OAAOM,GAAY,aACrBC,EAAA,KAAKP,GAAkBM,GACvB,KAAK,iBAAiB,SAAUA,CAAQ,EAE5C,CACF,EA3DER,EAAA,YACAC,GAAA,YACAC,GAAA,YCtDF,IAAAQ,GACMC,GAAN,KAAqB,CAArB,cACEC,EAAA,YACAA,EAAA,WACAA,EAAA,gBACAA,EAAA,cACAC,EAAA,KAAAH,GAAY,IACZ,IAAI,UAAW,CACb,OAAOI,EAAA,KAAKJ,GACd,CACA,IAAI,SAASK,EAAK,CACZD,EAAA,KAAKJ,MAAcK,IAEvBC,EAAA,KAAKN,GAAYK,GACjBE,GAAgB,IAAI,EACtB,CACF,EAVEP,GAAA,YCJF,SAASQ,GAAcC,EAAOC,EAAO,CACnC,IAAMC,EAAYF,EAAM,YACxBG,EAAWF,CAAK,EAAE,MAAQD,EACrBG,EAAWF,CAAK,EAAE,eACrBE,EAAWF,CAAK,EAAE,aAA+B,IAAI,KAEvD,IAAMG,EAAWD,EAAWD,CAAS,EAAE,SACvCE,EAAS,IAAIH,CAAK,EAClB,IAAMI,EAAQD,EAAS,KAAO,EACxBC,KAASC,GAAe,WAC5B,OAAO,eAAeA,GAAe,UAAWD,EAAO,CACrD,KAAM,CACJ,MAAO,CAAC,GAAGF,EAAW,IAAI,EAAE,QAAQ,EAAEE,CAAK,CAC7C,CACF,CAAC,EAEH,eAAe,IAAM,CACnBH,EAAU,cAAc,IAAIK,EAAW,WAAY,CAAE,MAAAN,CAAM,CAAC,CAAC,CAC/D,CAAC,CACH,CACA,SAASO,GAAiBP,EAAO,CAtBjC,IAAAQ,EAuBE,IAAMP,GAAYO,EAAAN,EAAWF,CAAK,EAAE,QAAlB,YAAAQ,EAAyB,YAC3C,GAAI,CAACP,EACH,OACeC,EAAWD,CAAS,EAAE,SAC9B,OAAOD,CAAK,EACrB,eAAe,IAAM,CACnBC,EAAU,cAAc,IAAIK,EAAW,cAAe,CAAE,MAAAN,CAAM,CAAC,CAAC,CAClE,CAAC,CACH,CACA,SAASS,GAAeT,EAAO,CAC7B,IAAMC,EAAYC,EAAWF,CAAK,EAAE,MAAM,YACtC,CAACC,GAAaC,EAAWD,CAAS,EAAE,kBAExCC,EAAWD,CAAS,EAAE,gBAAkB,GACxC,eAAe,IAAM,CACnB,OAAOC,EAAWD,CAAS,EAAE,gBAC7BA,EAAU,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC7C,CAAC,EACH,CAzCA,IAAAS,GAAAC,GAAAC,GAAAC,GAAAC,GA0CMT,GAAN,cAA6B,WAAY,CAIvC,aAAc,CACZ,MAAM,EAGRU,EAAA,KAAIF,IAPJE,EAAA,KAAAL,GAAA,QACAK,EAAA,KAAAJ,GAAA,QACAI,EAAA,KAAAH,GAAA,QAGEV,EAAW,IAAI,EAAE,SAA2B,IAAI,GAClD,CAIA,CAAC,OAAO,QAAQ,GAAI,CAClB,OAAOc,EAAA,KAAKH,GAAAC,IAAQ,OAAO,CAC7B,CACA,IAAI,QAAS,CACX,OAAOE,EAAA,KAAKH,GAAAC,IAAQ,IACtB,CACA,aAAaG,EAAI,CA3DnB,IAAAT,EA4DI,OAAOA,EAAA,CAAC,GAAGQ,EAAA,KAAKH,GAAAC,GAAO,EAAE,KAAMd,GAAUA,EAAM,KAAOiB,CAAE,IAAjD,KAAAT,EAAsD,IAC/D,CACA,IAAI,YAAa,CACf,OAAOQ,EAAA,KAAKN,GACd,CACA,IAAI,WAAWQ,EAAU,CACnBF,EAAA,KAAKN,MACP,KAAK,oBAAoB,WAAYM,EAAA,KAAKN,GAAiB,EAC3DS,EAAA,KAAKT,GAAoB,SAEvB,OAAOQ,GAAY,aACrBC,EAAA,KAAKT,GAAoBQ,GACzB,KAAK,iBAAiB,WAAYA,CAAQ,EAE9C,CACA,IAAI,eAAgB,CAClB,OAAOF,EAAA,KAAKL,GACd,CACA,IAAI,cAAcO,EAAU,CACtBF,EAAA,KAAKL,MACP,KAAK,oBAAoB,cAAeK,EAAA,KAAKL,GAAoB,EACjEQ,EAAA,KAAKR,GAAuB,SAE1B,OAAOO,GAAY,aACrBC,EAAA,KAAKR,GAAuBO,GAC5B,KAAK,iBAAiB,cAAeA,CAAQ,EAEjD,CACA,IAAI,UAAW,CACb,OAAOF,EAAA,KAAKJ,GACd,CACA,IAAI,SAASM,EAAU,CACjBF,EAAA,KAAKJ,MACP,KAAK,oBAAoB,SAAUI,EAAA,KAAKJ,GAAe,EACvDO,EAAA,KAAKP,GAAkB,SAErB,OAAOM,GAAY,aACrBC,EAAA,KAAKP,GAAkBM,GACvB,KAAK,iBAAiB,SAAUA,CAAQ,EAE5C,CACF,EA1DER,GAAA,YACAC,GAAA,YACAC,GAAA,YAKIC,GAAA,YAAAC,GAAO,UAAG,CACZ,OAAOZ,EAAW,IAAI,EAAE,QAC1B,ECpDF,IAAAkB,GAWMC,GAAN,KAAiB,CAAjB,cACEC,EAAA,WACAA,EAAA,aACAA,EAAA,aAAQ,IACRA,EAAA,gBAAW,IACXA,EAAA,qBACAC,EAAA,KAAAH,GAAW,IACX,aAAaI,EAAKC,EAAOC,EAAS,CAChC,IAAMC,EAAY,IAAIC,GACtB,OAAAD,EAAU,IAAMH,EAChBG,EAAU,MAAQF,EAClBE,EAAU,QAAUD,EACpBG,GAAa,KAAMF,CAAS,EACrBA,CACT,CACA,gBAAgBA,EAAW,CACzBG,GAAgBH,CAAS,CAC3B,CACA,IAAI,SAAU,CACZ,OAAOI,EAAA,KAAKX,GACd,CACA,IAAI,QAAQY,EAAK,CACXD,EAAA,KAAKX,MAAaY,IAEtBC,EAAA,KAAKb,GAAWY,GAChBE,GAAe,IAAI,EACrB,CACF,EArBEd,GAAA,YCVF,IAAMe,GAAsBC,GAAqB,WAAW,iBAAkB,OAAO,EAC/EC,GAAsBD,GAAqB,WAAW,iBAAkB,OAAO,EACrF,SAASE,GAAiBC,EAAmB,CAC3C,GAAI,EAACA,GAAA,MAAAA,EAAmB,WACtB,OAAOA,EACT,IAAMC,EAAgBJ,GAAqBG,EAAmB,OAAO,GACjE,CAACC,GAAiB,GAAGA,CAAa,GAAG,SAAS,eAAe,IAC/D,OAAO,eAAeD,EAAkB,UAAW,cAAe,CAChE,KAAM,CACJ,OAAOE,GAAe,IAAI,CAC5B,CACF,CAAC,EAEH,IAAMC,EAAgBN,GAAqBG,EAAmB,OAAO,GACjE,CAACG,GAAiB,GAAGA,CAAa,GAAG,SAAS,eAAe,IAC/D,OAAO,eAAeH,EAAkB,UAAW,cAAe,CAChE,KAAM,CACJ,OAAOI,GAAe,IAAI,CAC5B,CACF,CAAC,EAEG,kBAAmBJ,EAAkB,YACzCA,EAAkB,UAAU,cAAgB,SAASK,EAAMC,EAAQ,GAAIC,EAAW,GAAI,CACpF,IAAMC,EAAQ,IAAIC,GAClB,OAAAD,EAAM,KAAOH,EACbG,EAAM,MAAQF,EACdE,EAAM,SAAWD,EACjBG,GAAc,KAAMF,CAAK,EAClBA,CACT,GAEI,qBAAsBR,EAAkB,YAC5CA,EAAkB,UAAU,iBAAmBW,IAE3C,kBAAmBX,EAAkB,YACzCA,EAAkB,UAAU,cAAgB,SAASK,EAAMC,EAAQ,GAAIC,EAAW,GAAI,CACpF,IAAMC,EAAQ,IAAII,GAClB,OAAAJ,EAAM,KAAOH,EACbG,EAAM,MAAQF,EACdE,EAAM,SAAWD,EACjBM,GAAc,KAAML,CAAK,EAClBA,CACT,GAEI,qBAAsBR,EAAkB,YAC5CA,EAAkB,UAAU,iBAAmBc,IAE3C,oBAAqBd,EAAkB,WAC3C,OAAO,eAAeA,EAAkB,UAAW,kBAAmB,CACpE,KAAM,CACJ,OAAOe,EAAoB,IAAI,CACjC,CACF,CAAC,EAEH,IAAMA,EAAuBC,GAAU,CACrC,IAAIC,EAAaC,EAAWF,CAAK,EAAE,gBACnC,OAAKC,IACHA,EAAa,IAAIE,GACjBD,EAAWD,CAAU,EAAE,MAAQD,EAC/BE,EAAWF,CAAK,EAAE,gBAAkBC,GAE/BA,CACT,EACM,oBAAqBjB,EAAkB,WAC3C,OAAO,eAAeA,EAAkB,UAAW,kBAAmB,CACpE,KAAM,CACJ,OAAOoB,EAAoB,IAAI,CACjC,CACF,CAAC,EAEH,IAAMA,EAAuBJ,GAAU,CACrC,IAAIC,EAAaC,EAAWF,CAAK,EAAE,gBACnC,OAAKC,IACHA,EAAa,IAAII,GACjBH,EAAWD,CAAU,EAAE,MAAQD,EAC/BE,EAAWF,CAAK,EAAE,gBAAkBC,GAE/BA,CACT,EACA,OAAOjB,CACT,CACA,SAASH,GAAqBG,EAAmBsB,EAAM,CAxFvD,IAAAC,EAyFE,GAAIvB,GAAA,MAAAA,EAAmB,UACrB,OAAOuB,EAAA,OAAO,yBAAyBvB,EAAkB,UAAW,GAAGsB,CAAI,QAAQ,IAA5E,YAAAC,EAA+E,GAE1F,CACA,SAASrB,GAAec,EAAO,CA7F/B,IAAAO,EA8FE,IAAIC,EAASN,EAAWF,CAAK,EAAE,YAC/B,GAAI,CAACQ,IACHA,EAAS,IAAIC,GACbP,EAAWF,CAAK,EAAE,YAAcQ,EAC5B5B,IAAqB,CACvB,IAAM8B,EAAe9B,GAAoB,MAAK2B,EAAAP,EAAM,WAAN,KAAAO,EAAkBP,CAAK,EACrE,QAAWW,KAAeD,EACxBhB,GAAcM,EAAOW,CAAW,EAElCD,EAAa,iBAAiB,SAAU,IAAM,CAC5CF,EAAO,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC1C,CAAC,EACDE,EAAa,iBAAiB,WAAaE,GAAU,CACnD,GAAI,CAAC,GAAGJ,CAAM,EAAE,KAAMK,GAAMA,aAAapB,EAAU,EAAG,CACpD,QAAWkB,KAAeD,EACxBf,GAAiBgB,CAAW,EAE9B,MACF,CACAjB,GAAcM,EAAOY,EAAM,KAAK,CAClC,CAAC,EACDF,EAAa,iBAAiB,cAAgBE,GAAU,CACtDjB,GAAiBiB,EAAM,KAAK,CAC9B,CAAC,CACH,CAEF,OAAOJ,CACT,CACA,SAASpB,GAAeY,EAAO,CA1H/B,IAAAO,EA2HE,IAAIC,EAASN,EAAWF,CAAK,EAAE,YAC/B,GAAI,CAACQ,IACHA,EAAS,IAAIM,GACbZ,EAAWF,CAAK,EAAE,YAAcQ,EAC5B1B,IAAqB,CACvB,IAAM4B,EAAe5B,GAAoB,MAAKyB,EAAAP,EAAM,WAAN,KAAAO,EAAkBP,CAAK,EACrE,QAAWW,KAAeD,EACxBb,GAAcG,EAAOW,CAAW,EAElCD,EAAa,iBAAiB,SAAU,IAAM,CAC5CF,EAAO,cAAc,IAAI,MAAM,QAAQ,CAAC,CAC1C,CAAC,EACDE,EAAa,iBAAiB,WAAaE,GAAU,CACnD,GAAI,CAAC,GAAGJ,CAAM,EAAE,KAAMK,GAAMA,aAAajB,EAAU,EAAG,CACpD,QAAWe,KAAeD,EACxBZ,GAAiBa,CAAW,EAE9B,MACF,CACAd,GAAcG,EAAOY,EAAM,KAAK,CAClC,CAAC,EACDF,EAAa,iBAAiB,cAAgBE,GAAU,CACtDd,GAAiBc,EAAM,KAAK,CAC9B,CAAC,CACH,CAEF,OAAOJ,CACT,ClBtGAO,GAAY,KAAK,aAAc,YAAa,WAAW,EAEhD,IAAMC,EAAa,CACxB,yBAA0B,2BAC1B,cAAe,gBACf,MAAO,QACP,iBAAkB,mBAClB,gBAAiB,kBACjB,UAAW,YACX,QAAS,UACT,eAAgB,iBAChB,eAAgB,iBAChB,gBAAiB,kBACjB,mBAAoB,qBACpB,iBAAkB,mBAClB,aAAc,eACd,YAAa,cACb,qBAAsB,uBACtB,wBAAyB,0BACzB,YAAa,cACb,gBAAiB,kBACjB,WAAY,aACZ,YAAa,cACb,mBAAoB,qBACpB,iBAAkB,mBAClB,KAAM,MACR,EAEMC,GAAsB,OAAO,OAAOD,CAAU,EAE9CE,GAAwBC,GAAiB,EACzCC,GAAqB,YA/E3BC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAiFMC,GAAN,cAAkCC,EAAqD,CAcrF,aAAc,CACZ,MAAM,EA0fRC,EAAA,KAAMJ,IApgBNI,EAAA,KAAAZ,EAAA,QACAY,EAAA,KAAAX,GAAA,QACAW,EAAA,KAAAV,GAAA,QACAU,EAAA,KAAAT,GAAgC,CAAC,GACjCS,EAAA,KAAAR,GAAA,QACAQ,EAAA,KAAAP,GAAA,QACAO,EAAA,KAAAN,GAAA,QACAM,EAAA,KAAAL,GAAA,QAIEM,EAAA,KAAKX,MAAkB,0BAAuB,EAChD,CAhBA,WAAW,oBAAqB,CAlFlC,IAAAY,EAmFI,MAAO,CAAC,GAAGlB,GAAqB,IAAIkB,EAAAH,GAAmB,qBAAnB,KAAAG,EAAyC,CAAC,CAAE,CAClF,CAgBA,IAAI,YAAa,CApGnB,IAAAA,EAqGI,OAAQA,EAAA,KAAK,aAAanB,EAAW,WAAW,IAAxC,KAAAmB,EAAoE,MAC9E,CAEA,IAAI,WAAWC,EAAuC,CAChDA,IAAU,KAAK,aACdA,EAEM,iBAAe,SAASA,CAAK,EACtC,KAAK,aAAapB,EAAW,YAAaoB,CAAK,EAE/C,QAAQ,KAAK,gDAAgD,iBAAe,KAAK,CAAC,EAAE,EAJpF,KAAK,gBAAgBpB,EAAW,WAAW,EAM/C,CAEA,IAAI,gBAAiB,CACnB,OAAOqB,EAAA,KAAKd,GACd,CAEA,IAAI,oBAAqB,CAvH3B,IAAAY,EAwHI,OAAOA,EAAAE,EAAA,KAAKV,MAAL,KAAAQ,EAA4Bf,EACrC,CAEA,IAAI,mBAAmBgB,EAA2B,CAChDF,EAAA,KAAKP,GAAsBS,EAC7B,CAEA,IAAI,uBAAwB,CA/H9B,IAAAD,EAgII,OAAOA,EAAAE,EAAA,KAAKX,MAAL,KAAAS,EAA+BjB,EACxC,CAEA,IAAI,sBAAsBkB,EAA2B,CACnDF,EAAA,KAAKR,GAAyBU,EAChC,CAGA,IAAI,MAAmC,CAxIzC,IAAAD,EAyII,OAAOA,EAAAE,EAAA,KAAKhB,KAAL,YAAAc,EAAY,MACrB,CAEA,IAAI,KAAqD,CA5I3D,IAAAA,EA6II,OAAOA,EAAA,KAAK,WAAL,YAAAA,EAAe,GACxB,CAEA,IAAI,OAAQ,CAhJd,IAAAA,EAiJI,OAAOA,KAAA,YAAS,KAAK,QAAQ,IAAtB,KAAAA,EAA2B,IACpC,CAEA,IAAI,iBAA0D,CAC5D,OAAOE,EAAA,KAAKT,GACd,CAEA,IAAI,gBAAgBQ,EAA+C,CACjEF,EAAA,KAAKN,GAAmBQ,EAC1B,CAEA,IAAI,KAAM,CAIR,OAAO,KAAK,aAAa,KAAK,CAChC,CAEA,IAAI,IAAIE,EAAa,CAGfA,IAAQ,KAAK,MAEbA,GAAO,KACT,KAAK,gBAAgB,KAAK,EAE1B,KAAK,aAAa,MAAOA,CAAG,EAEhC,CAEA,IAAI,MAAkD,CA/KxD,IAAAH,EAgLI,OAAQA,EAAA,KAAK,aAAanB,EAAW,IAAI,IAAjC,KAAAmB,EAAwE,MAClF,CAEA,IAAI,KAAKG,EAAgD,CAEnDA,IAAQ,KAAK,OAEbA,EACF,KAAK,aAAatB,EAAW,KAAMsB,CAAG,EAEtC,KAAK,gBAAgBtB,EAAW,IAAI,EAExC,CAGA,IAAI,UAAqB,CACvB,IAAMuB,EAAO,KAAK,aAAa,UAAU,EAEzC,OAAIA,IAAS,KACJ,GACEA,IAAS,GACX,GAEAA,CAEX,CAGA,IAAI,SAASD,EAAe,CAC1B,IAAME,EAAa,KAAK,SACpBF,IAAQE,IAIRF,EACF,KAAK,aAAa,WAAY,OAAOA,GAAQ,SAAWA,EAAM,EAAE,EAEhE,KAAK,gBAAgB,UAAU,EAEnC,CAEA,IAAI,SAAU,CACZ,IAAMA,EAAM,KAAK,aAAa,SAAS,EACvC,OAAIA,IAAQ,GAAW,OACnB,CAAC,OAAQ,WAAY,MAAM,EAAE,SAASA,CAAG,EAAUA,EAChD,MAAM,OACf,CAEA,IAAI,QAAQA,EAAK,CAGXA,GAAO,KAAK,aAAa,SAAS,IAElC,CAAC,GAAI,OAAQ,WAAY,MAAM,EAAE,SAASA,CAAG,EAC/C,KAAK,aAAa,UAAWA,CAAG,EAEhC,KAAK,gBAAgB,SAAS,EAElC,CAEA,IAAI,OAAQ,CACV,OAAO,KAAK,aAAatB,EAAW,KAAK,GAAK,IAChD,CAEA,IAAI,MAAMsB,EAAK,CAETA,IAAQ,KAAK,QAEbA,EACF,KAAK,aAAatB,EAAW,MAAO,EAAE,EAEtC,KAAK,gBAAgBA,EAAW,KAAK,EAEzC,CAEA,IAAI,iBAAkB,CACpB,OAAO,KAAK,aAAaA,EAAW,gBAAgB,CACtD,CAEA,IAAI,gBAAgBsB,EAAK,CAEnBA,IAAQ,KAAK,iBAEjB,KAAK,gBAAgBtB,EAAW,iBAAkB,CAAC,CAACsB,CAAG,CACzD,CAEA,IAAI,gBAAiB,CACnB,OAAO,KAAK,aAAatB,EAAW,eAAe,CACrD,CAEA,IAAI,eAAesB,EAAK,CAElBA,IAAQ,KAAK,iBAEbA,EACF,KAAK,aAAatB,EAAW,gBAAiB,EAAE,EAEhD,KAAK,gBAAgBA,EAAW,eAAe,EAEnD,CAEA,IAAI,WAAgC,CAClC,IAAMsB,EAAM,KAAK,aAAatB,EAAW,UAAU,EACnD,GAAIsB,GAAO,KAAM,OACjB,IAAMG,EAAM,CAACH,EACb,OAAQ,OAAO,MAAMG,CAAG,EAAU,OAANA,CAC9B,CAEA,IAAI,UAAUH,EAAyB,CAEjCA,IAAQ,KAAK,YAEbA,GAAO,KACT,KAAK,gBAAgBtB,EAAW,UAAU,EAE1C,KAAK,aAAaA,EAAW,WAAY,GAAGsB,CAAG,EAAE,EAErD,CAEA,IAAI,YAAiC,CAvSvC,IAAAH,EAwSI,OAAI,KAAK,aAAanB,EAAW,WAAW,EACnC,KAAK,aAAaA,EAAW,WAAW,GAG1CmB,KAAA,uBAAoB,KAAK,GAAG,IAA5B,KAAAA,EAAiC,MAC1C,CAEA,IAAI,WAAWG,EAAyB,CAElCA,IAAQ,KAAK,aAEbA,EACF,KAAK,aAAatB,EAAW,YAAasB,CAAG,EAE7C,KAAK,gBAAgBtB,EAAW,WAAW,EAE/C,CAEA,IAAI,eAAgB,CA1TtB,IAAAmB,EA2TI,OAAQA,EAAA,KAAK,aAAanB,EAAW,cAAc,IAA3C,KAAAmB,EAAuE,MACjF,CAEA,IAAI,cAAcG,EAAqC,CACjDA,IAAQ,KAAK,gBAEbA,EACF,KAAK,aAAatB,EAAW,eAAgBsB,CAAG,EAEhD,KAAK,gBAAgBtB,EAAW,cAAc,EAElD,CAEA,IAAI,eAAgB,CAxUtB,IAAAmB,EAyUI,OAAQA,EAAA,KAAK,aAAanB,EAAW,cAAc,IAA3C,KAAAmB,EAAuE,MACjF,CAEA,IAAI,cAAcG,EAAqC,CACjDA,IAAQ,KAAK,gBAEbA,EACF,KAAK,aAAatB,EAAW,eAAgBsB,CAAG,EAEhD,KAAK,gBAAgBtB,EAAW,cAAc,EAElD,CAEA,IAAI,gBAAiB,CAtVvB,IAAAmB,EAuVI,OAAQA,EAAA,KAAK,aAAanB,EAAW,eAAe,IAA5C,KAAAmB,EAAyE,MACnF,CAEA,IAAI,eAAeG,EAAsC,CACnDA,IAAQ,KAAK,iBAEbA,EACF,KAAK,aAAatB,EAAW,gBAAiBsB,CAAG,EAEjD,KAAK,gBAAgBtB,EAAW,eAAe,EAEnD,CAEA,IAAI,kBAAmB,CACrB,IAAMsB,EAAM,KAAK,aAAatB,EAAW,kBAAkB,EAC3D,GAAIsB,GAAO,KAAM,OACjB,IAAMG,EAAM,CAACH,EACb,OAAQ,OAAO,MAAMG,CAAG,EAAU,OAANA,CAC9B,CAEA,IAAI,iBAAiBH,EAAyB,CACxCA,GAAO,KACT,KAAK,gBAAgBtB,EAAW,kBAAkB,EAElD,KAAK,aAAaA,EAAW,mBAAoB,GAAGsB,CAAG,EAAE,CAE7D,CAEA,IAAI,gBAAiB,CACnB,IAAMA,EAAM,KAAK,aAAatB,EAAW,gBAAgB,EACzD,GAAIsB,GAAO,KAAM,OACjB,IAAMG,EAAM,CAACH,EACb,OAAQ,OAAO,MAAMG,CAAG,EAAU,OAANA,CAC9B,CAEA,IAAI,eAAeH,EAAyB,CACtCA,GAAO,KACT,KAAK,gBAAgBtB,EAAW,gBAAgB,EAEhD,KAAK,aAAaA,EAAW,iBAAkB,GAAGsB,CAAG,EAAE,CAE3D,CAEA,IAAI,cAAe,CAlYrB,IAAAH,EAmYI,OAAOA,EAAA,KAAK,aAAanB,EAAW,aAAa,IAA1C,KAAAmB,EAA+C,MACxD,CAEA,IAAI,aAAaG,EAAyB,CAEpCA,IAAQ,KAAK,eAEbA,EACF,KAAK,aAAatB,EAAW,cAAesB,CAAG,EAE/C,KAAK,gBAAgBtB,EAAW,aAAa,EAEjD,CAEA,IAAI,UAAW,CAjZjB,IAAAmB,EAkZI,OAAOA,EAAA,KAAK,aAAanB,EAAW,SAAS,IAAtC,KAAAmB,EAA2C,MACpD,CAEA,IAAI,SAASG,EAAyB,CAEhCA,IAAQ,KAAK,WAEbA,EACF,KAAK,aAAatB,EAAW,UAAWsB,CAAG,EAE3C,KAAK,gBAAgBtB,EAAW,SAAS,EAE7C,CAEA,IAAI,OAAQ,CAGV,SAAO,YAAS,KAAK,SAAU,KAAK,IAAI,CAC1C,CAEA,IAAI,QAA6B,CAtanC,IAAAmB,EAuaI,OAAOA,EAAA,KAAK,aAAanB,EAAW,OAAO,IAApC,KAAAmB,EAAyC,MAClD,CAEA,IAAI,OAAOG,EAAyB,CAE9BA,IAAQ,KAAK,SAEbA,EACF,KAAK,aAAatB,EAAW,QAASsB,CAAG,EAEzC,KAAK,gBAAgBtB,EAAW,OAAO,EAE3C,CAEA,IAAI,wBAA6C,CArbnD,IAAAmB,EAsbI,OAAOA,EAAA,KAAK,aAAanB,EAAW,wBAAwB,IAArD,KAAAmB,EAA0D,MACnE,CAEA,IAAI,uBAAuBG,EAAyB,CAE9CA,IAAQ,KAAK,yBAEbA,EACF,KAAK,aAAatB,EAAW,yBAA0BsB,CAAG,EAE1D,KAAK,gBAAgBtB,EAAW,wBAAwB,EAE5D,CAEA,IAAI,YAA+C,CApcrD,IAAAmB,EAscI,OAAQA,EAAA,KAAK,aAAanB,EAAW,WAAW,IAAxC,KAAAmB,KAAsE,iBAAc,KAAK,QAAQ,CAC3G,CAEA,IAAI,WAAWG,EAAuC,CAEhDA,IAAQ,KAAK,aAEbA,EACF,KAAK,aAAatB,EAAW,YAAasB,CAAG,EAE7C,KAAK,gBAAgBtB,EAAW,WAAW,EAE/C,CAEA,IAAI,kBAAmB,CAErB,OAAI,KAAK,aAAaA,EAAW,kBAAkB,EAC1C,CAAE,KAAK,aAAaA,EAAW,kBAAkB,KAEnD,uBAAoB,KAAK,QAAQ,CAC1C,CAEA,IAAI,iBAAiBsB,EAAyB,CAExCA,GAAO,KAAK,mBAEZA,GAAO,KACT,KAAK,gBAAgBtB,EAAW,kBAAkB,EAElD,KAAK,aAAaA,EAAW,mBAAoB,GAAG,CAACsB,CAAG,EAAE,EAE9D,CAEA,IAAI,eAAgB,CAvetB,IAAAH,EAAAO,EAweI,GAAI,KAAK,aAAa1B,EAAW,gBAAgB,EAAG,CAClD,GAAM,CAAE,eAAA2B,CAAe,EAAI,KACrBC,GAAcT,EAAA,KAAK,SAAS,SAAS,IAAI,CAAC,IAA5B,KAAAA,EAAiC,EAC/CU,GAAgBH,EAAA,KAAK,SAAS,SAAS,MAAM,CAAC,IAA9B,KAAAA,EAAmC,EACzD,OAAO,KAAK,IAAIG,EAAeD,EAAeD,CAAyB,CACzE,CACA,SAAO,oBAAiB,KAAK,QAAQ,CACvC,CAEA,IAAI,gBAAiB,CACnB,GAAK,KAAK,aAAa3B,EAAW,gBAAgB,EAClD,MAAO,CAAE,KAAK,aAAaA,EAAW,gBAAgB,CACxD,CAEA,IAAI,eAAesB,EAAyB,CAEtCA,GAAO,KAAK,mBAEZA,GAAO,KACT,KAAK,gBAAgBtB,EAAW,gBAAgB,EAEhD,KAAK,aAAaA,EAAW,iBAAkB,GAAG,CAACsB,CAAG,EAAE,EAE5D,CAEA,IAAI,UAAW,CACb,SAAO,eAAY,KAAK,QAAQ,CAClC,CAEA,MAAM,aAAsBQ,EAAyC,CACnE,SAAO,gBAAa,KAAK,SAAUA,CAAS,CAC9C,CAEA,IAAI,gBAAiB,CACnB,SAAO,qBAAkB,KAAK,QAAQ,CACxC,CAEA,IAAI,WAAY,CACd,SAAO,gBAAa,KAAK,QAAQ,CACnC,CAEA,MAAM,YAAYC,EAAmE,CACnF,SAAO,eAAY,KAAK,SAAUA,CAAQ,CAC5C,CAEA,IAAI,eAAgB,CAClB,SAAO,oBAAiB,KAAK,QAAQ,CACvC,CAEA,IAAI,UAAW,CACb,SAAO,eAAY,KAAK,QAAQ,CAClC,CAEA,cAAe,CACb,SAAO,gBAAa,KAAK,SAAU,KAAK,IAAI,CAC9C,CAEA,IAAI,YAAa,CACf,SAAO,iBAAc,KAAK,SAAU,KAAK,IAAI,CAC/C,CAEA,IAAI,gBAAqD,CACvD,IAAMT,EAAM,KAAK,aAAatB,EAAW,eAAe,EACxD,GAAIsB,IAAQ,gBAAc,KAAOA,IAAQ,gBAAc,OAAQ,OAAOA,CAExE,CAEA,IAAI,eAAeA,EAAyC,CACtDA,IAAQ,KAAK,iBAEbA,IAAQ,gBAAc,KAAOA,IAAQ,gBAAc,OACrD,KAAK,aAAatB,EAAW,gBAAiBsB,CAAG,EAEjD,KAAK,gBAAgBtB,EAAW,eAAe,EAEnD,CAEA,IAAI,UAAW,CAgBb,MAAO,CACL,GAhBuD,KAAK,kBAAkB,EAC7E,OAAQgC,GACAA,EAAS,WAAW,WAAW,GAAK,CAAE,CAAChC,EAAW,YAAY,EAAe,SAASgC,CAAQ,CACtG,EACA,OACC,CAACC,EAAWD,IAAa,CACvB,IAAMZ,EAAQ,KAAK,aAAaY,CAAQ,EACxC,OAAIZ,GAAS,OACXa,EAAUD,EAAS,QAAQ,aAAc,EAAE,EAAE,QAAQ,KAAM,GAAG,CAAW,EAAIZ,GAExEa,CACT,EACA,CAAC,CACH,EAIA,GAAGZ,EAAA,KAAKb,GACV,CACF,CAEA,IAAI,SAASc,EAAqC,CAChDJ,EAAA,KAAKV,GAAYc,GAAA,KAAAA,EAAO,CAAC,GACnB,KAAK,KACT,KAAK,IAAI,KAAK,KAAMD,EAAA,KAAKb,GAAS,CAEtC,CAEA,IAAI,YAAa,CACf,OAAOa,EAAA,KAAKZ,GACd,CAEA,IAAI,WAAWa,EAA+C,CAC5DJ,EAAA,KAAKT,GAAca,EACrB,CASA,MAAO,CACLJ,EAAA,KAAKb,KAAQ,cAAW,KAAgC,KAAK,SAAUgB,EAAA,KAAKhB,EAAK,EACnF,CAEA,QAAS,IACP,YAAS,KAAK,SAAUgB,EAAA,KAAKhB,EAAK,EAClCa,EAAA,KAAKb,EAAQ,OACf,CAEA,yBAAyB2B,EAAkBE,EAAyBC,EAAyB,CA1mB/F,IAAAhB,EAAAO,EAinBI,OALqBV,GAAmB,mBAAmB,SAASgB,CAAQ,GACxD,CAAC,CAAC,MAAO,WAAY,SAAS,EAAE,SAASA,CAAQ,GACnE,MAAM,yBAAyBA,EAAUE,EAAUC,CAAQ,EAGrDH,EAAU,CAChB,KAAKhC,EAAW,qBACd,KAAK,mBAAqBmC,GAAA,KAAAA,EAAY,OACtC,MACF,KAAKnC,EAAW,wBACd,KAAK,sBAAwBmC,GAAA,KAAAA,EAAY,OACzC,MACF,IAAK,MAAO,CACV,IAAMC,EAAS,CAAC,CAACF,EACXG,EAAS,CAAC,CAACF,EACb,CAACC,GAAUC,EACbC,EAAA,KAAKzB,GAAAC,IAAL,WACSsB,GAAU,CAACC,EACpB,KAAK,OAAO,EACHD,GAAUC,IACnB,KAAK,OAAO,EACZC,EAAA,KAAKzB,GAAAC,IAAL,YAEF,KACF,CACA,IAAK,WACH,GAAIqB,IAAaD,EACf,OAGFf,EAAAE,EAAA,KAAKhB,KAAL,MAAAc,EAAY,YAAY,KAAK,UAC7B,MACF,IAAK,UACH,GAAIgB,IAAaD,EACf,OAEFR,EAAAL,EAAA,KAAKhB,KAAL,MAAAqB,EAAY,WAAWS,GACvB,MACF,KAAKnC,EAAW,YACd,KAAK,OAAM,iBAAc,IAAI,EAC7B,MACF,KAAKA,EAAW,MAAO,CACrB,IAAMuC,EAAQ,KAAK,MACb,KAAK,KAET,QAAQ,KACN,+HACF,EAEI,KAAK,OACT,KAAK,KAAK,OAAO,MAAQA,GAE3B,KACF,CACA,KAAKvC,EAAW,aACVmC,GACF,MAAMA,CAAQ,EACX,KAAMK,GAASA,EAAK,KAAK,CAAC,EAC1B,KAAMC,GAAU,KAAK,SAAWA,CAAK,EACrC,MAAM,IAAM,QAAQ,MAAM,2DAA2DN,CAAQ,GAAG,CAAC,EAEtG,MACF,KAAKnC,EAAW,aAEVmC,GAAY,MAAQA,IAAaD,IACnC,KAAK,cAAc,IAAI,YAAY,mBAAoB,CAAE,SAAU,GAAM,QAAS,EAAK,CAAC,CAAC,EAE3F,MACF,KAAKlC,EAAW,oBACVmC,GAAY,MAAQA,IAAaD,IACnC,KAAK,cACH,IAAI,YAAY,yBAA0B,CAAE,SAAU,GAAM,QAAS,GAAM,OAAQ,KAAK,gBAAiB,CAAC,CAC5G,EAEF,MACF,QACE,KACJ,CACF,CAEA,mBAA0B,CA5rB5B,IAAAf,GA6rBIA,EAAA,MAAM,oBAAN,MAAAA,EAAA,WACI,KAAK,UAAY,KAAK,KAAO,CAACE,EAAA,KAAKhB,IACrCiC,EAAA,KAAKzB,GAAAC,IAAL,UAEJ,CAEA,sBAA6B,CAC3B,KAAK,OAAO,CACd,CACF,EAhnBET,EAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YA6fMC,GAAA,YAAAC,GAAY,gBAAG,CACfO,EAAA,KAAKf,MACT,MAAOY,EAAA,KAAKZ,GAAiB,QAAQ,QAAQ,GAC7CY,EAAA,KAAKZ,GAAiB,MACtB,KAAK,KAAK,EACZ,EA0GF,IAAMoC,GAAN,cAA8BC,GAAmBC,GAAiB7B,EAAmB,CAAC,CAAE,CAAC,EAOpF8B,GAAW,eAAe,IAAI,WAAW,IAC5CA,GAAW,eAAe,OAAO,YAAaH,EAAe,EAC7DG,GAAW,gBAAkBH,IAK/B,IAAOI,GAAQC",
6
- "names": ["src_exports", "__export", "Attributes", "Events", "src_default", "__toCommonJS", "EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "import_playback_core", "getEnvPlayerVersion", "player_version", "getPlayerVersion", "Events", "getAudioTemplateHTML", "attrs", "serializeAttributes", "getVideoTemplateHTML", "CustomMediaMixin", "superclass", "tag", "is", "_a", "_b", "_c", "_isDefined", "_define", "define_fn", "_isInit", "_nativeEl", "_childMap", "_init", "init_fn", "_syncMediaChildren", "syncMediaChildren_fn", "_upgradeProperty", "upgradeProperty_fn", "_forwardAttribute", "forwardAttribute_fn", "nativeElTest", "nativeElProps", "getNativeElProps", "__privateAdd", "__privateMethod", "__privateGet", "val", "__privateSet", "namedNodeMapToObject", "prop", "type", "event", "attrName", "oldValue", "newValue", "propsToAttrs", "args", "config", "attr", "removeNativeChildren", "el", "clone", "value", "_d", "_e", "_f", "__publicField", "proto", "html", "key", "namedNodeMap", "obj", "CustomVideoElement", "CustomAudioElement", "privateProps", "InvalidStateError", "NotSupportedError", "IterableWeakSet", "el", "fn", "ref", "value", "onCastApiAvailable", "callback", "_a", "_b", "_c", "requiresCastFramework", "loadCastFramework", "sdkUrl", "script", "castContext", "currentSession", "currentMedia", "editTracksInfo", "request", "resolve", "reject", "getMediaStatus", "setCastOptions", "options", "getDefaultCastOptions", "remoteInstances", "IterableWeakSet", "castElementRef", "cf", "onCastApiAvailable", "_a", "_b", "_c", "_d", "castContext", "e", "r", "privateProps", "remotePlaybackCallbackIdCount", "_media", "_isInit", "_remotePlayer", "_remoteListeners", "_state", "_available", "_callbacks", "_callbackIds", "_castPlayer", "castPlayer_get", "_disconnect", "disconnect_fn", "_onCastStateChanged", "onCastStateChanged_fn", "_onSessionStateChanged", "onSessionStateChanged_fn", "_init", "init_fn", "_onRemoteMediaLoaded", "onRemoteMediaLoaded_fn", "_updateRemoteTextTrack", "updateRemoteTextTrack_fn", "RemotePlayback", "media", "__privateAdd", "__privateSet", "__privateMethod", "__privateGet", "callback", "InvalidStateError", "NotSupportedError", "willDisconnect", "setCastOptions", "event", "listener", "err", "castState", "SESSION_RESUMED", "currentMedia", "getMediaStatus", "error", "value", "_e", "remoteSubtitles", "type", "localSubtitles", "kind", "subtitles", "language", "name", "trackId", "mode", "local", "hiddenTrackIds", "showingSubtitle", "activeTrackIds", "currentSession", "requestTrackIds", "id", "a", "b", "request", "editTracksInfo", "CastableMediaMixin", "superclass", "_a", "_b", "_localState", "_castOptions", "_remote", "_castPlayer", "castPlayer_get", "_loadOnPrompt", "loadOnPrompt_fn", "__privateAdd", "getDefaultCastOptions", "__privateGet", "requiresCastFramework", "loadCastFramework", "privateProps", "__privateMethod", "__privateSet", "RemotePlayback", "attrName", "oldValue", "newValue", "mediaInfo", "subtitles", "kind", "src", "activeTrackIds", "textTrackIdCount", "trackEl", "trackId", "track", "request", "currentSession", "val", "_c", "__superGet", "err", "__publicField", "TrackEvent", "type", "init", "__publicField", "privateProps", "getPrivate", "instance", "_a", "setPrivate", "props", "saved", "addVideoTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "VideoTrackList", "TrackEvent", "removeVideoTrack", "_a", "selectedChanged", "selected", "hasUnselected", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "RenditionEvent", "type", "init", "__publicField", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "VideoRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "VideoRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "_selected", "VideoTrack", "__publicField", "__privateAdd", "src", "width", "height", "codec", "bitrate", "frameRate", "rendition", "VideoRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "selectedChanged", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "AudioRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "AudioRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "addAudioTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "AudioTrackList", "TrackEvent", "removeAudioTrack", "_a", "enabledChanged", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "_enabled", "AudioTrack", "__publicField", "__privateAdd", "src", "codec", "bitrate", "rendition", "AudioRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "enabledChanged", "nativeVideoTracksFn", "getBaseMediaTracksFn", "nativeAudioTracksFn", "MediaTracksMixin", "MediaElementClass", "videoTracksFn", "getVideoTracks", "audioTracksFn", "getAudioTracks", "kind", "label", "language", "track", "VideoTrack", "addVideoTrack", "removeVideoTrack", "AudioTrack", "addAudioTrack", "removeAudioTrack", "initVideoRenditions", "media", "renditions", "getPrivate", "VideoRenditionList", "initAudioRenditions", "AudioRenditionList", "type", "_a", "tracks", "VideoTrackList", "nativeTracks", "nativeTrack", "event", "t", "AudioTrackList", "Events", "Attributes", "AttributeNameValues", "playerSoftwareVersion", "getPlayerVersion", "playerSoftwareName", "_core", "_loadRequested", "_playerInitTime", "_metadata", "__hlsConfig", "_playerSoftwareVersion", "_playerSoftwareName", "_errorTranslator", "_requestLoad", "requestLoad_fn", "MuxVideoBaseElement", "CustomVideoElement", "__privateAdd", "__privateSet", "_a", "value", "__privateGet", "val", "attr", "currentVal", "num", "_b", "liveEdgeOffset", "seekableEnd", "seekableStart", "cuePoints", "chapters", "attrName", "currAttrs", "oldValue", "newValue", "hadSrc", "hasSrc", "__privateMethod", "debug", "resp", "json", "MuxVideoElement", "CastableMediaMixin", "MediaTracksMixin", "internalGlobalThis", "src_default", "MuxVideoElement"]
4
+ "sourcesContent": ["import { globalThis } from './polyfills';\nimport {\n initialize,\n teardown,\n generatePlayerInitTime,\n MuxMediaProps,\n StreamTypes,\n PlaybackTypes,\n toMuxVideoURL,\n Metadata,\n MediaError,\n getError,\n CmcdTypes,\n CmcdTypeValues,\n addCuePoints,\n getCuePoints,\n getActiveCuePoint,\n addChapters,\n getActiveChapter,\n getStartDate,\n getCurrentPdt,\n getStreamType,\n getTargetLiveWindow,\n getLiveEdgeStart,\n getSeekable,\n getEnded,\n getChapters,\n toPlaybackIdFromSrc,\n // isMuxVideoSrc,\n} from '@mux/playback-core';\nimport type {\n PlaybackCore,\n PlaybackEngine,\n Autoplay,\n ExtensionMimeTypeMap,\n ValueOf,\n MaxResolutionValue,\n MinResolutionValue,\n RenditionOrderValue,\n Chapter,\n CuePoint,\n} from '@mux/playback-core';\nimport { getPlayerVersion } from './env';\n// this must be imported after playback-core for the polyfill to be included\nimport { CustomVideoElement, Events as VideoEvents } from 'custom-media-element';\nimport { CastableMediaMixin } from 'castable-video/castable-mixin.js';\nimport { MediaTracksMixin } from 'media-tracks';\nimport type { HlsConfig } from 'hls.js';\n\n// Must mutate so the added events are available in custom-media-element.\nVideoEvents.push('castchange', 'entercast', 'leavecast');\n\nexport const Attributes = {\n BEACON_COLLECTION_DOMAIN: 'beacon-collection-domain',\n CUSTOM_DOMAIN: 'custom-domain',\n DEBUG: 'debug',\n DISABLE_TRACKING: 'disable-tracking',\n DISABLE_COOKIES: 'disable-cookies',\n DRM_TOKEN: 'drm-token',\n ENV_KEY: 'env-key',\n MAX_RESOLUTION: 'max-resolution',\n MIN_RESOLUTION: 'min-resolution',\n RENDITION_ORDER: 'rendition-order',\n PROGRAM_START_TIME: 'program-start-time',\n PROGRAM_END_TIME: 'program-end-time',\n METADATA_URL: 'metadata-url',\n PLAYBACK_ID: 'playback-id',\n PLAYER_SOFTWARE_NAME: 'player-software-name',\n PLAYER_SOFTWARE_VERSION: 'player-software-version',\n PREFER_CMCD: 'prefer-cmcd',\n PREFER_PLAYBACK: 'prefer-playback',\n START_TIME: 'start-time',\n STREAM_TYPE: 'stream-type',\n TARGET_LIVE_WINDOW: 'target-live-window',\n LIVE_EDGE_OFFSET: 'live-edge-offset',\n TYPE: 'type',\n} as const;\n\nconst AttributeNameValues = Object.values(Attributes);\n\nconst playerSoftwareVersion = getPlayerVersion();\nconst playerSoftwareName = 'mux-video';\n\nclass MuxVideoBaseElement extends CustomVideoElement implements Partial<MuxMediaProps> {\n static get observedAttributes() {\n return [...AttributeNameValues, ...(CustomVideoElement.observedAttributes ?? [])];\n }\n\n #core?: PlaybackCore;\n #loadRequested?: Promise<void> | null;\n #playerInitTime: number;\n #metadata: Readonly<Metadata> = {};\n #_hlsConfig?: Partial<HlsConfig>;\n #playerSoftwareVersion?: string;\n #playerSoftwareName?: string;\n #errorTranslator?: (errorEvent: any) => any;\n\n constructor() {\n super();\n this.#playerInitTime = generatePlayerInitTime();\n }\n\n get preferCmcd() {\n return (this.getAttribute(Attributes.PREFER_CMCD) as ValueOf<CmcdTypes>) ?? undefined;\n }\n\n set preferCmcd(value: ValueOf<CmcdTypes> | undefined) {\n if (value === this.preferCmcd) return;\n if (!value) {\n this.removeAttribute(Attributes.PREFER_CMCD);\n } else if (CmcdTypeValues.includes(value)) {\n this.setAttribute(Attributes.PREFER_CMCD, value);\n } else {\n console.warn(`Invalid value for preferCmcd. Must be one of ${CmcdTypeValues.join()}`);\n }\n }\n\n get playerInitTime() {\n return this.#playerInitTime;\n }\n\n get playerSoftwareName() {\n return this.#playerSoftwareName ?? playerSoftwareName;\n }\n\n set playerSoftwareName(value: string | undefined) {\n this.#playerSoftwareName = value;\n }\n\n get playerSoftwareVersion() {\n return this.#playerSoftwareVersion ?? playerSoftwareVersion;\n }\n\n set playerSoftwareVersion(value: string | undefined) {\n this.#playerSoftwareVersion = value;\n }\n\n // Keeping this named \"_hls\" since it's exposed for unadvertised \"advanced usage\" via getter that assumes specifically hls.js (CJP)\n get _hls(): PlaybackEngine | undefined {\n return this.#core?.engine;\n }\n\n get mux(): Readonly<HTMLVideoElement['mux']> | undefined {\n return this.nativeEl?.mux;\n }\n\n get error() {\n return getError(this.nativeEl) ?? null;\n }\n\n get errorTranslator(): ((errorEvent: any) => any) | undefined {\n return this.#errorTranslator;\n }\n\n set errorTranslator(value: ((errorEvent: any) => any) | undefined) {\n this.#errorTranslator = value;\n }\n\n get src() {\n // Use the attribute value as the source of truth.\n // No need to store it in two places.\n // This avoids needing a to read the attribute initially and update the src.\n return this.getAttribute('src') as string;\n }\n\n set src(val: string) {\n // If being set by attributeChangedCallback,\n // dont' cause an infinite loop\n if (val === this.src) return;\n\n if (val == null) {\n this.removeAttribute('src');\n } else {\n this.setAttribute('src', val);\n }\n }\n\n get type(): ValueOf<ExtensionMimeTypeMap> | undefined {\n return (this.getAttribute(Attributes.TYPE) as ValueOf<ExtensionMimeTypeMap>) ?? undefined;\n }\n\n set type(val: ValueOf<ExtensionMimeTypeMap> | undefined) {\n // dont' cause an infinite loop\n if (val === this.type) return;\n\n if (val) {\n this.setAttribute(Attributes.TYPE, val);\n } else {\n this.removeAttribute(Attributes.TYPE);\n }\n }\n\n /** @ts-ignore */\n get autoplay(): Autoplay {\n const attr = this.getAttribute('autoplay');\n\n if (attr === null) {\n return false;\n } else if (attr === '') {\n return true;\n } else {\n return attr as Autoplay;\n }\n }\n\n /** @ts-ignore */\n set autoplay(val: Autoplay) {\n const currentVal = this.autoplay;\n if (val === currentVal) {\n return;\n }\n\n if (val) {\n this.setAttribute('autoplay', typeof val === 'string' ? val : '');\n } else {\n this.removeAttribute('autoplay');\n }\n }\n\n get preload() {\n const val = this.getAttribute('preload') as HTMLMediaElement['preload'];\n if (val === '') return 'auto';\n if (['none', 'metadata', 'auto'].includes(val)) return val;\n return super.preload;\n }\n\n set preload(val) {\n // don't cause an infinite loop\n // check the attribute because an empty string maps to the `auto` prop\n if (val == this.getAttribute('preload')) return;\n\n if (['', 'none', 'metadata', 'auto'].includes(val)) {\n this.setAttribute('preload', val);\n } else {\n this.removeAttribute('preload');\n }\n }\n\n get debug() {\n return this.getAttribute(Attributes.DEBUG) != null;\n }\n\n set debug(val) {\n // dont' cause an infinite loop\n if (val === this.debug) return;\n\n if (val) {\n this.setAttribute(Attributes.DEBUG, '');\n } else {\n this.removeAttribute(Attributes.DEBUG);\n }\n }\n\n get disableTracking() {\n return this.hasAttribute(Attributes.DISABLE_TRACKING);\n }\n\n set disableTracking(val) {\n // dont' cause an infinite loop\n if (val === this.disableTracking) return;\n\n this.toggleAttribute(Attributes.DISABLE_TRACKING, !!val);\n }\n\n get disableCookies() {\n return this.hasAttribute(Attributes.DISABLE_COOKIES);\n }\n\n set disableCookies(val) {\n // dont' cause an infinite loop\n if (val === this.disableCookies) return;\n\n if (val) {\n this.setAttribute(Attributes.DISABLE_COOKIES, '');\n } else {\n this.removeAttribute(Attributes.DISABLE_COOKIES);\n }\n }\n\n get startTime(): number | undefined {\n const val = this.getAttribute(Attributes.START_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set startTime(val: number | undefined) {\n // dont' cause an infinite loop\n if (val === this.startTime) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.START_TIME);\n } else {\n this.setAttribute(Attributes.START_TIME, `${val}`);\n }\n }\n\n get playbackId(): string | undefined {\n if (this.hasAttribute(Attributes.PLAYBACK_ID)) {\n return this.getAttribute(Attributes.PLAYBACK_ID) as string;\n }\n\n return toPlaybackIdFromSrc(this.src) ?? undefined;\n }\n\n set playbackId(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.playbackId) return;\n\n if (val) {\n this.setAttribute(Attributes.PLAYBACK_ID, val);\n } else {\n this.removeAttribute(Attributes.PLAYBACK_ID);\n }\n }\n\n get maxResolution() {\n return (this.getAttribute(Attributes.MAX_RESOLUTION) as MaxResolutionValue) ?? undefined;\n }\n\n set maxResolution(val: MaxResolutionValue | undefined) {\n if (val === this.maxResolution) return;\n\n if (val) {\n this.setAttribute(Attributes.MAX_RESOLUTION, val);\n } else {\n this.removeAttribute(Attributes.MAX_RESOLUTION);\n }\n }\n\n get minResolution() {\n return (this.getAttribute(Attributes.MIN_RESOLUTION) as MinResolutionValue) ?? undefined;\n }\n\n set minResolution(val: MinResolutionValue | undefined) {\n if (val === this.minResolution) return;\n\n if (val) {\n this.setAttribute(Attributes.MIN_RESOLUTION, val);\n } else {\n this.removeAttribute(Attributes.MIN_RESOLUTION);\n }\n }\n\n get renditionOrder() {\n return (this.getAttribute(Attributes.RENDITION_ORDER) as RenditionOrderValue) ?? undefined;\n }\n\n set renditionOrder(val: RenditionOrderValue | undefined) {\n if (val === this.renditionOrder) return;\n\n if (val) {\n this.setAttribute(Attributes.RENDITION_ORDER, val);\n } else {\n this.removeAttribute(Attributes.RENDITION_ORDER);\n }\n }\n\n get programStartTime() {\n const val = this.getAttribute(Attributes.PROGRAM_START_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set programStartTime(val: number | undefined) {\n if (val == undefined) {\n this.removeAttribute(Attributes.PROGRAM_START_TIME);\n } else {\n this.setAttribute(Attributes.PROGRAM_START_TIME, `${val}`);\n }\n }\n\n get programEndTime() {\n const val = this.getAttribute(Attributes.PROGRAM_END_TIME);\n if (val == null) return undefined;\n const num = +val;\n return !Number.isNaN(num) ? num : undefined;\n }\n\n set programEndTime(val: number | undefined) {\n if (val == undefined) {\n this.removeAttribute(Attributes.PROGRAM_END_TIME);\n } else {\n this.setAttribute(Attributes.PROGRAM_END_TIME, `${val}`);\n }\n }\n\n get customDomain() {\n return this.getAttribute(Attributes.CUSTOM_DOMAIN) ?? undefined;\n }\n\n set customDomain(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.customDomain) return;\n\n if (val) {\n this.setAttribute(Attributes.CUSTOM_DOMAIN, val);\n } else {\n this.removeAttribute(Attributes.CUSTOM_DOMAIN);\n }\n }\n\n get drmToken() {\n return this.getAttribute(Attributes.DRM_TOKEN) ?? undefined;\n }\n\n set drmToken(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.drmToken) return;\n\n if (val) {\n this.setAttribute(Attributes.DRM_TOKEN, val);\n } else {\n this.removeAttribute(Attributes.DRM_TOKEN);\n }\n }\n\n get ended() {\n // This ensures that edge case media that doesn't properly end will\n // still announce itself as \"ended\".\n return getEnded(this.nativeEl, this._hls);\n }\n\n get envKey(): string | undefined {\n return this.getAttribute(Attributes.ENV_KEY) ?? undefined;\n }\n\n set envKey(val: string | undefined) {\n // dont' cause an infinite loop\n if (val === this.envKey) return;\n\n if (val) {\n this.setAttribute(Attributes.ENV_KEY, val);\n } else {\n this.removeAttribute(Attributes.ENV_KEY);\n }\n }\n\n get beaconCollectionDomain(): string | undefined {\n return this.getAttribute(Attributes.BEACON_COLLECTION_DOMAIN) ?? undefined;\n }\n\n set beaconCollectionDomain(val: string | undefined) {\n // don't cause an infinite loop\n if (val === this.beaconCollectionDomain) return;\n\n if (val) {\n this.setAttribute(Attributes.BEACON_COLLECTION_DOMAIN, val);\n } else {\n this.removeAttribute(Attributes.BEACON_COLLECTION_DOMAIN);\n }\n }\n\n get streamType(): ValueOf<StreamTypes> | undefined {\n // Allow overriding inferred `streamType`\n return (this.getAttribute(Attributes.STREAM_TYPE) as ValueOf<StreamTypes>) ?? getStreamType(this.nativeEl);\n }\n\n set streamType(val: ValueOf<StreamTypes> | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val === this.streamType) return;\n\n if (val) {\n this.setAttribute(Attributes.STREAM_TYPE, val);\n } else {\n this.removeAttribute(Attributes.STREAM_TYPE);\n }\n }\n\n get targetLiveWindow() {\n // Allow overriding inferred `targetLiveWindow`\n if (this.hasAttribute(Attributes.TARGET_LIVE_WINDOW)) {\n return +(this.getAttribute(Attributes.TARGET_LIVE_WINDOW) as string) as number;\n }\n return getTargetLiveWindow(this.nativeEl);\n }\n\n set targetLiveWindow(val: number | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val == this.targetLiveWindow) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.TARGET_LIVE_WINDOW);\n } else {\n this.setAttribute(Attributes.TARGET_LIVE_WINDOW, `${+val}`);\n }\n }\n\n get liveEdgeStart() {\n if (this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) {\n const { liveEdgeOffset } = this;\n const seekableEnd = this.nativeEl.seekable.end(0) ?? 0;\n const seekableStart = this.nativeEl.seekable.start(0) ?? 0;\n return Math.max(seekableStart, seekableEnd - (liveEdgeOffset as number));\n }\n return getLiveEdgeStart(this.nativeEl);\n }\n\n get liveEdgeOffset() {\n if (!this.hasAttribute(Attributes.LIVE_EDGE_OFFSET)) return undefined;\n return +(this.getAttribute(Attributes.LIVE_EDGE_OFFSET) as string) as number;\n }\n\n set liveEdgeOffset(val: number | undefined) {\n // don't cause an infinite loop and avoid change event dispatching\n if (val == this.targetLiveWindow) return;\n\n if (val == null) {\n this.removeAttribute(Attributes.LIVE_EDGE_OFFSET);\n } else {\n this.setAttribute(Attributes.LIVE_EDGE_OFFSET, `${+val}`);\n }\n }\n\n get seekable() {\n return getSeekable(this.nativeEl);\n }\n\n async addCuePoints<T = any>(cuePoints: CuePoint<T>[]) {\n return addCuePoints(this.nativeEl, cuePoints);\n }\n\n get activeCuePoint() {\n return getActiveCuePoint(this.nativeEl);\n }\n\n get cuePoints() {\n return getCuePoints(this.nativeEl);\n }\n\n async addChapters(chapters: Chapter[]) {\n return addChapters(this.nativeEl, chapters);\n }\n\n get activeChapter() {\n return getActiveChapter(this.nativeEl);\n }\n\n get chapters() {\n return getChapters(this.nativeEl);\n }\n\n getStartDate() {\n return getStartDate(this.nativeEl, this._hls);\n }\n\n get currentPdt() {\n return getCurrentPdt(this.nativeEl, this._hls);\n }\n\n get preferPlayback(): ValueOf<PlaybackTypes> | undefined {\n const val = this.getAttribute(Attributes.PREFER_PLAYBACK);\n if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) return val;\n return undefined;\n }\n\n set preferPlayback(val: ValueOf<PlaybackTypes> | undefined) {\n if (val === this.preferPlayback) return;\n\n if (val === PlaybackTypes.MSE || val === PlaybackTypes.NATIVE) {\n this.setAttribute(Attributes.PREFER_PLAYBACK, val);\n } else {\n this.removeAttribute(Attributes.PREFER_PLAYBACK);\n }\n }\n\n get metadata() {\n const inferredMetadataAttrs: { [key: string]: string } = this.getAttributeNames()\n .filter((attrName) => {\n return attrName.startsWith('metadata-') && !([Attributes.METADATA_URL] as string[]).includes(attrName);\n })\n .reduce(\n (currAttrs, attrName) => {\n const value = this.getAttribute(attrName);\n if (value != null) {\n currAttrs[attrName.replace(/^metadata-/, '').replace(/-/g, '_') as string] = value;\n }\n return currAttrs;\n },\n {} as { [key: string]: string }\n );\n\n return {\n ...inferredMetadataAttrs,\n ...this.#metadata,\n };\n }\n\n set metadata(val: Readonly<Metadata> | undefined) {\n this.#metadata = val ?? {};\n if (!!this.mux) {\n this.mux.emit('hb', this.#metadata);\n }\n }\n\n get _hlsConfig() {\n return this.#_hlsConfig;\n }\n\n set _hlsConfig(val: Readonly<Partial<HlsConfig>> | undefined) {\n this.#_hlsConfig = val;\n }\n\n async #requestLoad() {\n if (this.#loadRequested) return;\n await (this.#loadRequested = Promise.resolve());\n this.#loadRequested = null;\n this.load();\n }\n\n load() {\n this.#core = initialize(this as Partial<MuxMediaProps>, this.nativeEl, this.#core);\n }\n\n unload() {\n teardown(this.nativeEl, this.#core);\n this.#core = undefined;\n }\n\n attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n // Only forward the attributes to the native media element that are not handled.\n const isNativeAttr = CustomVideoElement.observedAttributes.includes(attrName);\n if (isNativeAttr && !['src', 'autoplay', 'preload'].includes(attrName)) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n }\n\n switch (attrName) {\n case Attributes.PLAYER_SOFTWARE_NAME:\n this.playerSoftwareName = newValue ?? undefined;\n break;\n case Attributes.PLAYER_SOFTWARE_VERSION:\n this.playerSoftwareVersion = newValue ?? undefined;\n break;\n case 'src': {\n const hadSrc = !!oldValue;\n const hasSrc = !!newValue;\n if (!hadSrc && hasSrc) {\n this.#requestLoad();\n } else if (hadSrc && !hasSrc) {\n this.unload();\n } else if (hadSrc && hasSrc) {\n this.unload();\n this.#requestLoad();\n }\n break;\n }\n case 'autoplay':\n if (newValue === oldValue) {\n break;\n }\n /** In case newValue is an empty string or null, use this.autoplay which translates to booleans (WL) */\n this.#core?.setAutoplay(this.autoplay);\n break;\n case 'preload':\n if (newValue === oldValue) {\n break;\n }\n this.#core?.setPreload(newValue as HTMLMediaElement['preload']);\n break;\n case Attributes.PLAYBACK_ID:\n this.src = toMuxVideoURL(this) as string;\n break;\n case Attributes.DEBUG: {\n const debug = this.debug;\n if (!!this.mux) {\n /** @TODO Link to docs for a more detailed discussion (CJP) */\n console.info(\n 'Cannot toggle debug mode of mux data after initialization. Make sure you set all metadata to override before setting the src.'\n );\n }\n if (!!this._hls) {\n this._hls.config.debug = debug;\n }\n break;\n }\n case Attributes.METADATA_URL:\n if (newValue) {\n fetch(newValue)\n .then((resp) => resp.json())\n .then((json) => (this.metadata = json))\n .catch(() => console.error(`Unable to load or parse metadata JSON from metadata-url ${newValue}!`));\n }\n break;\n case Attributes.STREAM_TYPE:\n // If the newValue is unset\n if (newValue == null || newValue !== oldValue) {\n this.dispatchEvent(new CustomEvent('streamtypechange', { composed: true, bubbles: true }));\n }\n break;\n case Attributes.TARGET_LIVE_WINDOW:\n if (newValue == null || newValue !== oldValue) {\n this.dispatchEvent(\n new CustomEvent('targetlivewindowchange', { composed: true, bubbles: true, detail: this.targetLiveWindow })\n );\n }\n break;\n default:\n break;\n }\n }\n\n connectedCallback(): void {\n super.connectedCallback?.();\n if (this.nativeEl && this.src && !this.#core) {\n this.#requestLoad();\n }\n }\n\n disconnectedCallback(): void {\n this.unload();\n }\n}\n\n// castable-video should be mixed in last so that it can override load().\nclass MuxVideoElement extends CastableMediaMixin(MediaTracksMixin(MuxVideoBaseElement)) {\n // NOTE: CastableMediaMixin needs to be a subclass of whatever implements the load() method\n // (i.e. MuxVideoBaseElement), but we're overriding castCustomData to provide mux-specific\n // values by default, so it needs to be defined here (i.e. in the composed subclass of\n // CastableMediaMixin). (CJP)\n #castCustomData: Record<string, any> | undefined;\n\n get muxCastCustomData() {\n return {\n mux: {\n // Mux Video values\n playbackId: this.playbackId,\n minResolution: this.minResolution,\n maxResolution: this.maxResolution,\n renditionOrder: this.renditionOrder,\n customDomain: this.customDomain,\n /** @TODO Add this.tokens to MuxVideoElement (CJP) */\n tokens: {\n drm: this.drmToken,\n },\n // Mux Data values\n envKey: this.envKey,\n metadata: this.metadata,\n disableCookies: this.disableCookies,\n disableTracking: this.disableTracking,\n beaconCollectionDomain: this.beaconCollectionDomain,\n // Playback values\n startTime: this.startTime,\n // Other values\n preferCmcd: this.preferCmcd,\n },\n } as const;\n }\n\n get castCustomData() {\n return this.#castCustomData ?? this.muxCastCustomData;\n }\n\n set castCustomData(val: Record<string, any> | undefined) {\n this.#castCustomData = val;\n }\n}\n\ntype MuxVideoElementType = typeof MuxVideoElement;\ndeclare global {\n var MuxVideoElement: MuxVideoElementType; // eslint-disable-line\n}\n\nif (!globalThis.customElements.get('mux-video')) {\n globalThis.customElements.define('mux-video', MuxVideoElement);\n globalThis.MuxVideoElement = MuxVideoElement;\n}\n\nexport { PlaybackEngine, PlaybackEngine as Hls, ExtensionMimeTypeMap as MimeTypes, MediaError, VideoEvents };\n\nexport default MuxVideoElement;\n", "/* eslint @typescript-eslint/no-empty-function: \"off\", @typescript-eslint/no-unused-vars: \"off\" */\n\nclass EventTarget {\n addEventListener() {}\n removeEventListener() {}\n dispatchEvent(_event: Event) {\n return true;\n }\n}\n\n// @github/template-parts requires DocumentFragment to be available on globalThis for SSR\nif (typeof DocumentFragment === 'undefined') {\n class DocumentFragment extends EventTarget {}\n // @ts-ignore\n globalThis.DocumentFragment = DocumentFragment;\n}\n\nclass HTMLElement extends EventTarget {}\nclass HTMLVideoElement extends EventTarget {}\n\nconst customElements: CustomElementRegistry = {\n get(_name: string) {\n return undefined;\n },\n define(_name, _constructor, _options) {},\n getName(_constructor) {\n return null;\n },\n upgrade(_root) {},\n whenDefined(_name) {\n return Promise.resolve(HTMLElement as unknown as CustomElementConstructor);\n },\n};\n\nclass CustomEvent {\n #detail;\n get detail() {\n return this.#detail;\n }\n constructor(typeArg: string, eventInitDict: CustomEventInit = {}) {\n // super(typeArg, eventInitDict);\n this.#detail = eventInitDict?.detail;\n }\n initCustomEvent() {}\n}\n\nfunction createElement(_tagName: string, _options?: ElementCreationOptions): HTMLElement {\n return new HTMLElement();\n}\n\nconst globalThisShim = {\n document: {\n createElement,\n },\n DocumentFragment,\n customElements,\n CustomEvent,\n EventTarget,\n HTMLElement,\n HTMLVideoElement,\n};\n\n// const isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\n// const GlobalThis = isServer ? globalThisShim : globalThis;\n// const Document = isServer ? globalThisShim.document : globalThis.document;\n//\n// export { GlobalThis as globalThis, Document as document };\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\ntype GlobalThis = typeof globalThis;\nconst internalGlobalThis: GlobalThis = (isServer ? globalThisShim : globalThis) as GlobalThis;\nconst internalDocument: Document = (isServer ? globalThisShim.document : globalThis.document) as Document;\n\nexport { internalGlobalThis as globalThis, internalDocument as document };\n", "export const isMaybeBrowser = () => typeof window != 'undefined';\n// @ts-ignore\nexport const isMaybeServer = () => typeof global != 'undefined';\n\nconst getEnvPlayerVersion = () => {\n try {\n // @ts-ignore\n return PLAYER_VERSION as string;\n } catch {}\n return 'UNKNOWN';\n};\n\nconst player_version: string = getEnvPlayerVersion();\n\nexport const getPlayerVersion = () => player_version;\n", "/**\n * Custom Media Element\n * Based on https://github.com/muxinc/custom-video-element - Mux - MIT License\n *\n * The goal is to create an element that works just like the video element\n * but can be extended/sub-classed, because native elements cannot be\n * extended today across browsers.\n */\n\n// The onevent like props are weirdly set on the HTMLElement prototype with other\n// generic events making it impossible to pick these specific to HTMLMediaElement.\nexport const Events = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'encrypted',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting',\n 'waitingforkey',\n 'resize',\n 'enterpictureinpicture',\n 'leavepictureinpicture',\n 'webkitbeginfullscreen',\n 'webkitendfullscreen',\n 'webkitpresentationmodechanged',\n];\n\nfunction getAudioTemplateHTML(attrs) {\n return /*html*/`\n <style>\n :host {\n display: inline-flex;\n line-height: 0;\n flex-direction: column;\n justify-content: end;\n }\n\n audio {\n width: 100%;\n }\n </style>\n <slot name=\"media\">\n <audio${serializeAttributes(attrs)}></audio>\n </slot>\n <slot></slot>\n `;\n}\n\n// If the `media` slot is used leave the styling up to the user.\n// It's a more consistent behavior pre and post custom element upgrade.\n\nfunction getVideoTemplateHTML(attrs) {\n return /*html*/`\n <style>\n :host {\n display: inline-block;\n line-height: 0;\n }\n\n video {\n max-width: 100%;\n max-height: 100%;\n min-width: 100%;\n min-height: 100%;\n object-fit: var(--media-object-fit, contain);\n object-position: var(--media-object-position, 50% 50%);\n }\n\n video::-webkit-media-text-track-container {\n transform: var(--media-webkit-text-track-transform);\n transition: var(--media-webkit-text-track-transition);\n }\n </style>\n <slot name=\"media\">\n <video${serializeAttributes(attrs)}></video>\n </slot>\n <slot></slot>\n `;\n}\n\n/**\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n */\nexport const CustomMediaMixin = (superclass, { tag, is }) => {\n\n // `is` makes it possible to extend a custom built-in. e.g. castable-video\n const nativeElTest = globalThis.document?.createElement?.(tag, { is });\n const nativeElProps = nativeElTest ? getNativeElProps(nativeElTest) : [];\n\n return class CustomMedia extends superclass {\n static getTemplateHTML = tag.endsWith('audio') ? getAudioTemplateHTML : getVideoTemplateHTML;\n static shadowRootOptions = { mode: 'open' };\n static Events = Events;\n static #isDefined;\n\n static get observedAttributes() {\n CustomMedia.#define();\n\n // Include any attributes from the custom built-in.\n const natAttrs = nativeElTest?.constructor?.observedAttributes ?? [];\n\n return [\n ...natAttrs,\n 'autopictureinpicture',\n 'disablepictureinpicture',\n 'disableremoteplayback',\n 'autoplay',\n 'controls',\n 'controlslist',\n 'crossorigin',\n 'loop',\n 'muted',\n 'playsinline',\n 'poster',\n 'preload',\n 'src',\n ];\n }\n\n static #define() {\n if (this.#isDefined) return;\n this.#isDefined = true;\n\n const propsToAttrs = new Set(this.observedAttributes);\n // defaultMuted maps to the muted attribute, handled manually below.\n propsToAttrs.delete('muted');\n\n // Passthrough native el functions from the custom el to the native el\n for (let prop of nativeElProps) {\n if (prop in this.prototype) continue;\n\n const type = typeof nativeElTest[prop];\n if (type == 'function') {\n // Function\n this.prototype[prop] = function (...args) {\n this.#init();\n\n const fn = () => {\n if (this.call) return this.call(prop, ...args);\n return this.nativeEl[prop].apply(this.nativeEl, args);\n };\n\n return fn();\n };\n } else {\n // Some properties like src, preload, defaultMuted are handled manually.\n\n // Getter\n let config = {\n get() {\n this.#init();\n\n let attr = prop.toLowerCase();\n if (propsToAttrs.has(attr)) {\n const val = this.getAttribute(attr);\n return val === null ? false : val === '' ? true : val;\n }\n\n return this.get?.(prop) ?? this.nativeEl?.[prop];\n },\n };\n\n if (prop !== prop.toUpperCase()) {\n // Setter (not a CONSTANT)\n config.set = function (val) {\n this.#init();\n\n let attr = prop.toLowerCase();\n if (propsToAttrs.has(attr)) {\n if (val === true || val === false || val == null) {\n this.toggleAttribute(attr, Boolean(val));\n } else {\n this.setAttribute(attr, val);\n }\n return;\n }\n\n if (this.set) {\n this.set(prop, val);\n return;\n }\n\n this.nativeEl[prop] = val;\n };\n }\n\n Object.defineProperty(this.prototype, prop, config);\n }\n }\n }\n\n #isInit;\n #nativeEl;\n #childMap = new Map();\n\n constructor() {\n super();\n\n // If the custom element is defined before the custom element's HTML is parsed\n // no attributes will be available in the constructor (construction process).\n // Wait until initializing in the attributeChangedCallback or\n // connectedCallback or accessing any properties.\n }\n\n get nativeEl() {\n this.#init();\n return this.#nativeEl\n ?? this.shadowRoot.querySelector(tag)\n ?? this.querySelector(':scope > [slot=media]')\n ?? this.querySelector(tag);\n }\n\n set nativeEl(val) {\n this.#nativeEl = val;\n }\n\n get defaultMuted() {\n return this.hasAttribute('muted');\n }\n\n set defaultMuted(val) {\n this.toggleAttribute('muted', Boolean(val));\n }\n\n get src() {\n return this.getAttribute('src');\n }\n\n set src(val) {\n this.setAttribute('src', `${val}`);\n }\n\n get preload() {\n return this.getAttribute('preload') ?? this.nativeEl?.preload;\n }\n\n set preload(val) {\n this.setAttribute('preload', `${val}`);\n }\n\n #init() {\n if (this.#isInit) return;\n this.#isInit = true;\n this.init();\n }\n\n init() {\n if (!this.shadowRoot) {\n this.attachShadow({ mode: 'open' });\n\n const attrs = namedNodeMapToObject(this.attributes);\n if (is) attrs.is = is;\n if (tag) attrs.part = tag;\n this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(attrs);\n }\n\n // Neither Chrome or Firefox support setting the muted attribute\n // after using document.createElement.\n // Get around this by setting the muted property manually.\n this.nativeEl.muted = this.hasAttribute('muted');\n\n for (let prop of nativeElProps) {\n this.#upgradeProperty(prop);\n }\n\n this.shadowRoot.addEventListener('slotchange', this);\n this.#syncMediaChildren();\n\n for (let type of this.constructor.Events) {\n this.shadowRoot.addEventListener?.(type, this, true);\n }\n }\n\n handleEvent(event) {\n\n if (event.type === 'slotchange') {\n this.#syncMediaChildren();\n return;\n }\n\n if (event.target === this.nativeEl) {\n // The video events are dispatched on the CustomMediaElement instance.\n // This makes it possible to add event listeners before the element is upgraded.\n this.dispatchEvent(new CustomEvent(event.type, { detail: event.detail }));\n }\n }\n\n /**\n * Keep some native child elements like track and source in sync.\n * An unnamed <slot> will be filled with all of the custom element's\n * top-level child nodes that do not have the slot attribute.\n */\n #syncMediaChildren() {\n const removeNativeChildren = new Map(this.#childMap);\n\n this.shadowRoot.querySelector('slot:not([name])')\n .assignedElements({ flatten: true })\n .filter((el) => ['track', 'source'].includes(el.localName))\n .forEach((el) => {\n // If the source or track is still in the assigned elements keep it.\n removeNativeChildren.delete(el);\n // Re-use clones if possible.\n let clone = this.#childMap.get(el);\n if (!clone) {\n clone = el.cloneNode();\n this.#childMap.set(el, clone);\n }\n this.nativeEl.append?.(clone);\n\n // https://html.spec.whatwg.org/multipage/media.html#sourcing-out-of-band-text-tracks\n // If there are any text tracks in the media element's list of text\n // tracks whose text track kind is chapters or metadata that\n // correspond to track elements with a default attribute set whose\n // text track mode is set to disabled, then set the text track\n // mode of all such tracks to hidden.\n if (\n clone.localName === 'track' &&\n clone.default &&\n (clone.kind === 'chapters' || clone.kind === 'metadata') &&\n clone.track.mode === 'disabled'\n ) {\n clone.track.mode = 'hidden';\n }\n });\n\n removeNativeChildren.forEach((el) => el.remove());\n }\n\n #upgradeProperty(prop) {\n // Sets properties that are set before the custom element is upgraded.\n // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n // Delete the set property from this instance.\n delete this[prop];\n // Set the value again via the (prototype) setter on this class.\n this[prop] = value;\n }\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n // Initialize right after construction when the attributes become available.\n this.#init();\n this.#forwardAttribute(attrName, oldValue, newValue);\n }\n\n #forwardAttribute(attrName, oldValue, newValue) {\n // Ignore a few that don't need to be passed.\n if (['id', 'class'].includes(attrName)) {\n return;\n }\n\n // Ignore setting custom attributes from the child class.\n // They should not have any effect on the native element, it adds noise in the DOM.\n if (!CustomMedia.observedAttributes.includes(attrName)\n && this.constructor.observedAttributes.includes(attrName)\n ) {\n return;\n }\n\n if (newValue === null) {\n this.nativeEl.removeAttribute?.(attrName);\n } else {\n if (this.nativeEl.getAttribute?.(attrName) != newValue) {\n this.nativeEl.setAttribute?.(attrName, newValue);\n }\n }\n }\n\n connectedCallback() {\n this.#init();\n }\n };\n};\n\nfunction getNativeElProps(nativeElTest) {\n // Map all native element properties to the custom element\n // so that they're applied to the native element.\n // Skipping HTMLElement because of things like \"attachShadow\"\n // causing issues. Most of those props still need to apply to\n // the custom element.\n let nativeElProps = [];\n\n // Walk the prototype chain up to HTMLElement.\n // This will grab all super class props in between.\n // i.e. VideoElement and MediaElement\n for (\n let proto = Object.getPrototypeOf(nativeElTest);\n proto && proto !== HTMLElement.prototype;\n proto = Object.getPrototypeOf(proto)\n ) {\n nativeElProps.push(...Object.getOwnPropertyNames(proto));\n }\n\n return nativeElProps;\n}\n\nfunction serializeAttributes(attrs) {\n let html = '';\n for (const key in attrs) {\n const value = attrs[key];\n if (value === '') html += ` ${key}`;\n else html += ` ${key}=\"${value}\"`;\n }\n return html;\n}\n\nfunction namedNodeMapToObject(namedNodeMap) {\n let obj = {};\n for (let attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\n\nexport const CustomVideoElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'video' });\n\nexport const CustomAudioElement = CustomMediaMixin(globalThis.HTMLElement ?? class {}, { tag: 'audio' });\n", "/* global WeakRef */\n\nexport const privateProps = new WeakMap();\n\nexport class InvalidStateError extends Error {}\nexport class NotSupportedError extends Error {}\nexport class NotFoundError extends Error {}\n\n// Fallback to a plain Set if WeakRef is not available.\nexport const IterableWeakSet = globalThis.WeakRef ?\n class extends Set {\n add(el) {\n super.add(new WeakRef(el));\n }\n forEach(fn) {\n super.forEach((ref) => {\n const value = ref.deref();\n if (value) fn(value);\n });\n }\n } : Set;\n\nexport function onCastApiAvailable(callback) {\n if (!globalThis.chrome?.cast?.isAvailable) {\n globalThis.__onGCastApiAvailable = () => {\n // The globalThis.__onGCastApiAvailable callback alone is not reliable for\n // the added cast.framework. It's loaded in a separate JS file.\n // https://www.gstatic.com/eureka/clank/101/cast_sender.js\n // https://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n };\n } else if (!globalThis.cast?.framework) {\n customElements\n .whenDefined('google-cast-button')\n .then(callback);\n } else {\n callback();\n }\n}\n\nexport function requiresCastFramework() {\n // todo: exclude for Android>=56 which supports the Remote Playback API natively.\n return globalThis.chrome;\n}\n\nexport function loadCastFramework() {\n const sdkUrl = 'https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1';\n if (globalThis.chrome?.cast || document.querySelector(`script[src=\"${sdkUrl}\"]`)) return;\n\n const script = document.createElement('script');\n script.src = sdkUrl;\n document.head.append(script);\n}\n\nexport function castContext() {\n return globalThis.cast?.framework?.CastContext.getInstance();\n}\n\nexport function currentSession() {\n return castContext()?.getCurrentSession();\n}\n\nexport function currentMedia() {\n return currentSession()?.getSessionObj().media[0];\n}\n\nexport function editTracksInfo(request) {\n return new Promise((resolve, reject) => {\n currentMedia().editTracksInfo(request, resolve, reject);\n });\n}\n\nexport function getMediaStatus(request) {\n return new Promise((resolve, reject) => {\n currentMedia().getStatus(request, resolve, reject);\n });\n}\n\nexport function setCastOptions(options) {\n return castContext().setOptions({\n ...getDefaultCastOptions(),\n ...options,\n });\n}\n\nexport function getDefaultCastOptions() {\n return {\n // Set the receiver application ID to your own (created in the\n // Google Cast Developer Console), or optionally\n // use the chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID\n receiverApplicationId: 'CC1AD845',\n\n // Auto join policy can be one of the following three:\n // ORIGIN_SCOPED - Auto connect from same appId and page origin\n // TAB_AND_ORIGIN_SCOPED - Auto connect from same appId, page origin, and tab\n // PAGE_SCOPED - No auto connect\n autoJoinPolicy: 'origin_scoped',\n\n // The following flag enables Cast Connect(requires Chrome 87 or higher)\n // https://developers.googleblog.com/2020/08/introducing-cast-connect-android-tv.html\n androidReceiverCompatible: false,\n\n language: 'en-US',\n resumeSavedSession: true,\n };\n}\n", "/* global chrome, cast */\nimport {\n privateProps,\n IterableWeakSet,\n InvalidStateError,\n NotSupportedError,\n onCastApiAvailable,\n castContext,\n currentSession,\n currentMedia,\n editTracksInfo,\n getMediaStatus,\n setCastOptions\n} from './castable-utils.js';\n\nconst remoteInstances = new IterableWeakSet();\nconst castElementRef = new WeakSet();\n\nlet cf;\n\nonCastApiAvailable(() => {\n if (!globalThis.chrome?.cast?.isAvailable) {\n // Useful to see in verbose logs if this shows undefined or false.\n console.debug('chrome.cast.isAvailable', globalThis.chrome?.cast?.isAvailable);\n return;\n }\n\n if (!cf) {\n cf = cast.framework;\n\n castContext().addEventListener(cf.CastContextEventType.CAST_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onCastStateChanged?.(e));\n });\n\n castContext().addEventListener(cf.CastContextEventType.SESSION_STATE_CHANGED, (e) => {\n remoteInstances.forEach((r) => privateProps.get(r).onSessionStateChanged?.(e));\n });\n\n remoteInstances.forEach((r) => privateProps.get(r).init?.());\n }\n});\n\n\nlet remotePlaybackCallbackIdCount = 0;\n\n/**\n * Remote Playback shim for the Google cast SDK.\n * https://w3c.github.io/remote-playback/\n */\nexport class RemotePlayback extends EventTarget {\n #media;\n #isInit;\n #remotePlayer;\n #remoteListeners;\n #state = 'disconnected';\n #available = false;\n #callbacks = new Set();\n #callbackIds = new WeakMap();\n\n constructor(media) {\n super();\n\n this.#media = media;\n\n remoteInstances.add(this);\n privateProps.set(this, {\n init: () => this.#init(),\n onCastStateChanged: () => this.#onCastStateChanged(),\n onSessionStateChanged: () => this.#onSessionStateChanged(),\n getCastPlayer: () => this.#castPlayer,\n });\n\n this.#init();\n }\n\n get #castPlayer() {\n if (castElementRef.has(this.#media)) return this.#remotePlayer;\n return undefined;\n }\n\n /**\n * https://developer.mozilla.org/en-US/docs/Web/API/RemotePlayback/state\n * @return {'disconnected'|'connecting'|'connected'}\n */\n get state() {\n return this.#state;\n }\n\n async watchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n this.#callbackIds.set(callback, ++remotePlaybackCallbackIdCount);\n this.#callbacks.add(callback);\n\n return remotePlaybackCallbackIdCount;\n }\n\n async cancelWatchAvailability(callback) {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (callback) {\n this.#callbacks.delete(callback);\n } else {\n this.#callbacks.clear();\n }\n }\n\n async prompt() {\n if (this.#media.disableRemotePlayback) {\n throw new InvalidStateError('disableRemotePlayback attribute is present.');\n }\n\n if (!globalThis.chrome?.cast?.isAvailable) {\n throw new NotSupportedError('The RemotePlayback API is disabled on this platform.');\n }\n\n const willDisconnect = castElementRef.has(this.#media);\n castElementRef.add(this.#media);\n\n setCastOptions(this.#media.castOptions);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n try {\n // Open browser cast menu.\n await castContext().requestSession();\n } catch (err) {\n // Don't throw an error if disconnecting or cancelling.\n if (err === 'cancel') {\n // If there will be no disconnect, reset some state here.\n if (!willDisconnect) {\n castElementRef.delete(this.#media);\n }\n return;\n }\n\n throw new Error(err);\n }\n\n privateProps.get(this.#media)?.loadOnPrompt?.();\n }\n\n #disconnect() {\n if (!castElementRef.has(this.#media)) return;\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.removeEventListener(event, listener);\n });\n\n castElementRef.delete(this.#media);\n\n // isMuted is not in savedPlayerState. should we sync this back to local?\n this.#media.muted = this.#remotePlayer.isMuted;\n this.#media.currentTime = this.#remotePlayer.savedPlayerState.currentTime;\n if (this.#remotePlayer.savedPlayerState.isPaused === false) {\n this.#media.play();\n }\n }\n\n #onCastStateChanged() {\n // Cast state: NO_DEVICES_AVAILABLE, NOT_CONNECTED, CONNECTING, CONNECTED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.CastState\n const castState = castContext().getCastState();\n\n if (castElementRef.has(this.#media)) {\n if (castState === 'CONNECTING') {\n this.#state = 'connecting';\n this.dispatchEvent(new Event('connecting'));\n }\n }\n\n if (!this.#available && castState?.includes('CONNECT')) {\n this.#available = true;\n for (let callback of this.#callbacks) callback(true);\n }\n else if (this.#available && (!castState || castState === 'NO_DEVICES_AVAILABLE')) {\n this.#available = false;\n for (let callback of this.#callbacks) callback(false);\n }\n }\n\n async #onSessionStateChanged() {\n // Session states: NO_SESSION, SESSION_STARTING, SESSION_STARTED, SESSION_START_FAILED,\n // SESSION_ENDING, SESSION_ENDED, SESSION_RESUMED\n // https://developers.google.com/cast/docs/reference/web_sender/cast.framework#.SessionState\n\n const { SESSION_RESUMED } = cf.SessionState;\n if (castContext().getSessionState() === SESSION_RESUMED) {\n /**\n * Figure out if this was the video that started the resumed session.\n * @TODO make this more specific than just checking against the video src!! (WL)\n *\n * If this video element can get the same unique id on each browser refresh\n * it would be possible to pass this unique id w/ `LoadRequest.customData`\n * and verify against currentMedia().customData below.\n */\n if (this.#media.castSrc === currentMedia()?.media.contentId) {\n castElementRef.add(this.#media);\n\n Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n this.#remotePlayer.controller.addEventListener(event, listener);\n });\n\n /**\n * There is cast framework resume session bug when you refresh the page a few\n * times the this.#remotePlayer.currentTime will not be in sync with the receiver :(\n * The below status request syncs it back up.\n */\n try {\n await getMediaStatus(new chrome.cast.media.GetStatusRequest());\n } catch (error) {\n console.error(error);\n }\n\n // Dispatch the play, playing events manually to sync remote playing state.\n this.#remoteListeners[cf.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n this.#remoteListeners[cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n }\n }\n }\n\n #init() {\n if (!cf || this.#isInit) return;\n this.#isInit = true;\n\n setCastOptions(this.#media.castOptions);\n\n /**\n * @TODO add listeners for addtrack, removetrack (WL)\n * This only has an impact on <track> with a `src` because these have to be\n * loaded manually in the load() method. This will require a new load() call\n * for each added/removed track w/ src.\n */\n this.#media.textTracks.addEventListener('change', () => this.#updateRemoteTextTrack());\n\n this.#onCastStateChanged();\n\n this.#remotePlayer = new cf.RemotePlayer();\n new cf.RemotePlayerController(this.#remotePlayer);\n\n this.#remoteListeners = {\n [cf.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value }) => {\n if (value === true) {\n this.#state = 'connected';\n this.dispatchEvent(new Event('connect'));\n } else {\n this.#disconnect();\n this.#state = 'disconnected';\n this.dispatchEvent(new Event('disconnect'));\n }\n },\n [cf.RemotePlayerEventType.DURATION_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('durationchange'));\n },\n [cf.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('volumechange'));\n },\n [cf.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n this.#media.dispatchEvent(new Event('timeupdate'));\n },\n [cf.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n this.#media.dispatchEvent(new Event('resize'));\n },\n [cf.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n this.#media.dispatchEvent(new Event(this.paused ? 'pause' : 'play'));\n },\n [cf.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n // Player states: IDLE, PLAYING, PAUSED, BUFFERING\n // https://developers.google.com/cast/docs/reference/web_sender/chrome.cast.media#.PlayerState\n\n // pause event is handled above.\n if (this.#castPlayer?.playerState === chrome.cast.media.PlayerState.PAUSED) {\n return;\n }\n\n this.#media.dispatchEvent(\n new Event(\n {\n [chrome.cast.media.PlayerState.PLAYING]: 'playing',\n [chrome.cast.media.PlayerState.BUFFERING]: 'waiting',\n [chrome.cast.media.PlayerState.IDLE]: 'emptied',\n }[this.#castPlayer?.playerState]\n )\n );\n },\n [cf.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n if (!this.#castPlayer?.isMediaLoaded) return;\n\n // mediaInfo is not immediately available due to a bug? wait one tick\n await Promise.resolve();\n this.#onRemoteMediaLoaded();\n },\n };\n }\n\n #onRemoteMediaLoaded() {\n this.#updateRemoteTextTrack();\n }\n\n async #updateRemoteTextTrack() {\n if (!this.#castPlayer) return;\n\n // Get the tracks w/ trackId's that have been loaded; manually or via a playlist like a M3U8 or MPD.\n const remoteTracks = this.#remotePlayer.mediaInfo?.tracks ?? [];\n const remoteSubtitles = remoteTracks.filter(\n ({ type }) => type === chrome.cast.media.TrackType.TEXT\n );\n\n const localSubtitles = [...this.#media.textTracks].filter(\n ({ kind }) => kind === 'subtitles' || kind === 'captions'\n );\n\n // Create a new array from the local subs w/ the trackId's from the remote subs.\n const subtitles = remoteSubtitles\n .map(({ language, name, trackId }) => {\n // Find the corresponding local text track and assign the trackId.\n const { mode } =\n localSubtitles.find(\n (local) => local.language === language && local.label === name\n ) ?? {};\n if (mode) return { mode, trackId };\n return false;\n })\n .filter(Boolean);\n\n const hiddenSubtitles = subtitles.filter(\n ({ mode }) => mode !== 'showing'\n );\n const hiddenTrackIds = hiddenSubtitles.map(({ trackId }) => trackId);\n const showingSubtitle = subtitles.find(({ mode }) => mode === 'showing');\n\n // Note this could also include audio or video tracks, diff against local state.\n const activeTrackIds =\n currentSession()?.getSessionObj().media[0]\n ?.activeTrackIds ?? [];\n let requestTrackIds = activeTrackIds;\n\n if (activeTrackIds.length) {\n // Filter out all local hidden subtitle trackId's.\n requestTrackIds = requestTrackIds.filter(\n (id) => !hiddenTrackIds.includes(id)\n );\n }\n\n if (showingSubtitle?.trackId) {\n requestTrackIds = [...requestTrackIds, showingSubtitle.trackId];\n }\n\n // Remove duplicate ids.\n requestTrackIds = [...new Set(requestTrackIds)];\n\n const arrayEquals = (a, b) =>\n a.length === b.length && a.every((a) => b.includes(a));\n if (!arrayEquals(activeTrackIds, requestTrackIds)) {\n try {\n const request = new chrome.cast.media.EditTracksInfoRequest(\n requestTrackIds\n );\n await editTracksInfo(request);\n } catch (error) {\n console.error(error);\n }\n }\n }\n}\n", "/* global chrome */\nimport { RemotePlayback } from './castable-remote-playback.js';\nimport {\n privateProps,\n requiresCastFramework,\n loadCastFramework,\n currentSession,\n getDefaultCastOptions\n} from './castable-utils.js';\n\n/**\n * CastableMediaMixin\n *\n * This mixin function provides a way to compose multiple classes.\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n *\n * @param {HTMLMediaElement} superclass - HTMLMediaElement or an extended class of it.\n * @return {CastableMedia}\n */\nexport const CastableMediaMixin = (superclass) =>\n class CastableMedia extends superclass {\n\n static observedAttributes = [\n ...(superclass.observedAttributes ?? []),\n 'cast-src',\n 'cast-content-type',\n 'cast-stream-type',\n 'cast-receiver',\n ];\n\n #localState = { paused: false };\n #castOptions = getDefaultCastOptions();\n #castCustomData;\n #remote;\n\n get remote() {\n if (this.#remote) return this.#remote;\n\n if (requiresCastFramework()) {\n loadCastFramework();\n\n privateProps.set(this, {\n loadOnPrompt: () => this.#loadOnPrompt()\n });\n\n return (this.#remote = new RemotePlayback(this));\n }\n\n return super.remote;\n }\n\n get #castPlayer() {\n return privateProps.get(this.remote)?.getCastPlayer?.();\n }\n\n attributeChangedCallback(attrName, oldValue, newValue) {\n super.attributeChangedCallback(attrName, oldValue, newValue);\n\n if (attrName === 'cast-receiver' && newValue) {\n this.#castOptions.receiverApplicationId = newValue;\n return;\n }\n\n if (!this.#castPlayer) return;\n\n switch (attrName) {\n case 'cast-stream-type':\n case 'cast-src':\n this.load();\n break;\n }\n }\n\n async #loadOnPrompt() {\n // Pause locally when the session is created.\n this.#localState.paused = super.paused;\n super.pause();\n\n // Sync over the muted state but not volume, 100% is different on TV's :P\n this.muted = super.muted;\n\n try {\n await this.load();\n } catch (err) {\n console.error(err);\n }\n }\n\n async load() {\n if (!this.#castPlayer) return super.load();\n\n const mediaInfo = new chrome.cast.media.MediaInfo(this.castSrc, this.castContentType);\n mediaInfo.customData = this.castCustomData;\n\n // Manually add text tracks with a `src` attribute.\n // M3U8's load text tracks in the receiver, handle these in the media loaded event.\n const subtitles = [...this.querySelectorAll('track')].filter(\n ({ kind, src }) => src && (kind === 'subtitles' || kind === 'captions')\n );\n\n const activeTrackIds = [];\n let textTrackIdCount = 0;\n\n if (subtitles.length) {\n mediaInfo.tracks = subtitles.map((trackEl) => {\n const trackId = ++textTrackIdCount;\n // only activate 1 subtitle text track.\n if (activeTrackIds.length === 0 && trackEl.track.mode === 'showing') {\n activeTrackIds.push(trackId);\n }\n\n const track = new chrome.cast.media.Track(\n trackId,\n chrome.cast.media.TrackType.TEXT\n );\n track.trackContentId = trackEl.src;\n track.trackContentType = 'text/vtt';\n track.subtype =\n trackEl.kind === 'captions'\n ? chrome.cast.media.TextTrackType.CAPTIONS\n : chrome.cast.media.TextTrackType.SUBTITLES;\n track.name = trackEl.label;\n track.language = trackEl.srclang;\n return track;\n });\n }\n\n if (this.castStreamType === 'live') {\n mediaInfo.streamType = chrome.cast.media.StreamType.LIVE;\n } else {\n mediaInfo.streamType = chrome.cast.media.StreamType.BUFFERED;\n }\n\n mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata();\n mediaInfo.metadata.title = this.title;\n mediaInfo.metadata.images = [{ url: this.poster }];\n\n const request = new chrome.cast.media.LoadRequest(mediaInfo);\n request.currentTime = super.currentTime ?? 0;\n request.autoplay = !this.#localState.paused;\n request.activeTrackIds = activeTrackIds;\n\n await currentSession()?.loadMedia(request);\n\n this.dispatchEvent(new Event('volumechange'));\n }\n\n play() {\n if (this.#castPlayer) {\n if (this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n return super.play();\n }\n\n pause() {\n if (this.#castPlayer) {\n if (!this.#castPlayer.isPaused) {\n this.#castPlayer.controller?.playOrPause();\n }\n return;\n }\n super.pause();\n }\n\n /**\n * @see https://developers.google.com/cast/docs/reference/web_sender/cast.framework.CastOptions\n * @readonly\n *\n * @typedef {Object} CastOptions\n * @property {string} [receiverApplicationId='CC1AD845'] - The app id of the cast receiver.\n * @property {string} [autoJoinPolicy='origin_scoped'] - The auto join policy.\n * @property {string} [language='en-US'] - The language to use for the cast receiver.\n * @property {boolean} [androidReceiverCompatible=false] - Whether to use the Cast Connect.\n * @property {boolean} [resumeSavedSession=true] - Whether to resume the last session.\n *\n * @return {CastOptions}\n */\n get castOptions() {\n return this.#castOptions;\n }\n\n get castReceiver() {\n return this.getAttribute('cast-receiver') ?? undefined;\n }\n\n set castReceiver(val) {\n if (this.castReceiver == val) return;\n this.setAttribute('cast-receiver', `${val}`);\n }\n\n // Allow the cast source url to be different than <video src>, could be a blob.\n get castSrc() {\n // Try the first <source src> for usage with even more native markup.\n return (\n this.getAttribute('cast-src') ??\n this.querySelector('source')?.src ??\n this.currentSrc\n );\n }\n\n set castSrc(val) {\n if (this.castSrc == val) return;\n this.setAttribute('cast-src', `${val}`);\n }\n\n get castContentType() {\n return this.getAttribute('cast-content-type') ?? undefined;\n }\n\n set castContentType(val) {\n this.setAttribute('cast-content-type', `${val}`);\n }\n\n get castStreamType() {\n // NOTE: Per https://github.com/video-dev/media-ui-extensions/issues/3 `streamType` may yield `\"unknown\"`\n return this.getAttribute('cast-stream-type') ?? this.streamType ?? undefined;\n }\n\n set castStreamType(val) {\n this.setAttribute('cast-stream-type', `${val}`);\n }\n\n get castCustomData() {\n return this.#castCustomData;\n }\n\n set castCustomData(val) {\n const valType = typeof val;\n if (!['object', 'undefined'].includes(valType)) {\n console.error(`castCustomData must be nullish or an object but value was of type ${valType}`);\n return;\n }\n\n this.#castCustomData = val;\n }\n\n get readyState() {\n if (this.#castPlayer) {\n switch (this.#castPlayer.playerState) {\n case chrome.cast.media.PlayerState.IDLE:\n return 0;\n case chrome.cast.media.PlayerState.BUFFERING:\n return 2;\n default:\n return 3;\n }\n }\n return super.readyState;\n }\n\n get paused() {\n if (this.#castPlayer) return this.#castPlayer.isPaused;\n return super.paused;\n }\n\n get muted() {\n if (this.#castPlayer) return this.#castPlayer?.isMuted;\n return super.muted;\n }\n\n set muted(val) {\n if (this.#castPlayer) {\n if (\n (val && !this.#castPlayer.isMuted) ||\n (!val && this.#castPlayer.isMuted)\n ) {\n this.#castPlayer.controller?.muteOrUnmute();\n }\n return;\n }\n super.muted = val;\n }\n\n get volume() {\n if (this.#castPlayer) return this.#castPlayer?.volumeLevel ?? 1;\n return super.volume;\n }\n\n set volume(val) {\n if (this.#castPlayer) {\n this.#castPlayer.volumeLevel = +val;\n this.#castPlayer.controller?.setVolumeLevel();\n return;\n }\n super.volume = val;\n }\n\n get duration() {\n // castPlayer duration returns `0` when no media is loaded.\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.duration ?? NaN;\n }\n return super.duration;\n }\n\n get currentTime() {\n if (this.#castPlayer && this.#castPlayer?.isMediaLoaded) {\n return this.#castPlayer?.currentTime ?? 0;\n }\n return super.currentTime;\n }\n\n set currentTime(val) {\n if (this.#castPlayer) {\n this.#castPlayer.currentTime = val;\n this.#castPlayer.controller?.seek();\n return;\n }\n super.currentTime = val;\n }\n };\n\nexport const CastableVideoMixin = CastableMediaMixin;\n", "class TrackEvent extends Event {\n track;\n constructor(type, init) {\n super(type);\n this.track = init.track;\n }\n}\nexport {\n TrackEvent\n};\n", "const privateProps = /* @__PURE__ */ new WeakMap();\nfunction getPrivate(instance) {\n return privateProps.get(instance) ?? setPrivate(instance, {});\n}\nfunction setPrivate(instance, props) {\n let saved = privateProps.get(instance);\n if (!saved)\n privateProps.set(instance, saved = {});\n return Object.assign(saved, props);\n}\nexport {\n getPrivate,\n setPrivate\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addVideoTrack(media, track) {\n const trackList = media.videoTracks;\n getPrivate(track).media = media;\n if (!getPrivate(track).renditionSet) {\n getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n }\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.add(track);\n const index = trackSet.size - 1;\n if (!(index in VideoTrackList.prototype)) {\n Object.defineProperty(VideoTrackList.prototype, index, {\n get() {\n return [...getPrivate(this).trackSet][index];\n }\n });\n }\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n });\n}\nfunction removeVideoTrack(track) {\n const trackList = getPrivate(track).media?.videoTracks;\n if (!trackList)\n return;\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.delete(track);\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n });\n}\nfunction selectedChanged(selected) {\n const trackList = getPrivate(selected).media.videoTracks ?? [];\n let hasUnselected = false;\n for (const track of trackList) {\n if (track === selected)\n continue;\n track.selected = false;\n hasUnselected = true;\n }\n if (hasUnselected) {\n if (getPrivate(trackList).changeRequested)\n return;\n getPrivate(trackList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(trackList).changeRequested;\n trackList.dispatchEvent(new Event(\"change\"));\n });\n }\n}\nclass VideoTrackList extends EventTarget {\n #addTrackCallback;\n #removeTrackCallback;\n #changeCallback;\n constructor() {\n super();\n getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n }\n get #tracks() {\n return getPrivate(this).trackSet;\n }\n [Symbol.iterator]() {\n return this.#tracks.values();\n }\n get length() {\n return this.#tracks.size;\n }\n getTrackById(id) {\n return [...this.#tracks].find((track) => track.id === id) ?? null;\n }\n get selectedIndex() {\n return [...this.#tracks].findIndex((track) => track.selected);\n }\n get onaddtrack() {\n return this.#addTrackCallback;\n }\n set onaddtrack(callback) {\n if (this.#addTrackCallback) {\n this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n this.#addTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addTrackCallback = callback;\n this.addEventListener(\"addtrack\", callback);\n }\n }\n get onremovetrack() {\n return this.#removeTrackCallback;\n }\n set onremovetrack(callback) {\n if (this.#removeTrackCallback) {\n this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n this.#removeTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeTrackCallback = callback;\n this.addEventListener(\"removetrack\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n VideoTrackList,\n addVideoTrack,\n removeVideoTrack,\n selectedChanged\n};\n", "class RenditionEvent extends Event {\n rendition;\n constructor(type, init) {\n super(type);\n this.rendition = init.rendition;\n }\n}\nexport {\n RenditionEvent\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n const renditionList = getPrivate(track).media.videoRenditions;\n getPrivate(rendition).media = getPrivate(track).media;\n getPrivate(rendition).track = track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.add(rendition);\n const index = renditionSet.size - 1;\n if (!(index in VideoRenditionList.prototype)) {\n Object.defineProperty(VideoRenditionList.prototype, index, {\n get() {\n return getCurrentRenditions(this)[index];\n }\n });\n }\n queueMicrotask(() => {\n if (!track.selected)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n });\n}\nfunction removeRendition(rendition) {\n const renditionList = getPrivate(rendition).media.videoRenditions;\n const track = getPrivate(rendition).track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.delete(rendition);\n queueMicrotask(() => {\n const track2 = getPrivate(rendition).track;\n if (!track2.selected)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n });\n}\nfunction selectedChanged(rendition) {\n const renditionList = getPrivate(rendition).media.videoRenditions;\n if (!renditionList || getPrivate(renditionList).changeRequested)\n return;\n getPrivate(renditionList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(renditionList).changeRequested;\n const track = getPrivate(rendition).track;\n if (!track.selected)\n return;\n renditionList.dispatchEvent(new Event(\"change\"));\n });\n}\nfunction getCurrentRenditions(renditionList) {\n const media = getPrivate(renditionList).media;\n return [...media.videoTracks].filter((track) => track.selected).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass VideoRenditionList extends EventTarget {\n #addRenditionCallback;\n #removeRenditionCallback;\n #changeCallback;\n [Symbol.iterator]() {\n return getCurrentRenditions(this).values();\n }\n get length() {\n return getCurrentRenditions(this).length;\n }\n getRenditionById(id) {\n return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n }\n get selectedIndex() {\n return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n }\n set selectedIndex(index) {\n for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n rendition.selected = i === index;\n }\n }\n get onaddrendition() {\n return this.#addRenditionCallback;\n }\n set onaddrendition(callback) {\n if (this.#addRenditionCallback) {\n this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n this.#addRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addRenditionCallback = callback;\n this.addEventListener(\"addrendition\", callback);\n }\n }\n get onremoverendition() {\n return this.#removeRenditionCallback;\n }\n set onremoverendition(callback) {\n if (this.#removeRenditionCallback) {\n this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n this.#removeRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeRenditionCallback = callback;\n this.addEventListener(\"removerendition\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n VideoRenditionList,\n addRendition,\n removeRendition,\n selectedChanged\n};\n", "import { selectedChanged } from \"./video-rendition-list.js\";\nclass VideoRendition {\n src;\n id;\n width;\n height;\n bitrate;\n frameRate;\n codec;\n #selected = false;\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n selectedChanged(this);\n }\n}\nexport {\n VideoRendition\n};\n", "import { selectedChanged } from \"./video-track-list.js\";\nimport { VideoRendition } from \"./video-rendition.js\";\nimport { addRendition, removeRendition } from \"./video-rendition-list.js\";\nconst VideoTrackKind = {\n alternative: \"alternative\",\n captions: \"captions\",\n main: \"main\",\n sign: \"sign\",\n subtitles: \"subtitles\",\n commentary: \"commentary\"\n};\nclass VideoTrack {\n id;\n kind;\n label = \"\";\n language = \"\";\n sourceBuffer;\n #selected = false;\n addRendition(src, width, height, codec, bitrate, frameRate) {\n const rendition = new VideoRendition();\n rendition.src = src;\n rendition.width = width;\n rendition.height = height;\n rendition.frameRate = frameRate;\n rendition.bitrate = bitrate;\n rendition.codec = codec;\n addRendition(this, rendition);\n return rendition;\n }\n removeRendition(rendition) {\n removeRendition(rendition);\n }\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n if (val !== true)\n return;\n selectedChanged(this);\n }\n}\nexport {\n VideoTrack,\n VideoTrackKind\n};\n", "import { RenditionEvent } from \"./rendition-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addRendition(track, rendition) {\n const renditionList = getPrivate(track).media.audioRenditions;\n getPrivate(rendition).media = getPrivate(track).media;\n getPrivate(rendition).track = track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.add(rendition);\n const index = renditionSet.size - 1;\n if (!(index in AudioRenditionList.prototype)) {\n Object.defineProperty(AudioRenditionList.prototype, index, {\n get() {\n return getCurrentRenditions(this)[index];\n }\n });\n }\n queueMicrotask(() => {\n if (!track.enabled)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"addrendition\", { rendition }));\n });\n}\nfunction removeRendition(rendition) {\n const renditionList = getPrivate(rendition).media.audioRenditions;\n const track = getPrivate(rendition).track;\n const renditionSet = getPrivate(track).renditionSet;\n renditionSet.delete(rendition);\n queueMicrotask(() => {\n const track2 = getPrivate(rendition).track;\n if (!track2.enabled)\n return;\n renditionList.dispatchEvent(new RenditionEvent(\"removerendition\", { rendition }));\n });\n}\nfunction selectedChanged(rendition) {\n const renditionList = getPrivate(rendition).media.audioRenditions;\n if (!renditionList || getPrivate(renditionList).changeRequested)\n return;\n getPrivate(renditionList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(renditionList).changeRequested;\n const track = getPrivate(rendition).track;\n if (!track.enabled)\n return;\n renditionList.dispatchEvent(new Event(\"change\"));\n });\n}\nfunction getCurrentRenditions(renditionList) {\n const media = getPrivate(renditionList).media;\n return [...media.audioTracks].filter((track) => track.enabled).flatMap((track) => [...getPrivate(track).renditionSet]);\n}\nclass AudioRenditionList extends EventTarget {\n #addRenditionCallback;\n #removeRenditionCallback;\n #changeCallback;\n [Symbol.iterator]() {\n return getCurrentRenditions(this).values();\n }\n get length() {\n return getCurrentRenditions(this).length;\n }\n getRenditionById(id) {\n return getCurrentRenditions(this).find((rendition) => `${rendition.id}` === `${id}`) ?? null;\n }\n get selectedIndex() {\n return getCurrentRenditions(this).findIndex((rendition) => rendition.selected);\n }\n set selectedIndex(index) {\n for (const [i, rendition] of getCurrentRenditions(this).entries()) {\n rendition.selected = i === index;\n }\n }\n get onaddrendition() {\n return this.#addRenditionCallback;\n }\n set onaddrendition(callback) {\n if (this.#addRenditionCallback) {\n this.removeEventListener(\"addrendition\", this.#addRenditionCallback);\n this.#addRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addRenditionCallback = callback;\n this.addEventListener(\"addrendition\", callback);\n }\n }\n get onremoverendition() {\n return this.#removeRenditionCallback;\n }\n set onremoverendition(callback) {\n if (this.#removeRenditionCallback) {\n this.removeEventListener(\"removerendition\", this.#removeRenditionCallback);\n this.#removeRenditionCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeRenditionCallback = callback;\n this.addEventListener(\"removerendition\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n AudioRenditionList,\n addRendition,\n removeRendition,\n selectedChanged\n};\n", "import { selectedChanged } from \"./audio-rendition-list.js\";\nclass AudioRendition {\n src;\n id;\n bitrate;\n codec;\n #selected = false;\n get selected() {\n return this.#selected;\n }\n set selected(val) {\n if (this.#selected === val)\n return;\n this.#selected = val;\n selectedChanged(this);\n }\n}\nexport {\n AudioRendition\n};\n", "import { TrackEvent } from \"./track-event.js\";\nimport { getPrivate } from \"./utils.js\";\nfunction addAudioTrack(media, track) {\n const trackList = media.audioTracks;\n getPrivate(track).media = media;\n if (!getPrivate(track).renditionSet) {\n getPrivate(track).renditionSet = /* @__PURE__ */ new Set();\n }\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.add(track);\n const index = trackSet.size - 1;\n if (!(index in AudioTrackList.prototype)) {\n Object.defineProperty(AudioTrackList.prototype, index, {\n get() {\n return [...getPrivate(this).trackSet][index];\n }\n });\n }\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"addtrack\", { track }));\n });\n}\nfunction removeAudioTrack(track) {\n const trackList = getPrivate(track).media?.audioTracks;\n if (!trackList)\n return;\n const trackSet = getPrivate(trackList).trackSet;\n trackSet.delete(track);\n queueMicrotask(() => {\n trackList.dispatchEvent(new TrackEvent(\"removetrack\", { track }));\n });\n}\nfunction enabledChanged(track) {\n const trackList = getPrivate(track).media.audioTracks;\n if (!trackList || getPrivate(trackList).changeRequested)\n return;\n getPrivate(trackList).changeRequested = true;\n queueMicrotask(() => {\n delete getPrivate(trackList).changeRequested;\n trackList.dispatchEvent(new Event(\"change\"));\n });\n}\nclass AudioTrackList extends EventTarget {\n #addTrackCallback;\n #removeTrackCallback;\n #changeCallback;\n constructor() {\n super();\n getPrivate(this).trackSet = /* @__PURE__ */ new Set();\n }\n get #tracks() {\n return getPrivate(this).trackSet;\n }\n [Symbol.iterator]() {\n return this.#tracks.values();\n }\n get length() {\n return this.#tracks.size;\n }\n getTrackById(id) {\n return [...this.#tracks].find((track) => track.id === id) ?? null;\n }\n get onaddtrack() {\n return this.#addTrackCallback;\n }\n set onaddtrack(callback) {\n if (this.#addTrackCallback) {\n this.removeEventListener(\"addtrack\", this.#addTrackCallback);\n this.#addTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#addTrackCallback = callback;\n this.addEventListener(\"addtrack\", callback);\n }\n }\n get onremovetrack() {\n return this.#removeTrackCallback;\n }\n set onremovetrack(callback) {\n if (this.#removeTrackCallback) {\n this.removeEventListener(\"removetrack\", this.#removeTrackCallback);\n this.#removeTrackCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#removeTrackCallback = callback;\n this.addEventListener(\"removetrack\", callback);\n }\n }\n get onchange() {\n return this.#changeCallback;\n }\n set onchange(callback) {\n if (this.#changeCallback) {\n this.removeEventListener(\"change\", this.#changeCallback);\n this.#changeCallback = void 0;\n }\n if (typeof callback == \"function\") {\n this.#changeCallback = callback;\n this.addEventListener(\"change\", callback);\n }\n }\n}\nexport {\n AudioTrackList,\n addAudioTrack,\n enabledChanged,\n removeAudioTrack\n};\n", "import { AudioRendition } from \"./audio-rendition.js\";\nimport { enabledChanged } from \"./audio-track-list.js\";\nimport { addRendition, removeRendition } from \"./audio-rendition-list.js\";\nconst AudioTrackKind = {\n alternative: \"alternative\",\n descriptions: \"descriptions\",\n main: \"main\",\n \"main-desc\": \"main-desc\",\n translation: \"translation\",\n commentary: \"commentary\"\n};\nclass AudioTrack {\n id;\n kind;\n label = \"\";\n language = \"\";\n sourceBuffer;\n #enabled = false;\n addRendition(src, codec, bitrate) {\n const rendition = new AudioRendition();\n rendition.src = src;\n rendition.codec = codec;\n rendition.bitrate = bitrate;\n addRendition(this, rendition);\n return rendition;\n }\n removeRendition(rendition) {\n removeRendition(rendition);\n }\n get enabled() {\n return this.#enabled;\n }\n set enabled(val) {\n if (this.#enabled === val)\n return;\n this.#enabled = val;\n enabledChanged(this);\n }\n}\nexport {\n AudioTrack,\n AudioTrackKind\n};\n", "import { VideoTrack } from \"./video-track.js\";\nimport { VideoTrackList, addVideoTrack, removeVideoTrack } from \"./video-track-list.js\";\nimport { AudioTrack } from \"./audio-track.js\";\nimport { AudioTrackList, addAudioTrack, removeAudioTrack } from \"./audio-track-list.js\";\nimport { VideoRenditionList } from \"./video-rendition-list.js\";\nimport { AudioRenditionList } from \"./audio-rendition-list.js\";\nimport { getPrivate } from \"./utils.js\";\nconst nativeVideoTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"video\");\nconst nativeAudioTracksFn = getBaseMediaTracksFn(globalThis.HTMLMediaElement, \"audio\");\nfunction MediaTracksMixin(MediaElementClass) {\n if (!MediaElementClass?.prototype)\n return MediaElementClass;\n const videoTracksFn = getBaseMediaTracksFn(MediaElementClass, \"video\");\n if (!videoTracksFn || `${videoTracksFn}`.includes(\"[native code]\")) {\n Object.defineProperty(MediaElementClass.prototype, \"videoTracks\", {\n get() {\n return getVideoTracks(this);\n }\n });\n }\n const audioTracksFn = getBaseMediaTracksFn(MediaElementClass, \"audio\");\n if (!audioTracksFn || `${audioTracksFn}`.includes(\"[native code]\")) {\n Object.defineProperty(MediaElementClass.prototype, \"audioTracks\", {\n get() {\n return getAudioTracks(this);\n }\n });\n }\n if (!(\"addVideoTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.addVideoTrack = function(kind, label = \"\", language = \"\") {\n const track = new VideoTrack();\n track.kind = kind;\n track.label = label;\n track.language = language;\n addVideoTrack(this, track);\n return track;\n };\n }\n if (!(\"removeVideoTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.removeVideoTrack = removeVideoTrack;\n }\n if (!(\"addAudioTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.addAudioTrack = function(kind, label = \"\", language = \"\") {\n const track = new AudioTrack();\n track.kind = kind;\n track.label = label;\n track.language = language;\n addAudioTrack(this, track);\n return track;\n };\n }\n if (!(\"removeAudioTrack\" in MediaElementClass.prototype)) {\n MediaElementClass.prototype.removeAudioTrack = removeAudioTrack;\n }\n if (!(\"videoRenditions\" in MediaElementClass.prototype)) {\n Object.defineProperty(MediaElementClass.prototype, \"videoRenditions\", {\n get() {\n return initVideoRenditions(this);\n }\n });\n }\n const initVideoRenditions = (media) => {\n let renditions = getPrivate(media).videoRenditions;\n if (!renditions) {\n renditions = new VideoRenditionList();\n getPrivate(renditions).media = media;\n getPrivate(media).videoRenditions = renditions;\n }\n return renditions;\n };\n if (!(\"audioRenditions\" in MediaElementClass.prototype)) {\n Object.defineProperty(MediaElementClass.prototype, \"audioRenditions\", {\n get() {\n return initAudioRenditions(this);\n }\n });\n }\n const initAudioRenditions = (media) => {\n let renditions = getPrivate(media).audioRenditions;\n if (!renditions) {\n renditions = new AudioRenditionList();\n getPrivate(renditions).media = media;\n getPrivate(media).audioRenditions = renditions;\n }\n return renditions;\n };\n return MediaElementClass;\n}\nfunction getBaseMediaTracksFn(MediaElementClass, type) {\n if (MediaElementClass?.prototype) {\n return Object.getOwnPropertyDescriptor(MediaElementClass.prototype, `${type}Tracks`)?.get;\n }\n}\nfunction getVideoTracks(media) {\n let tracks = getPrivate(media).videoTracks;\n if (!tracks) {\n tracks = new VideoTrackList();\n getPrivate(media).videoTracks = tracks;\n if (nativeVideoTracksFn) {\n const nativeTracks = nativeVideoTracksFn.call(media.nativeEl ?? media);\n for (const nativeTrack of nativeTracks) {\n addVideoTrack(media, nativeTrack);\n }\n nativeTracks.addEventListener(\"change\", () => {\n tracks.dispatchEvent(new Event(\"change\"));\n });\n nativeTracks.addEventListener(\"addtrack\", (event) => {\n if ([...tracks].some((t) => t instanceof VideoTrack)) {\n for (const nativeTrack of nativeTracks) {\n removeVideoTrack(nativeTrack);\n }\n return;\n }\n addVideoTrack(media, event.track);\n });\n nativeTracks.addEventListener(\"removetrack\", (event) => {\n removeVideoTrack(event.track);\n });\n }\n }\n return tracks;\n}\nfunction getAudioTracks(media) {\n let tracks = getPrivate(media).audioTracks;\n if (!tracks) {\n tracks = new AudioTrackList();\n getPrivate(media).audioTracks = tracks;\n if (nativeAudioTracksFn) {\n const nativeTracks = nativeAudioTracksFn.call(media.nativeEl ?? media);\n for (const nativeTrack of nativeTracks) {\n addAudioTrack(media, nativeTrack);\n }\n nativeTracks.addEventListener(\"change\", () => {\n tracks.dispatchEvent(new Event(\"change\"));\n });\n nativeTracks.addEventListener(\"addtrack\", (event) => {\n if ([...tracks].some((t) => t instanceof AudioTrack)) {\n for (const nativeTrack of nativeTracks) {\n removeAudioTrack(nativeTrack);\n }\n return;\n }\n addAudioTrack(media, event.track);\n });\n nativeTracks.addEventListener(\"removetrack\", (event) => {\n removeAudioTrack(event.track);\n });\n }\n }\n return tracks;\n}\nexport {\n MediaTracksMixin\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["src_exports", "__export", "Attributes", "Events", "src_default", "__toCommonJS", "EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "internalGlobalThis", "internalDocument", "import_playback_core", "getEnvPlayerVersion", "player_version", "getPlayerVersion", "Events", "getAudioTemplateHTML", "attrs", "serializeAttributes", "getVideoTemplateHTML", "CustomMediaMixin", "superclass", "tag", "is", "_a", "_b", "_c", "_isDefined", "_define", "define_fn", "_isInit", "_nativeEl", "_childMap", "_init", "init_fn", "_syncMediaChildren", "syncMediaChildren_fn", "_upgradeProperty", "upgradeProperty_fn", "_forwardAttribute", "forwardAttribute_fn", "nativeElTest", "nativeElProps", "getNativeElProps", "__privateAdd", "__privateMethod", "__privateGet", "val", "__privateSet", "namedNodeMapToObject", "prop", "type", "event", "attrName", "oldValue", "newValue", "propsToAttrs", "args", "config", "attr", "removeNativeChildren", "el", "clone", "value", "_d", "_e", "_f", "__publicField", "proto", "html", "key", "namedNodeMap", "obj", "CustomVideoElement", "CustomAudioElement", "privateProps", "InvalidStateError", "NotSupportedError", "IterableWeakSet", "el", "fn", "ref", "value", "onCastApiAvailable", "callback", "_a", "_b", "_c", "requiresCastFramework", "loadCastFramework", "sdkUrl", "script", "castContext", "currentSession", "currentMedia", "editTracksInfo", "request", "resolve", "reject", "getMediaStatus", "setCastOptions", "options", "getDefaultCastOptions", "remoteInstances", "IterableWeakSet", "castElementRef", "cf", "onCastApiAvailable", "_a", "_b", "_c", "_d", "castContext", "e", "r", "privateProps", "remotePlaybackCallbackIdCount", "_media", "_isInit", "_remotePlayer", "_remoteListeners", "_state", "_available", "_callbacks", "_callbackIds", "_castPlayer", "castPlayer_get", "_disconnect", "disconnect_fn", "_onCastStateChanged", "onCastStateChanged_fn", "_onSessionStateChanged", "onSessionStateChanged_fn", "_init", "init_fn", "_onRemoteMediaLoaded", "onRemoteMediaLoaded_fn", "_updateRemoteTextTrack", "updateRemoteTextTrack_fn", "RemotePlayback", "media", "__privateAdd", "__privateSet", "__privateMethod", "__privateGet", "callback", "InvalidStateError", "NotSupportedError", "willDisconnect", "setCastOptions", "event", "listener", "err", "castState", "SESSION_RESUMED", "currentMedia", "getMediaStatus", "error", "value", "_e", "remoteSubtitles", "type", "localSubtitles", "kind", "subtitles", "language", "name", "trackId", "mode", "local", "hiddenTrackIds", "showingSubtitle", "activeTrackIds", "currentSession", "requestTrackIds", "id", "a", "b", "request", "editTracksInfo", "CastableMediaMixin", "superclass", "_a", "_b", "_localState", "_castOptions", "_castCustomData", "_remote", "_castPlayer", "castPlayer_get", "_loadOnPrompt", "loadOnPrompt_fn", "__privateAdd", "getDefaultCastOptions", "__privateGet", "requiresCastFramework", "loadCastFramework", "privateProps", "__privateMethod", "__privateSet", "RemotePlayback", "attrName", "oldValue", "newValue", "mediaInfo", "subtitles", "kind", "src", "activeTrackIds", "textTrackIdCount", "trackEl", "trackId", "track", "request", "currentSession", "val", "_c", "valType", "__superGet", "err", "__publicField", "TrackEvent", "type", "init", "__publicField", "privateProps", "getPrivate", "instance", "_a", "setPrivate", "props", "saved", "addVideoTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "VideoTrackList", "TrackEvent", "removeVideoTrack", "_a", "selectedChanged", "selected", "hasUnselected", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "RenditionEvent", "type", "init", "__publicField", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "VideoRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "VideoRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "_selected", "VideoTrack", "__publicField", "__privateAdd", "src", "width", "height", "codec", "bitrate", "frameRate", "rendition", "VideoRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "selectedChanged", "addRendition", "track", "rendition", "renditionList", "getPrivate", "renditionSet", "index", "AudioRenditionList", "getCurrentRenditions", "RenditionEvent", "removeRendition", "selectedChanged", "_addRenditionCallback", "_removeRenditionCallback", "_changeCallback", "__privateAdd", "id", "_a", "i", "__privateGet", "callback", "__privateSet", "_selected", "AudioRendition", "__publicField", "__privateAdd", "__privateGet", "val", "__privateSet", "selectedChanged", "addAudioTrack", "media", "track", "trackList", "getPrivate", "trackSet", "index", "AudioTrackList", "TrackEvent", "removeAudioTrack", "_a", "enabledChanged", "_addTrackCallback", "_removeTrackCallback", "_changeCallback", "_tracks", "tracks_get", "__privateAdd", "__privateGet", "id", "callback", "__privateSet", "_enabled", "AudioTrack", "__publicField", "__privateAdd", "src", "codec", "bitrate", "rendition", "AudioRendition", "addRendition", "removeRendition", "__privateGet", "val", "__privateSet", "enabledChanged", "nativeVideoTracksFn", "getBaseMediaTracksFn", "nativeAudioTracksFn", "MediaTracksMixin", "MediaElementClass", "videoTracksFn", "getVideoTracks", "audioTracksFn", "getAudioTracks", "kind", "label", "language", "track", "VideoTrack", "addVideoTrack", "removeVideoTrack", "AudioTrack", "addAudioTrack", "removeAudioTrack", "initVideoRenditions", "media", "renditions", "getPrivate", "VideoRenditionList", "initAudioRenditions", "AudioRenditionList", "type", "_a", "tracks", "VideoTrackList", "nativeTracks", "nativeTrack", "event", "t", "AudioTrackList", "Events", "Attributes", "AttributeNameValues", "playerSoftwareVersion", "getPlayerVersion", "playerSoftwareName", "_core", "_loadRequested", "_playerInitTime", "_metadata", "__hlsConfig", "_playerSoftwareVersion", "_playerSoftwareName", "_errorTranslator", "_requestLoad", "requestLoad_fn", "MuxVideoBaseElement", "CustomVideoElement", "__privateAdd", "__privateSet", "_a", "value", "__privateGet", "val", "attr", "currentVal", "num", "_b", "liveEdgeOffset", "seekableEnd", "seekableStart", "cuePoints", "chapters", "attrName", "currAttrs", "oldValue", "newValue", "hadSrc", "hasSrc", "__privateMethod", "debug", "resp", "json", "_castCustomData", "MuxVideoElement", "CastableMediaMixin", "MediaTracksMixin", "internalGlobalThis", "src_default", "MuxVideoElement"]
7
7
  }