{
  "version": 3,
  "sources": ["../../../shared/polyfills/index.js", "../src/index.ts", "../src/env.ts", "../../../shared/castable-video/castable-video.js", "../src/CustomVideoElement.js"],
  "sourcesContent": ["class EventTarget {\n  addEventListener() {}\n  removeEventListener() {}\n  dispatchEvent(_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 = {\n  get(_name) {\n    return undefined;\n  },\n  define(_name, _constructor, _options) {},\n  upgrade(_root) {},\n  whenDefined(_name) {\n    return Promise.resolve(HTMLElement);\n  },\n};\n\nclass CustomEvent {\n  #detail;\n  get detail() {\n    return this.#detail;\n  }\n  constructor(typeArg, eventInitDict = {}) {\n    // super(typeArg, eventInitDict);\n    this.#detail = eventInitDict?.detail;\n  }\n  initCustomEvent() {}\n}\n\nfunction createElement(_tagName, _options) {\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\nconst isServer = typeof window === 'undefined' || typeof globalThis.customElements === 'undefined';\nconst GlobalThis = isServer ? globalThisShim : globalThis;\nconst Document = isServer ? globalThisShim.document : globalThis.document;\n\nexport { GlobalThis as globalThis, Document as document };\n", "import { globalThis } from 'shared-polyfills';\nimport {\n  initialize,\n  teardown,\n  generatePlayerInitTime,\n  MuxMediaProps,\n  StreamTypes,\n  PlaybackTypes,\n  ValueOf,\n  toMuxVideoURL,\n  Metadata,\n  MediaError,\n  getError,\n  CmcdTypes,\n  CmcdTypeValues,\n} from '@mux/playback-core';\nimport type { PlaybackCore, PlaybackEngine, Autoplay, ExtensionMimeTypeMap } from '@mux/playback-core';\nimport { getPlayerVersion } from './env';\n// this must be imported after playback-core for the polyfill to be included\nimport CustomVideoElement, { VideoEvents } from './CustomVideoElement';\n\n/** @TODO make the relationship between name+value smarter and more deriveable (CJP) */\ntype AttributeNames = {\n  ENV_KEY: 'env-key';\n  DEBUG: 'debug';\n  METADATA_URL: 'metadata-url';\n  PLAYER_SOFTWARE_VERSION: 'player-software-version';\n  PLAYER_SOFTWARE_NAME: 'player-software-name';\n  BEACON_COLLECTION_DOMAIN: 'beacon-collection-domain';\n  CUSTOM_DOMAIN: 'custom-domain';\n  DISABLE_COOKIES: 'disable-cookies';\n  PLAYBACK_ID: 'playback-id';\n  PREFER_PLAYBACK: 'prefer-playback';\n  TYPE: 'type';\n  STREAM_TYPE: 'stream-type';\n  START_TIME: 'start-time';\n  PREFER_CMCD: 'prefer-cmcd';\n};\n\nexport const Attributes: AttributeNames = {\n  ENV_KEY: 'env-key',\n  DEBUG: 'debug',\n  PLAYBACK_ID: 'playback-id',\n  METADATA_URL: 'metadata-url',\n  PREFER_PLAYBACK: 'prefer-playback',\n  PLAYER_SOFTWARE_VERSION: 'player-software-version',\n  PLAYER_SOFTWARE_NAME: 'player-software-name',\n  BEACON_COLLECTION_DOMAIN: 'beacon-collection-domain',\n  CUSTOM_DOMAIN: 'custom-domain',\n  DISABLE_COOKIES: 'disable-cookies',\n  TYPE: 'type',\n  STREAM_TYPE: 'stream-type',\n  START_TIME: 'start-time',\n  PREFER_CMCD: 'prefer-cmcd',\n};\n\nconst AttributeNameValues = Object.values(Attributes);\n\nconst playerSoftwareVersion = getPlayerVersion();\nconst playerSoftwareName = 'ix-video';\n\nclass IxVideoElement extends CustomVideoElement<HTMLVideoElement> 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  #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  // @ts-ignore\n  get error(): MediaError | null {\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(): boolean {\n    return this.getAttribute(Attributes.DEBUG) != null;\n  }\n\n  set debug(val: boolean) {\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 disableCookies(): boolean {\n    return this.hasAttribute(Attributes.DISABLE_COOKIES);\n  }\n\n  set disableCookies(val: boolean) {\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    return this.getAttribute(Attributes.PLAYBACK_ID) ?? 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 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 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    // getAttribute doesn't know that this attribute is well defined. Should explore extending for IxVideo (CJP)\n    return (this.getAttribute(Attributes.STREAM_TYPE) as ValueOf<StreamTypes>) ?? undefined;\n  }\n\n  set streamType(val: ValueOf<StreamTypes> | undefined) {\n    // dont' cause an infinite loop\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 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((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      }, {} as { [key: string]: string });\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  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  // NOTE: This was carried over from hls-video-element. Is it needed for an edge case?\n  // play() {\n  //   if (this.readyState === 0 && this.networkState < 2) {\n  //     this.load();\n  //     this._hls.on(Hls.Events.MANIFEST_PARSED,function() {\n  //     video.play();\n  //\n  //     return this.nativeEl.play();\n  //   }\n  // }\n\n  attributeChangedCallback(attrName: string, oldValue: string | null, newValue: string | null) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\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          /** @TODO Test this thoroughly (async?) and confirm unload() necessary (CJP) */\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        /** @TODO Improv+Discuss - how should playback-id update wrt src attr changes (and vice versa) (CJP) */\n        this.src = toMuxVideoURL(newValue ?? undefined, { domain: this.customDomain }) 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      default:\n        break;\n    }\n  }\n\n  disconnectedCallback() {\n    this.unload();\n  }\n}\n\ntype IxVideoElementType = typeof IxVideoElement;\ndeclare global {\n  var IxVideoElement: IxVideoElementType; // eslint-disable-line\n}\n\n/** @TODO Refactor once using `globalThis` polyfills */\nif (!globalThis.customElements.get('ix-video')) {\n  globalThis.customElements.define('ix-video', IxVideoElement);\n  /** @TODO consider externalizing this (breaks standard modularity) */\n  globalThis.IxVideoElement = IxVideoElement;\n}\n\nexport { PlaybackEngine, PlaybackEngine as Hls, ExtensionMimeTypeMap as MimeTypes, MediaError, VideoEvents };\n\nexport default IxVideoElement;\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", "class IterableWeakSet 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}\n\n/**\n * CastableVideoMixin\n *\n * Because there can only be one custom built-in (is=\"my-video\") this mixin function\n * provides a way to compose multiple classes to create one custom built-in class.\n * @see https://justinfagnani.com/2015/12/21/real-mixins-with-javascript-classes/\n *\n * @param  {HTMLVideoElement} superclass - HTMLVideoElement or an extended class of it.\n * @return {CastableVideo}\n */\nconst CastableVideoMixin = (superclass) =>\n  class CastableVideo extends superclass {\n    static observedAttributes = ['cast-src', 'cast-content-type', 'cast-stream-type'];\n    static instances = new IterableWeakSet();\n\n    static #castElement;\n    static get castElement() {\n      return CastableVideo.#castElement;\n    }\n\n    static #castEnabled = false;\n    static get castEnabled() {\n      return CastableVideo.#castEnabled;\n    }\n\n    static get castState() {\n      return CastableVideo.#castContext?.getCastState();\n    }\n\n    static async exitCast() {\n      // Should the receiver application be stopped or just disconnected.\n      const stopCasting = true;\n      try {\n        await CastableVideo.#castContext.endCurrentSession(stopCasting);\n      } catch (err) {\n        console.error(err);\n        return;\n      }\n    }\n\n    static initCast = () => {\n      if (!this.#isChromeCastAvailable) {\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          // http://www.gstatic.com/eureka/clank/101/cast_sender.js\n          // http://www.gstatic.com/cast/sdk/libs/sender/1.0/cast_framework.js\n          customElements.whenDefined('google-cast-button').then(() => this.#onSdkLoaded(chrome.cast.isAvailable));\n        };\n      } else if (!this.#isCastFrameworkAvailable) {\n        customElements.whenDefined('google-cast-button').then(() => this.#onSdkLoaded(chrome.cast.isAvailable));\n      } else {\n        this.#onSdkLoaded(chrome.cast.isAvailable);\n      }\n    };\n\n    static #onSdkLoaded = (isAvailable) => {\n      if (isAvailable) {\n        this.#castEnabled = true;\n\n        const { CAST_STATE_CHANGED } = cast.framework.CastContextEventType;\n        CastableVideo.#castContext.addEventListener(CAST_STATE_CHANGED, (e) => {\n          this.instances.forEach((video) => video.#onCastStateChanged(e));\n        });\n\n        const { SESSION_STATE_CHANGED } = cast.framework.CastContextEventType;\n        CastableVideo.#castContext.addEventListener(SESSION_STATE_CHANGED, (e) => {\n          this.instances.forEach((video) => video.#onSessionStateChanged(e));\n        });\n\n        this.instances.forEach((video) => video.#init());\n      }\n    };\n\n    static get #isChromeCastAvailable() {\n      return typeof chrome !== 'undefined' && chrome.cast && chrome.cast.isAvailable;\n    }\n\n    static get #isCastFrameworkAvailable() {\n      return typeof cast !== 'undefined' && cast.framework;\n    }\n\n    static get #castContext() {\n      if (CastableVideo.#isCastFrameworkAvailable) {\n        return cast.framework.CastContext.getInstance();\n      }\n      return undefined;\n    }\n\n    static get #currentSession() {\n      return CastableVideo.#castContext?.getCurrentSession();\n    }\n\n    static get #currentMedia() {\n      return CastableVideo.#currentSession?.getSessionObj().media[0];\n    }\n\n    static #editTracksInfo(request) {\n      return new Promise((resolve, reject) => {\n        CastableVideo.#currentMedia.editTracksInfo(request, resolve, reject);\n      });\n    }\n\n    static #getMediaStatus(request) {\n      return new Promise((resolve, reject) => {\n        CastableVideo.#currentMedia.getStatus(request, resolve, reject);\n      });\n    }\n\n    static #setOptions(options) {\n      return CastableVideo.#castContext.setOptions({\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: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,\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: chrome.cast.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        ...options,\n      });\n    }\n\n    castEnabled = false;\n    #localState = { paused: false };\n    #remotePlayer;\n    #remoteListeners = {};\n    #enterCastCallback;\n    #leaveCastCallback;\n    #castChangeCallback;\n\n    constructor() {\n      super();\n\n      CastableVideo.instances.add(this);\n      this.#init();\n    }\n\n    get castPlayer() {\n      if (CastableVideo.castElement === this) return this.#remotePlayer;\n      return undefined;\n    }\n\n    get #isMediaLoaded() {\n      return this.castPlayer?.isMediaLoaded;\n    }\n\n    attributeChangedCallback(attrName) {\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    #disconnect() {\n      if (CastableVideo.#castElement !== this) return;\n\n      Object.entries(this.#remoteListeners).forEach(([event, listener]) => {\n        this.#remotePlayer.controller.removeEventListener(event, listener);\n      });\n\n      CastableVideo.#castElement = undefined;\n\n      // isMuted is not in savedPlayerState. should we sync this back to local?\n      this.muted = this.#remotePlayer.isMuted;\n      this.currentTime = this.#remotePlayer.savedPlayerState.currentTime;\n      if (this.#remotePlayer.savedPlayerState.isPaused === false) {\n        this.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      this.dispatchEvent(\n        new CustomEvent('castchange', {\n          detail: CastableVideo.#castContext.getCastState(),\n        })\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 } = cast.framework.SessionState;\n      if (CastableVideo.#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 CastableVideo.#currentMedia.customData below.\n         */\n        if (this.castSrc === CastableVideo.#currentMedia?.media.contentId) {\n          CastableVideo.#castElement = this;\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 CastableVideo.#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[cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED]();\n          this.#remoteListeners[cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n        }\n      }\n    }\n\n    #init() {\n      if (!CastableVideo.#isCastFrameworkAvailable || this.castEnabled) return;\n      this.castEnabled = true;\n      CastableVideo.#setOptions();\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.textTracks.addEventListener('change', this.#updateRemoteTextTrack.bind(this));\n\n      this.#onCastStateChanged();\n\n      this.#remotePlayer = new cast.framework.RemotePlayer();\n      new cast.framework.RemotePlayerController(this.#remotePlayer);\n\n      this.#remoteListeners = {\n        [cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value }) => {\n          if (value === false) {\n            this.#disconnect();\n          }\n          this.dispatchEvent(new Event(value ? 'entercast' : 'leavecast'));\n        },\n        [cast.framework.RemotePlayerEventType.DURATION_CHANGED]: () => {\n          this.dispatchEvent(new Event('durationchange'));\n        },\n        [cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n          this.dispatchEvent(new Event('volumechange'));\n        },\n        [cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n          this.dispatchEvent(new Event('volumechange'));\n        },\n        [cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n          if (!this.#isMediaLoaded) return;\n          this.dispatchEvent(new Event('timeupdate'));\n        },\n        [cast.framework.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n          this.dispatchEvent(new Event('resize'));\n        },\n        [cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n          this.dispatchEvent(new Event(this.paused ? 'pause' : 'play'));\n        },\n        [cast.framework.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          this.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        [cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: async () => {\n          if (!this.#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    async requestCast(options = {}) {\n      CastableVideo.#setOptions(options);\n      CastableVideo.#castElement = this;\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 CastableVideo.#castContext.requestSession();\n      } catch (err) {\n        CastableVideo.#castElement = undefined;\n        // console.error(err); // Don't show an error if dismissing the menu.\n        return;\n      }\n\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(({ kind, src }) => {\n        return 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(trackId, chrome.cast.media.TrackType.TEXT);\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 = [\n        {\n          url: this.poster,\n        },\n      ];\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 CastableVideo.#currentSession?.loadMedia(request);\n\n      this.dispatchEvent(new Event('volumechange'));\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(({ type }) => type === chrome.cast.media.TrackType.TEXT);\n\n      const localSubtitles = [...this.textTracks].filter(({ kind }) => kind === 'subtitles' || kind === 'captions');\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 } = localSubtitles.find((local) => local.language === language && local.label === name) ?? {};\n          if (mode) return { mode, trackId };\n          return false;\n        })\n        .filter(Boolean);\n\n      const hiddenSubtitles = subtitles.filter(({ mode }) => mode !== 'showing');\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 = CastableVideo.#currentSession?.getSessionObj().media[0]?.activeTrackIds ?? [];\n      let requestTrackIds = activeTrackIds;\n\n      if (activeTrackIds.length) {\n        // Filter out all local hidden subtitle trackId's.\n        requestTrackIds = requestTrackIds.filter((id) => !hiddenTrackIds.includes(id));\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) => 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(requestTrackIds);\n          await CastableVideo.#editTracksInfo(request);\n        } catch (error) {\n          console.error(error);\n        }\n      }\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    // 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 this.getAttribute('cast-src') ?? this.querySelector('source')?.src ?? this.currentSrc;\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      return this.getAttribute('cast-stream-type') ?? 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 ((val && !this.castPlayer.isMuted) || (!val && this.castPlayer.isMuted)) {\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.#isMediaLoaded) {\n        return this.castPlayer?.duration ?? NaN;\n      }\n      return super.duration;\n    }\n\n    get currentTime() {\n      if (this.castPlayer && this.#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    get onentercast() {\n      return this.#enterCastCallback;\n    }\n\n    set onentercast(callback) {\n      if (this.#enterCastCallback) {\n        this.removeEventListener('entercast', this.#enterCastCallback);\n        this.#enterCastCallback = null;\n      }\n      if (typeof callback == 'function') {\n        this.#enterCastCallback = callback;\n        this.addEventListener('entercast', callback);\n      }\n    }\n\n    get onleavecast() {\n      return this.#leaveCastCallback;\n    }\n\n    set onleavecast(callback) {\n      if (this.#leaveCastCallback) {\n        this.removeEventListener('leavecast', this.#leaveCastCallback);\n        this.#leaveCastCallback = null;\n      }\n      if (typeof callback == 'function') {\n        this.#leaveCastCallback = callback;\n        this.addEventListener('leavecast', callback);\n      }\n    }\n\n    get oncastchange() {\n      return this.#castChangeCallback;\n    }\n\n    set oncastchange(callback) {\n      if (this.#castChangeCallback) {\n        this.removeEventListener('castchange', this.#castChangeCallback);\n        this.#castChangeCallback = null;\n      }\n      if (typeof callback == 'function') {\n        this.#castChangeCallback = callback;\n        this.addEventListener('castchange', callback);\n      }\n    }\n  };\n\nif (globalThis.HTMLVideoElement && globalThis.customElements) {\n  const CastableVideoElement = CastableVideoMixin(HTMLVideoElement);\n\n  if (!globalThis.customElements.get('castable-video')) {\n    globalThis.customElements.define('castable-video', CastableVideoElement, {\n      extends: 'video',\n    });\n    globalThis.CastableVideoElement = CastableVideoElement;\n  }\n\n  CastableVideoElement.initCast();\n}\n", "import { globalThis, document } from 'shared-polyfills';\nimport 'castable-video';\n\n/**\n * Custom Video Element\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 VideoEvents = [\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  'castchange',\n  'entercast',\n  'leavecast',\n];\n\nconst template = document.createElement('template');\n// Could you get styles to apply by passing a global button from global to shadow?\n\ntemplate.innerHTML = `\n<style>\n  :host {\n    display: inline-block;\n    line-height: 0;\n    width: auto;\n    height: auto;\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</style>\n<video is=\"castable-video\" part=\"video\" crossorigin></video>\n<slot></slot>\n`;\n\nclass CustomVideoElement extends globalThis.HTMLElement {\n  #isInit;\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n\n    // If the custom element is defined before the <custom-video> HTML is parsed\n    // no attributes will be available in the constructor (construction process).\n    // Wait until initializing attributes in the attributeChangedCallback.\n    // If this element is connected to the DOM, the attributes will be available.\n    if (this.isConnected) {\n      this.#init();\n    }\n  }\n\n  #init() {\n    if (this.#isInit) return;\n    this.#isInit = true;\n\n    this.shadowRoot.append(template.content.cloneNode(true));\n    this.nativeEl = this.shadowRoot.querySelector('video');\n\n    // The video events are dispatched on the CustomVideoElement instance.\n    // This makes it possible to add event listeners before the element is upgraded.\n    VideoEvents.forEach((type) => {\n      this.nativeEl.addEventListener(type, (evt) => {\n        this.dispatchEvent(new CustomEvent(evt.type, { detail: evt.detail }));\n      });\n    });\n\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    const slotEl = this.shadowRoot.querySelector('slot');\n    slotEl.addEventListener('slotchange', () => {\n      slotEl.assignedElements().forEach((el) => {\n        if (!['track', 'source'].includes(el.localName)) return;\n        this.nativeEl.append(el);\n      });\n    });\n\n    // Initialize all the attribute properties\n    // This is required before attributeChangedCallback is called after construction\n    // so the initial state of all the attributes are forwarded to the native element.\n    // Don't call attributeChangedCallback directly here because the extending class\n    // could have overridden attributeChangedCallback leading to unexpected results.\n    Array.prototype.forEach.call(this.attributes, (attrNode) => {\n      this.#forwardAttribute(attrNode.name, null, attrNode.value);\n    });\n\n    // Neither Chrome or Firefox support setting the muted attribute\n    // after using document.createElement.\n    // One way to get around this would be to build the native tag as a string.\n    // But just fixing it manually for now.\n    // Apparently this may also be an issue with <input checked> for buttons\n    if (this.nativeEl.defaultMuted) {\n      this.nativeEl.muted = true;\n    }\n  }\n\n  // observedAttributes is required to trigger attributeChangedCallback\n  // for any attributes on the custom element.\n  // Attributes need to be the lowercase word, e.g. crossorigin, not crossOrigin\n  static get observedAttributes() {\n    let attrs = [];\n\n    const kebabCase = (name) => {\n      return name.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n    };\n\n    // Instead of manually creating a list of all observed attributes, observe\n    // any getter/setter prop name (lowercase or kebab-case for custom builtins)\n    Object.getOwnPropertyNames(this.prototype).forEach((propName) => {\n      let isFunc = false;\n\n      // Non-func properties throw errors because it's not an instance\n      try {\n        if (typeof this.prototype[propName] === 'function') {\n          isFunc = true;\n        }\n      } catch (e) {}\n\n      // Exclude functions and constants\n      if (!isFunc && propName !== propName.toUpperCase()) {\n        attrs.push(propName.toLowerCase(), kebabCase(propName));\n      }\n    });\n\n    // Include any attributes from the super class (recursive)\n    const supAttrs = Object.getPrototypeOf(this).observedAttributes;\n\n    if (supAttrs) {\n      attrs = attrs.concat(supAttrs);\n    }\n\n    return attrs;\n  }\n\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    // Initialize right after construction when the attributes become available.\n    this.#init();\n\n    this.#forwardAttribute(attrName, oldValue, newValue);\n  }\n\n  // We need to handle sub-class custom attributes differently from\n  // attrs meant to be passed to the internal native el.\n  #forwardAttribute(attrName, oldValue, newValue) {\n    // Find the matching prop for custom attributes\n    const ownProps = Object.getOwnPropertyNames(Object.getPrototypeOf(this));\n    const propName = arrayFindAnyCase(ownProps, attrName);\n\n    // Check if this is the original custom native elemnt or a subclass\n    const isBaseElement = Object.getPrototypeOf(this.constructor).toString().indexOf('function HTMLElement') === 0;\n\n    // If this is a subclass custom attribute we want to set the\n    // matching property on the subclass\n    if (propName && !isBaseElement) {\n      // Boolean props should never start as null\n      if (typeof this[propName] == 'boolean') {\n        // null is returned when attributes are removed i.e. boolean attrs\n        if (newValue === null) {\n          this[propName] = false;\n        } else {\n          // The new value might be an empty string, which is still true\n          // for boolean attributes\n          this[propName] = true;\n        }\n      } else {\n        this[propName] = newValue;\n      }\n    } else {\n      // When this is the original Custom Element, or the subclass doesn't\n      // have a matching prop, pass it through.\n      if (newValue === null) {\n        this.nativeEl.removeAttribute(attrName);\n      } else {\n        // Ignore a few that don't need to be passed through just in case\n        // it creates unexpected behavior.\n        if (['id', 'class'].indexOf(attrName) === -1) {\n          this.nativeEl.setAttribute(attrName, newValue);\n        }\n      }\n    }\n  }\n\n  connectedCallback() {\n    this.#init();\n  }\n}\n\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.\nlet nativeElProps = [];\n\n// Can't check typeof directly on element prototypes without\n// throwing Illegal Invocation errors, so creating an element\n// to check on instead.\nconst nativeElTest = document.createElement('video', {\n  is: 'castable-video',\n});\n\n// Deprecated props throw warnings if used, so exclude them\nconst deprecatedProps = ['webkitDisplayingFullscreen', 'webkitSupportsFullscreen'];\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\nfor (\n  let proto = Object.getPrototypeOf(nativeElTest);\n  proto && proto !== globalThis.HTMLElement.prototype;\n  proto = Object.getPrototypeOf(proto)\n) {\n  Object.getOwnPropertyNames(proto).forEach((key) => {\n    if (deprecatedProps.indexOf(key) === -1) {\n      nativeElProps.push(key);\n    }\n  });\n}\n\n// Passthrough native el functions from the custom el to the native el\nnativeElProps.forEach((prop) => {\n  if (prop in CustomVideoElement.prototype) return;\n\n  const type = typeof nativeElTest[prop];\n  if (type == 'function') {\n    // Function\n    CustomVideoElement.prototype[prop] = function () {\n      return this.nativeEl[prop].apply(this.nativeEl, arguments);\n    };\n  } else {\n    // Getter\n    let config = {\n      get() {\n        return this.nativeEl[prop];\n      },\n    };\n\n    if (prop !== prop.toUpperCase()) {\n      // Setter (not a CONSTANT)\n      config.set = function (val) {\n        this.nativeEl[prop] = val;\n      };\n    }\n\n    Object.defineProperty(CustomVideoElement.prototype, prop, config);\n  }\n});\n\nfunction arrayFindAnyCase(arr, word) {\n  let found = null;\n\n  arr.forEach((item) => {\n    if (item.toLowerCase() == word.toLowerCase()) {\n      found = item;\n    }\n  });\n\n  return found;\n}\n\nif (!globalThis.customElements.get('custom-video')) {\n  globalThis.customElements.define('custom-video', CustomVideoElement);\n  globalThis.CustomVideoElement = CustomVideoElement;\n}\n\nexport default CustomVideoElement;\n"],
  "mappings": "ijBAAA,IAAMA,EAAN,KAAkB,CAChB,kBAAmB,CAAC,CACpB,qBAAsB,CAAC,CACvB,cAAcC,EAAQ,CACpB,MAAO,EACT,CACF,EAGA,GAAI,OAAO,kBAAqB,YAAa,CAC3C,MAAMC,UAAyBF,CAAY,CAAC,CAE5C,WAAW,iBAAmBE,CAChC,CAEA,IAAMC,EAAN,cAA0BH,CAAY,CAAC,EACjCI,GAAN,cAA+BJ,CAAY,CAAC,EAEtCK,GAAiB,CACrB,IAAIC,EAAO,CAEX,EACA,OAAOA,EAAOC,EAAcC,EAAU,CAAC,EACvC,QAAQC,EAAO,CAAC,EAChB,YAAYH,EAAO,CACjB,OAAO,QAAQ,QAAQH,CAAW,CACpC,CACF,EA3BAO,EA6BMC,GAAN,KAAkB,CAKhB,YAAYC,EAASC,EAAgB,CAAC,EAAG,CAJzCC,EAAA,KAAAJ,EAAA,QAMEK,EAAA,KAAKL,EAAUG,GAAA,YAAAA,EAAe,OAChC,CANA,IAAI,QAAS,CACX,OAAOG,EAAA,KAAKN,EACd,CAKA,iBAAkB,CAAC,CACrB,EATEA,EAAA,YAWF,SAASO,GAAcC,EAAUV,EAAU,CACzC,OAAO,IAAIL,CACb,CAEA,IAAMgB,GAAiB,CACrB,SAAU,CACR,cAAAF,EACF,EACA,iBACA,eAAAZ,GACA,YAAAM,GACA,YAAAX,EACA,YAAAG,EACA,iBAAAC,EACF,EAEMgB,GAAW,OAAO,QAAW,aAAe,OAAO,WAAW,gBAAmB,YACjFC,EAAaD,GAAWD,GAAiB,WACzCG,GAAWF,GAAWD,GAAe,SAAW,WAAW,SC1DjE,OACE,cAAAI,GACA,YAAAC,GACA,0BAAAC,GAGA,iBAAAC,GAEA,iBAAAC,GAEA,cAAAC,GACA,YAAAC,GAEA,kBAAAC,OACK,qBCXP,IAAMC,GAAsB,IAAM,CAChC,GAAI,CAEF,MAAO,cACT,MAAE,CAAO,CACT,MAAO,SACT,EAEMC,GAAyBD,GAAoB,EAEtCE,GAAmB,IAAMD,GCdtC,IAAME,GAAN,cAA8B,GAAI,CAChC,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,EAYMC,GAAsBC,GAAY,CAtBxC,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,EAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAAAC,GAAAC,GAAAC,EAAAC,GAuBE,OAAAvC,EAAA,cAA4BD,CAAW,CAkIrC,aAAc,CACZ,MAAM,EAWRyC,EAAA,KAAId,GAeJc,EAAA,KAAAZ,IAiBAY,EAAA,KAAAV,GAUAU,EAAA,KAAMR,IAwCNQ,EAAA,KAAAN,GAkKAM,EAAA,KAAAJ,IAIAI,EAAA,KAAMF,GA5QNG,EAAA,mBAAc,IACdD,EAAA,KAAApB,EAAc,CAAE,OAAQ,EAAM,GAC9BoB,EAAA,KAAAnB,EAAA,QACAmB,EAAA,KAAAlB,EAAmB,CAAC,GACpBkB,EAAA,KAAAjB,EAAA,QACAiB,EAAA,KAAAhB,EAAA,QACAgB,EAAA,KAAAf,EAAA,QAKEzB,EAAc,UAAU,IAAI,IAAI,EAChC0C,EAAA,KAAKR,EAAAC,IAAL,UACF,CAlIA,WAAW,aAAc,CACvB,OAAOQ,EAAA3C,EAAcC,EACvB,CAGA,WAAW,aAAc,CACvB,OAAO0C,EAAA3C,EAAcE,EACvB,CAEA,WAAW,WAAY,CArC3B,IAAAF,EAsCM,OAAOA,EAAA2C,EAAA3C,EAAcQ,EAAAC,KAAd,YAAAT,EAA4B,cACrC,CAEA,aAAa,UAAW,CAGtB,GAAI,CACF,MAAM2C,EAAA3C,EAAcQ,EAAAC,GAAa,kBAAkB,EAAW,CAChE,OAASmC,EAAP,CACA,QAAQ,MAAMA,CAAG,EACjB,MACF,CACF,CA8GA,IAAI,YAAa,CACf,GAAI5C,EAAc,cAAgB,KAAM,OAAO2C,EAAA,KAAKtB,EAEtD,CAMA,yBAAyBwB,EAAU,CACjC,GAAI,EAAC,KAAK,WAEV,OAAQA,EAAU,CAChB,IAAK,mBACL,IAAK,WACH,KAAK,KAAK,EACV,KACJ,CACF,CA6IA,MAAM,YAAYC,EAAU,CAAC,EAAG,CA/TpC,IAAA9C,EAgUM0C,EAAA1C,IAAckB,EAAAC,IAAd,KAAAnB,EAA0B8C,GAC1BC,EAAA/C,EAAcC,EAAe,MAE7B,OAAO,QAAQ0C,EAAA,KAAKrB,EAAgB,EAAE,QAAQ,CAAC,CAAC0B,EAAOC,CAAQ,IAAM,CACnEN,EAAA,KAAKtB,GAAc,WAAW,iBAAiB2B,EAAOC,CAAQ,CAChE,CAAC,EAED,GAAI,CAEF,MAAMN,EAAA3C,EAAcQ,EAAAC,GAAa,eAAe,CAClD,MAAE,CACAsC,EAAA/C,EAAcC,EAAe,QAE7B,MACF,CAGA0C,EAAA,KAAKvB,GAAY,OAAS,MAAM,OAChC,MAAM,MAAM,EAGZ,KAAK,MAAQ,MAAM,MAEnB,GAAI,CACF,MAAM,KAAK,KAAK,CAClB,OAASwB,EAAP,CACA,QAAQ,MAAMA,CAAG,CACnB,CACF,CAEA,MAAM,MAAO,CA9VjB,IAAA5C,EAAAkD,EA+VM,GAAI,CAAC,KAAK,WAAY,OAAO,MAAM,KAAK,EAExC,IAAMC,EAAY,IAAI,OAAO,KAAK,MAAM,UAAU,KAAK,QAAS,KAAK,eAAe,EAI9EC,EAAY,CAAC,GAAG,KAAK,iBAAiB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAE,KAAAC,EAAM,IAAAC,CAAI,IACjEA,IAAQD,IAAS,aAAeA,IAAS,WACjD,EAEKE,EAAiB,CAAC,EACpBC,EAAmB,EAEnBJ,EAAU,SACZD,EAAU,OAASC,EAAU,IAAKK,GAAY,CAC5C,IAAMC,EAAU,EAAEF,EAEdD,EAAe,SAAW,GAAKE,EAAQ,MAAM,OAAS,WACxDF,EAAe,KAAKG,CAAO,EAG7B,IAAMC,EAAQ,IAAI,OAAO,KAAK,MAAM,MAAMD,EAAS,OAAO,KAAK,MAAM,UAAU,IAAI,EACnF,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,CAC1B,CACE,IAAK,KAAK,MACZ,CACF,EAEA,IAAMS,EAAU,IAAI,OAAO,KAAK,MAAM,YAAYT,CAAS,EAC3DS,EAAQ,aAAc5D,EAAA,MAAM,cAAN,KAAAA,EAAqB,EAC3C4D,EAAQ,SAAW,CAACjB,EAAA,KAAKvB,GAAY,OACrCwC,EAAQ,eAAiBL,EAEzB,OAAML,EAAAP,EAAA3C,EAAcU,EAAAC,MAAd,YAAAuC,EAA+B,UAAUU,IAE/C,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC,CAC9C,CAwDA,MAAO,CA/cX,IAAA5D,EAgdM,GAAI,KAAK,WAAY,CACf,KAAK,WAAW,YAClBA,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,eAE9B,MACF,CACA,OAAO,MAAM,KAAK,CACpB,CAEA,OAAQ,CAzdZ,IAAAA,EA0dM,GAAI,KAAK,WAAY,CACd,KAAK,WAAW,WACnBA,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,cAE9B,MACF,CACA,MAAM,MAAM,CACd,CAGA,IAAI,SAAU,CApelB,IAAAA,EAAAkD,EAAAW,EAseM,OAAOA,GAAAX,EAAA,KAAK,aAAa,UAAU,IAA5B,KAAAA,GAAiClD,EAAA,KAAK,cAAc,QAAQ,IAA3B,YAAAA,EAA8B,MAA/D,KAAA6D,EAAsE,KAAK,UACpF,CAEA,IAAI,QAAQC,EAAK,CACX,KAAK,SAAWA,GACpB,KAAK,aAAa,WAAY,GAAGA,GAAK,CACxC,CAEA,IAAI,iBAAkB,CA9e1B,IAAA9D,EA+eM,OAAOA,EAAA,KAAK,aAAa,mBAAmB,IAArC,KAAAA,EAA0C,MACnD,CAEA,IAAI,gBAAgB8D,EAAK,CACvB,KAAK,aAAa,oBAAqB,GAAGA,GAAK,CACjD,CAEA,IAAI,gBAAiB,CAtfzB,IAAA9D,EAufM,OAAOA,EAAA,KAAK,aAAa,kBAAkB,IAApC,KAAAA,EAAyC,MAClD,CAEA,IAAI,eAAe8D,EAAK,CACtB,KAAK,aAAa,mBAAoB,GAAGA,GAAK,CAChD,CAEA,IAAI,YAAa,CACf,GAAI,KAAK,WACP,OAAQ,KAAK,WAAW,YAAa,CACnC,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,OAAI,KAAK,WAAmB,KAAK,WAAW,SACrC,MAAM,MACf,CAEA,IAAI,OAAQ,CAjhBhB,IAAA9D,EAkhBM,OAAI,KAAK,YAAmBA,EAAA,KAAK,aAAL,YAAAA,EAAiB,QACtC,MAAM,KACf,CAEA,IAAI,MAAM8D,EAAK,CAthBnB,IAAA9D,EAuhBM,GAAI,KAAK,WAAY,EACd8D,GAAO,CAAC,KAAK,WAAW,SAAa,CAACA,GAAO,KAAK,WAAW,YAChE9D,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,gBAE9B,MACF,CACA,MAAM,MAAQ8D,CAChB,CAEA,IAAI,QAAS,CAhiBjB,IAAA9D,EAAAkD,EAiiBM,OAAI,KAAK,YAAmBA,GAAAlD,EAAA,KAAK,aAAL,YAAAA,EAAiB,cAAjB,KAAAkD,EAAgC,EACrD,MAAM,MACf,CAEA,IAAI,OAAOY,EAAK,CAriBpB,IAAA9D,EAsiBM,GAAI,KAAK,WAAY,CACnB,KAAK,WAAW,YAAc8D,GAC9B9D,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,iBAC5B,MACF,CACA,MAAM,OAAS8D,CACjB,CAEA,IAAI,UAAW,CA9iBnB,IAAA9D,EAAAkD,EAgjBM,OAAI,KAAK,YAAcP,EAAA,KAAKjB,EAAAC,IACnBuB,GAAAlD,EAAA,KAAK,aAAL,YAAAA,EAAiB,WAAjB,KAAAkD,EAA6B,IAE/B,MAAM,QACf,CAEA,IAAI,aAAc,CAtjBtB,IAAAlD,EAAAkD,EAujBM,OAAI,KAAK,YAAcP,EAAA,KAAKjB,EAAAC,IACnBuB,GAAAlD,EAAA,KAAK,aAAL,YAAAA,EAAiB,cAAjB,KAAAkD,EAAgC,EAElC,MAAM,WACf,CAEA,IAAI,YAAYY,EAAK,CA7jBzB,IAAA9D,EA8jBM,GAAI,KAAK,WAAY,CACnB,KAAK,WAAW,YAAc8D,GAC9B9D,EAAA,KAAK,WAAW,aAAhB,MAAAA,EAA4B,OAC5B,MACF,CACA,MAAM,YAAc8D,CACtB,CAEA,IAAI,aAAc,CAChB,OAAOnB,EAAA,KAAKpB,EACd,CAEA,IAAI,YAAYwC,EAAU,CACpBpB,EAAA,KAAKpB,KACP,KAAK,oBAAoB,YAAaoB,EAAA,KAAKpB,EAAkB,EAC7DwB,EAAA,KAAKxB,EAAqB,OAExB,OAAOwC,GAAY,aACrBhB,EAAA,KAAKxB,EAAqBwC,GAC1B,KAAK,iBAAiB,YAAaA,CAAQ,EAE/C,CAEA,IAAI,aAAc,CAChB,OAAOpB,EAAA,KAAKnB,EACd,CAEA,IAAI,YAAYuC,EAAU,CACpBpB,EAAA,KAAKnB,KACP,KAAK,oBAAoB,YAAamB,EAAA,KAAKnB,EAAkB,EAC7DuB,EAAA,KAAKvB,EAAqB,OAExB,OAAOuC,GAAY,aACrBhB,EAAA,KAAKvB,EAAqBuC,GAC1B,KAAK,iBAAiB,YAAaA,CAAQ,EAE/C,CAEA,IAAI,cAAe,CACjB,OAAOpB,EAAA,KAAKlB,EACd,CAEA,IAAI,aAAasC,EAAU,CACrBpB,EAAA,KAAKlB,KACP,KAAK,oBAAoB,aAAckB,EAAA,KAAKlB,EAAmB,EAC/DsB,EAAA,KAAKtB,EAAsB,OAEzB,OAAOsC,GAAY,aACrBhB,EAAA,KAAKtB,EAAsBsC,GAC3B,KAAK,iBAAiB,aAAcA,CAAQ,EAEhD,CACF,EAvlBS9D,EAAA,YAKAC,EAAA,YAoCAC,EAAA,YAkBIC,EAAA,YAAAC,GAAsB,UAAG,CAClC,OAAO,OAAO,QAAW,aAAe,OAAO,MAAQ,OAAO,KAAK,WACrE,EAEWC,EAAA,YAAAC,GAAyB,UAAG,CACrC,OAAO,OAAO,MAAS,aAAe,KAAK,SAC7C,EAEWC,EAAA,YAAAC,EAAY,UAAG,CACxB,GAAIkC,EAAA3C,EAAcM,EAAAC,IAChB,OAAO,KAAK,UAAU,YAAY,YAAY,CAGlD,EAEWG,EAAA,YAAAC,GAAe,UAAG,CArGjC,IAAAX,EAsGM,OAAOA,EAAA2C,EAAA3C,EAAcQ,EAAAC,KAAd,YAAAT,EAA4B,mBACrC,EAEWY,EAAA,YAAAC,GAAa,UAAG,CAzG/B,IAAAb,EA0GM,OAAOA,EAAA2C,EAAA3C,EAAcU,EAAAC,MAAd,YAAAX,EAA+B,gBAAgB,MAAM,EAC9D,EAEOc,GAAA,YAAAC,GAAe,SAAC6C,EAAS,CAC9B,OAAO,IAAI,QAAQ,CAACI,EAASC,IAAW,CACtCtB,EAAA3C,EAAcY,EAAAC,IAAc,eAAe+C,EAASI,EAASC,CAAM,CACrE,CAAC,CACH,EAEOjD,GAAA,YAAAC,GAAe,SAAC2C,EAAS,CAC9B,OAAO,IAAI,QAAQ,CAACI,EAASC,IAAW,CACtCtB,EAAA3C,EAAcY,EAAAC,IAAc,UAAU+C,EAASI,EAASC,CAAM,CAChE,CAAC,CACH,EAEO/C,EAAA,YAAAC,GAAW,SAAC2B,EAAS,CAC1B,OAAOH,EAAA3C,EAAcQ,EAAAC,GAAa,WAAW,CAI3C,sBAAuB,OAAO,KAAK,MAAM,8BAMzC,eAAgB,OAAO,KAAK,eAAe,cAI3C,0BAA2B,GAE3B,SAAU,QACV,mBAAoB,GAEpB,GAAGqC,CACL,CAAC,CACH,EAGA1B,EAAA,YACAC,EAAA,YACAC,EAAA,YACAC,EAAA,YACAC,EAAA,YACAC,EAAA,YAcIC,EAAA,YAAAC,EAAc,UAAG,CArKzB,IAAA3B,EAsKM,OAAOA,EAAA,KAAK,aAAL,YAAAA,EAAiB,aAC1B,EAaA4B,GAAA,YAAAC,GAAW,UAAG,CACRc,EAAA3C,EAAcC,KAAiB,OAEnC,OAAO,QAAQ0C,EAAA,KAAKrB,EAAgB,EAAE,QAAQ,CAAC,CAAC0B,EAAOC,CAAQ,IAAM,CACnEN,EAAA,KAAKtB,GAAc,WAAW,oBAAoB2B,EAAOC,CAAQ,CACnE,CAAC,EAEDF,EAAA/C,EAAcC,EAAe,QAG7B,KAAK,MAAQ0C,EAAA,KAAKtB,GAAc,QAChC,KAAK,YAAcsB,EAAA,KAAKtB,GAAc,iBAAiB,YACnDsB,EAAA,KAAKtB,GAAc,iBAAiB,WAAa,IACnD,KAAK,KAAK,EAEd,EAEAS,EAAA,YAAAC,GAAmB,UAAG,CAGpB,KAAK,cACH,IAAI,YAAY,aAAc,CAC5B,OAAQY,EAAA3C,EAAcQ,EAAAC,GAAa,aAAa,CAClD,CAAC,CACH,CACF,EAEMuB,GAAA,YAAAC,GAAsB,gBAAG,CA/MnC,IAAAjC,EAAAkD,EAoNM,GAAM,CAAE,gBAAAgB,CAAgB,EAAI,KAAK,UAAU,aAC3C,GAAIvB,EAAA3C,EAAcQ,EAAAC,GAAa,gBAAgB,IAAMyD,GAS/C,KAAK,YAAYlE,EAAA2C,EAAA3C,EAAcY,EAAAC,MAAd,YAAAb,EAA6B,MAAM,WAAW,CACjE+C,EAAA/C,EAAcC,EAAe,MAE7B,OAAO,QAAQ0C,EAAA,KAAKrB,EAAgB,EAAE,QAAQ,CAAC,CAAC0B,EAAOC,CAAQ,IAAM,CACnEN,EAAA,KAAKtB,GAAc,WAAW,iBAAiB2B,EAAOC,CAAQ,CAChE,CAAC,EAOD,GAAI,CACF,MAAMP,EAAAQ,EAAAlD,EAAcgB,GAAAC,IAAd,KAAAiC,EAA8B,IAAI,OAAO,KAAK,MAAM,iBAC5D,OAASiB,EAAP,CACA,QAAQ,MAAMA,CAAK,CACrB,CAGAxB,EAAA,KAAKrB,GAAiB,KAAK,UAAU,sBAAsB,mBAAmB,EAC9EqB,EAAA,KAAKrB,GAAiB,KAAK,UAAU,sBAAsB,sBAAsB,CACnF,CAEJ,EAEAY,EAAA,YAAAC,GAAK,UAAG,CAvPZ,IAAAnC,EAwPU,CAAC2C,EAAA3C,EAAcM,EAAAC,KAA6B,KAAK,cACrD,KAAK,YAAc,GACnBmC,EAAA1C,IAAckB,EAAAC,IAAd,KAAAnB,GAQA,KAAK,WAAW,iBAAiB,SAAU0C,EAAA,KAAKJ,EAAAC,IAAuB,KAAK,IAAI,CAAC,EAEjFG,EAAA,KAAKZ,EAAAC,IAAL,WAEAgB,EAAA,KAAK1B,EAAgB,IAAI,KAAK,UAAU,cACxC,IAAI,KAAK,UAAU,uBAAuBsB,EAAA,KAAKtB,EAAa,EAE5D0B,EAAA,KAAKzB,EAAmB,CACtB,CAAC,KAAK,UAAU,sBAAsB,sBAAuB,CAAC,CAAE,MAAAzB,CAAM,IAAM,CACtEA,IAAU,IACZ6C,EAAA,KAAKd,GAAAC,IAAL,WAEF,KAAK,cAAc,IAAI,MAAMhC,EAAQ,YAAc,WAAW,CAAC,CACjE,EACA,CAAC,KAAK,UAAU,sBAAsB,kBAAmB,IAAM,CAC7D,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC,CAChD,EACA,CAAC,KAAK,UAAU,sBAAsB,sBAAuB,IAAM,CACjE,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC,CAC9C,EACA,CAAC,KAAK,UAAU,sBAAsB,kBAAmB,IAAM,CAC7D,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC,CAC9C,EACA,CAAC,KAAK,UAAU,sBAAsB,sBAAuB,IAAM,CAC7D,CAAC8C,EAAA,KAAKjB,EAAAC,IACV,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC,CAC5C,EACA,CAAC,KAAK,UAAU,sBAAsB,oBAAqB,IAAM,CAC/D,KAAK,cAAc,IAAI,MAAM,QAAQ,CAAC,CACxC,EACA,CAAC,KAAK,UAAU,sBAAsB,mBAAoB,IAAM,CAC9D,KAAK,cAAc,IAAI,MAAM,KAAK,OAAS,QAAU,MAAM,CAAC,CAC9D,EACA,CAAC,KAAK,UAAU,sBAAsB,sBAAuB,IAAM,CAnS3E,IAAA3B,EAAAkD,IAwSclD,EAAA,KAAK,aAAL,YAAAA,EAAiB,eAAgB,OAAO,KAAK,MAAM,YAAY,QAGnE,KAAK,cACH,IAAI,MACF,CACE,CAAC,OAAO,KAAK,MAAM,YAAY,SAAU,UACzC,CAAC,OAAO,KAAK,MAAM,YAAY,WAAY,UAC3C,CAAC,OAAO,KAAK,MAAM,YAAY,MAAO,SACxC,GAAEkD,EAAA,KAAK,aAAL,YAAAA,EAAiB,YACrB,CACF,CACF,EACA,CAAC,KAAK,UAAU,sBAAsB,yBAA0B,SAAY,CACtE,CAACP,EAAA,KAAKjB,EAAAC,KAGV,MAAM,QAAQ,QAAQ,EACtBe,EAAA,KAAKN,GAAAC,IAAL,WACF,CACF,GACF,EA4FAD,GAAA,YAAAC,GAAoB,UAAG,CACrBK,EAAA,KAAKJ,EAAAC,IAAL,UACF,EAEMD,EAAA,YAAAC,GAAsB,gBAAG,CA7ZnC,IAAAvC,GAAAkD,GAAAW,GAAAO,GAAAC,GAAAC,GA8ZM,GAAI,CAAC,KAAK,WAAY,OAItB,IAAMC,IADerB,IAAAlD,GAAA2C,EAAA,KAAKtB,GAAc,YAAnB,YAAArB,GAA8B,SAA9B,KAAAkD,GAAwC,CAAC,GACzB,OAAO,CAAC,CAAE,KAAAsB,CAAK,IAAMA,IAAS,OAAO,KAAK,MAAM,UAAU,IAAI,EAE7FC,EAAiB,CAAC,GAAG,KAAK,UAAU,EAAE,OAAO,CAAC,CAAE,KAAApB,CAAK,IAAMA,IAAS,aAAeA,IAAS,UAAU,EAGtGD,EAAYmB,EACf,IAAI,CAAC,CAAE,SAAAG,EAAU,KAAAC,GAAM,QAAAjB,EAAQ,IAAM,CAxa9C,IAAA1D,GA0aU,GAAM,CAAE,KAAA4E,EAAK,GAAI5E,GAAAyE,EAAe,KAAMI,IAAUA,GAAM,WAAaH,GAAYG,GAAM,QAAUF,EAAI,IAAlF,KAAA3E,GAAuF,CAAC,EACzG,OAAI4E,GAAa,CAAE,KAAAA,GAAM,QAAAlB,EAAQ,EAC1B,EACT,CAAC,EACA,OAAO,OAAO,EAGXoB,EADkB1B,EAAU,OAAO,CAAC,CAAE,KAAAwB,CAAK,IAAMA,IAAS,SAAS,EAClC,IAAI,CAAC,CAAE,QAAAlB,CAAQ,IAAMA,CAAO,EAC7DqB,EAAkB3B,EAAU,KAAK,CAAC,CAAE,KAAAwB,CAAK,IAAMA,IAAS,SAAS,EAGjErB,GAAiBc,IAAAD,IAAAP,GAAAlB,EAAA3C,EAAcU,EAAAC,MAAd,YAAAkD,GAA+B,gBAAgB,MAAM,KAArD,YAAAO,GAAyD,iBAAzD,KAAAC,GAA2E,CAAC,EAC/FW,EAAkBzB,EAetB,GAbIA,EAAe,SAEjByB,EAAkBA,EAAgB,OAAQC,GAAO,CAACH,EAAe,SAASG,CAAE,CAAC,GAG3EF,GAAA,MAAAA,EAAiB,UACnBC,EAAkB,CAAC,GAAGA,EAAiBD,EAAgB,OAAO,GAIhEC,EAAkB,CAAC,GAAG,IAAI,IAAIA,CAAe,CAAC,EAG1C,EADgB,CAACE,EAAGC,KAAMD,EAAE,SAAWC,GAAE,QAAUD,EAAE,MAAOA,IAAMC,GAAE,SAASD,EAAC,CAAC,GAClE3B,EAAgByB,CAAe,EAC9C,GAAI,CACF,IAAMpB,EAAU,IAAI,OAAO,KAAK,MAAM,sBAAsBoB,CAAe,EAC3E,MAAMtC,EAAA4B,GAAAtE,EAAcc,GAAAC,IAAd,KAAAuD,GAA8BV,EACtC,OAASO,EAAP,CACA,QAAQ,MAAMA,CAAK,CACrB,CAEJ,EAvXA3B,EA/DFxC,EA+DaI,GAIXoC,EAnEFxC,EAmEaM,GAIXkC,EAvEFxC,EAuEaQ,GAOXgC,EA9EFxC,EA8EaU,GAIX8B,EAlFFxC,EAkFaY,GAIX4B,EAtFFxC,EAsFSc,IAMP0B,EA5FFxC,EA4FSgB,IAMPwB,EAlGFxC,EAkGSkB,GAjGPuB,EADFzC,EACS,qBAAqB,CAAC,WAAY,oBAAqB,kBAAkB,GAChFyC,EAFFzC,EAES,YAAY,IAAIP,IAEvB+C,EAJFxC,EAISC,EAAP,QAKAuC,EATFxC,EASSE,EAAe,IAoBtBuC,EA7BFzC,EA6BS,WAAW,IAAM,CApD5B,IAAAA,EAqDW2C,EAAA3C,EAAKI,EAAAC,IAQEsC,EAAA3C,EAAKM,EAAAC,IAGfoC,EAAA3C,IAAKG,GAAL,KAAAH,EAAkB,OAAO,KAAK,aAF9B,eAAe,YAAY,oBAAoB,EAAE,KAAK,IAAG,CA9DjE,IAAAA,EA8DoE,OAAA2C,EAAA3C,IAAKG,GAAL,KAAAH,EAAkB,OAAO,KAAK,aAAY,EARtG,WAAW,sBAAwB,IAAM,CAKvC,eAAe,YAAY,oBAAoB,EAAE,KAAK,IAAG,CA3DnE,IAAAA,EA2DsE,OAAA2C,EAAA3C,IAAKG,GAAL,KAAAH,EAAkB,OAAO,KAAK,aAAY,CACxG,CAMJ,GAEAwC,EA7CFxC,EA6CSG,EAAgBiF,GAAgB,CACrC,GAAIA,EAAa,CACfrC,EAAA/C,EAAKE,EAAe,IAEpB,GAAM,CAAE,mBAAAmF,CAAmB,EAAI,KAAK,UAAU,qBAC9C1C,EAAA3C,EAAcQ,EAAAC,GAAa,iBAAiB4E,EAAqBC,GAAM,CACrEtF,EAAK,UAAU,QAASuF,GAAO,CA1EzC,IAAAvF,EA0E4C,OAAA0C,EAAA1C,EAAAuF,EAAMzD,EAAAC,IAAN,KAAA/B,EAA0BsF,GAAE,CAChE,CAAC,EAED,GAAM,CAAE,sBAAAE,CAAsB,EAAI,KAAK,UAAU,qBACjD7C,EAAA3C,EAAcQ,EAAAC,GAAa,iBAAiB+E,EAAwBF,GAAM,CACxEtF,EAAK,UAAU,QAASuF,GAAO,CA/EzC,IAAAvF,EA+E4C,OAAA0C,EAAA1C,EAAAuF,EAAMvD,GAAAC,IAAN,KAAAjC,EAA6BsF,GAAE,CACnE,CAAC,EAEDtF,EAAK,UAAU,QAASuF,GAAO,CAlFvC,IAAAvF,EAkF0C,OAAA0C,EAAA1C,EAAAuF,EAAMrD,EAAAC,IAAN,KAAAnC,GAAa,CACjD,CACF,GA7DFA,GA6lBF,GAAI,WAAW,kBAAoB,WAAW,eAAgB,CAC5D,IAAMyF,EAAuB3F,GAAmB,gBAAgB,EAE3D,WAAW,eAAe,IAAI,gBAAgB,IACjD,WAAW,eAAe,OAAO,iBAAkB2F,EAAsB,CACvE,QAAS,OACX,CAAC,EACD,WAAW,qBAAuBA,GAGpCA,EAAqB,SAAS,CAChC,CCnnBO,IAAMC,GAAc,CACzB,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,aACA,YACA,WACF,EAEMC,GAAWC,GAAS,cAAc,UAAU,EAGlDD,GAAS,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAhDrB,IAAAE,EAAAC,EAAAC,GAAAC,EAAAC,GAsEMC,EAAN,cAAiCC,EAAW,WAAY,CAGtD,aAAc,CACZ,MAAM,EAYRC,EAAA,KAAAN,GA2FAM,EAAA,KAAAJ,GA1GAI,EAAA,KAAAP,EAAA,QAIE,KAAK,aAAa,CAAE,KAAM,MAAO,CAAC,EAM9B,KAAK,aACPQ,EAAA,KAAKP,EAAAC,IAAL,UAEJ,CAiDA,WAAW,oBAAqB,CAC9B,IAAIO,EAAQ,CAAC,EAEPC,EAAaC,GACVA,EAAK,QAAQ,kBAAmB,OAAO,EAAE,YAAY,EAK9D,OAAO,oBAAoB,KAAK,SAAS,EAAE,QAASC,GAAa,CAC/D,IAAIC,EAAS,GAGb,GAAI,CACE,OAAO,KAAK,UAAUD,IAAc,aACtCC,EAAS,GAEb,MAAE,CAAW,CAGT,CAACA,GAAUD,IAAaA,EAAS,YAAY,GAC/CH,EAAM,KAAKG,EAAS,YAAY,EAAGF,EAAUE,CAAQ,CAAC,CAE1D,CAAC,EAGD,IAAME,EAAW,OAAO,eAAe,IAAI,EAAE,mBAE7C,OAAIA,IACFL,EAAQA,EAAM,OAAOK,CAAQ,GAGxBL,CACT,CAEA,yBAAyBM,EAAUC,EAAUC,EAAU,CAErDT,EAAA,KAAKP,EAAAC,IAAL,WAEAM,EAAA,KAAKL,EAAAC,IAAL,UAAuBW,EAAUC,EAAUC,EAC7C,CA2CA,mBAAoB,CAClBT,EAAA,KAAKP,EAAAC,IAAL,UACF,CACF,EApJEF,EAAA,YAeAC,EAAA,YAAAC,GAAK,UAAG,CACN,GAAIgB,EAAA,KAAKlB,GAAS,OAClBmB,EAAA,KAAKnB,EAAU,IAEf,KAAK,WAAW,OAAOF,GAAS,QAAQ,UAAU,EAAI,CAAC,EACvD,KAAK,SAAW,KAAK,WAAW,cAAc,OAAO,EAIrDD,GAAY,QAASuB,GAAS,CAC5B,KAAK,SAAS,iBAAiBA,EAAOC,GAAQ,CAC5C,KAAK,cAAc,IAAI,YAAYA,EAAI,KAAM,CAAE,OAAQA,EAAI,MAAO,CAAC,CAAC,CACtE,CAAC,CACH,CAAC,EAID,IAAMC,EAAS,KAAK,WAAW,cAAc,MAAM,EACnDA,EAAO,iBAAiB,aAAc,IAAM,CAC1CA,EAAO,iBAAiB,EAAE,QAASC,GAAO,CACpC,CAAC,CAAC,QAAS,QAAQ,EAAE,SAASA,EAAG,SAAS,GAC9C,KAAK,SAAS,OAAOA,CAAE,CACzB,CAAC,CACH,CAAC,EAOD,MAAM,UAAU,QAAQ,KAAK,KAAK,WAAaC,GAAa,CAC1DhB,EAAA,KAAKL,EAAAC,IAAL,UAAuBoB,EAAS,KAAM,KAAMA,EAAS,MACvD,CAAC,EAOG,KAAK,SAAS,eAChB,KAAK,SAAS,MAAQ,GAE1B,EAiDArB,EAAA,YAAAC,GAAiB,SAACW,EAAUC,EAAUC,EAAU,CAE9C,IAAMQ,EAAW,OAAO,oBAAoB,OAAO,eAAe,IAAI,CAAC,EACjEb,EAAWc,GAAiBD,EAAUV,CAAQ,EAG9CY,EAAgB,OAAO,eAAe,KAAK,WAAW,EAAE,SAAS,EAAE,QAAQ,sBAAsB,IAAM,EAIzGf,GAAY,CAACe,EAEX,OAAO,KAAKf,IAAa,UAEvBK,IAAa,KACf,KAAKL,GAAY,GAIjB,KAAKA,GAAY,GAGnB,KAAKA,GAAYK,EAKfA,IAAa,KACf,KAAK,SAAS,gBAAgBF,CAAQ,EAIlC,CAAC,KAAM,OAAO,EAAE,QAAQA,CAAQ,IAAM,IACxC,KAAK,SAAS,aAAaA,EAAUE,CAAQ,CAIrD,EAYF,IAAIW,GAAgB,CAAC,EAKfC,GAAe9B,GAAS,cAAc,QAAS,CACnD,GAAI,gBACN,CAAC,EAGK+B,GAAkB,CAAC,6BAA8B,0BAA0B,EAKjF,QACMC,EAAQ,OAAO,eAAeF,EAAY,EAC9CE,GAASA,IAAUzB,EAAW,YAAY,UAC1CyB,EAAQ,OAAO,eAAeA,CAAK,EAEnC,OAAO,oBAAoBA,CAAK,EAAE,QAASC,GAAQ,CAC7CF,GAAgB,QAAQE,CAAG,IAAM,IACnCJ,GAAc,KAAKI,CAAG,CAE1B,CAAC,EAIHJ,GAAc,QAASK,GAAS,CAC9B,GAAIA,KAAQ5B,EAAmB,UAAW,OAG1C,GADa,OAAOwB,GAAaI,IACrB,WAEV5B,EAAmB,UAAU4B,GAAQ,UAAY,CAC/C,OAAO,KAAK,SAASA,GAAM,MAAM,KAAK,SAAU,SAAS,CAC3D,MACK,CAEL,IAAIC,EAAS,CACX,KAAM,CACJ,OAAO,KAAK,SAASD,EACvB,CACF,EAEIA,IAASA,EAAK,YAAY,IAE5BC,EAAO,IAAM,SAAUC,EAAK,CAC1B,KAAK,SAASF,GAAQE,CACxB,GAGF,OAAO,eAAe9B,EAAmB,UAAW4B,EAAMC,CAAM,CAClE,CACF,CAAC,EAED,SAASR,GAAiBU,EAAKC,EAAM,CACnC,IAAIC,EAAQ,KAEZ,OAAAF,EAAI,QAASG,GAAS,CAChBA,EAAK,YAAY,GAAKF,EAAK,YAAY,IACzCC,EAAQC,EAEZ,CAAC,EAEMD,CACT,CAEKhC,EAAW,eAAe,IAAI,cAAc,IAC/CA,EAAW,eAAe,OAAO,eAAgBD,CAAkB,EACnEC,EAAW,mBAAqBD,GAGlC,IAAOmC,GAAQnC,EHpQR,IAAMoC,EAA6B,CACxC,QAAS,UACT,MAAO,QACP,YAAa,cACb,aAAc,eACd,gBAAiB,kBACjB,wBAAyB,0BACzB,qBAAsB,uBACtB,yBAA0B,2BAC1B,cAAe,gBACf,gBAAiB,kBACjB,KAAM,OACN,YAAa,cACb,WAAY,aACZ,YAAa,aACf,EAEMC,GAAsB,OAAO,OAAOD,CAAU,EAE9CE,GAAwBC,GAAiB,EACzCC,GAAqB,WA3D3BC,EAAAC,EAAAC,EAAAC,EAAAC,GAAAC,GAAAC,GAAAC,GAAAC,GA6DMC,EAAN,cAA6BC,EAAuE,CAalG,aAAc,CACZ,MAAM,EAmTRC,EAAA,KAAMJ,IA5TNI,EAAA,KAAAX,EAAA,QACAW,EAAA,KAAAV,EAAA,QACAU,EAAA,KAAAT,EAAA,QACAS,EAAA,KAAAR,EAAgC,CAAC,GACjCQ,EAAA,KAAAP,GAAA,QACAO,EAAA,KAAAN,GAAA,QACAM,EAAA,KAAAL,GAAA,QAIEM,EAAA,KAAKV,EAAkBW,GAAuB,EAChD,CAfA,WAAW,oBAAqB,CA9DlC,IAAAC,EA+DI,MAAO,CAAC,GAAGlB,GAAqB,IAAIkB,EAAAJ,GAAmB,qBAAnB,KAAAI,EAAyC,CAAC,CAAE,CAClF,CAeA,IAAI,YAAa,CA/EnB,IAAAA,EAgFI,OAAQA,EAAA,KAAK,aAAanB,EAAW,WAAW,IAAxC,KAAAmB,EAAoE,MAC9E,CAEA,IAAI,WAAWC,EAAuC,CAChDA,IAAU,KAAK,aACdA,EAEMC,GAAe,SAASD,CAAK,EACtC,KAAK,aAAapB,EAAW,YAAaoB,CAAK,EAE/C,QAAQ,KAAK,gDAAgDC,GAAe,KAAK,GAAG,EAJpF,KAAK,gBAAgBrB,EAAW,WAAW,EAM/C,CAEA,IAAI,gBAAiB,CACnB,OAAOsB,EAAA,KAAKf,EACd,CAEA,IAAI,oBAAqB,CAlG3B,IAAAY,EAmGI,OAAOA,EAAAG,EAAA,KAAKZ,MAAL,KAAAS,EAA4Bf,EACrC,CAEA,IAAI,mBAAmBgB,EAA2B,CAChDH,EAAA,KAAKP,GAAsBU,EAC7B,CAEA,IAAI,uBAAwB,CA1G9B,IAAAD,EA2GI,OAAOA,EAAAG,EAAA,KAAKb,MAAL,KAAAU,EAA+BjB,EACxC,CAEA,IAAI,sBAAsBkB,EAA2B,CACnDH,EAAA,KAAKR,GAAyBW,EAChC,CAGA,IAAI,MAAmC,CAnHzC,IAAAD,EAoHI,OAAOA,EAAAG,EAAA,KAAKjB,KAAL,YAAAc,EAAY,MACrB,CAEA,IAAI,KAAqD,CACvD,OAAO,KAAK,SAAS,GACvB,CAGA,IAAI,OAA2B,CA5HjC,IAAAA,EA6HI,OAAOA,EAAAI,GAAS,KAAK,QAAQ,IAAtB,KAAAJ,EAA2B,IACpC,CAEA,IAAI,iBAA0D,CAC5D,OAAOG,EAAA,KAAKX,GACd,CAEA,IAAI,gBAAgBS,EAA+C,CACjEH,EAAA,KAAKN,GAAmBS,EAC1B,CAEA,IAAI,KAAM,CAIR,OAAO,KAAK,aAAa,KAAK,CAChC,CAEA,IAAI,IAAII,EAAa,CAGfA,IAAQ,KAAK,MAEbA,GAAO,KACT,KAAK,gBAAgB,KAAK,EAE1B,KAAK,aAAa,MAAOA,CAAG,EAEhC,CAEA,IAAI,MAAkD,CA3JxD,IAAAL,EA4JI,OAAQA,EAAA,KAAK,aAAanB,EAAW,IAAI,IAAjC,KAAAmB,EAAwE,MAClF,CAEA,IAAI,KAAKK,EAAgD,CAEnDA,IAAQ,KAAK,OAEbA,EACF,KAAK,aAAaxB,EAAW,KAAMwB,CAAG,EAEtC,KAAK,gBAAgBxB,EAAW,IAAI,EAExC,CAGA,IAAI,UAAqB,CACvB,IAAMyB,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,OAAiB,CACnB,OAAO,KAAK,aAAaxB,EAAW,KAAK,GAAK,IAChD,CAEA,IAAI,MAAMwB,EAAc,CAElBA,IAAQ,KAAK,QAEbA,EACF,KAAK,aAAaxB,EAAW,MAAO,EAAE,EAEtC,KAAK,gBAAgBA,EAAW,KAAK,EAEzC,CAEA,IAAI,gBAA0B,CAC5B,OAAO,KAAK,aAAaA,EAAW,eAAe,CACrD,CAEA,IAAI,eAAewB,EAAc,CAE3BA,IAAQ,KAAK,iBAEbA,EACF,KAAK,aAAaxB,EAAW,gBAAiB,EAAE,EAEhD,KAAK,gBAAgBA,EAAW,eAAe,EAEnD,CAEA,IAAI,WAAgC,CAClC,IAAMwB,EAAM,KAAK,aAAaxB,EAAW,UAAU,EACnD,GAAIwB,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,gBAAgBxB,EAAW,UAAU,EAE1C,KAAK,aAAaA,EAAW,WAAY,GAAGwB,GAAK,EAErD,CAEA,IAAI,YAAiC,CAxQvC,IAAAL,EAyQI,OAAOA,EAAA,KAAK,aAAanB,EAAW,WAAW,IAAxC,KAAAmB,EAA6C,MACtD,CAEA,IAAI,WAAWK,EAAyB,CAElCA,IAAQ,KAAK,aAEbA,EACF,KAAK,aAAaxB,EAAW,YAAawB,CAAG,EAE7C,KAAK,gBAAgBxB,EAAW,WAAW,EAE/C,CAEA,IAAI,cAAe,CAvRrB,IAAAmB,EAwRI,OAAOA,EAAA,KAAK,aAAanB,EAAW,aAAa,IAA1C,KAAAmB,EAA+C,MACxD,CAEA,IAAI,aAAaK,EAAyB,CAEpCA,IAAQ,KAAK,eAEbA,EACF,KAAK,aAAaxB,EAAW,cAAewB,CAAG,EAE/C,KAAK,gBAAgBxB,EAAW,aAAa,EAEjD,CAEA,IAAI,QAA6B,CAtSnC,IAAAmB,EAuSI,OAAOA,EAAA,KAAK,aAAanB,EAAW,OAAO,IAApC,KAAAmB,EAAyC,MAClD,CAEA,IAAI,OAAOK,EAAyB,CAE9BA,IAAQ,KAAK,SAEbA,EACF,KAAK,aAAaxB,EAAW,QAASwB,CAAG,EAEzC,KAAK,gBAAgBxB,EAAW,OAAO,EAE3C,CAEA,IAAI,wBAA6C,CArTnD,IAAAmB,EAsTI,OAAOA,EAAA,KAAK,aAAanB,EAAW,wBAAwB,IAArD,KAAAmB,EAA0D,MACnE,CAEA,IAAI,uBAAuBK,EAAyB,CAE9CA,IAAQ,KAAK,yBAEbA,EACF,KAAK,aAAaxB,EAAW,yBAA0BwB,CAAG,EAE1D,KAAK,gBAAgBxB,EAAW,wBAAwB,EAE5D,CAEA,IAAI,YAA+C,CApUrD,IAAAmB,EAsUI,OAAQA,EAAA,KAAK,aAAanB,EAAW,WAAW,IAAxC,KAAAmB,EAAsE,MAChF,CAEA,IAAI,WAAWK,EAAuC,CAEhDA,IAAQ,KAAK,aAEbA,EACF,KAAK,aAAaxB,EAAW,YAAawB,CAAG,EAE7C,KAAK,gBAAgBxB,EAAW,WAAW,EAE/C,CAEA,IAAI,gBAAqD,CACvD,IAAMwB,EAAM,KAAK,aAAaxB,EAAW,eAAe,EACxD,GAAIwB,IAAQI,GAAc,KAAOJ,IAAQI,GAAc,OAAQ,OAAOJ,CAExE,CAEA,IAAI,eAAeA,EAAyC,CACtDA,IAAQ,KAAK,iBAEbA,IAAQI,GAAc,KAAOJ,IAAQI,GAAc,OACrD,KAAK,aAAa5B,EAAW,gBAAiBwB,CAAG,EAEjD,KAAK,gBAAgBxB,EAAW,eAAe,EAEnD,CAEA,IAAI,UAAW,CAab,MAAO,CACL,GAbuD,KAAK,kBAAkB,EAC7E,OAAQ6B,GACAA,EAAS,WAAW,WAAW,GAAK,CAAE,CAAC7B,EAAW,YAAY,EAAe,SAAS6B,CAAQ,CACtG,EACA,OAAO,CAACC,EAAWD,IAAa,CAC/B,IAAMT,EAAQ,KAAK,aAAaS,CAAQ,EACxC,OAAIT,GAAS,OACXU,EAAUD,EAAS,QAAQ,aAAc,EAAE,EAAE,QAAQ,KAAM,GAAG,GAAeT,GAExEU,CACT,EAAG,CAAC,CAA8B,EAIlC,GAAGR,EAAA,KAAKd,EACV,CACF,CAEA,IAAI,SAASgB,EAAqC,CAChDP,EAAA,KAAKT,EAAYgB,GAAA,KAAAA,EAAO,CAAC,GACnB,KAAK,KACT,KAAK,IAAI,KAAK,KAAMF,EAAA,KAAKd,EAAS,CAEtC,CASA,MAAO,CACLS,EAAA,KAAKZ,EAAQ0B,GAAW,KAAgC,KAAK,SAAUT,EAAA,KAAKjB,EAAK,EACnF,CAEA,QAAS,CACP2B,GAAS,KAAK,SAAUV,EAAA,KAAKjB,EAAK,EAClCY,EAAA,KAAKZ,EAAQ,OACf,CAaA,yBAAyBwB,EAAkBI,EAAyBC,EAAyB,CAzZ/F,IAAAf,EAAAgB,EA4ZI,OAFA,MAAM,yBAAyBN,EAAUI,EAAUC,CAAQ,EAEnDL,EAAU,CAChB,KAAK7B,EAAW,qBACd,KAAK,mBAAqBkC,GAAA,KAAAA,EAAY,OACtC,MACF,KAAKlC,EAAW,wBACd,KAAK,sBAAwBkC,GAAA,KAAAA,EAAY,OACzC,MACF,IAAK,MAAO,CACV,IAAME,EAAS,CAAC,CAACH,EACXI,GAAS,CAAC,CAACH,EACb,CAACE,GAAUC,GACbC,EAAA,KAAK1B,GAAAC,IAAL,WACSuB,GAAU,CAACC,GACpB,KAAK,OAAO,EAEHD,GAAUC,KACnB,KAAK,OAAO,EACZC,EAAA,KAAK1B,GAAAC,IAAL,YAEF,KACF,CACA,IAAK,WACH,GAAIqB,IAAaD,EACf,OAGFd,EAAAG,EAAA,KAAKjB,KAAL,MAAAc,EAAY,YAAY,KAAK,UAC7B,MACF,IAAK,UACH,GAAIe,IAAaD,EACf,OAEFE,EAAAb,EAAA,KAAKjB,KAAL,MAAA8B,EAAY,WAAWD,GACvB,MACF,KAAKlC,EAAW,YAEd,KAAK,IAAMuC,GAAcL,GAAA,KAAAA,EAAY,OAAW,CAAE,OAAQ,KAAK,YAAa,CAAC,EAC7E,MACF,KAAKlC,EAAW,MAAO,CACrB,IAAMwC,EAAQ,KAAK,MACb,KAAK,KAET,QAAQ,KACN,+HACF,EAEI,KAAK,OACT,KAAK,KAAK,OAAO,MAAQA,GAE3B,KACF,CACA,KAAKxC,EAAW,aACVkC,GACF,MAAMA,CAAQ,EACX,KAAMO,GAASA,EAAK,KAAK,CAAC,EAC1B,KAAMC,GAAU,KAAK,SAAWA,CAAK,EACrC,MAAM,IAAM,QAAQ,MAAM,2DAA2DR,IAAW,CAAC,EAEtG,MACF,QACE,KACJ,CACF,CAEA,sBAAuB,CACrB,KAAK,OAAO,CACd,CACF,EA7ZE7B,EAAA,YACAC,EAAA,YACAC,EAAA,YACAC,EAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YAsTMC,GAAA,YAAAC,GAAY,gBAAG,CACfS,EAAA,KAAKhB,KACT,MAAOW,EAAA,KAAKX,EAAiB,QAAQ,QAAQ,GAC7CW,EAAA,KAAKX,EAAiB,MACtB,KAAK,KAAK,EACZ,EAoGGqC,EAAW,eAAe,IAAI,UAAU,IAC3CA,EAAW,eAAe,OAAO,WAAY7B,CAAc,EAE3D6B,EAAW,eAAiB7B,GAK9B,IAAO8B,GAAQC",
  "names": ["EventTarget", "_event", "DocumentFragment", "HTMLElement", "HTMLVideoElement", "customElements", "_name", "_constructor", "_options", "_root", "_detail", "CustomEvent", "typeArg", "eventInitDict", "__privateAdd", "__privateSet", "__privateGet", "createElement", "_tagName", "globalThisShim", "isServer", "GlobalThis", "Document", "initialize", "teardown", "generatePlayerInitTime", "PlaybackTypes", "toMuxVideoURL", "MediaError", "getError", "CmcdTypeValues", "getEnvPlayerVersion", "player_version", "getPlayerVersion", "IterableWeakSet", "el", "fn", "ref", "value", "CastableVideoMixin", "superclass", "_a", "_castElement", "_castEnabled", "_onSdkLoaded", "_isChromeCastAvailable", "isChromeCastAvailable_get", "_isCastFrameworkAvailable", "isCastFrameworkAvailable_get", "_castContext", "castContext_get", "_currentSession", "currentSession_get", "_currentMedia", "currentMedia_get", "_editTracksInfo", "editTracksInfo_fn", "_getMediaStatus", "getMediaStatus_fn", "_setOptions", "setOptions_fn", "_localState", "_remotePlayer", "_remoteListeners", "_enterCastCallback", "_leaveCastCallback", "_castChangeCallback", "_isMediaLoaded", "isMediaLoaded_get", "_disconnect", "disconnect_fn", "_onCastStateChanged", "onCastStateChanged_fn", "_onSessionStateChanged", "onSessionStateChanged_fn", "_init", "init_fn", "_onRemoteMediaLoaded", "onRemoteMediaLoaded_fn", "_updateRemoteTextTrack", "updateRemoteTextTrack_fn", "__privateAdd", "__publicField", "__privateMethod", "__privateGet", "err", "attrName", "options", "__privateSet", "event", "listener", "_b", "mediaInfo", "subtitles", "kind", "src", "activeTrackIds", "textTrackIdCount", "trackEl", "trackId", "track", "request", "_c", "val", "callback", "resolve", "reject", "SESSION_RESUMED", "error", "_d", "_e", "_f", "remoteSubtitles", "type", "localSubtitles", "language", "name", "mode", "local", "hiddenTrackIds", "showingSubtitle", "requestTrackIds", "id", "a", "b", "isAvailable", "CAST_STATE_CHANGED", "e", "video", "SESSION_STATE_CHANGED", "CastableVideoElement", "VideoEvents", "template", "Document", "_isInit", "_init", "init_fn", "_forwardAttribute", "forwardAttribute_fn", "CustomVideoElement", "GlobalThis", "__privateAdd", "__privateMethod", "attrs", "kebabCase", "name", "propName", "isFunc", "supAttrs", "attrName", "oldValue", "newValue", "__privateGet", "__privateSet", "type", "evt", "slotEl", "el", "attrNode", "ownProps", "arrayFindAnyCase", "isBaseElement", "nativeElProps", "nativeElTest", "deprecatedProps", "proto", "key", "prop", "config", "val", "arr", "word", "found", "item", "CustomVideoElement_default", "Attributes", "AttributeNameValues", "playerSoftwareVersion", "getPlayerVersion", "playerSoftwareName", "_core", "_loadRequested", "_playerInitTime", "_metadata", "_playerSoftwareVersion", "_playerSoftwareName", "_errorTranslator", "_requestLoad", "requestLoad_fn", "IxVideoElement", "CustomVideoElement_default", "__privateAdd", "__privateSet", "generatePlayerInitTime", "_a", "value", "CmcdTypeValues", "__privateGet", "getError", "val", "attr", "currentVal", "num", "PlaybackTypes", "attrName", "currAttrs", "initialize", "teardown", "oldValue", "newValue", "_b", "hadSrc", "hasSrc", "__privateMethod", "toMuxVideoURL", "debug", "resp", "json", "GlobalThis", "src_default", "IxVideoElement"]
}
