/
var
/
www
/
html
/
wordpress
/
wp-content
/
plugins
/
presto-player
/
dist
/
components
/
web-components
/
Upload File
HOME
{"version":3,"names":["prestoActionBarCss","PrestoActionBar","componentWillLoad","this","player","on","setEnded","e","setCurrentTime","handlePlayerChange","ended","currentTime","_a","detail","plyr","duration","_b","disconnectedCallback","off","render","h","key","config","direction","youtube","prestoActionBarControllerCss","constructor","hostRef","show","youtubeRenderKey","percentagePassed","handleDuration","handleTime","handleEnded","val","percentage_start","handlePercentagePassed","checkTime","window","wp","blocks","timePassed","current","showAfter","handleButtonCountChange","newVal","oldVal","button_count","enabled","youtubeButton","button_type","channelId","channel","_c","showCount","_d","customButton","type","size","href","button_link","url","target","_e","opensInNewTab","style","_f","button_radius","_g","button_color","_h","_j","button_text_color","_k","_l","button_text","handleCtaStateChange","actionBarStateChange","emit","open","background_color","text","slot","prestoAudioCss","PrestoAudio","renderPosterImage","poster","class","src","hasPosterArea","preset","renderMobilePoster","renderLargePlay","mediaTitle","className","onClick","playing","playVideo","pauseVideo","width","height","viewBox","fill","xmlns","d","x","componentDidLoad","ro","ResizeObserver","entries","forEach","entry","contentRect","observe","el","ref","lightOrDark","part","getRef","autoplay","preload","audioAttributes","tracks","length","map","track","kind","label","srclang","srcLang","PrestoBunny","playsinline","videoAttributes","prestoBusinessSkinCss","PrestoBusinessSkin","Host","prestoCtaOverlayCss","PrestoCTAOverlay","cta","i18n","provider","prestoCtaOverlayControllerCss","PrestoCtaOverlayController","percentage","skipped","handleEnabled","skip","rewatch","restartVideo","ctaStateChange","background_opacity","headline","bottom_text","show_button","buttonLink","allowSkip","_m","show_skip","allowRewatch","_o","show_rewatch","_p","onSkip","onRewatch","prestoDynamicOverlayUiCss","PrestoDynamicOverlayUi","position","closestElement","selector","document","closest","getRootNode","host","fitText","maxFontSize","minFontSize","container","Tag","prestoDynamicOverlaysCss","PrestoDynamicOverlays","watermarkRef","left","right","destroy","refs","checkValidity","overlays","watermark","offsetParent","topLeft","topRight","reloadComponent","Object","keys","overlay","component","checkComponent","shouldShowWatermark","callback","shadowRoot","querySelector","content","assignedNodes","parentElement","innerHTML","getComputedStyle","parseInt","fontSize","color","parseColor","shouldShowOverlay","timeToSeconds","startTime","endTime","renderOverlay","visible","id","link","backgroundColor","opacity","toString","time","Math","floor","prestoEmailOverlayCss","PrestoEmailOverlay","videoId","presetId","emailCollection","email_collection","prestoEmailOverlayControllerCss","PrestoEmailOverlayController","setStorage","status","localStorage","setItem","JSON","stringify","getStorage","getItem","handleTimeCheck","handleShowChange","getNonce","fetch","prestoPlayer","ajaxurl","submit","loading","error","response","data","nonce","json","method","body","URLSearchParams","action","preset_id","video_id","success","handleEmailStateChange","emailStateChange","bottomText","allow_skip","buttonText","isLoading","errorMessage","onSubmitForm","prestoModernSkinCss","PrestoModernSkin","prestoMutedOverlayCss","PrestoMutedOverlay","mutedPreview","mutedOverlay","focalPoint","top","y","transform","PrestoSearchBar","currentMarkerLocation","onSearch","value","removeOldMarkers","markers","searchResult","searchVtt","points","setMarkers","onPreviousNav","prevLocation","onFocusChange","focus","hideControls","auto_hide","onNextNav","nextLocation","media","textTracks","presets","placeholder","search","hasNavigation","prestoStackedSkinCss","PrestoStackedSkin","prestoVimeoCss","PrestoVimeo","getId","regExp","parseUrl","exec","parseHash","regex","found","match","groups","hash","isAndroidWebView","allowFullScreen","allowTransparency","allow","prestoYoutubeCss","PrestoYoutube","fixes","setPoster","once","code","blockAttributes","muted","loadPlayer","lazyLoad","reloadPlayer","componentDidRender","reload","setWebView","standalone","navigator","userAgent","toLowerCase","safari","test","ios","isWebView","includes","loadImage","minWidth","Promise","resolve","reject","image","Image","handler","onload","onerror","naturalWidth","assign","posterSrc","s","catch","then","isIOS","allowtransparency"],"sources":["src/components/core/features/presto-action-bar/component/presto-action-bar.scss?tag=presto-action-bar&encapsulation=shadow","src/components/core/features/presto-action-bar/component/presto-action-bar.tsx","src/components/core/features/presto-action-bar/controller/presto-action-bar-controller.scss?tag=presto-action-bar-controller&encapsulation=shadow","src/components/core/features/presto-action-bar/controller/presto-action-bar-controller.tsx","src/components/core/providers/presto-audio/presto-audio.scss?tag=presto-audio","src/components/core/providers/presto-audio/presto-audio.tsx","src/components/core/providers/presto-bunny/presto-bunny.tsx","src/components/ui/skins/presto-business-skin/presto-business-skin.scss?tag=presto-business-skin","src/components/ui/skins/presto-business-skin/presto-business-skin.tsx","src/components/core/features/presto-cta-overlay/component/presto-cta-overlay.css?tag=presto-cta-overlay","src/components/core/features/presto-cta-overlay/component/presto-cta-overlay.tsx","src/components/core/features/presto-cta-overlay/controller/presto-cta-overlay-controller.css?tag=presto-cta-overlay-controller","src/components/core/features/presto-cta-overlay/controller/presto-cta-overlay-controller.tsx","src/components/core/features/presto-dynamic-overlays/ui/presto-dynamic-overlay-ui.scss?tag=presto-dynamic-overlay-ui&encapsulation=shadow","src/components/core/features/presto-dynamic-overlays/ui/presto-dynamic-overlay-ui.tsx","src/components/core/features/presto-dynamic-overlays/component/presto-dynamic-overlays.scss?tag=presto-dynamic-overlays&encapsulation=shadow","src/components/core/features/presto-dynamic-overlays/component/presto-dynamic-overlays.tsx","src/components/core/features/presto-email-overlay/component/presto-email-overlay.css?tag=presto-email-overlay","src/components/core/features/presto-email-overlay/component/presto-email-overlay.tsx","src/components/core/features/presto-email-overlay/controller/presto-email-overlay-controller.css?tag=presto-email-overlay-controller","src/components/core/features/presto-email-overlay/controller/presto-email-overlay-controller.tsx","src/components/ui/skins/presto-modern-skin/presto-modern-skin.scss?tag=presto-modern-skin","src/components/ui/skins/presto-modern-skin/presto-modern-skin.tsx","src/components/core/features/presto-muted-overlay/presto-muted-overlay.css?tag=presto-muted-overlay","src/components/core/features/presto-muted-overlay/presto-muted-overlay.tsx","src/components/core/features/presto-search-bar/component/presto-search-bar.tsx","src/components/ui/skins/presto-stacked-skin/presto-stacked-skin.scss?tag=presto-stacked-skin","src/components/ui/skins/presto-stacked-skin/presto-stacked-skin.tsx","src/components/core/providers/presto-vimeo/presto-vimeo.css?tag=presto-vimeo","src/components/core/providers/presto-vimeo/presto-vimeo.tsx","src/components/core/providers/presto-youtube/presto-youtube.css?tag=presto-youtube","src/components/core/providers/presto-youtube/presto-youtube.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Element, h, Prop, State, Watch } from '@stencil/core';\nimport { ActionBarConfig, YoutubeConfig } from '../../../../../interfaces';\n\n@Component({\n tag: 'presto-action-bar',\n styleUrl: 'presto-action-bar.scss',\n shadow: true,\n})\nexport class PrestoActionBar {\n @Element() el: HTMLElement;\n\n @Prop() player: any;\n @Prop() config: ActionBarConfig;\n @Prop() direction?: 'rtl';\n @Prop() youtube?: YoutubeConfig;\n\n @State() currentTime: number;\n @State() duration: number;\n @State() ended: boolean;\n\n componentWillLoad() {\n if (!this.player) return;\n this.player.on('ended', () => this.setEnded());\n this.player.on('timeupdate', e => this.setCurrentTime(e));\n }\n\n /** Watch for player changes on lazy load.*/\n @Watch('player')\n handlePlayerChange() {\n if (!this.player) return;\n this.player.on('ended', () => this.setEnded());\n this.player.on('timeupdate', e => this.setCurrentTime(e));\n }\n\n setEnded() {\n this.ended = true;\n }\n\n setCurrentTime(e) {\n this.currentTime = e?.detail?.plyr.currentTime;\n this.duration = e?.detail?.plyr.duration;\n }\n\n /**\n * Remove listeners if destroyed\n */\n disconnectedCallback() {\n if (!this.player) return;\n this.player.off('ended', this.setEnded);\n this.player.off('timeupdate', this.setCurrentTime);\n }\n\n render() {\n return (\n <presto-action-bar-controller\n ended={this.ended}\n config={this.config}\n currentTime={this.currentTime}\n duration={this.duration}\n direction={this.direction}\n youtube={this.youtube}\n ></presto-action-bar-controller>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Element, Event, EventEmitter, h, Prop, State, Watch } from '@stencil/core';\nimport { ActionBarConfig, YoutubeConfig } from '../../../../../interfaces';\nimport { timePassed } from '../../../../../util';\n\n@Component({\n tag: 'presto-action-bar-controller',\n styleUrl: 'presto-action-bar-controller.scss',\n shadow: true,\n})\nexport class PrestoActionBar {\n @Element() el: HTMLElement;\n\n @Prop() ended: boolean;\n @Prop() config: ActionBarConfig;\n @Prop({ reflect: true }) currentTime: number;\n @Prop({ reflect: true }) duration: number;\n @Prop() direction?: 'rtl';\n @Prop() youtube?: YoutubeConfig;\n\n @State() show: boolean = false;\n @State() youtubeRenderKey: number = 1;\n @State() percentagePassed: number = 0;\n @Event() actionBarStateChange: EventEmitter<boolean>;\n\n componentWillLoad() {\n this.handleDuration();\n }\n\n /**\n * Wait for duration to start before checking time\n * @returns void\n */\n @Watch('duration')\n handleDuration() {\n this.handleTime();\n }\n\n /**\n * Handle with the player is ended\n * @param val\n * @returns\n */\n @Watch('ended')\n handleEnded(val) {\n if (val) {\n if (this?.config?.percentage_start !== 100) return;\n this.show = true;\n }\n }\n\n @Watch('currentTime')\n @Watch('duration')\n handlePercentagePassed() {\n this.percentagePassed = (this.currentTime / this.duration) * 100;\n }\n\n /**\n * When current time changes, check to see if we should\n * enable the overlay\n * @returns void\n */\n @Watch('currentTime')\n handleTime() {\n this.checkTime();\n }\n\n /**\n * Set enabled/disabled based on time that has passed\n */\n checkTime() {\n if (window?.wp?.blocks) {\n this.show = true;\n return;\n }\n // if ( this.config?.percentage_start === 0) {\n // this.show = true;\n // } else {\n\n // console.log(this.currentTime, this.duration, this.config?.percentage_start);\n this.show = timePassed({\n current: this.currentTime,\n duration: this.duration,\n showAfter: this.config?.percentage_start,\n });\n }\n\n @Watch('config')\n handleButtonCountChange(newVal, oldVal) {\n if (newVal?.button_count !== oldVal?.button_count) {\n this.youtubeRenderKey++;\n }\n if (newVal?.enabled) {\n this.handleDuration();\n }\n }\n\n youtubeButton() {\n if (this.config?.button_type !== 'youtube' || !this.youtube?.channelId) {\n return;\n }\n\n return <presto-youtube-subscribe-button key={this.youtubeRenderKey} channel={this.youtube?.channelId} showCount={this.config?.button_count}></presto-youtube-subscribe-button>;\n }\n\n customButton() {\n if (this.config?.button_type !== 'custom') {\n return;\n }\n\n return (\n <presto-player-button\n type=\"primary\"\n size=\"small\"\n href={this.config?.button_link?.url}\n target={this.config?.button_link?.opensInNewTab ? '_blank' : '_self'}\n style={{\n '--presto-player-button-border-radius': `${this.config?.button_radius}px`,\n ...(this.config?.button_color\n ? {\n '--presto-player-button-color': `${this.config?.button_color}`,\n }\n : {}),\n ...(this.config?.button_text_color\n ? {\n '--presto-player-button-text': `${this.config?.button_text_color}`,\n }\n : {}),\n }}\n >\n {this.config?.button_text}\n </presto-player-button>\n );\n }\n @Watch('show')\n handleCtaStateChange(val) {\n this.actionBarStateChange.emit(val);\n }\n render() {\n return (\n <presto-action-bar-ui\n open={this.show}\n style={{\n '--presto-action-bar-background': this.config?.background_color || '#1d1d1d',\n }}\n >\n {this.config?.text}\n\n <div slot=\"button\">\n {this.youtubeButton()}\n {this.customButton()}\n </div>\n </presto-action-bar-ui>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.presto-audio {\n $pre: &;\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Plyr tweaks\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__wrapper {\n border-radius: var(--presto-player-border-radius, 0px);\n .plyr--audio .plyr__controls {\n padding: 0;\n }\n\n .plyr--audio .plyr__control.plyr__tab-focus,\n .plyr--audio .plyr__control:hover,\n .plyr--audio .plyr__control[aria-expanded='true'] {\n background: var(--plyr-audio-controls-background);\n color: var(--plyr-audio-control-color);\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Wrapper\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__wrapper {\n display: flex;\n background: var(--plyr-audio-controls-background, #fff);\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Controls Container\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__controls-wrapper {\n padding: calc(var(--plyr-control-spacing, 10px) * 2);\n flex: 1;\n display: flex;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n\n // handle style tweaks for poster.\n .has-poster & {\n padding: calc(var(--plyr-control-spacing, 10px) * 3);\n }\n // handle style tweaks for play-large with no poster.\n .has-play-large:not(.has-poster) & {\n padding-left: 0;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Title\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__title,\n &__mobile-title {\n font-size: 18px;\n font-weight: 500;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--plyr-audio-control-color);\n }\n\n &__title {\n margin: calc(var(--plyr-control-spacing, 10px) / 2);\n margin-top: 0;\n text-wrap: wrap;\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Poster\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__poster-wrapper {\n position: relative;\n width: 100px;\n min-height: 100px;\n flex: 0 0 100px;\n\n img {\n border-radius: var(--presto-player-border-radius, 0px) 0 0 var(--presto-player-border-radius, 0px);\n width: 100%;\n height: 100%;\n object-fit: cover;\n aspect-ratio: 1;\n display: block;\n }\n\n // handle style tweaks for poster.\n .has-poster & {\n width: 140px;\n height: 140px;\n flex: 0 0 140px;\n }\n }\n\n &__poster {\n width: 100%;\n height: 100%;\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Play Large Button\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__large-play-button {\n user-select: none;\n cursor: pointer;\n position: absolute;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 50px;\n height: 50px;\n color: white;\n border-radius: 100%;\n background: var(--plyr-audio-control-color);\n color: var(--plyr-audio-controls-background);\n\n &.is-relative {\n position: relative;\n top: auto;\n left: auto;\n transform: none;\n }\n\n .has-light-background.has-poster & {\n background: var(--plyr-audio-controls-background);\n color: var(--plyr-audio-control-color);\n }\n .has-dark-background.has-poster & {\n background: var(--plyr-audio-control-color);\n color: var(--plyr-audio-controls-background);\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Play Large Icon\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__icon-play,\n &__icon-pause {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n fill: currentColor;\n display: block;\n transition: opacity 0.2s ease-in-out, visibility 0.2s ease-in-out;\n margin: 0 auto;\n text-align: center;\n }\n &__icon-pause {\n opacity: 0;\n visibility: hidden;\n\n #{$pre}__wrapper.is-playing & {\n opacity: 1;\n visibility: visible;\n }\n }\n &__icon-play {\n margin-left: 2px; // optically center\n opacity: 1;\n visibility: visible;\n #{$pre}__wrapper.is-playing & {\n opacity: 0;\n visibility: hidden;\n }\n }\n\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n // Mobile sizing\n ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////\n &__poster-wrapper-mobile {\n display: none;\n min-width: 0;\n\n .presto-audio__large-play-button {\n flex: 0 0 50px;\n }\n }\n\n &__wrapper.breakpoint-small {\n flex-direction: column;\n\n #{$pre}__controls-wrapper {\n padding: calc(var(--plyr-control-spacing, 10px) * 2);\n }\n\n &.has-poster #{$pre}__title {\n text-align: center;\n margin: calc(var(--plyr-control-spacing, 10px) * 1.5);\n }\n\n &.has-poster #{$pre}__poster-wrapper {\n margin: 30px auto auto auto;\n overflow: hidden;\n border-radius: var(--presto-player-border-radius, 0px);\n width: 225px;\n height: 225px;\n flex: 0 0 225px;\n }\n\n &.has-play-large:not(.has-poster) #{$pre}__poster-wrapper,\n &.has-play-large:not(.has-poster) #{$pre}__title {\n display: none;\n }\n\n &.has-play-large:not(.has-poster) #{$pre}__poster-wrapper-mobile {\n display: flex;\n align-items: center;\n gap: 1em;\n margin-bottom: calc(var(--plyr-control-spacing, 10px) * -1);\n padding: calc(var(--plyr-control-spacing, 10px) * 2) calc(var(--plyr-control-spacing, 10px) * 2) 0 calc(var(--plyr-control-spacing, 10px) * 2);\n }\n }\n}\n\n// Stacked View\n.skin-stacked.presto-sticky-audio {\n .presto-audio__wrapper {\n height: 115px;\n }\n .has-poster {\n .presto-audio__controls-wrapper {\n padding: 20px;\n }\n .presto-audio__poster-wrapper {\n width: 115px;\n height: 115px;\n flex: 0 0 115px;\n }\n }\n}\n\n// skin-default\n.presto-sticky-audio {\n .presto-audio__wrapper {\n height: 100px;\n }\n .has-poster {\n .presto-audio__controls-wrapper {\n padding: 20px;\n }\n .presto-audio__poster-wrapper {\n width: 100px;\n height: 100px;\n flex: 0 0 100px;\n }\n }\n}\n\n// Basic Viwe\n\n.action-bar-active {\n .presto-audio__wrapper {\n border-radius: var(--presto-player-border-radius) var(--presto-player-border-radius) 0px 0px;\n }\n}\n\n@media screen and (max-width: 782px) {\n .presto-sticky-audio {\n .presto-audio__poster-wrapper-mobile {\n display: flex;\n align-items: center;\n gap: 1em;\n margin-bottom: calc(var(--plyr-control-spacing, 10px) * -1);\n padding: calc(var(--plyr-control-spacing, 10px) * 2) calc(var(--plyr-control-spacing, 10px) * 2) 0 calc(var(--plyr-control-spacing, 10px) * 2);\n }\n .presto-audio__poster-wrapper,\n .presto-audio__title {\n display: none;\n }\n .presto-audio__wrapper {\n height: 140px;\n }\n .has-poster .presto-audio__controls-wrapper {\n padding: 0px;\n }\n .presto-audio__poster-wrapper-mobile {\n .presto-audio__large-play-button {\n flex: 0 0 40px;\n height: 40px;\n }\n }\n }\n}\n","import { Component, h, Event, EventEmitter, Prop, State } from '@stencil/core';\nimport { presetAttributes } from '../../../../interfaces';\nimport { lightOrDark } from '../../../../util';\n\n@Component({\n tag: 'presto-audio',\n styleUrl: 'presto-audio.scss',\n shadow: false,\n})\nexport class PrestoAudio {\n private el: HTMLDivElement;\n @Prop({ mutable: true }) getRef?: (elm?: HTMLAudioElement) => void;\n @Prop() autoplay: boolean;\n @Prop() src: string;\n @Prop() preload: string;\n @Prop() poster: string;\n @Prop() player: any;\n @Prop() preset: presetAttributes;\n @Prop() tracks: { label: string; src: string; srcLang: string }[];\n @Prop() provider: string;\n @Prop() mediaTitle: string;\n @Prop() audioAttributes: object;\n\n @Event() playVideo: EventEmitter<void>;\n @Event() pauseVideo: EventEmitter<true>;\n\n @State() width: number;\n\n renderPosterImage() {\n if (this.poster) {\n return (\n <div class=\"presto-audio__poster\">\n <img src={this.poster} />\n </div>\n );\n }\n return;\n }\n\n hasPosterArea() {\n return !!this.poster || !!this.preset?.['play-large'];\n }\n\n renderMobilePoster() {\n return (\n <div class=\"presto-audio__poster-wrapper-mobile\">\n {!!this.preset?.['play-large'] && this.renderLargePlay('presto-audio__large-play-button is-relative')}\n <div class=\"presto-audio__mobile-title\">{this.mediaTitle}</div>\n </div>\n );\n }\n\n renderLargePlay(className = 'presto-audio__large-play-button') {\n return (\n <div\n class={className}\n onClick={() => {\n if (!this.player.playing) {\n this.playVideo.emit();\n } else {\n this.pauseVideo.emit();\n }\n }}\n >\n <svg class=\"presto-audio__icon-play\" width=\"16\" height=\"18\" viewBox=\"0 0 16 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.5588 9.00005L0.117662 17.915L0.117662 0.0850823L15.5588 9.00005Z\" />\n </svg>\n <svg class=\"presto-audio__icon-pause\" width=\"17\" height=\"17\" viewBox=\"0 0 17 17\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"5\" height=\"17\" />\n <rect x=\"12\" width=\"5\" height=\"17\" />\n </svg>\n </div>\n );\n }\n\n componentDidLoad() {\n // Only run if ResizeObserver is supported.\n if ('ResizeObserver' in window) {\n var ro = new ResizeObserver(entries => {\n entries.forEach(entry => (this.width = entry.contentRect.width));\n });\n ro.observe(this.el);\n }\n }\n\n render() {\n return (\n <div\n ref={el => (this.el = el as HTMLDivElement)}\n class={{\n 'presto-audio__wrapper': true,\n 'has-poster': !!this.poster,\n 'has-play-large': !!this.preset?.['play-large'],\n 'is-playing': this.player?.playing,\n 'has-light-background': lightOrDark(this.preset?.background_color) === 'light',\n 'has-dark-background': lightOrDark(this.preset?.background_color) === 'dark',\n 'breakpoint-small': this.width < 520,\n 'skin-stacked': this.width < 520,\n 'breakpoint-large': this.width >= 520,\n }}\n >\n {this.hasPosterArea() && (\n <div class=\"presto-audio__poster-wrapper\">\n {!!this.preset?.['play-large'] && <div class=\"presto-audio__large-play-wrapper\">{this.renderLargePlay()}</div>}\n {this.renderPosterImage()}\n </div>\n )}\n\n {this.hasPosterArea() && this.renderMobilePoster()}\n\n <div class=\"presto-audio__controls-wrapper\">\n <div class=\"presto-audio__title\">{this.mediaTitle}</div>\n <audio part=\"audio-player\" ref={this.getRef} autoplay={this.autoplay} preload={this.preload} data-poster={this.poster} {...this.audioAttributes}>\n <source src={this.src} />\n {!!this.tracks &&\n !!this.tracks.length &&\n this.tracks.map(track => <track kind=\"captions\" label={track?.label ? track.label : 'Captions'} src={track?.src} srclang={track?.srcLang ? track?.srcLang : 'en'} />)}\n </audio>\n </div>\n </div>\n );\n }\n}\n","import { Component, h, Prop } from '@stencil/core';\n\n@Component({\n tag: 'presto-bunny',\n shadow: false,\n})\nexport class PrestoBunny {\n @Prop({ mutable: true }) getRef?: (elm?: HTMLVideoElement) => void;\n @Prop() autoplay: boolean;\n @Prop() src: string;\n @Prop() preload: string;\n @Prop({ mutable: true }) poster: string;\n @Prop() player: any;\n @Prop() tracks: { label: string; src: string; srcLang: string }[];\n @Prop() playsinline: boolean;\n @Prop() provider: string;\n @Prop() videoAttributes: object;\n\n render() {\n return (\n <presto-video\n getRef={this.getRef}\n player={this.player}\n autoplay={this.autoplay}\n preload={this.preload}\n poster={this.poster}\n playsinline={this.playsinline}\n src={this.src}\n tracks={this.tracks}\n videoAttributes={this.videoAttributes}\n ></presto-video>\n );\n }\n}\n",".skin-business {\n &.presto-player__wrapper {\n // when small play button is active but rewind is inactive\n &.rewind-inactive {\n .plyr__controls .plyr__controls__item:nth-child(2) {\n &::before {\n border-radius: var(--plyr-control-radius, 3px) 0px 0px var(--plyr-control-radius, 3px);\n }\n }\n }\n\n // full captions\n &.caption-style-full .plyr:not(.plyr--hide-controls):not(.is-muted-overlay) .plyr__controls:not(:empty) ~ .plyr__captions {\n transform: translateY(calc(var(--plyr-control-spacing, 16px) * -4));\n }\n\n .presto-player-progress__marker {\n border-radius: 0;\n width: 15px;\n height: 15px;\n border-width: 1px;\n }\n\n // hover effect for all button\n .plyr__control[data-plyr] {\n &:hover,\n &:focus,\n &:active {\n &:not([role*='menuitem']):not(.plyr__control--back) {\n background-color: transparent;\n color: var(--plyr-color-main);\n\n &[data-plyr='play'] {\n background-color: var(--plyr-color-main);\n color: white;\n }\n }\n }\n }\n\n // for large button\n .plyr__control--overlaid[data-plyr='play'] {\n border-radius: 4px;\n background: #000000;\n opacity: 75%;\n &:hover {\n background-color: var(--plyr-color-main);\n color: white;\n opacity: 100%;\n }\n }\n\n // for soun range cursor\n .plyr__volume input[type='range'] {\n cursor: pointer;\n }\n\n // fast forward\n .plyr__controls .plyr__controls__item[data-plyr='fast-forward'] {\n border-radius: 0px;\n }\n\n // range contol for video progression\n .plyr__progress {\n margin: 0px 20px 0 5px;\n\n input[type='range'] {\n height: 32px;\n border-radius: 0px;\n cursor: pointer;\n }\n }\n\n .plyr__controls .plyr__controls__item:not(.presto-player-progress__marker):first-child {\n &::before {\n border-radius: var(--plyr-control-radius, 3px) 0px 0px var(--plyr-control-radius, 3px);\n }\n }\n .plyr__controls .plyr__controls__item:not(.presto-player-progress__marker):last-child {\n &::before {\n border-radius: 0px var(--plyr-control-radius, 3px) var(--plyr-control-radius, 3px) 0px;\n }\n }\n\n // play button\n .plyr__controls .plyr__controls__item.plyr__control[data-plyr='play'] {\n order: -1;\n margin-right: 5px;\n padding: 11px 20px 11px 20px;\n top: -4px;\n &::before {\n border-radius: 4px;\n }\n }\n\n // rewind control\n .plyr__controls .plyr__controls__item[data-plyr='rewind'] {\n &::before {\n border-radius: var(--plyr-control-radius, 3px) 0px 0px var(--plyr-control-radius, 3px);\n }\n }\n\n .plyr__controls .plyr__controls__item:not([data-plyr='play']) {\n margin: 0;\n }\n\n //make fullscreen svg bigger\n .plyr__controls .plyr__controls__item[data-plyr='fullscreen'] {\n padding: 4px;\n svg {\n height: 24px;\n width: 24px;\n }\n }\n\n .plyr__controls .plyr__controls__item:not(.presto-player-progress__marker) {\n position: relative;\n // time\n &.plyr__time {\n height: 32px;\n padding-top: 4.5px;\n }\n\n &::before {\n content: '';\n background: #000000;\n position: absolute;\n top: 0px;\n left: 0;\n right: 0;\n bottom: 0px;\n opacity: 0.76;\n z-index: -1;\n }\n }\n\n // make video prgression range outline\n .plyr--full-ui input[type='range']::-webkit-slider-runnable-track {\n box-shadow: none;\n color: var(--plyr-color-main);\n height: 9px;\n outline: 1px solid #878787a6;\n outline-offset: 2px;\n border-radius: 0px;\n }\n\n // make the range control invisible\n .plyr--full-ui input[type='range']::-webkit-slider-thumb {\n visibility: hidden;\n }\n\n // make buffer big\n .plyr__progress__buffer::-webkit-progress-value {\n position: relative;\n border-radius: 0px;\n height: 9px;\n top: -2px;\n }\n\n .plyr--full-ui input[type='range']::-webkit-slider-runnable-track {\n background-color: transparent;\n }\n\n @media screen and (max-width: 480px) {\n .plyr__controls .plyr__controls__item {\n &.plyr__time {\n padding: 1.5%;\n }\n }\n .plyr__controls .plyr__controls__item[data-plyr='play'] {\n padding: 8px;\n top: 0px;\n }\n //make fullscreen svg bigger\n .plyr__controls .plyr__controls__item[data-plyr='fullscreen'] {\n svg {\n width: 22px;\n }\n }\n }\n }\n}\n","import { Component, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'presto-business-skin',\n styleUrl: 'presto-business-skin.scss',\n shadow: false,\n})\nexport class PrestoBusinessSkin {\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h, Prop, State } from '@stencil/core';\nimport { i18nConfig, presetAttributes } from '../../../../../interfaces';\n\n/**\n * This component is needed to prevent re-rendering of\n * main component with currentTime changes.\n */\n@Component({\n tag: 'presto-cta-overlay',\n styleUrl: 'presto-cta-overlay.css',\n shadow: false,\n})\nexport class PrestoCTAOverlay {\n @Prop() player: any;\n @Prop() direction?: 'rtl';\n @Prop() preset: presetAttributes;\n @Prop() i18n: i18nConfig;\n @Prop() provider: string;\n\n @State() currentTime: number;\n @State() duration: number;\n @State() ended: boolean;\n\n componentWillLoad() {\n if (!this.player) return;\n this.player.on('ended', () => this.setEnded());\n this.player.on('timeupdate', e => this.setCurrentTime(e));\n }\n\n setEnded() {\n this.ended = true;\n }\n\n setCurrentTime(e) {\n this.currentTime = e?.detail?.plyr.currentTime;\n this.duration = e?.detail?.plyr.duration;\n }\n\n /**\n * Remove listeners if destroyed\n */\n disconnectedCallback() {\n if (!this.player) return;\n this.player.off('ended', this.setEnded);\n this.player.off('timeupdate', this.setCurrentTime);\n }\n\n /**\n * Maybe render\n * @returns JSX\n */\n render() {\n return (\n <presto-cta-overlay-controller\n ended={this.ended}\n currentTime={this.currentTime}\n duration={this.duration}\n direction={this.direction}\n cta={this.preset?.cta}\n i18n={this.i18n}\n provider={this.provider}\n ></presto-cta-overlay-controller>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, h, Prop, State, Watch } from '@stencil/core';\nimport { i18nConfig, CTA } from '../../../../../interfaces';\nimport { timePassed } from '../../../../../util';\n\n@Component({\n tag: 'presto-cta-overlay-controller',\n styleUrl: 'presto-cta-overlay-controller.css',\n shadow: false,\n})\nexport class PrestoCtaOverlayController {\n @Prop() ended: boolean;\n @Prop({ reflect: true }) currentTime: number;\n @Prop({ reflect: true }) duration: number;\n @Prop() direction?: 'rtl';\n @Prop() cta?: CTA;\n @Prop() i18n: i18nConfig;\n @Prop() provider: string;\n\n @State() enabled: boolean;\n @State() show: boolean;\n @State() loading: boolean;\n @State() error: string;\n @State() skipped: boolean;\n @State() percentagePassed: number = 0;\n\n @Event() playVideo: EventEmitter<void>;\n @Event() pauseVideo: EventEmitter<boolean>;\n @Event() restartVideo: EventEmitter<void>;\n @Event() ctaStateChange: EventEmitter<boolean>;\n\n componentWillLoad() {\n this.handleDuration();\n }\n\n /**\n * Handle with the player is ended\n * @param val\n * @returns\n */\n @Watch('ended')\n handleEnded(val) {\n if (val) {\n if (this?.cta?.percentage !== 100) return;\n this.show = true;\n }\n }\n\n /**\n * Wait for duration to start before checking time\n * @returns void\n */\n @Watch('duration')\n handleDuration() {\n this.enabled = this.skipped ? false : this?.cta?.enabled;\n this.handleTime();\n }\n\n @Watch('currentTime')\n @Watch('duration')\n handlePercentagePassed() {\n this.percentagePassed = (this.currentTime / this.duration) * 100;\n }\n\n /**\n * Watch current time and check if we should\n * pause the video.\n */\n @Watch('currentTime')\n handleEnabled() {\n if (!this.show) return; // not showing.\n if (this.skipped) return; // already skipped.\n this.pauseVideo.emit(true); // pause if enabled.\n }\n\n /**\n * When current time changes, check to see if we should\n * enable the overlay\n * @returns void\n */\n @Watch('currentTime')\n handleTime() {\n if (!this.enabled) return; // not enabled.\n if (this.skipped) return; // skipped.\n if (this?.cta?.percentage === 100) return; // we'll catch this on ended event.\n this.checkTime();\n }\n\n /**\n * Set enabled/disabled based on time that has passed\n */\n checkTime() {\n this.show = timePassed({\n current: this.currentTime,\n duration: this.duration,\n showAfter: this?.cta?.percentage || 0,\n });\n }\n\n /**\n * Skip email collection\n */\n skip() {\n this.skipped = true;\n this.show = false;\n this.playVideo.emit();\n }\n\n /**\n * Handle rewatch click.\n */\n rewatch() {\n this.ended = false;\n this.show = false;\n this.restartVideo.emit();\n }\n\n /**\n * Maybe render\n * @returns JSX\n */\n\n @Watch('show')\n handleCtaStateChange(val) {\n this.ctaStateChange.emit(val);\n }\n render() {\n if (!this.show) {\n return;\n }\n\n return (\n <presto-cta-overlay-ui\n style={{\n '--presto-player-button-border-radius': `${this?.cta?.button_radius}px`,\n ...(this?.cta?.background_opacity ? { '--presto-player-cta-background-opacity': `${this?.cta?.background_opacity / 100}` } : {}),\n ...(this?.cta?.button_color\n ? {\n '--presto-player-button-color': `${this?.cta?.button_color}`,\n }\n : {}),\n ...(this?.cta?.button_text_color\n ? {\n '--presto-player-button-text': `${this?.cta?.button_text_color}`,\n }\n : {}),\n }}\n direction={this.direction}\n class=\"cta-overlay\"\n i18n={this.i18n}\n headline={this?.cta?.headline}\n bottom-text={this?.cta?.bottom_text}\n show-button={this?.cta?.show_button}\n buttonLink={this?.cta?.button_link}\n allowSkip={!this.ended && this?.cta?.show_skip}\n allowRewatch={this.ended && this?.cta?.show_rewatch}\n button-text={this?.cta?.button_text}\n onSkip={() => this.skip()}\n onRewatch={() => this.rewatch()}\n provider={this.provider}\n ></presto-cta-overlay-ui>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.overlay-text {\n text-decoration: none;\n display: inline-block;\n user-select: none;\n line-height: 1;\n opacity: var(--presto-dynamic-overlay-opacity, 1);\n font-size: var(--presto-dynamic-overlay-font-size, 18px);\n padding: var(--presto-dynamic-overlay-padding, 0.65em 0.85em);\n font-weight: var(--presto-dynamic-overlay-font-weight, 500);\n border-radius: var(--presto-dynamic-overlay-radius, 0.25em);\n background: var(--presto-dynamic-overlay-background, rgba(0, 0, 0, 0.8));\n color: var(--presto-dynamic-overlay-color, #fff);\n opacity: var(--presto-dynamic-overlay-opacity, 1);\n word-break: break-word;\n}\n\na.overlay-text {\n cursor: pointer;\n}\n","import { Component, Element, h, Prop } from '@stencil/core';\nimport fitText from '../../../../../library/fittext.js';\n\n@Component({\n tag: 'presto-dynamic-overlay-ui',\n styleUrl: 'presto-dynamic-overlay-ui.scss',\n shadow: true,\n})\nexport class PrestoDynamicOverlayUi {\n @Element() el: HTMLElement;\n\n private text: HTMLAnchorElement;\n\n /** When set, the underlying button will be rendered as an `<a>` with this `href` instead of a `<button>`. */\n @Prop() href: string;\n\n /** Tells the browser where to open the link. Only used when `href` is set. */\n @Prop() target: '_blank' | '_parent' | '_self' | '_top';\n\n @Prop() position: 'top-left' | 'top-right' = 'top-right';\n\n closestElement(selector, el) {\n return (el && el != document && el != window && el.closest(selector)) || (el && this.closestElement(selector, el.getRootNode().host));\n }\n\n componentDidLoad() {\n let player = this.closestElement('presto-player', this.el) as HTMLPrestoPlayerElement;\n fitText(this.text, 3, {\n maxFontSize: 16,\n minFontSize: 10,\n container: player,\n });\n }\n\n render() {\n const Tag = this.href ? 'a' : ('span' as keyof JSX.IntrinsicElements);\n return (\n <Tag\n class={{\n 'overlay-text': true,\n 'overlay--top-left': this.position === 'top-left',\n 'overlay--top-right': this.position === 'top-right',\n }}\n href={this.href}\n target={this.target}\n part=\"overlay-text\"\n ref={el => (this.text = el as HTMLAnchorElement)}\n >\n <slot />\n </Tag>\n );\n }\n}\n",".top-left,\n.top-right {\n position: absolute;\n display: block;\n padding: 20px;\n max-width: 45%;\n z-index: 20;\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n}\n\n.top-left {\n top: 0;\n left: 0;\n}\n\n.top-right {\n top: 0;\n right: 0;\n align-items: flex-end;\n}\n\npresto-dynamic-overlay-ui {\n overflow: hidden; /* Hide the element content, while height = 0 */\n height: 0;\n opacity: 0;\n transition: height 0ms 400ms, opacity 400ms 0ms;\n}\n\npresto-dynamic-overlay-ui.visible {\n margin-bottom: 10px;\n height: auto;\n opacity: 1;\n transition: height 0ms 0ms, opacity 500ms 0ms;\n}\n","import { Component, h, Prop, Element, State, Event, EventEmitter } from '@stencil/core';\nimport { DynamicOverlay, presetAttributes } from '../../../../../interfaces';\nimport { timeToSeconds, parseColor } from '../../../../../util';\n\n@Component({\n tag: 'presto-dynamic-overlays',\n styleUrl: 'presto-dynamic-overlays.scss',\n shadow: true,\n})\nexport class PrestoDynamicOverlays {\n private topLeft: HTMLDivElement;\n private topRight: HTMLDivElement;\n private container: HTMLDivElement;\n private watermarkRef: {\n left: HTMLPrestoDynamicOverlayUiElement;\n right: HTMLPrestoDynamicOverlayUiElement;\n } = {\n left: null,\n right: null,\n };\n\n @Element() el: HTMLPrestoDynamicOverlaysElement;\n\n @Prop() overlays: Array<DynamicOverlay>;\n @Prop() player: any;\n @Prop() preset: presetAttributes;\n @Prop() enabled: boolean;\n\n @State() currentTime: number;\n @State() destroy: boolean = false;\n\n @Event() reloadComponent: EventEmitter<void>;\n\n private refs: any = {};\n\n componentDidLoad() {\n if (!this.player) {\n return;\n }\n this.player.on('timeupdate', e => {\n this.currentTime = e.detail.plyr.currentTime;\n this.checkValidity(); // check overlays validity.\n });\n }\n\n /**\n * Check validity of the overlays.\n * Blow up if any funny business.\n */\n checkValidity() {\n // only if we are playing\n if (!this.player.playing) {\n return;\n }\n\n if (!this?.overlays?.length && !this.preset?.watermark?.enabled) {\n return;\n }\n\n // make sure container and other divs are not removed.\n if (!this.container?.offsetParent || !this.topLeft?.offsetParent || !this.topRight?.offsetParent) {\n this.reloadComponent.emit();\n }\n\n // check for funny business on overlays.\n Object.keys(this.refs || {}).forEach(key => {\n const { overlay, component } = this.refs[key];\n this.checkComponent(component, overlay.text, () => this.reloadComponent.emit());\n });\n\n // check for any funny business on watermark\n if (this.shouldShowWatermark('top-left') && this.watermarkRef.left) {\n this.checkComponent(this.watermarkRef.left, this.preset?.watermark?.text, () => this.reloadComponent.emit());\n }\n if (this.shouldShowWatermark('top-right') && this.watermarkRef.right) {\n this.checkComponent(this.watermarkRef.right, this.preset?.watermark?.text, () => this.reloadComponent.emit());\n }\n }\n\n /**\n * Check if the component is valid.\n * If invalid, run a callback.\n *\n * @param component\n * @param text\n * @returns\n */\n checkComponent(component, text, callback) {\n // hidden, it's invalid.\n if (!component?.offsetParent) {\n return callback();\n }\n\n // slot was removed.\n if (!component.shadowRoot.querySelector('slot')) {\n return callback();\n }\n\n // only if we're playing\n if (!!this.player && this.player.playing) {\n const content = component.shadowRoot.querySelector('slot').assignedNodes()[0];\n\n if (content) {\n // slot content changed.\n if (content.parentElement.innerHTML != text) {\n return callback();\n }\n\n // font-size changes.\n const style = getComputedStyle(content.parentElement.shadowRoot.querySelector('.overlay-text'));\n if (parseInt(style.fontSize, 10) < 10) {\n return callback();\n }\n\n // opacity changes\n const color = parseColor(style.color);\n if (color?.[3] !== '1') {\n return callback();\n }\n }\n }\n }\n\n /**\n * Show the overlay\n * @param overlay\n * @returns\n */\n shouldShowOverlay(overlay) {\n // need a time.\n if (typeof this.currentTime === 'undefined') {\n return;\n }\n\n // bail if current time is less than start time\n if (this.currentTime < timeToSeconds(overlay?.startTime)) {\n return false;\n }\n\n // bail if current time is more than end time\n if (this.currentTime > timeToSeconds(overlay?.endTime)) {\n return false;\n }\n\n return true;\n }\n\n /**\n * Render the watermark\n */\n renderOverlay(overlay) {\n return (\n <presto-dynamic-overlay-ui\n class={{\n visible: this.shouldShowOverlay(overlay),\n }}\n ref={el =>\n (this.refs[overlay.id] = {\n overlay,\n component: el as HTMLPrestoDynamicOverlayUiElement,\n })\n }\n key={overlay.id}\n position={overlay.position}\n href={overlay?.link?.url}\n target={overlay?.link?.opensInNewTab ? '_blank' : '_self'}\n innerHTML={this.shouldShowOverlay(overlay) ? overlay.text : ''}\n style={{\n '--presto-dynamic-overlay-color': overlay?.color || '#fff',\n '--presto-dynamic-overlay-background': overlay?.backgroundColor || '#333',\n '--presto-dynamic-overlay-opacity': overlay?.opacity ? (overlay.opacity / 100).toString() : '1',\n }}\n ></presto-dynamic-overlay-ui>\n );\n }\n\n /**\n * Should we show the watermark?\n */\n shouldShowWatermark(position) {\n if (!this.preset?.watermark?.enabled) return false;\n\n const watermark = this.preset?.watermark;\n\n // randomize\n if (watermark.position === 'randomize') {\n const time = Math.floor((this.player.currentTime || 0) / 10);\n\n // even or odd\n if (time % 2 == 0) {\n return position === 'top-left';\n } else {\n return position === 'top-right';\n }\n }\n\n // position is set.\n if (watermark.position === position) {\n return true;\n }\n\n // fallback.\n if (!watermark.position && 'top-right' === position) {\n return true;\n }\n\n return false;\n }\n\n render() {\n // bail if disabled.\n if (!this.enabled) {\n return;\n }\n\n // bail if no overlays or watermark\n if (!this?.overlays?.length && !this.preset?.watermark?.enabled) {\n return;\n }\n\n return (\n <div class=\"overlays\" ref={el => (this.container = el as HTMLDivElement)}>\n <div class=\"top-left\" ref={el => (this.topLeft = el as HTMLDivElement)}>\n {!!this.shouldShowWatermark('top-left') && (\n <presto-dynamic-overlay-ui\n ref={el => (this.watermarkRef.left = el as HTMLPrestoDynamicOverlayUiElement)}\n style={{\n '--presto-dynamic-overlay-color': this.preset.watermark?.color || '#fff',\n '--presto-dynamic-overlay-background': this.preset.watermark?.backgroundColor || '#333',\n '--presto-dynamic-overlay-opacity': this.preset.watermark?.opacity ? (this.preset.watermark.opacity / 100).toString() : '1',\n }}\n class=\"visible\"\n position={'top-left'}\n innerHTML={this.preset.watermark.text}\n ></presto-dynamic-overlay-ui>\n )}\n\n {!!this?.overlays?.length &&\n this.overlays.map(overlay => {\n if (overlay.position !== 'top-left') {\n return '';\n }\n return this.renderOverlay(overlay);\n })}\n </div>\n\n <div class=\"top-right\" ref={el => (this.topRight = el as HTMLDivElement)}>\n {!!this.shouldShowWatermark('top-right') && (\n <presto-dynamic-overlay-ui\n ref={el => (this.watermarkRef.right = el as HTMLPrestoDynamicOverlayUiElement)}\n style={{\n '--presto-dynamic-overlay-color': this.preset.watermark?.color || '#fff',\n '--presto-dynamic-overlay-background': this.preset.watermark?.backgroundColor || '#333',\n '--presto-dynamic-overlay-opacity': this.preset.watermark?.opacity ? (this.preset.watermark.opacity / 100).toString() : '1',\n }}\n class=\"visible\"\n position={'top-right'}\n innerHTML={this.preset.watermark.text}\n ></presto-dynamic-overlay-ui>\n )}\n\n {!!this?.overlays?.length &&\n this.overlays.map(overlay => {\n if (overlay.position !== 'top-right') {\n return '';\n }\n return this.renderOverlay(overlay);\n })}\n </div>\n </div>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h, Prop, State } from '@stencil/core';\nimport { i18nConfig, presetAttributes } from '../../../../../interfaces';\n\n/**\n * This component is needed to prevent re-rendering of\n * main component with currentTime changes.\n */\n@Component({\n tag: 'presto-email-overlay',\n styleUrl: 'presto-email-overlay.css',\n shadow: false,\n})\nexport class PrestoEmailOverlay {\n @Prop() player: any;\n @Prop() direction?: 'rtl';\n @Prop() preset: presetAttributes;\n @Prop() videoId: number;\n @Prop() i18n: i18nConfig;\n @Prop() provider: string;\n\n @State() currentTime: number;\n @State() duration: number;\n @State() ended: boolean;\n\n componentWillLoad() {\n if (!this.player) return;\n this.player.on('ended', () => this.setEnded());\n this.player.on('timeupdate', e => this.setCurrentTime(e));\n }\n\n setEnded() {\n this.ended = true;\n }\n\n setCurrentTime(e) {\n this.currentTime = e?.detail?.plyr.currentTime;\n this.duration = e?.detail?.plyr.duration;\n }\n\n /**\n * Remove listeners if destroyed\n */\n disconnectedCallback() {\n if (!this.player) return;\n this.player.off('ended', this.setEnded);\n this.player.off('timeupdate', this.setCurrentTime);\n }\n\n /**\n * Maybe render\n * @returns JSX\n */\n render() {\n return (\n <presto-email-overlay-controller\n ended={this.ended}\n currentTime={this.currentTime}\n videoId={this.videoId}\n duration={this.duration}\n direction={this.direction}\n presetId={this.preset?.id}\n emailCollection={this.preset?.email_collection}\n i18n={this.i18n}\n provider={this.provider}\n ></presto-email-overlay-controller>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, h, Prop, State, Watch } from '@stencil/core';\nimport { i18nConfig, EmailCollection } from '../../../../../interfaces';\nimport { timePassed } from '../../../../../util';\n\n@Component({\n tag: 'presto-email-overlay-controller',\n styleUrl: 'presto-email-overlay-controller.css',\n shadow: false,\n})\nexport class PrestoEmailOverlayController {\n @Prop() ended: boolean;\n @Prop({ reflect: true }) currentTime: number;\n @Prop({ reflect: true }) duration: number;\n @Prop() direction?: 'rtl';\n @Prop() emailCollection?: EmailCollection;\n @Prop() i18n: i18nConfig;\n @Prop() videoId: number;\n @Prop() presetId: number;\n @Prop() provider: string;\n\n @State() enabled: boolean;\n @State() show: boolean;\n @State() loading: boolean;\n @State() error: string;\n @State() percentagePassed: number = 0;\n\n @Event() playVideo: EventEmitter<void>;\n @Event() pauseVideo: EventEmitter<true>;\n @Event() restartVideo: EventEmitter<void>;\n @Event() emailStateChange: EventEmitter<boolean>;\n\n /**\n * Set email collection in local storage\n * @param status string\n */\n setStorage(status) {\n window.localStorage.setItem('presto.videos.email_collection', JSON.stringify({ [this.videoId]: status }));\n }\n\n /**\n * Get email collection in local storage\n * @returns status string\n */\n getStorage() {\n return window.localStorage.getItem('presto.videos.email_collection');\n }\n\n componentWillLoad() {\n this.handleDuration();\n }\n\n /**\n * Wait for duration to start before checking time\n * @returns void\n */\n @Watch('duration')\n handleDuration() {\n this.enabled = this.getStorage() ? false : this?.emailCollection?.enabled;\n this.handleTimeCheck();\n }\n\n /**\n * When current time changes, check to see if we should\n * enable the overlay\n * @returns void\n */\n @Watch('currentTime')\n handleTimeCheck() {\n if (!this.enabled) return; // not enabled\n if (this.getStorage()) return; // already skipped\n this.checkTime();\n }\n\n @Watch('currentTime')\n handleShowChange() {\n if (!this.show) return; // bail if not showing.\n this.pauseVideo.emit(true); // pause video if here.\n }\n\n /**\n * Set enabled/disabled based on time that has passed\n */\n checkTime() {\n this.show = timePassed({\n current: this.currentTime,\n duration: this.duration,\n showAfter: this?.emailCollection?.percentage || 0,\n });\n }\n\n /**\n * Fetch updated nonce in case of caching\n * @returns Promise\n */\n async getNonce() {\n return fetch(`${window?.prestoPlayer?.ajaxurl}?action=presto_refresh_progress_nonce`);\n }\n\n /**\n * Submit email collection\n * @param e Event\n */\n async submit(e) {\n this.loading = true;\n this.error = '';\n\n // get nonce refresh\n const response = await this.getNonce();\n const { data: nonce } = await response.json();\n\n // handle submit\n try {\n let response = await fetch(window?.prestoPlayer?.ajaxurl, {\n method: 'post',\n body: new URLSearchParams({\n action: 'presto_player_email_submit',\n nonce,\n preset_id: this.presetId,\n video_id: this.videoId,\n provider: this.provider,\n ...(e?.detail || {}),\n }),\n });\n const { success, data } = await response.json();\n if (success) {\n this.setStorage('collected');\n this.show = false;\n this.playVideo.emit();\n } else {\n throw data;\n }\n } catch (e) {\n const error = e?.[0];\n if (error && typeof error === 'string') {\n this.error = error;\n }\n } finally {\n this.loading = false;\n }\n }\n\n /**\n * Skip email collection\n */\n skip() {\n this.setStorage('skipped');\n this.show = false;\n this.playVideo.emit();\n }\n\n /**\n * Maybe render\n * @returns JSX\n */\n\n @Watch('show')\n handleEmailStateChange(val) {\n this.emailStateChange.emit(val);\n }\n\n render() {\n if (!this.show) {\n return;\n }\n\n return (\n <presto-email-overlay-ui\n style={{\n ...(this?.emailCollection?.button_color\n ? {\n '--presto-player-button-color': `${this?.emailCollection?.button_color}`,\n }\n : {}),\n ...(this?.emailCollection?.button_text_color\n ? {\n '--presto-player-button-text': `${this?.emailCollection?.button_text_color}`,\n }\n : {}),\n }}\n direction={this.direction}\n class=\"email-overlay\"\n headline={this?.emailCollection?.headline}\n bottomText={this?.emailCollection?.bottom_text}\n allowSkip={this?.emailCollection?.allow_skip}\n buttonText={this?.emailCollection?.button_text}\n isLoading={this.loading}\n errorMessage={this.error}\n onSubmitForm={e => this.submit(e)}\n onSkip={() => this.skip()}\n i18n={this.i18n}\n provider={this.provider}\n ></presto-email-overlay-ui>\n );\n }\n}\n",".skin-modern {\n &.presto-player__wrapper {\n button.plyr__control.plyr__control--overlaid {\n border-radius: 2px;\n padding: 3% 5%;\n max-width: 135px;\n max-height: 90px;\n box-sizing: content-box;\n position: absolute !important;\n top: 50% !important;\n opacity: 100%;\n svg {\n height: 31px;\n width: 37px;\n }\n &:hover,\n &:focus {\n opacity: 0.8;\n background: var(--plyr-color-main);\n }\n }\n\n // full captions\n &.caption-style-full .plyr:not(.plyr--hide-controls):not(.is-muted-overlay) .plyr__controls:not(:empty) ~ .plyr__captions {\n transform: translateY(calc(var(--plyr-control-spacing, 9px) * -4));\n }\n\n // color background\n .plyr--video .plyr__controls {\n padding: 0px;\n &::before {\n content: '';\n background: var(--plyr-color-main);\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n opacity: 0.75;\n }\n }\n\n // adding hover state\n .plyr__controls__item {\n z-index: 1;\n &.plyr__control:not(.presto-player-progress__marker):not([role*='menuitem']):not(.plyr__control--back) {\n height: 36px;\n border-radius: 0px;\n &:focus {\n background-color: transparent;\n color: white;\n }\n }\n &.presto-player-progress__marker {\n z-index: 2;\n }\n &.plyr__menu {\n height: 36px;\n }\n }\n\n // completed range\n .plyr--full-ui.plyr--video input[type='range']::-webkit-slider-runnable-track {\n height: 2px;\n color: white;\n }\n\n // will complete range\n .presto-player__wrapper .plyr--full-ui.plyr--video input[type='range']::-webkit-slider-runnable-track {\n height: 2px;\n }\n\n // for buffer\n .plyr--video .plyr__progress__buffer {\n height: 2px;\n top: 11px;\n }\n\n .plyr__progress {\n input[type='range'] {\n cursor: pointer;\n }\n }\n\n // for range button\n .plyr--full-ui input[type='range']::-webkit-slider-thumb {\n top: 1px;\n height: var(--plyr-range-thumb-height, 8px);\n width: var(--plyr-range-thumb-height, 8px);\n box-shadow: 0px 0px 5px white;\n &:hover {\n transform: scale(1.5);\n }\n }\n\n // margin control\n .plyr__controls .plyr__controls__item {\n margin: 0px;\n }\n\n // volume width\n .plyr__volume {\n width: auto;\n input[type='range'] {\n width: 55px;\n }\n }\n\n // for soun range cursor\n .plyr__volume input[type='range'] {\n cursor: pointer;\n }\n\n // muted autoplay button size\n .presto-player__muted-overlay {\n .plyr__control {\n &.plyr__control--overlaid {\n border-radius: 2px;\n svg {\n height: 40px;\n width: 50px;\n }\n }\n }\n }\n\n .plyr__controls .plyr__controls__item[data-plyr='rewind'] svg,\n .plyr__controls .plyr__controls__item[data-plyr='fast-forward'] svg,\n .plyr__controls .plyr__controls__item[data-plyr='fullscreen'] svg {\n width: 22px;\n height: 22px;\n }\n\n @media screen and (max-width: 480px) {\n .plyr__control--overlaid {\n svg {\n height: 18px;\n width: 16px;\n }\n }\n }\n }\n}\n","import { Component, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'presto-modern-skin',\n styleUrl: 'presto-modern-skin.scss',\n shadow: false,\n})\nexport class PrestoModernSkin {\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, Event, EventEmitter, h, Prop } from '@stencil/core';\nimport { MutedOverlay, presetAttributes } from '../../../../interfaces';\n\n@Component({\n tag: 'presto-muted-overlay',\n styleUrl: 'presto-muted-overlay.css',\n shadow: false,\n})\nexport class PrestoMutedOverlay {\n @Prop() mutedPreview: boolean;\n @Prop() mutedOverlay: MutedOverlay;\n @Prop() preset: presetAttributes;\n\n @Event() playVideo: EventEmitter<void>;\n\n render() {\n return (\n <div\n class=\"presto-player__muted-overlay\"\n onClick={() => {\n this.mutedPreview = false;\n this.playVideo.emit();\n }}\n >\n {this.preset?.['play-large'] && (\n <div class=\"plyr__control plyr__control--overlaid\" data-plyr=\"play\" aria-label=\"Play\" part=\"muted-overlay-play\">\n <svg id=\"plyr-play\" viewBox=\"0 0 18 18\">\n <path d=\"M15.562 8.1L3.87.225c-.818-.562-1.87 0-1.87.9v15.75c0 .9 1.052 1.462 1.87.9L15.563 9.9c.584-.45.584-1.35 0-1.8z\"></path>\n </svg>\n <span class=\"plyr__sr-only\">Play</span>\n </div>\n )}\n\n {this.mutedOverlay?.enabled && this.mutedOverlay?.src ? (\n <div\n class=\"presto-player__overlay is-image\"\n part=\"muted-overlay-image\"\n style={{\n width: `${this.mutedOverlay?.width || 50}%`,\n left: `${(this.mutedOverlay?.focalPoint?.x || 0.5) * 100}%`,\n top: `${(this.mutedOverlay?.focalPoint?.y || 0.5) * 100}%`,\n }}\n >\n <img src={this.mutedOverlay?.src} style={{ transform: 'translateX(-50%) translateY(-50%)' }} />\n </div>\n ) : (\n ''\n )}\n </div>\n );\n }\n}\n","import { Component, h, Prop, State } from '@stencil/core';\nimport { searchVtt, setMarkers, removeOldMarkers } from '../../../player/functions/search-vtt';\n\n@Component({\n tag: 'presto-search-bar',\n shadow: false,\n})\nexport class PrestoSearchBar {\n /**\n * Props\n */\n @Prop() value: string;\n @Prop() player: any;\n\n /**\n * State\n */\n @State() markers: any;\n @State() currentMarkerLocation: number = -1;\n\n /**\n * Handle search event\n * @param value Event\n */\n onSearch(e) {\n this.value = e.detail;\n\n if ('' === this.value) {\n removeOldMarkers(this.player);\n this.markers = [];\n } else {\n const searchResult = searchVtt(this.player, this.value);\n this.player.config.markers = { enabled: true, points: searchResult };\n this.markers = searchResult;\n setMarkers(this.player, searchResult);\n }\n }\n\n /**\n * Handle previous arrow key click after search\n */\n onPreviousNav() {\n const prevLocation = this.currentMarkerLocation - 1;\n // previous location is -1\n if (prevLocation < 0) {\n this.currentMarkerLocation = this.markers.length - 1;\n } else {\n this.currentMarkerLocation--;\n }\n this.player.currentTime = this.markers[this.currentMarkerLocation]['time'];\n }\n\n /**\n * Handle the event where search is hovered or focused\n */\n onFocusChange(focus) {\n if (focus?.detail === true) {\n this.player.config.hideControls = false;\n } else {\n this.player.config.hideControls = this.player.config?.preset?.auto_hide || false;\n }\n }\n\n /**\n * Handle next arrow key click after search\n */\n onNextNav() {\n const nextLocation = this.currentMarkerLocation + 1;\n if (nextLocation > this.markers.length - 1) {\n this.currentMarkerLocation = 0;\n } else {\n this.currentMarkerLocation++;\n }\n this.player.currentTime = this.markers[this.currentMarkerLocation]['time'];\n }\n\n render() {\n if (!this.player) return '';\n if (!this.player?.media?.textTracks?.length || this.player?.media?.textTracks?.length === 0) return '';\n\n const presets = this.player.config.preset;\n const placeholder = presets.search?.placeholder;\n\n return (\n <presto-search-bar-ui\n value={this.value}\n hasNavigation={this.markers?.length > 1}\n placeholder={placeholder}\n onNextNav={() => this.onNextNav()}\n onPreviousNav={() => this.onPreviousNav()}\n onSearch={e => this.onSearch(e)}\n onFocusChange={focus => this.onFocusChange(focus)}\n ></presto-search-bar-ui>\n );\n }\n}\n",".skin-stacked {\n .plyr__controls {\n flex-wrap: wrap;\n }\n\n .presto-player-progress__marker {\n transform: scale(0.75);\n }\n\n .plyr__controls {\n justify-content: flex-start;\n }\n\n .plyr__controls__item.plyr__progress__container {\n order: -1;\n flex: 1 0 100%;\n }\n\n .plyr__controls__item.plyr__progress__container + :not(.plyr__time),\n .plyr__controls__item.plyr__progress__container + .plyr__time + * {\n margin-left: auto;\n }\n\n .plyr__controls .plyr__controls__item:first-child {\n margin: 0;\n }\n\n .plyr__progress {\n height: 19px;\n display: flex;\n align-items: center;\n // --plyr-range-track-height: 3px;\n .plyr__progress__buffer {\n height: 3px;\n transition: all 0.25s ease;\n position: absolute;\n top: calc(50% + 1px);\n }\n\n input[type='range'] {\n &::-moz-range-track {\n height: 3px;\n transition: all 0.25s ease;\n }\n &::-webkit-slider-runnable-track {\n height: 3px;\n transition: all 0.25s ease;\n }\n &::-ms-track {\n height: 3px;\n transition: all 0.25s ease;\n }\n &::-ms-fill-upper {\n height: 3px;\n transition: all 0.25s ease;\n }\n &::-ms-fill-lower {\n height: 3px;\n transition: height 0.25s ease;\n }\n\n &::-webkit-slider-thumb {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.25s ease;\n }\n &::-moz-range-thumb {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.25s ease;\n }\n &::-ms-thumb {\n visibility: hidden;\n opacity: 0;\n transition: opacity 0.25s ease;\n }\n }\n }\n\n .plyr__progress__container:hover {\n .presto-player-progress__marker {\n transform: scale(1);\n }\n .plyr__progress {\n .plyr__progress__buffer {\n height: 5px;\n top: calc(50%);\n }\n // --plyr-range-track-height: 5px;\n input[type='range'] {\n overflow: visible;\n &::-moz-range-track {\n height: 5px;\n }\n &::-webkit-slider-runnable-track {\n height: 5px;\n }\n &::-ms-track {\n height: 5px;\n }\n &::-ms-fill-upper {\n height: 5px;\n }\n &::-ms-fill-lower {\n height: 5px;\n }\n &::-webkit-slider-thumb {\n visibility: visible;\n opacity: 1;\n }\n &::-moz-range-thumb {\n visibility: visible;\n opacity: 1;\n }\n &::-ms-thumb {\n visibility: visible;\n opacity: 1;\n }\n }\n }\n }\n}\n","import { Component, Host, h } from '@stencil/core';\n\n@Component({\n tag: 'presto-stacked-skin',\n styleUrl: 'presto-stacked-skin.scss',\n shadow: false,\n})\nexport class PrestoStackedSkin {\n render() {\n return (\n <Host>\n <slot></slot>\n </Host>\n );\n }\n}\n",":host {\n display: block;\n}\n","import { Component, h, Prop } from '@stencil/core';\nimport { isAndroidWebView } from '../../../../util';\n\n@Component({\n tag: 'presto-vimeo',\n styleUrl: 'presto-vimeo.css',\n shadow: false,\n})\nexport class PrestoVimeo {\n @Prop() src: string;\n @Prop() poster: string;\n @Prop() player: any;\n @Prop({ mutable: true }) getRef?: (elm?: HTMLIFrameElement) => void;\n\n getId(url) {\n const regExp = /^.*(vimeo\\.com\\/)((channels\\/[A-z]+\\/)|(groups\\/[A-z]+\\/videos\\/))?([0-9]+)/;\n const parseUrl = regExp.exec(url || '');\n return parseUrl?.[5] || '';\n }\n\n // Try to extract a hash for private videos from the URL\n parseHash(url) {\n /* This regex matches a hexadecimal hash if given in any of these forms:\n * - [https://player.]vimeo.com/video/{id}/{hash}[?params]\n * - [https://player.]vimeo.com/video/{id}?h={hash}[¶ms]\n * - [https://player.]vimeo.com/video/{id}?[params]&h={hash}\n * - video/{id}/{hash}\n * If matched, the hash is available in the named group `hash`\n */\n const regex = /^.*(?:vimeo.com\\/|video\\/)(?:\\d+)(?:\\?.*\\&*h=|\\/)+(?<hash>[\\d,a-f]+)/;\n const found = url.match(regex);\n\n if (found) {\n return found.groups.hash;\n }\n\n return null;\n }\n\n render() {\n if (!this.src) {\n return;\n }\n\n /*\n Our player is not working on Android WebView.\n https://github.com/prestomade/presto-player/issues/124\n */\n if (isAndroidWebView()) {\n return (\n <div class=\"presto-iframe-fallback-container\">\n <iframe\n src={`https://player.vimeo.com/video/${this.getId(this.src)}?h=${this.parseHash(\n this.src,\n )}&loop=false&byline=false&portrait=false&title=false&speed=true&transparent=0&gesture=media`}\n allowFullScreen\n allowTransparency\n allow=\"autoplay\"\n style={{ width: '100%' }}\n class=\"presto-fallback-iframe\"\n ></iframe>\n </div>\n );\n }\n\n return (\n <div\n class=\"plyr__video-embed\"\n part=\"embed\"\n ref={this.getRef}\n data-plyr-provider=\"vimeo\"\n data-plyr-embed-id={this.getId(this.src)}\n data-plyr-embed-hash={this.parseHash(this.src)}\n ></div>\n );\n }\n}\n",":host {\n display: block;\n}\n\n.fallback-container {\n position: relative;\n padding-bottom: 56.25%;\n padding-top: 30px;\n height: 0;\n overflow: hidden;\n}\n.fallback-container iframe,\n.fallback-container object,\n.fallback-container embed {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n/** make sure the height applies */\n@supports not (aspect-ratio: 16/9) {\n .plyr__video-embed,\n .plyr__video-wrapper--fixed-ratio {\n height: 0 !important;\n padding-bottom: calc(100% / (var(--presto-player-aspect-ratio, 16/9)));\n position: relative;\n }\n}\n\n.plyr--youtube {\n aspect-ratio: var(--presto-player-aspect-ratio, auto);\n}\n","import { Component, Prop, h, Event, EventEmitter, Watch, State } from '@stencil/core';\nimport { isIOS } from '../../../../util';\n@Component({\n tag: 'presto-youtube',\n styleUrl: 'presto-youtube.css',\n shadow: false,\n})\nexport class PrestoYoutube {\n @Prop() src: string;\n @Prop({ mutable: true }) poster: string;\n @Prop({ mutable: true }) lazyLoad: boolean;\n @Prop() player: any;\n @Prop({ mutable: true }) getRef?: (elm?: HTMLIFrameElement | HTMLVideoElement | HTMLDivElement) => void;\n\n /**\n * Events\n */\n @Event() reload: EventEmitter<string>;\n\n /**\n * State\n */\n @State() reloadPlayer: boolean;\n @State() isWebView: boolean;\n\n /**\n * When player is set, do ratio and fixes\n * @returns\n */\n @Watch('player')\n handlePlayerChange() {\n if (!this.player) {\n return;\n }\n\n this.fixes();\n this.setPoster();\n }\n\n // fixes issue where youtube can sometimes can be muted if played before load\n fixes() {\n this.player.once('statechange', e => {\n // only playing\n if (e.detail.code !== 1) {\n return;\n }\n // not autoplay\n if (e?.detail?.plyr?.config?.blockAttributes?.mutedPreview?.enabled) {\n return;\n }\n // unmute\n this.player.muted = false;\n });\n }\n\n // get id from youtube url\n getId(url) {\n const regExp = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=|shorts\\/)([^#&?]*).*/;\n const match = (url || '').match(regExp);\n return match && match?.[2]?.length === 11 ? match[2] : null;\n }\n\n // load player\n loadPlayer() {\n this.lazyLoad = false;\n this.reloadPlayer = true;\n }\n\n // wait for component to update before reloading\n componentDidRender() {\n if (this.reloadPlayer) {\n this.reloadPlayer = false;\n this.reload.emit('play');\n }\n }\n\n /**\n * detect if we're in a webview browser\n */\n setWebView() {\n // @ts-ignore\n let standalone = window.navigator?.standalone,\n userAgent = window.navigator.userAgent.toLowerCase(),\n safari = /safari/.test(userAgent),\n ios = /iphone|ipod|ipad/.test(userAgent);\n\n if (ios) {\n // ios webview\n this.isWebView = !standalone && !safari;\n } else {\n // android webview\n this.isWebView = userAgent.includes('wv');\n }\n }\n\n // Load image avoiding xhr/fetch CORS issues.\n // Server status can't be obtained this way unfortunately, so this uses \"naturalWidth\" to determine if the image has loaded/\n loadImage(src, minWidth = 1) {\n return new Promise((resolve, reject) => {\n const image = new Image();\n\n const handler = () => {\n delete image.onload;\n delete image.onerror;\n (image.naturalWidth >= minWidth ? resolve : reject)(src);\n };\n\n Object.assign(image, { onload: handler, onerror: handler, src });\n });\n }\n\n setPoster() {\n if (!this.player.poster) {\n let posterSrc = s => `https://i.ytimg.com/vi/${this.getId(this.src)}/${s}default.jpg`;\n\n this.loadImage(posterSrc('maxres'), 121) // 480p padded 4:3\n .catch(() => this.loadImage(posterSrc('sd'), 121)) // 360p padded 4:3. Always exists\n .catch(() => this.loadImage(posterSrc('hq'), 121)) // 360p padded 4:3. Always exists\n .then((image: string) => (this.player.poster = image))\n .catch(() => {});\n }\n }\n\n // don't lazy load on iOS\n componentWillLoad() {\n this.setWebView();\n if (this.lazyLoad && isIOS()) {\n this.lazyLoad = false;\n }\n }\n\n render() {\n if (this.isWebView) {\n return (\n <div class=\"fallback-container\">\n <iframe src={this.src} allowFullScreen allowtransparency allow=\"autoplay\"></iframe>\n </div>\n );\n }\n\n if (this.lazyLoad) {\n return (\n <div>\n <presto-video part=\"video\" getRef={this.getRef} src=\"\" provider=\"youtube\"></presto-video>\n <div class=\"presto-player__play-cover\" onClick={() => this.loadPlayer()}></div>\n </div>\n );\n }\n\n return <div class=\"plyr__video-embed\" part=\"embed\" ref={this.getRef} data-plyr-provider=\"youtube\" data-plyr-embed-id={this.getId(this.src)}></div>;\n }\n}\n"],"mappings":"wNAAA,MAAMA,EAAqB,uB,MCQdC,EAAe,MAAAA,E,yBAY1B,iBAAAC,GACE,IAAKC,KAAKC,OAAQ,OAClBD,KAAKC,OAAOC,GAAG,SAAS,IAAMF,KAAKG,aACnCH,KAAKC,OAAOC,GAAG,cAAcE,GAAKJ,KAAKK,eAAeD,I,CAKxD,kBAAAE,GACE,IAAKN,KAAKC,OAAQ,OAClBD,KAAKC,OAAOC,GAAG,SAAS,IAAMF,KAAKG,aACnCH,KAAKC,OAAOC,GAAG,cAAcE,GAAKJ,KAAKK,eAAeD,I,CAGxD,QAAAD,GACEH,KAAKO,MAAQ,I,CAGf,cAAAF,CAAeD,G,QACbJ,KAAKQ,aAAcC,EAAAL,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAD,SAAA,SAAAA,EAAEE,KAAKH,YACnCR,KAAKY,UAAWC,EAAAT,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAG,SAAA,SAAAA,EAAEF,KAAKC,Q,CAMlC,oBAAAE,GACE,IAAKd,KAAKC,OAAQ,OAClBD,KAAKC,OAAOc,IAAI,QAASf,KAAKG,UAC9BH,KAAKC,OAAOc,IAAI,aAAcf,KAAKK,e,CAGrC,MAAAW,GACE,OACEC,EACE,gCAAAC,IAAA,2CAAAX,MAAOP,KAAKO,MACZY,OAAQnB,KAAKmB,OACbX,YAAaR,KAAKQ,YAClBI,SAAUZ,KAAKY,SACfQ,UAAWpB,KAAKoB,UAChBC,QAASrB,KAAKqB,S,iGC5DtB,MAAMC,EAA+B,uB,MCSxBxB,EAAe,MAL5B,WAAAyB,CAAAC,G,mEAeWxB,KAAIyB,KAAY,MAChBzB,KAAgB0B,iBAAW,EAC3B1B,KAAgB2B,iBAAW,CAqIrC,CAlIC,iBAAA5B,GACEC,KAAK4B,gB,CAQP,cAAAA,GACE5B,KAAK6B,Y,CASP,WAAAC,CAAYC,G,MACV,GAAIA,EAAK,CACP,KAAItB,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMmB,UAAM,MAAAV,SAAA,SAAAA,EAAEuB,oBAAqB,IAAK,OAC5ChC,KAAKyB,KAAO,I,EAMhB,sBAAAQ,GACEjC,KAAK2B,iBAAoB3B,KAAKQ,YAAcR,KAAKY,SAAY,G,CAS/D,UAAAiB,GACE7B,KAAKkC,W,CAMP,SAAAA,G,QACE,IAAIzB,EAAA0B,SAAM,MAANA,cAAM,SAANA,OAAQC,MAAE,MAAA3B,SAAA,SAAAA,EAAE4B,OAAQ,CACtBrC,KAAKyB,KAAO,KACZ,M,CAOFzB,KAAKyB,KAAOa,EAAW,CACrBC,QAASvC,KAAKQ,YACdI,SAAUZ,KAAKY,SACf4B,WAAW3B,EAAAb,KAAKmB,UAAM,MAAAN,SAAA,SAAAA,EAAEmB,kB,CAK5B,uBAAAS,CAAwBC,EAAQC,GAC9B,IAAID,IAAM,MAANA,SAAA,SAAAA,EAAQE,iBAAiBD,IAAM,MAANA,SAAA,SAAAA,EAAQC,cAAc,CACjD5C,KAAK0B,kB,CAEP,GAAIgB,IAAM,MAANA,SAAM,SAANA,EAAQG,QAAS,CACnB7C,KAAK4B,gB,EAIT,aAAAkB,G,YACE,KAAIrC,EAAAT,KAAKmB,UAAQ,MAAAV,SAAA,SAAAA,EAAAsC,eAAgB,cAAclC,EAAAb,KAAKqB,WAAO,MAAAR,SAAA,SAAAA,EAAEmC,WAAW,CACtE,M,CAGF,OAAO/B,EAAA,mCAAiCC,IAAKlB,KAAK0B,iBAAkBuB,SAASC,EAAAlD,KAAKqB,WAAS,MAAA6B,SAAA,SAAAA,EAAAF,UAAWG,WAAWC,EAAApD,KAAKmB,UAAM,MAAAiC,SAAA,SAAAA,EAAER,c,CAGhI,YAAAS,G,0BACE,KAAI5C,EAAAT,KAAKmB,UAAM,MAAAV,SAAA,SAAAA,EAAEsC,eAAgB,SAAU,CACzC,M,CAGF,OACE9B,EAAA,wBACEqC,KAAK,UACLC,KAAK,QACLC,MAAMN,GAAArC,EAAAb,KAAKmB,UAAQ,MAAAN,SAAA,SAAAA,EAAA4C,eAAW,MAAAP,SAAA,SAAAA,EAAEQ,IAChCC,SAAQC,GAAAR,EAAApD,KAAKmB,UAAM,MAAAiC,SAAA,SAAAA,EAAEK,eAAa,MAAAG,SAAA,SAAAA,EAAAC,eAAgB,SAAW,QAC7DC,MAAO,CACL,uCAAwC,IAAGC,EAAA/D,KAAKmB,UAAM,MAAA4C,SAAA,SAAAA,EAAEC,uBACpDC,EAAAjE,KAAKmB,UAAM,MAAA8C,SAAA,SAAAA,EAAEC,cACb,CACE,+BAAgC,IAAGC,EAAAnE,KAAKmB,UAAM,MAAAgD,SAAA,SAAAA,EAAED,gBAElD,QACAE,EAAApE,KAAKmB,UAAM,MAAAiD,SAAA,SAAAA,EAAEC,mBACb,CACE,8BAA+B,IAAGC,EAAAtE,KAAKmB,UAAM,MAAAmD,SAAA,SAAAA,EAAED,qBAEjD,MAGLE,EAAAvE,KAAKmB,UAAM,MAAAoD,SAAA,SAAAA,EAAEC,Y,CAKpB,oBAAAC,CAAqB1C,GACnB/B,KAAK0E,qBAAqBC,KAAK5C,E,CAEjC,MAAAf,G,QACE,OACEC,EAAA,wBAAAC,IAAA,2CACE0D,KAAM5E,KAAKyB,KACXqC,MAAO,CACL,mCAAkCrD,EAAAT,KAAKmB,UAAM,MAAAV,SAAA,SAAAA,EAAEoE,mBAAoB,aAGpEhE,EAAAb,KAAKmB,UAAM,MAAAN,SAAA,S,EAAEiE,KAEd7D,EAAK,OAAAC,IAAA,2CAAA6D,KAAK,UACP/E,KAAK8C,gBACL9C,KAAKqD,gB,mQCrJhB,MAAM2B,EAAiB,60K,MCSVC,EAAW,M,iGAmBtB,iBAAAC,GACE,GAAIlF,KAAKmF,OAAQ,CACf,OACElE,EAAA,OAAKmE,MAAM,wBACTnE,EAAK,OAAAoE,IAAKrF,KAAKmF,S,CAIrB,M,CAGF,aAAAG,G,MACE,QAAStF,KAAKmF,YAAY1E,EAAAT,KAAKuF,UAAM,MAAA9E,SAAA,SAAAA,EAAG,c,CAG1C,kBAAA+E,G,MACE,OACEvE,EAAA,OAAKmE,MAAM,2CACN3E,EAAAT,KAAKuF,UAAS,MAAA9E,SAAA,SAAAA,EAAA,gBAAiBT,KAAKyF,gBAAgB,+CACvDxE,EAAK,OAAAmE,MAAM,8BAA8BpF,KAAK0F,Y,CAKpD,eAAAD,CAAgBE,EAAY,mCAC1B,OACE1E,EAAA,OACEmE,MAAOO,EACPC,QAAS,KACP,IAAK5F,KAAKC,OAAO4F,QAAS,CACxB7F,KAAK8F,UAAUnB,M,KACV,CACL3E,KAAK+F,WAAWpB,M,IAIpB1D,EAAK,OAAAmE,MAAM,0BAA0BY,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BAChGnF,EAAA,QAAMoF,EAAE,0EAEVpF,EAAK,OAAAmE,MAAM,2BAA2BY,MAAM,KAAKC,OAAO,KAAKC,QAAQ,YAAYC,KAAK,OAAOC,MAAM,8BACjGnF,EAAA,QAAM+E,MAAM,IAAIC,OAAO,OACvBhF,EAAA,QAAMqF,EAAE,KAAKN,MAAM,IAAIC,OAAO,Q,CAMtC,gBAAAM,GAEE,GAAI,mBAAoBpE,OAAQ,CAC9B,IAAIqE,EAAK,IAAIC,gBAAeC,IAC1BA,EAAQC,SAAQC,GAAU5G,KAAKgG,MAAQY,EAAMC,YAAYb,OAAO,IAElEQ,EAAGM,QAAQ9G,KAAK+G,G,EAIpB,MAAA/F,G,cACE,OACEC,EACE,OAAAC,IAAA,2CAAA8F,IAAKD,GAAO/G,KAAK+G,GAAKA,EACtB3B,MAAO,CACL,wBAAyB,KACzB,eAAgBpF,KAAKmF,OACrB,qBAAoB1E,EAAAT,KAAKuF,UAAM,MAAA9E,SAAA,SAAAA,EAAG,eAClC,cAAcI,EAAAb,KAAKC,UAAM,MAAAY,SAAA,SAAAA,EAAEgF,QAC3B,uBAAwBoB,GAAY/D,EAAAlD,KAAKuF,UAAQ,MAAArC,SAAA,SAAAA,EAAA2B,oBAAsB,QACvE,sBAAuBoC,GAAY7D,EAAApD,KAAKuF,UAAQ,MAAAnC,SAAA,SAAAA,EAAAyB,oBAAsB,OACtE,mBAAoB7E,KAAKgG,MAAQ,IACjC,eAAgBhG,KAAKgG,MAAQ,IAC7B,mBAAoBhG,KAAKgG,OAAS,MAGnChG,KAAKsF,iBACJrE,EAAK,OAAAC,IAAA,2CAAAkE,MAAM,oCACNxB,EAAA5D,KAAKuF,UAAM,MAAA3B,SAAA,SAAAA,EAAG,gBAAiB3C,EAAK,OAAAC,IAAA,2CAAAkE,MAAM,oCAAoCpF,KAAKyF,mBACrFzF,KAAKkF,qBAITlF,KAAKsF,iBAAmBtF,KAAKwF,qBAE9BvE,EAAK,OAAAC,IAAA,2CAAAkE,MAAM,kCACTnE,EAAA,OAAAC,IAAA,2CAAKkE,MAAM,uBAAuBpF,KAAK0F,YACvCzE,EAAA,SAAAC,IAAA,2CAAOgG,KAAK,eAAeF,IAAKhH,KAAKmH,OAAQC,SAAUpH,KAAKoH,SAAUC,QAASrH,KAAKqH,QAAO,cAAerH,KAAKmF,UAAYnF,KAAKsH,iBAC9HrG,EAAA,UAAAC,IAAA,2CAAQmE,IAAKrF,KAAKqF,QACfrF,KAAKuH,UACJvH,KAAKuH,OAAOC,QACdxH,KAAKuH,OAAOE,KAAIC,GAASzG,EAAA,SAAO0G,KAAK,WAAWC,OAAOF,IAAK,MAALA,SAAA,SAAAA,EAAOE,OAAQF,EAAME,MAAQ,WAAYvC,IAAKqC,IAAK,MAALA,SAAA,SAAAA,EAAOrC,IAAKwC,SAASH,IAAK,MAALA,SAAK,SAALA,EAAOI,SAAUJ,IAAK,MAALA,SAAK,SAALA,EAAOI,QAAU,W,mBC9G7JC,EAAW,M,yBAYtB,MAAA/G,GACE,OACEC,EACE,gBAAAC,IAAA,2CAAAiG,OAAQnH,KAAKmH,OACblH,OAAQD,KAAKC,OACbmH,SAAUpH,KAAKoH,SACfC,QAASrH,KAAKqH,QACdlC,OAAQnF,KAAKmF,OACb6C,YAAahI,KAAKgI,YAClB3C,IAAKrF,KAAKqF,IACVkC,OAAQvH,KAAKuH,OACbU,gBAAiBjI,KAAKiI,iB,GC7B9B,MAAMC,EAAwB,mwJ,MCOjBC,EAAkB,M,yBAC7B,MAAAnH,GACE,OACEC,EAACmH,EAAI,CAAAlH,IAAA,4CACHD,EAAa,QAAAC,IAAA,6C,aCXrB,MAAMmH,EAAsB,uB,MCYfC,EAAgB,M,yBAW3B,iBAAAvI,GACE,IAAKC,KAAKC,OAAQ,OAClBD,KAAKC,OAAOC,GAAG,SAAS,IAAMF,KAAKG,aACnCH,KAAKC,OAAOC,GAAG,cAAcE,GAAKJ,KAAKK,eAAeD,I,CAGxD,QAAAD,GACEH,KAAKO,MAAQ,I,CAGf,cAAAF,CAAeD,G,QACbJ,KAAKQ,aAAcC,EAAAL,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAD,SAAA,SAAAA,EAAEE,KAAKH,YACnCR,KAAKY,UAAWC,EAAAT,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAG,SAAA,SAAAA,EAAEF,KAAKC,Q,CAMlC,oBAAAE,GACE,IAAKd,KAAKC,OAAQ,OAClBD,KAAKC,OAAOc,IAAI,QAASf,KAAKG,UAC9BH,KAAKC,OAAOc,IAAI,aAAcf,KAAKK,e,CAOrC,MAAAW,G,MACE,OACEC,EAAA,iCAAAC,IAAA,2CACEX,MAAOP,KAAKO,MACZC,YAAaR,KAAKQ,YAClBI,SAAUZ,KAAKY,SACfQ,UAAWpB,KAAKoB,UAChBmH,KAAK9H,EAAAT,KAAKuF,UAAM,MAAA9E,SAAA,SAAAA,EAAE8H,IAClBC,KAAMxI,KAAKwI,KACXC,SAAUzI,KAAKyI,U,aC5DvB,MAAMC,EAAgC,uB,MCSzBC,EAA0B,MALvC,WAAApH,CAAAC,G,wKAmBWxB,KAAgB2B,iBAAW,CA2IrC,CApIC,iBAAA5B,GACEC,KAAK4B,gB,CASP,WAAAE,CAAYC,G,MACV,GAAIA,EAAK,CACP,KAAItB,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMuI,OAAG,MAAA9H,SAAA,SAAAA,EAAEmI,cAAe,IAAK,OACnC5I,KAAKyB,KAAO,I,EAShB,cAAAG,G,MACE5B,KAAK6C,QAAU7C,KAAK6I,QAAU,OAAQpI,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMuI,OAAK,MAAA9H,SAAA,SAAAA,EAAAoC,QACjD7C,KAAK6B,Y,CAKP,sBAAAI,GACEjC,KAAK2B,iBAAoB3B,KAAKQ,YAAcR,KAAKY,SAAY,G,CAQ/D,aAAAkI,GACE,IAAK9I,KAAKyB,KAAM,OAChB,GAAIzB,KAAK6I,QAAS,OAClB7I,KAAK+F,WAAWpB,KAAK,K,CASvB,UAAA9C,G,MACE,IAAK7B,KAAK6C,QAAS,OACnB,GAAI7C,KAAK6I,QAAS,OAClB,KAAIpI,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMuI,OAAG,MAAA9H,SAAA,SAAAA,EAAEmI,cAAe,IAAK,OACnC5I,KAAKkC,W,CAMP,SAAAA,G,MACElC,KAAKyB,KAAOa,EAAW,CACrBC,QAASvC,KAAKQ,YACdI,SAAUZ,KAAKY,SACf4B,YAAW/B,EAAAT,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAA9H,SAAA,SAAAA,EAAAmI,aAAc,G,CAOxC,IAAAG,GACE/I,KAAK6I,QAAU,KACf7I,KAAKyB,KAAO,MACZzB,KAAK8F,UAAUnB,M,CAMjB,OAAAqE,GACEhJ,KAAKO,MAAQ,MACbP,KAAKyB,KAAO,MACZzB,KAAKiJ,aAAatE,M,CASpB,oBAAAF,CAAqB1C,GACnB/B,KAAKkJ,eAAevE,KAAK5C,E,CAE3B,MAAAf,G,gCACE,IAAKhB,KAAKyB,KAAM,CACd,M,CAGF,OACER,EACE,yBAAA6C,MAAO,CACL,uCAAwC,IAAGrD,EAAAT,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAA9H,SAAA,SAAAA,EAAAuD,uBAClDnD,EAAAb,OAAI,MAAJA,YAAA,SAAAA,KAAMuI,OAAG,MAAA1H,SAAA,SAAAA,EAAEsI,oBAAqB,CAAE,yCAA0C,KAAGjG,EAAAlD,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAG,MAAArF,SAAA,SAAAA,EAAEiG,oBAAqB,OAAU,QACzH/F,EAAApD,OAAI,MAAJA,YAAI,SAAJA,KAAMuI,OAAG,MAAAnF,SAAA,SAAAA,EAAEc,cACX,CACE,+BAAgC,IAAGN,EAAA5D,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAA3E,SAAA,SAAAA,EAAAM,gBAEhD,QACAH,EAAA/D,OAAI,MAAJA,YAAI,SAAJA,KAAMuI,OAAG,MAAAxE,SAAA,SAAAA,EAAEM,mBACX,CACE,8BAA+B,IAAGJ,EAAAjE,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAAtE,SAAA,SAAAA,EAAAI,qBAE/C,IAENjD,UAAWpB,KAAKoB,UAChBgE,MAAM,cACNoD,KAAMxI,KAAKwI,KACXY,UAAUjF,EAAAnE,OAAI,MAAJA,YAAA,SAAAA,KAAMuI,OAAK,MAAApE,SAAA,SAAAA,EAAAiF,SACR,eAAAhF,EAAApE,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAAnE,SAAA,SAAAA,EAAAiF,YAAW,eACtB/E,EAAAtE,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAG,MAAAjE,SAAA,SAAAA,EAAEgF,YACxBC,YAAYhF,EAAAvE,OAAA,MAAAA,YAAI,SAAJA,KAAMuI,OAAG,MAAAhE,SAAA,SAAAA,EAAEd,YACvB+F,WAAYxJ,KAAKO,SAASkJ,EAAAzJ,OAAA,MAAAA,YAAI,SAAJA,KAAMuI,OAAG,MAAAkB,SAAA,SAAAA,EAAEC,WACrCC,aAAc3J,KAAKO,SAASqJ,EAAA5J,OAAA,MAAAA,YAAI,SAAJA,KAAMuI,OAAG,MAAAqB,SAAA,SAAAA,EAAEC,cAC1B,eAAAC,EAAA9J,OAAA,MAAAA,YAAA,SAAAA,KAAMuI,OAAK,MAAAuB,SAAA,SAAAA,EAAAtF,YACxBuF,OAAQ,IAAM/J,KAAK+I,OACnBiB,UAAW,IAAMhK,KAAKgJ,UACtBP,SAAUzI,KAAKyI,U,wNC9JvB,MAAMwB,EAA4B,umB,MCQrBC,EAAsB,MALnC,WAAA3I,CAAAC,G,UAgBUxB,KAAQmK,SAA6B,WAiC9C,CA/BC,cAAAC,CAAeC,EAAUtD,GACvB,OAAQA,GAAMA,GAAMuD,UAAYvD,GAAM5E,QAAU4E,EAAGwD,QAAQF,IAAetD,GAAM/G,KAAKoK,eAAeC,EAAUtD,EAAGyD,cAAcC,K,CAGjI,gBAAAlE,GACE,IAAItG,EAASD,KAAKoK,eAAe,gBAAiBpK,KAAK+G,IACvD2D,EAAQ1K,KAAK8E,KAAM,EAAG,CACpB6F,YAAa,GACbC,YAAa,GACbC,UAAW5K,G,CAIf,MAAAe,GACE,MAAM8J,EAAM9K,KAAKwD,KAAO,IAAO,OAC/B,OACEvC,EAAC6J,EAAG,CAAA5J,IAAA,2CACFkE,MAAO,CACL,eAAgB,KAChB,oBAAqBpF,KAAKmK,WAAa,WACvC,qBAAsBnK,KAAKmK,WAAa,aAE1C3G,KAAMxD,KAAKwD,KACXG,OAAQ3D,KAAK2D,OACbuD,KAAK,eACLF,IAAKD,GAAO/G,KAAK8E,KAAOiC,GAExB9F,EAAQ,QAAAC,IAAA,6C,qCChDhB,MAAM6J,EAA2B,yb,MCSpBC,EAAqB,MALlC,WAAAzJ,CAAAC,G,yDASUxB,KAAAiL,aAGJ,CACFC,KAAM,KACNC,MAAO,MAWAnL,KAAOoL,QAAY,MAIpBpL,KAAIqL,KAAQ,EA+OrB,CA7OC,gBAAA9E,GACE,IAAKvG,KAAKC,OAAQ,CAChB,M,CAEFD,KAAKC,OAAOC,GAAG,cAAcE,IAC3BJ,KAAKQ,YAAcJ,EAAEM,OAAOC,KAAKH,YACjCR,KAAKsL,eAAe,G,CAQxB,aAAAA,G,wBAEE,IAAKtL,KAAKC,OAAO4F,QAAS,CACxB,M,CAGF,MAAKpF,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMuL,YAAQ,MAAA9K,SAAA,SAAAA,EAAE+G,YAAWtE,GAAArC,EAAAb,KAAKuF,UAAQ,MAAA1E,SAAA,SAAAA,EAAA2K,aAAW,MAAAtI,SAAA,SAAAA,EAAAL,SAAS,CAC/D,M,CAIF,MAAKO,EAAApD,KAAK6K,aAAW,MAAAzH,SAAA,SAAAA,EAAAqI,kBAAiB7H,EAAA5D,KAAK0L,WAAO,MAAA9H,SAAA,SAAAA,EAAE6H,kBAAiB1H,EAAA/D,KAAK2L,YAAQ,MAAA5H,SAAA,SAAAA,EAAE0H,cAAc,CAChGzL,KAAK4L,gBAAgBjH,M,CAIvBkH,OAAOC,KAAK9L,KAAKqL,MAAQ,IAAI1E,SAAQzF,IACnC,MAAM6K,QAAEA,EAAOC,UAAEA,GAAchM,KAAKqL,KAAKnK,GACzClB,KAAKiM,eAAeD,EAAWD,EAAQjH,MAAM,IAAM9E,KAAK4L,gBAAgBjH,QAAO,IAIjF,GAAI3E,KAAKkM,oBAAoB,aAAelM,KAAKiL,aAAaC,KAAM,CAClElL,KAAKiM,eAAejM,KAAKiL,aAAaC,MAAM/G,GAAAF,EAAAjE,KAAKuF,UAAQ,MAAAtB,SAAA,SAAAA,EAAAuH,aAAW,MAAArH,SAAA,SAAAA,EAAAW,MAAM,IAAM9E,KAAK4L,gBAAgBjH,Q,CAEvG,GAAI3E,KAAKkM,oBAAoB,cAAgBlM,KAAKiL,aAAaE,MAAO,CACpEnL,KAAKiM,eAAejM,KAAKiL,aAAaE,OAAO7G,GAAAF,EAAApE,KAAKuF,UAAQ,MAAAnB,SAAA,SAAAA,EAAAoH,aAAW,MAAAlH,SAAA,SAAAA,EAAAQ,MAAM,IAAM9E,KAAK4L,gBAAgBjH,Q,EAY1G,cAAAsH,CAAeD,EAAWlH,EAAMqH,GAE9B,KAAKH,IAAA,MAAAA,SAAA,SAAAA,EAAWP,cAAc,CAC5B,OAAOU,G,CAIT,IAAKH,EAAUI,WAAWC,cAAc,QAAS,CAC/C,OAAOF,G,CAIT,KAAMnM,KAAKC,QAAUD,KAAKC,OAAO4F,QAAS,CACxC,MAAMyG,EAAUN,EAAUI,WAAWC,cAAc,QAAQE,gBAAgB,GAE3E,GAAID,EAAS,CAEX,GAAIA,EAAQE,cAAcC,WAAa3H,EAAM,CAC3C,OAAOqH,G,CAIT,MAAMrI,EAAQ4I,iBAAiBJ,EAAQE,cAAcJ,WAAWC,cAAc,kBAC9E,GAAIM,SAAS7I,EAAM8I,SAAU,IAAM,GAAI,CACrC,OAAOT,G,CAIT,MAAMU,EAAQC,EAAWhJ,EAAM+I,OAC/B,IAAIA,IAAA,MAAAA,SAAA,SAAAA,EAAQ,MAAO,IAAK,CACtB,OAAOV,G,IAWf,iBAAAY,CAAkBhB,GAEhB,UAAW/L,KAAKQ,cAAgB,YAAa,CAC3C,M,CAIF,GAAIR,KAAKQ,YAAcwM,EAAcjB,IAAA,MAAAA,SAAO,SAAPA,EAASkB,WAAY,CACxD,OAAO,K,CAIT,GAAIjN,KAAKQ,YAAcwM,EAAcjB,IAAA,MAAAA,SAAO,SAAPA,EAASmB,SAAU,CACtD,OAAO,K,CAGT,OAAO,I,CAMT,aAAAC,CAAcpB,G,QACZ,OACE9K,EACE,6BAAAmE,MAAO,CACLgI,QAASpN,KAAK+M,kBAAkBhB,IAElC/E,IAAKD,GACF/G,KAAKqL,KAAKU,EAAQsB,IAAM,CACvBtB,UACAC,UAAWjF,GAGf7F,IAAK6K,EAAQsB,GACblD,SAAU4B,EAAQ5B,SAClB3G,MAAM/C,EAAAsL,IAAO,MAAPA,SAAO,SAAPA,EAASuB,QAAM,MAAA7M,SAAA,SAAAA,EAAAiD,IACrBC,SAAQ9C,EAAAkL,IAAO,MAAPA,SAAO,SAAPA,EAASuB,QAAI,MAAAzM,SAAA,SAAAA,EAAEgD,eAAgB,SAAW,QAClD4I,UAAWzM,KAAK+M,kBAAkBhB,GAAWA,EAAQjH,KAAO,GAC5DhB,MAAO,CACL,kCAAkCiI,IAAA,MAAAA,SAAO,SAAPA,EAASc,QAAS,OACpD,uCAAuCd,IAAA,MAAAA,SAAO,SAAPA,EAASwB,kBAAmB,OACnE,oCAAoCxB,IAAA,MAAAA,SAAO,SAAPA,EAASyB,UAAWzB,EAAQyB,QAAU,KAAKC,WAAa,M,CASpG,mBAAAvB,CAAoB/B,G,UAClB,MAAKtJ,GAAAJ,EAAAT,KAAKuF,UAAQ,MAAA9E,SAAA,SAAAA,EAAA+K,aAAW,MAAA3K,SAAA,SAAAA,EAAAgC,SAAS,OAAO,MAE7C,MAAM2I,GAAYtI,EAAAlD,KAAKuF,UAAM,MAAArC,SAAA,SAAAA,EAAEsI,UAG/B,GAAIA,EAAUrB,WAAa,YAAa,CACtC,MAAMuD,EAAOC,KAAKC,OAAO5N,KAAKC,OAAOO,aAAe,GAAK,IAGzD,GAAIkN,EAAO,GAAK,EAAG,CACjB,OAAOvD,IAAa,U,KACf,CACL,OAAOA,IAAa,W,EAKxB,GAAIqB,EAAUrB,WAAaA,EAAU,CACnC,OAAO,I,CAIT,IAAKqB,EAAUrB,UAAY,cAAgBA,EAAU,CACnD,OAAO,I,CAGT,OAAO,K,CAGT,MAAAnJ,G,0BAEE,IAAKhB,KAAK6C,QAAS,CACjB,M,CAIF,MAAKpC,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMuL,YAAQ,MAAA9K,SAAA,SAAAA,EAAE+G,YAAWtE,GAAArC,EAAAb,KAAKuF,UAAQ,MAAA1E,SAAA,SAAAA,EAAA2K,aAAW,MAAAtI,SAAA,SAAAA,EAAAL,SAAS,CAC/D,M,CAGF,OACE5B,EAAK,OAAAmE,MAAM,WAAW4B,IAAKD,GAAO/G,KAAK6K,UAAY9D,GACjD9F,EAAA,OAAKmE,MAAM,WAAW4B,IAAKD,GAAO/G,KAAK0L,QAAU3E,KAC5C/G,KAAKkM,oBAAoB,aAC1BjL,EACE,6BAAA+F,IAAKD,GAAO/G,KAAKiL,aAAaC,KAAOnE,EACrCjD,MAAO,CACL,mCAAkCV,EAAApD,KAAKuF,OAAOiG,aAAS,MAAApI,SAAA,SAAAA,EAAEyJ,QAAS,OAClE,wCAAuCjJ,EAAA5D,KAAKuF,OAAOiG,aAAS,MAAA5H,SAAA,SAAAA,EAAE2J,kBAAmB,OACjF,qCAAoCxJ,EAAA/D,KAAKuF,OAAOiG,aAAW,MAAAzH,SAAA,SAAAA,EAAAyJ,UAAWxN,KAAKuF,OAAOiG,UAAUgC,QAAU,KAAKC,WAAa,KAE1HrI,MAAM,UACN+E,SAAU,WACVsC,UAAWzM,KAAKuF,OAAOiG,UAAU1G,WAIlCb,EAAAjE,OAAA,MAAAA,YAAA,SAAAA,KAAMuL,YAAU,MAAAtH,SAAA,SAAAA,EAAAuD,SACjBxH,KAAKuL,SAAS9D,KAAIsE,IAChB,GAAIA,EAAQ5B,WAAa,WAAY,CACnC,MAAO,E,CAET,OAAOnK,KAAKmN,cAAcpB,EAAQ,KAIxC9K,EAAA,OAAKmE,MAAM,YAAY4B,IAAKD,GAAO/G,KAAK2L,SAAW5E,KAC9C/G,KAAKkM,oBAAoB,cAC1BjL,EACE,6BAAA+F,IAAKD,GAAO/G,KAAKiL,aAAaE,MAAQpE,EACtCjD,MAAO,CACL,mCAAkCK,EAAAnE,KAAKuF,OAAOiG,aAAS,MAAArH,SAAA,SAAAA,EAAE0I,QAAS,OAClE,wCAAuCzI,EAAApE,KAAKuF,OAAOiG,aAAS,MAAApH,SAAA,SAAAA,EAAEmJ,kBAAmB,OACjF,qCAAoCjJ,EAAAtE,KAAKuF,OAAOiG,aAAW,MAAAlH,SAAA,SAAAA,EAAAkJ,UAAWxN,KAAKuF,OAAOiG,UAAUgC,QAAU,KAAKC,WAAa,KAE1HrI,MAAM,UACN+E,SAAU,YACVsC,UAAWzM,KAAKuF,OAAOiG,UAAU1G,WAIlCP,EAAAvE,OAAA,MAAAA,YAAA,SAAAA,KAAMuL,YAAU,MAAAhH,SAAA,SAAAA,EAAAiD,SACjBxH,KAAKuL,SAAS9D,KAAIsE,IAChB,GAAIA,EAAQ5B,WAAa,YAAa,CACpC,MAAO,E,CAET,OAAOnK,KAAKmN,cAAcpB,EAAQ,K,qCC1QhD,MAAM8B,EAAwB,uB,MCYjBC,EAAkB,M,yBAY7B,iBAAA/N,GACE,IAAKC,KAAKC,OAAQ,OAClBD,KAAKC,OAAOC,GAAG,SAAS,IAAMF,KAAKG,aACnCH,KAAKC,OAAOC,GAAG,cAAcE,GAAKJ,KAAKK,eAAeD,I,CAGxD,QAAAD,GACEH,KAAKO,MAAQ,I,CAGf,cAAAF,CAAeD,G,QACbJ,KAAKQ,aAAcC,EAAAL,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAD,SAAA,SAAAA,EAAEE,KAAKH,YACnCR,KAAKY,UAAWC,EAAAT,IAAA,MAAAA,SAAA,SAAAA,EAAGM,UAAM,MAAAG,SAAA,SAAAA,EAAEF,KAAKC,Q,CAMlC,oBAAAE,GACE,IAAKd,KAAKC,OAAQ,OAClBD,KAAKC,OAAOc,IAAI,QAASf,KAAKG,UAC9BH,KAAKC,OAAOc,IAAI,aAAcf,KAAKK,e,CAOrC,MAAAW,G,QACE,OACEC,EAAA,mCAAAC,IAAA,2CACEX,MAAOP,KAAKO,MACZC,YAAaR,KAAKQ,YAClBuN,QAAS/N,KAAK+N,QACdnN,SAAUZ,KAAKY,SACfQ,UAAWpB,KAAKoB,UAChB4M,UAAUvN,EAAAT,KAAKuF,UAAM,MAAA9E,SAAA,SAAAA,EAAE4M,GACvBY,iBAAiBpN,EAAAb,KAAKuF,UAAM,MAAA1E,SAAA,SAAAA,EAAEqN,iBAC9B1F,KAAMxI,KAAKwI,KACXC,SAAUzI,KAAKyI,U,aC/DvB,MAAM0F,EAAkC,uB,MCS3BC,EAA4B,MALzC,WAAA7M,CAAAC,G,4KAoBWxB,KAAgB2B,iBAAW,CA0KrC,CA/JC,UAAA0M,CAAWC,GACTnM,OAAOoM,aAAaC,QAAQ,iCAAkCC,KAAKC,UAAU,CAAE,CAAC1O,KAAK+N,SAAUO,I,CAOjG,UAAAK,GACE,OAAOxM,OAAOoM,aAAaK,QAAQ,iC,CAGrC,iBAAA7O,GACEC,KAAK4B,gB,CAQP,cAAAA,G,MACE5B,KAAK6C,QAAU7C,KAAK2O,aAAe,OAAQlO,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMiO,mBAAiB,MAAAxN,SAAA,SAAAA,EAAAoC,QAClE7C,KAAK6O,iB,CASP,eAAAA,GACE,IAAK7O,KAAK6C,QAAS,OACnB,GAAI7C,KAAK2O,aAAc,OACvB3O,KAAKkC,W,CAIP,gBAAA4M,GACE,IAAK9O,KAAKyB,KAAM,OAChBzB,KAAK+F,WAAWpB,KAAK,K,CAMvB,SAAAzC,G,MACElC,KAAKyB,KAAOa,EAAW,CACrBC,QAASvC,KAAKQ,YACdI,SAAUZ,KAAKY,SACf4B,YAAW/B,EAAAT,OAAA,MAAAA,YAAA,SAAAA,KAAMiO,mBAAiB,MAAAxN,SAAA,SAAAA,EAAAmI,aAAc,G,CAQpD,cAAMmG,G,MACJ,OAAOC,MAAM,IAAGvO,EAAA0B,SAAA,MAAAA,cAAA,SAAAA,OAAQ8M,gBAAY,MAAAxO,SAAA,SAAAA,EAAEyO,+C,CAOxC,YAAMC,CAAO/O,G,MACXJ,KAAKoP,QAAU,KACfpP,KAAKqP,MAAQ,GAGb,MAAMC,QAAiBtP,KAAK+O,WAC5B,MAAQQ,KAAMC,SAAgBF,EAASG,OAGvC,IACE,IAAIH,QAAiBN,OAAMvO,EAAA0B,SAAA,MAAAA,cAAM,SAANA,OAAQ8M,gBAAY,MAAAxO,SAAA,SAAAA,EAAEyO,QAAS,CACxDQ,OAAQ,OACRC,KAAM,IAAIC,gBAAgB,CACxBC,OAAQ,6BACRL,QACAM,UAAW9P,KAAKgO,SAChB+B,SAAU/P,KAAK+N,QACftF,SAAUzI,KAAKyI,aACXrI,IAAA,MAAAA,SAAA,SAAAA,EAAGM,SAAU,OAGrB,MAAMsP,QAAEA,EAAOT,KAAEA,SAAeD,EAASG,OACzC,GAAIO,EAAS,CACXhQ,KAAKqO,WAAW,aAChBrO,KAAKyB,KAAO,MACZzB,KAAK8F,UAAUnB,M,KACV,CACL,MAAM4K,C,EAER,MAAOnP,GACP,MAAMiP,EAAQjP,IAAA,MAAAA,SAAC,SAADA,EAAI,GAClB,GAAIiP,UAAgBA,IAAU,SAAU,CACtCrP,KAAKqP,MAAQA,C,UAGfrP,KAAKoP,QAAU,K,EAOnB,IAAArG,GACE/I,KAAKqO,WAAW,WAChBrO,KAAKyB,KAAO,MACZzB,KAAK8F,UAAUnB,M,CASjB,sBAAAsL,CAAuBlO,GACrB/B,KAAKkQ,iBAAiBvL,KAAK5C,E,CAG7B,MAAAf,G,oBACE,IAAKhB,KAAKyB,KAAM,CACd,M,CAGF,OACER,EACE,2BAAA6C,MAAO,MACDrD,EAAAT,OAAI,MAAJA,YAAI,SAAJA,KAAMiO,mBAAe,MAAAxN,SAAA,SAAAA,EAAEyD,cACvB,CACE,+BAAgC,IAAGrD,EAAAb,OAAA,MAAAA,YAAA,SAAAA,KAAMiO,mBAAiB,MAAApN,SAAA,SAAAA,EAAAqD,gBAE5D,QACAhB,EAAAlD,OAAI,MAAJA,YAAI,SAAJA,KAAMiO,mBAAe,MAAA/K,SAAA,SAAAA,EAAEmB,mBACvB,CACE,8BAA+B,IAAGjB,EAAApD,OAAA,MAAAA,YAAA,SAAAA,KAAMiO,mBAAiB,MAAA7K,SAAA,SAAAA,EAAAiB,qBAE3D,IAENjD,UAAWpB,KAAKoB,UAChBgE,MAAM,gBACNgE,UAAUxF,EAAA5D,OAAI,MAAJA,YAAI,SAAJA,KAAMiO,mBAAiB,MAAArK,SAAA,SAAAA,EAAAwF,SACjC+G,YAAYpM,EAAA/D,OAAA,MAAAA,YAAA,SAAAA,KAAMiO,mBAAe,MAAAlK,SAAA,SAAAA,EAAEsF,YACnCG,WAAWvF,EAAAjE,OAAI,MAAJA,YAAI,SAAJA,KAAMiO,mBAAe,MAAAhK,SAAA,SAAAA,EAAEmM,WAClCC,YAAYlM,EAAAnE,OAAA,MAAAA,YAAI,SAAJA,KAAMiO,mBAAe,MAAA9J,SAAA,SAAAA,EAAEK,YACnC8L,UAAWtQ,KAAKoP,QAChBmB,aAAcvQ,KAAKqP,MACnBmB,aAAcpQ,GAAKJ,KAAKmP,OAAO/O,GAC/B2J,OAAQ,IAAM/J,KAAK+I,OACnBP,KAAMxI,KAAKwI,KACXC,SAAUzI,KAAKyI,U,0JC9LvB,MAAMgI,EAAsB,o5G,MCOfC,EAAgB,M,yBAC3B,MAAA1P,GACE,OACEC,EAACmH,EAAI,CAAAlH,IAAA,4CACHD,EAAa,QAAAC,IAAA,6C,aCXrB,MAAMyP,EAAwB,uB,MCQjBC,EAAkB,M,4DAO7B,MAAA5P,G,sBACE,OACEC,EAAA,OAAAC,IAAA,2CACEkE,MAAM,+BACNQ,QAAS,KACP5F,KAAK6Q,aAAe,MACpB7Q,KAAK8F,UAAUnB,MAAM,KAGtBlE,EAAAT,KAAKuF,UAAM,MAAA9E,SAAA,SAAAA,EAAG,gBACbQ,EAAA,OAAAC,IAAA,2CAAKkE,MAAM,wCAAuC,YAAW,OAAM,aAAY,OAAO8B,KAAK,sBACzFjG,EAAA,OAAAC,IAAA,2CAAKmM,GAAG,YAAYnH,QAAQ,aAC1BjF,EAAA,QAAAC,IAAA,2CAAMmF,EAAE,qHAEVpF,EAAA,QAAAC,IAAA,2CAAMkE,MAAM,iBAAe,WAI9BvE,EAAAb,KAAK8Q,gBAAc,MAAAjQ,SAAA,SAAAA,EAAAgC,YAAWK,EAAAlD,KAAK8Q,gBAAY,MAAA5N,SAAA,SAAAA,EAAEmC,KAChDpE,EACE,OAAAmE,MAAM,kCACN8B,KAAK,sBACLpD,MAAO,CACLkC,MAAO,KAAG5C,EAAApD,KAAK8Q,gBAAc,MAAA1N,SAAA,SAAAA,EAAA4C,QAAS,MACtCkF,KAAM,MAAInH,GAAAH,EAAA5D,KAAK8Q,gBAAc,MAAAlN,SAAA,SAAAA,EAAAmN,cAAU,MAAAhN,SAAA,SAAAA,EAAEuC,IAAK,IAAO,OACrD0K,IAAK,MAAI7M,GAAAF,EAAAjE,KAAK8Q,gBAAc,MAAA7M,SAAA,SAAAA,EAAA8M,cAAU,MAAA5M,SAAA,SAAAA,EAAE8M,IAAK,IAAO,SAGtDhQ,EAAK,OAAAoE,KAAKjB,EAAApE,KAAK8Q,gBAAY,MAAA1M,SAAA,SAAAA,EAAEiB,IAAKvB,MAAO,CAAEoN,UAAW,wCAClD,G,mBCrCHC,EAAe,MAJ5B,WAAA5P,CAAAC,G,UAeWxB,KAAqBoR,uBAAW,CA6E1C,CAvEC,QAAAC,CAASjR,GACPJ,KAAKsR,MAAQlR,EAAEM,OAEf,GAAI,KAAOV,KAAKsR,MAAO,CACrBC,EAAiBvR,KAAKC,QACtBD,KAAKwR,QAAU,E,KACV,CACL,MAAMC,EAAeC,EAAU1R,KAAKC,OAAQD,KAAKsR,OACjDtR,KAAKC,OAAOkB,OAAOqQ,QAAU,CAAE3O,QAAS,KAAM8O,OAAQF,GACtDzR,KAAKwR,QAAUC,EACfG,EAAW5R,KAAKC,OAAQwR,E,EAO5B,aAAAI,GACE,MAAMC,EAAe9R,KAAKoR,sBAAwB,EAElD,GAAIU,EAAe,EAAG,CACpB9R,KAAKoR,sBAAwBpR,KAAKwR,QAAQhK,OAAS,C,KAC9C,CACLxH,KAAKoR,uB,CAEPpR,KAAKC,OAAOO,YAAcR,KAAKwR,QAAQxR,KAAKoR,uBAAuB,O,CAMrE,aAAAW,CAAcC,G,QACZ,IAAIA,IAAK,MAALA,SAAK,SAALA,EAAOtR,UAAW,KAAM,CAC1BV,KAAKC,OAAOkB,OAAO8Q,aAAe,K,KAC7B,CACLjS,KAAKC,OAAOkB,OAAO8Q,eAAepR,GAAAJ,EAAAT,KAAKC,OAAOkB,UAAM,MAAAV,SAAA,SAAAA,EAAE8E,UAAQ,MAAA1E,SAAA,SAAAA,EAAAqR,YAAa,K,EAO/E,SAAAC,GACE,MAAMC,EAAepS,KAAKoR,sBAAwB,EAClD,GAAIgB,EAAepS,KAAKwR,QAAQhK,OAAS,EAAG,CAC1CxH,KAAKoR,sBAAwB,C,KACxB,CACLpR,KAAKoR,uB,CAEPpR,KAAKC,OAAOO,YAAcR,KAAKwR,QAAQxR,KAAKoR,uBAAuB,O,CAGrE,MAAApQ,G,oBACE,IAAKhB,KAAKC,OAAQ,MAAO,GACzB,MAAKiD,GAAArC,GAAAJ,EAAAT,KAAKC,UAAQ,MAAAQ,SAAA,SAAAA,EAAA4R,SAAO,MAAAxR,SAAA,SAAAA,EAAAyR,cAAU,MAAApP,SAAA,SAAAA,EAAEsE,WAAUzD,GAAAH,GAAAR,EAAApD,KAAKC,UAAQ,MAAAmD,SAAA,SAAAA,EAAAiP,SAAO,MAAAzO,SAAA,SAAAA,EAAA0O,cAAY,MAAAvO,SAAA,SAAAA,EAAAyD,UAAW,EAAG,MAAO,GAEpG,MAAM+K,EAAUvS,KAAKC,OAAOkB,OAAOoE,OACnC,MAAMiN,GAAcvO,EAAAsO,EAAQE,UAAM,MAAAxO,SAAA,SAAAA,EAAEuO,YAEpC,OACEvR,EAAA,wBACEqQ,MAAOtR,KAAKsR,MACZoB,gBAAevO,EAAAnE,KAAKwR,WAAO,MAAArN,SAAA,SAAAA,EAAEqD,QAAS,EACtCgL,YAAaA,EACbL,UAAW,IAAMnS,KAAKmS,YACtBN,cAAe,IAAM7R,KAAK6R,gBAC1BR,SAAUjR,GAAKJ,KAAKqR,SAASjR,GAC7B2R,cAAeC,GAAShS,KAAK+R,cAAcC,I,GC3FnD,MAAMW,EAAuB,+wF,MCOhBC,EAAiB,M,yBAC5B,MAAA5R,GACE,OACEC,EAACmH,EAAI,CAAAlH,IAAA,4CACHD,EAAa,QAAAC,IAAA,6C,aCXrB,MAAM2R,EAAiB,uB,MCQVC,EAAW,M,yBAMtB,KAAAC,CAAMrP,GACJ,MAAMsP,EAAS,8EACf,MAAMC,EAAWD,EAAOE,KAAKxP,GAAO,IACpC,OAAOuP,IAAQ,MAARA,SAAQ,SAARA,EAAW,KAAM,E,CAI1B,SAAAE,CAAUzP,GAQR,MAAM0P,EAAQ,uEACd,MAAMC,EAAQ3P,EAAI4P,MAAMF,GAExB,GAAIC,EAAO,CACT,OAAOA,EAAME,OAAOC,I,CAGtB,OAAO,I,CAGT,MAAAxS,GACE,IAAKhB,KAAKqF,IAAK,CACb,M,CAOF,GAAIoO,IAAoB,CACtB,OACExS,EAAA,OAAKmE,MAAM,oCACTnE,EACE,UAAAoE,IAAK,kCAAkCrF,KAAK+S,MAAM/S,KAAKqF,UAAUrF,KAAKmT,UACpEnT,KAAKqF,6HAEPqO,gBACA,KAAAC,kBAAiB,KACjBC,MAAM,WACN9P,MAAO,CAAEkC,MAAO,QAChBZ,MAAM,2B,CAMd,OACEnE,EACE,OAAAmE,MAAM,oBACN8B,KAAK,QACLF,IAAKhH,KAAKmH,OAAM,qBACG,QAAO,qBACNnH,KAAK+S,MAAM/S,KAAKqF,KACd,uBAAArF,KAAKmT,UAAUnT,KAAKqF,M,aCxElD,MAAMwO,EAAmB,4gB,MCOZC,EAAa,M,sDAuBxB,kBAAAxT,GACE,IAAKN,KAAKC,OAAQ,CAChB,M,CAGFD,KAAK+T,QACL/T,KAAKgU,W,CAIP,KAAAD,GACE/T,KAAKC,OAAOgU,KAAK,eAAe7T,I,cAE9B,GAAIA,EAAEM,OAAOwT,OAAS,EAAG,CACvB,M,CAGF,IAAItQ,GAAAR,GAAAF,GAAArC,GAAAJ,EAAAL,IAAC,MAADA,SAAC,SAADA,EAAGM,UAAQ,MAAAD,SAAA,SAAAA,EAAAE,QAAM,MAAAE,SAAA,SAAAA,EAAAM,UAAQ,MAAA+B,SAAA,SAAAA,EAAAiR,mBAAe,MAAA/Q,SAAA,SAAAA,EAAEyN,gBAAY,MAAAjN,SAAA,SAAAA,EAAEf,QAAS,CACnE,M,CAGF7C,KAAKC,OAAOmU,MAAQ,KAAK,G,CAK7B,KAAArB,CAAMrP,G,MACJ,MAAMsP,EAAS,wEACf,MAAMM,GAAS5P,GAAO,IAAI4P,MAAMN,GAChC,OAAOM,KAAS7S,EAAA6S,IAAA,MAAAA,SAAA,SAAAA,EAAQ,MAAE,MAAA7S,SAAA,SAAAA,EAAE+G,UAAW,GAAK8L,EAAM,GAAK,I,CAIzD,UAAAe,GACErU,KAAKsU,SAAW,MAChBtU,KAAKuU,aAAe,I,CAItB,kBAAAC,GACE,GAAIxU,KAAKuU,aAAc,CACrBvU,KAAKuU,aAAe,MACpBvU,KAAKyU,OAAO9P,KAAK,O,EAOrB,UAAA+P,G,MAEE,IAAIC,GAAalU,EAAA0B,OAAOyS,aAAW,MAAAnU,SAAA,SAAAA,EAAAkU,WACjCE,EAAY1S,OAAOyS,UAAUC,UAAUC,cACvCC,EAAS,SAASC,KAAKH,GACvBI,EAAM,mBAAmBD,KAAKH,GAEhC,GAAII,EAAK,CAEPjV,KAAKkV,WAAaP,IAAeI,C,KAC5B,CAEL/U,KAAKkV,UAAYL,EAAUM,SAAS,K,EAMxC,SAAAC,CAAU/P,EAAKgQ,EAAW,GACxB,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,MAAMC,EAAQ,IAAIC,MAElB,MAAMC,EAAU,YACPF,EAAMG,cACNH,EAAMI,SACZJ,EAAMK,cAAgBT,EAAWE,EAAUC,GAAQnQ,EAAI,EAG1DwG,OAAOkK,OAAON,EAAO,CAAEG,OAAQD,EAASE,QAASF,EAAStQ,OAAM,G,CAIpE,SAAA2O,GACE,IAAKhU,KAAKC,OAAOkF,OAAQ,CACvB,IAAI6Q,EAAYC,GAAK,0BAA0BjW,KAAK+S,MAAM/S,KAAKqF,QAAQ4Q,eAEvEjW,KAAKoV,UAAUY,EAAU,UAAW,KACjCE,OAAM,IAAMlW,KAAKoV,UAAUY,EAAU,MAAO,OAC5CE,OAAM,IAAMlW,KAAKoV,UAAUY,EAAU,MAAO,OAC5CG,MAAMV,GAAmBzV,KAAKC,OAAOkF,OAASsQ,IAC9CS,OAAM,Q,EAKb,iBAAAnW,GACEC,KAAK0U,aACL,GAAI1U,KAAKsU,UAAY8B,IAAS,CAC5BpW,KAAKsU,SAAW,K,EAIpB,MAAAtT,GACE,GAAIhB,KAAKkV,UAAW,CAClB,OACEjU,EAAA,OAAKmE,MAAM,sBACTnE,EAAA,UAAQoE,IAAKrF,KAAKqF,IAAKqO,gBAAe,KAAC2C,kBAAiB,KAACzC,MAAM,a,CAKrE,GAAI5T,KAAKsU,SAAU,CACjB,OACErT,EAAA,WACEA,EAAA,gBAAciG,KAAK,QAAQC,OAAQnH,KAAKmH,OAAQ9B,IAAI,GAAGoD,SAAS,YAChExH,EAAA,OAAKmE,MAAM,4BAA4BQ,QAAS,IAAM5F,KAAKqU,e,CAKjE,OAAOpT,EAAA,OAAKmE,MAAM,oBAAoB8B,KAAK,QAAQF,IAAKhH,KAAKmH,OAA2B,+BAA8B,qBAAAnH,KAAK+S,MAAM/S,KAAKqF,M","ignoreList":[]}