@vkontakte/videoplayer-core 2.0.134-dev.464b6f35.0 → 2.0.134-dev.6250ee46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es2015.cjs.js +3 -3
- package/es2015.esm.js +3 -3
- package/es2018.cjs.js +3 -3
- package/es2018.esm.js +3 -3
- package/es2024.cjs.js +3 -3
- package/es2024.esm.js +3 -3
- package/esnext.cjs.js +3 -3
- package/esnext.esm.js +3 -3
- package/evergreen.esm.js +3 -3
- package/package.json +2 -2
package/esnext.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vkontakte/videoplayer-core v2.0.134-dev.
|
|
3
|
-
*
|
|
2
|
+
* @vkontakte/videoplayer-core v2.0.134-dev.6250ee46.0
|
|
3
|
+
* Tue, 10 Jun 2025 05:36:00 GMT
|
|
4
4
|
* https://st.mycdn.me/static/vkontakte-videoplayer/2-0-134/doc/
|
|
5
5
|
*/
|
|
6
6
|
var Mx=Object.create;var kp=Object.defineProperty;var $x=Object.getOwnPropertyDescriptor;var Bx=Object.getOwnPropertyNames;var Dx=Object.getPrototypeOf,Cx=Object.prototype.hasOwnProperty;var m=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var Vx=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Bx(e))!Cx.call(s,r)&&r!==t&&kp(s,r,{get:()=>e[r],enumerable:!(i=$x(e,r))||i.enumerable});return s};var C=(s,e,t)=>(t=s!=null?Mx(Dx(s)):{},Vx(e||!s||!s.__esModule?kp(t,"default",{value:s,enumerable:!0}):t,s));var ve=m((Cu,Lp)=>{"use strict";var Jr=function(s){return s&&s.Math===Math&&s};Lp.exports=Jr(typeof globalThis=="object"&&globalThis)||Jr(typeof window=="object"&&window)||Jr(typeof self=="object"&&self)||Jr(typeof global=="object"&&global)||Jr(typeof Cu=="object"&&Cu)||function(){return this}()||Function("return this")()});var $e=m((aO,Mp)=>{"use strict";Mp.exports=function(s){try{return!!s()}catch{return!0}}});var Zr=m((nO,$p)=>{"use strict";var Ox=$e();$p.exports=!Ox(function(){var s=function(){}.bind();return typeof s!="function"||s.hasOwnProperty("prototype")})});var Vu=m((oO,Vp)=>{"use strict";var _x=Zr(),Cp=Function.prototype,Bp=Cp.apply,Dp=Cp.call;Vp.exports=typeof Reflect=="object"&&Reflect.apply||(_x?Dp.bind(Bp):function(){return Dp.apply(Bp,arguments)})});var ke=m((uO,Fp)=>{"use strict";var Op=Zr(),_p=Function.prototype,Ou=_p.call,Fx=Op&&_p.bind.bind(Ou,Ou);Fp.exports=Op?Fx:function(s){return function(){return Ou.apply(s,arguments)}}});var ki=m((lO,Up)=>{"use strict";var Np=ke(),Nx=Np({}.toString),Ux=Np("".slice);Up.exports=function(s){return Ux(Nx(s),8,-1)}});var _u=m((cO,qp)=>{"use strict";var qx=ki(),Hx=ke();qp.exports=function(s){if(qx(s)==="Function")return Hx(s)}});var me=m((dO,Hp)=>{"use strict";var Fu=typeof document=="object"&&document.all;Hp.exports=typeof Fu>"u"&&Fu!==void 0?function(s){return typeof s=="function"||s===Fu}:function(s){return typeof s=="function"}});var dt=m((pO,jp)=>{"use strict";var jx=$e();jp.exports=!jx(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})});var pt=m((hO,zp)=>{"use strict";var zx=Zr(),yn=Function.prototype.call;zp.exports=zx?yn.bind(yn):function(){return yn.apply(yn,arguments)}});var Nu=m(Wp=>{"use strict";var Gp={}.propertyIsEnumerable,Qp=Object.getOwnPropertyDescriptor,Gx=Qp&&!Gp.call({1:2},1);Wp.f=Gx?function(e){var t=Qp(this,e);return!!t&&t.enumerable}:Gp});var es=m((mO,Yp)=>{"use strict";Yp.exports=function(s,e){return{enumerable:!(s&1),configurable:!(s&2),writable:!(s&4),value:e}}});var Xp=m((bO,Kp)=>{"use strict";var Qx=ke(),Wx=$e(),Yx=ki(),Uu=Object,Kx=Qx("".split);Kp.exports=Wx(function(){return!Uu("z").propertyIsEnumerable(0)})?function(s){return Yx(s)==="String"?Kx(s,""):Uu(s)}:Uu});var tr=m((gO,Jp)=>{"use strict";Jp.exports=function(s){return s==null}});var ci=m((SO,Zp)=>{"use strict";var Xx=tr(),Jx=TypeError;Zp.exports=function(s){if(Xx(s))throw new Jx("Can't call method on "+s);return s}});var Ri=m((vO,eh)=>{"use strict";var Zx=Xp(),eE=ci();eh.exports=function(s){return Zx(eE(s))}});var ht=m((yO,th)=>{"use strict";var tE=me();th.exports=function(s){return typeof s=="object"?s!==null:tE(s)}});var ir=m((TO,ih)=>{"use strict";ih.exports={}});var Jt=m((IO,sh)=>{"use strict";var qu=ir(),Hu=ve(),iE=me(),rh=function(s){return iE(s)?s:void 0};sh.exports=function(s,e){return arguments.length<2?rh(qu[s])||rh(Hu[s]):qu[s]&&qu[s][e]||Hu[s]&&Hu[s][e]}});var ts=m((xO,ah)=>{"use strict";var rE=ke();ah.exports=rE({}.isPrototypeOf)});var Li=m((EO,uh)=>{"use strict";var sE=ve(),nh=sE.navigator,oh=nh&&nh.userAgent;uh.exports=oh?String(oh):""});var zu=m((PO,fh)=>{"use strict";var hh=ve(),ju=Li(),lh=hh.process,ch=hh.Deno,dh=lh&&lh.versions||ch&&ch.version,ph=dh&&dh.v8,Et,Tn;ph&&(Et=ph.split("."),Tn=Et[0]>0&&Et[0]<4?1:+(Et[0]+Et[1]));!Tn&&ju&&(Et=ju.match(/Edge\/(\d+)/),(!Et||Et[1]>=74)&&(Et=ju.match(/Chrome\/(\d+)/),Et&&(Tn=+Et[1])));fh.exports=Tn});var Gu=m((wO,bh)=>{"use strict";var mh=zu(),aE=$e(),nE=ve(),oE=nE.String;bh.exports=!!Object.getOwnPropertySymbols&&!aE(function(){var s=Symbol("symbol detection");return!oE(s)||!(Object(s)instanceof Symbol)||!Symbol.sham&&mh&&mh<41})});var Qu=m((AO,gh)=>{"use strict";var uE=Gu();gh.exports=uE&&!Symbol.sham&&typeof Symbol.iterator=="symbol"});var Wu=m((kO,Sh)=>{"use strict";var lE=Jt(),cE=me(),dE=ts(),pE=Qu(),hE=Object;Sh.exports=pE?function(s){return typeof s=="symbol"}:function(s){var e=lE("Symbol");return cE(e)&&dE(e.prototype,hE(s))}});var is=m((RO,vh)=>{"use strict";var fE=String;vh.exports=function(s){try{return fE(s)}catch{return"Object"}}});var Dt=m((LO,yh)=>{"use strict";var mE=me(),bE=is(),gE=TypeError;yh.exports=function(s){if(mE(s))return s;throw new gE(bE(s)+" is not a function")}});var rs=m((MO,Th)=>{"use strict";var SE=Dt(),vE=tr();Th.exports=function(s,e){var t=s[e];return vE(t)?void 0:SE(t)}});var xh=m(($O,Ih)=>{"use strict";var Yu=pt(),Ku=me(),Xu=ht(),yE=TypeError;Ih.exports=function(s,e){var t,i;if(e==="string"&&Ku(t=s.toString)&&!Xu(i=Yu(t,s))||Ku(t=s.valueOf)&&!Xu(i=Yu(t,s))||e!=="string"&&Ku(t=s.toString)&&!Xu(i=Yu(t,s)))return i;throw new yE("Can't convert object to primitive value")}});var Pt=m((BO,Eh)=>{"use strict";Eh.exports=!0});var Ah=m((DO,wh)=>{"use strict";var Ph=ve(),TE=Object.defineProperty;wh.exports=function(s,e){try{TE(Ph,s,{value:e,configurable:!0,writable:!0})}catch{Ph[s]=e}return e}});var ss=m((CO,Lh)=>{"use strict";var IE=Pt(),xE=ve(),EE=Ah(),kh="__core-js_shared__",Rh=Lh.exports=xE[kh]||EE(kh,{});(Rh.versions||(Rh.versions=[])).push({version:"3.38.0",mode:IE?"pure":"global",copyright:"\xA9 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.38.0/LICENSE",source:"https://github.com/zloirock/core-js"})});var Ju=m((VO,$h)=>{"use strict";var Mh=ss();$h.exports=function(s,e){return Mh[s]||(Mh[s]=e||{})}});var rr=m((OO,Bh)=>{"use strict";var PE=ci(),wE=Object;Bh.exports=function(s){return wE(PE(s))}});var wt=m((_O,Dh)=>{"use strict";var AE=ke(),kE=rr(),RE=AE({}.hasOwnProperty);Dh.exports=Object.hasOwn||function(e,t){return RE(kE(e),t)}});var Zu=m((FO,Ch)=>{"use strict";var LE=ke(),ME=0,$E=Math.random(),BE=LE(1 .toString);Ch.exports=function(s){return"Symbol("+(s===void 0?"":s)+")_"+BE(++ME+$E,36)}});var Be=m((NO,Oh)=>{"use strict";var DE=ve(),CE=Ju(),Vh=wt(),VE=Zu(),OE=Gu(),_E=Qu(),sr=DE.Symbol,el=CE("wks"),FE=_E?sr.for||sr:sr&&sr.withoutSetter||VE;Oh.exports=function(s){return Vh(el,s)||(el[s]=OE&&Vh(sr,s)?sr[s]:FE("Symbol."+s)),el[s]}});var Uh=m((UO,Nh)=>{"use strict";var NE=pt(),_h=ht(),Fh=Wu(),UE=rs(),qE=xh(),HE=Be(),jE=TypeError,zE=HE("toPrimitive");Nh.exports=function(s,e){if(!_h(s)||Fh(s))return s;var t=UE(s,zE),i;if(t){if(e===void 0&&(e="default"),i=NE(t,s,e),!_h(i)||Fh(i))return i;throw new jE("Can't convert object to primitive value")}return e===void 0&&(e="number"),qE(s,e)}});var tl=m((qO,qh)=>{"use strict";var GE=Uh(),QE=Wu();qh.exports=function(s){var e=GE(s,"string");return QE(e)?e:e+""}});var In=m((HO,jh)=>{"use strict";var WE=ve(),Hh=ht(),il=WE.document,YE=Hh(il)&&Hh(il.createElement);jh.exports=function(s){return YE?il.createElement(s):{}}});var rl=m((jO,zh)=>{"use strict";var KE=dt(),XE=$e(),JE=In();zh.exports=!KE&&!XE(function(){return Object.defineProperty(JE("div"),"a",{get:function(){return 7}}).a!==7})});var Wh=m(Qh=>{"use strict";var ZE=dt(),eP=pt(),tP=Nu(),iP=es(),rP=Ri(),sP=tl(),aP=wt(),nP=rl(),Gh=Object.getOwnPropertyDescriptor;Qh.f=ZE?Gh:function(e,t){if(e=rP(e),t=sP(t),nP)try{return Gh(e,t)}catch{}if(aP(e,t))return iP(!eP(tP.f,e,t),e[t])}});var sl=m((GO,Yh)=>{"use strict";var oP=$e(),uP=me(),lP=/#|\.prototype\./,as=function(s,e){var t=dP[cP(s)];return t===hP?!0:t===pP?!1:uP(e)?oP(e):!!e},cP=as.normalize=function(s){return String(s).replace(lP,".").toLowerCase()},dP=as.data={},pP=as.NATIVE="N",hP=as.POLYFILL="P";Yh.exports=as});var ar=m((QO,Xh)=>{"use strict";var Kh=_u(),fP=Dt(),mP=Zr(),bP=Kh(Kh.bind);Xh.exports=function(s,e){return fP(s),e===void 0?s:mP?bP(s,e):function(){return s.apply(e,arguments)}}});var al=m((WO,Jh)=>{"use strict";var gP=dt(),SP=$e();Jh.exports=gP&&SP(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})});var Ct=m((YO,Zh)=>{"use strict";var vP=ht(),yP=String,TP=TypeError;Zh.exports=function(s){if(vP(s))return s;throw new TP(yP(s)+" is not an object")}});var Mi=m(tf=>{"use strict";var IP=dt(),xP=rl(),EP=al(),xn=Ct(),ef=tl(),PP=TypeError,nl=Object.defineProperty,wP=Object.getOwnPropertyDescriptor,ol="enumerable",ul="configurable",ll="writable";tf.f=IP?EP?function(e,t,i){if(xn(e),t=ef(t),xn(i),typeof e=="function"&&t==="prototype"&&"value"in i&&ll in i&&!i[ll]){var r=wP(e,t);r&&r[ll]&&(e[t]=i.value,i={configurable:ul in i?i[ul]:r[ul],enumerable:ol in i?i[ol]:r[ol],writable:!1})}return nl(e,t,i)}:nl:function(e,t,i){if(xn(e),t=ef(t),xn(i),xP)try{return nl(e,t,i)}catch{}if("get"in i||"set"in i)throw new PP("Accessors not supported");return"value"in i&&(e[t]=i.value),e}});var nr=m((XO,rf)=>{"use strict";var AP=dt(),kP=Mi(),RP=es();rf.exports=AP?function(s,e,t){return kP.f(s,e,RP(1,t))}:function(s,e,t){return s[e]=t,s}});var Ie=m((JO,af)=>{"use strict";var ns=ve(),LP=Vu(),MP=_u(),$P=me(),BP=Wh().f,DP=sl(),or=ir(),CP=ar(),ur=nr(),sf=wt();ss();var VP=function(s){var e=function(t,i,r){if(this instanceof e){switch(arguments.length){case 0:return new s;case 1:return new s(t);case 2:return new s(t,i)}return new s(t,i,r)}return LP(s,this,arguments)};return e.prototype=s.prototype,e};af.exports=function(s,e){var t=s.target,i=s.global,r=s.stat,a=s.proto,n=i?ns:r?ns[t]:ns[t]&&ns[t].prototype,o=i?or:or[t]||ur(or,t,{})[t],u=o.prototype,l,p,c,d,h,f,b,g,S;for(d in e)l=DP(i?d:t+(r?".":"#")+d,s.forced),p=!l&&n&&sf(n,d),f=o[d],p&&(s.dontCallGetSet?(S=BP(n,d),b=S&&S.value):b=n[d]),h=p&&b?b:e[d],!(!l&&!a&&typeof f==typeof h)&&(s.bind&&p?g=CP(h,ns):s.wrap&&p?g=VP(h):a&&$P(h)?g=MP(h):g=h,(s.sham||h&&h.sham||f&&f.sham)&&ur(g,"sham",!0),ur(o,d,g),a&&(c=t+"Prototype",sf(or,c)||ur(or,c,{}),ur(or[c],d,h),s.real&&u&&(l||!u[d])&&ur(u,d,h)))}});var of=m((ZO,nf)=>{"use strict";var OP=Math.ceil,_P=Math.floor;nf.exports=Math.trunc||function(e){var t=+e;return(t>0?_P:OP)(t)}});var os=m((e_,uf)=>{"use strict";var FP=of();uf.exports=function(s){var e=+s;return e!==e||e===0?0:FP(e)}});var cf=m((t_,lf)=>{"use strict";var NP=os(),UP=Math.max,qP=Math.min;lf.exports=function(s,e){var t=NP(s);return t<0?UP(t+e,0):qP(t,e)}});var cl=m((i_,df)=>{"use strict";var HP=os(),jP=Math.min;df.exports=function(s){var e=HP(s);return e>0?jP(e,9007199254740991):0}});var lr=m((r_,pf)=>{"use strict";var zP=cl();pf.exports=function(s){return zP(s.length)}});var dl=m((s_,ff)=>{"use strict";var GP=Ri(),QP=cf(),WP=lr(),hf=function(s){return function(e,t,i){var r=GP(e),a=WP(r);if(a===0)return!s&&-1;var n=QP(i,a),o;if(s&&t!==t){for(;a>n;)if(o=r[n++],o!==o)return!0}else for(;a>n;n++)if((s||n in r)&&r[n]===t)return s||n||0;return!s&&-1}};ff.exports={includes:hf(!0),indexOf:hf(!1)}});var us=m((a_,mf)=>{"use strict";mf.exports=function(){}});var bf=m(()=>{"use strict";var YP=Ie(),KP=dl().includes,XP=$e(),JP=us(),ZP=XP(function(){return!Array(1).includes()});YP({target:"Array",proto:!0,forced:ZP},{includes:function(e){return KP(this,e,arguments.length>1?arguments[1]:void 0)}});JP("includes")});var di=m((u_,gf)=>{"use strict";var ew=Jt();gf.exports=ew});var vf=m((l_,Sf)=>{"use strict";bf();var tw=di();Sf.exports=tw("Array","includes")});var Tf=m((c_,yf)=>{"use strict";var iw=vf();yf.exports=iw});var ft=m((d_,If)=>{"use strict";var rw=Tf();If.exports=rw});var wn=m((x_,Lf)=>{"use strict";var dw=Ju(),pw=Zu(),Rf=dw("keys");Lf.exports=function(s){return Rf[s]||(Rf[s]=pw(s))}});var $f=m((E_,Mf)=>{"use strict";var hw=$e();Mf.exports=!hw(function(){function s(){}return s.prototype.constructor=null,Object.getPrototypeOf(new s)!==s.prototype})});var An=m((P_,Df)=>{"use strict";var fw=wt(),mw=me(),bw=rr(),gw=wn(),Sw=$f(),Bf=gw("IE_PROTO"),fl=Object,vw=fl.prototype;Df.exports=Sw?fl.getPrototypeOf:function(s){var e=bw(s);if(fw(e,Bf))return e[Bf];var t=e.constructor;return mw(t)&&e instanceof t?t.prototype:e instanceof fl?vw:null}});var kn=m((w_,Cf)=>{"use strict";Cf.exports={}});var _f=m((A_,Of)=>{"use strict";var yw=ke(),ml=wt(),Tw=Ri(),Iw=dl().indexOf,xw=kn(),Vf=yw([].push);Of.exports=function(s,e){var t=Tw(s),i=0,r=[],a;for(a in t)!ml(xw,a)&&ml(t,a)&&Vf(r,a);for(;e.length>i;)ml(t,a=e[i++])&&(~Iw(r,a)||Vf(r,a));return r}});var bl=m((k_,Ff)=>{"use strict";Ff.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]});var gl=m((R_,Nf)=>{"use strict";var Ew=_f(),Pw=bl();Nf.exports=Object.keys||function(e){return Ew(e,Pw)}});var Sl=m((L_,zf)=>{"use strict";var qf=dt(),ww=$e(),Hf=ke(),Aw=An(),kw=gl(),Rw=Ri(),Lw=Nu().f,jf=Hf(Lw),Mw=Hf([].push),$w=qf&&ww(function(){var s=Object.create(null);return s[2]=2,!jf(s,2)}),Uf=function(s){return function(e){for(var t=Rw(e),i=kw(t),r=$w&&Aw(t)===null,a=i.length,n=0,o=[],u;a>n;)u=i[n++],(!qf||(r?u in t:jf(t,u)))&&Mw(o,s?[u,t[u]]:t[u]);return o}};zf.exports={entries:Uf(!0),values:Uf(!1)}});var Gf=m(()=>{"use strict";var Bw=Ie(),Dw=Sl().entries;Bw({target:"Object",stat:!0},{entries:function(e){return Dw(e)}})});var Wf=m((B_,Qf)=>{"use strict";Gf();var Cw=ir();Qf.exports=Cw.Object.entries});var Kf=m((D_,Yf)=>{"use strict";var Vw=Wf();Yf.exports=Vw});var $i=m((C_,Xf)=>{"use strict";var Ow=Kf();Xf.exports=Ow});var Bi=m((V_,Jf)=>{"use strict";Jf.exports={}});var tm=m((O_,em)=>{"use strict";var _w=ve(),Fw=me(),Zf=_w.WeakMap;em.exports=Fw(Zf)&&/native code/.test(String(Zf))});var Il=m((__,sm)=>{"use strict";var Nw=tm(),rm=ve(),Uw=ht(),qw=nr(),vl=wt(),yl=ss(),Hw=wn(),jw=kn(),im="Object already initialized",Tl=rm.TypeError,zw=rm.WeakMap,Rn,ls,Ln,Gw=function(s){return Ln(s)?ls(s):Rn(s,{})},Qw=function(s){return function(e){var t;if(!Uw(e)||(t=ls(e)).type!==s)throw new Tl("Incompatible receiver, "+s+" required");return t}};Nw||yl.state?(At=yl.state||(yl.state=new zw),At.get=At.get,At.has=At.has,At.set=At.set,Rn=function(s,e){if(At.has(s))throw new Tl(im);return e.facade=s,At.set(s,e),e},ls=function(s){return At.get(s)||{}},Ln=function(s){return At.has(s)}):(Di=Hw("state"),jw[Di]=!0,Rn=function(s,e){if(vl(s,Di))throw new Tl(im);return e.facade=s,qw(s,Di,e),e},ls=function(s){return vl(s,Di)?s[Di]:{}},Ln=function(s){return vl(s,Di)});var At,Di;sm.exports={set:Rn,get:ls,has:Ln,enforce:Gw,getterFor:Qw}});var Pl=m((F_,nm)=>{"use strict";var xl=dt(),Ww=wt(),am=Function.prototype,Yw=xl&&Object.getOwnPropertyDescriptor,El=Ww(am,"name"),Kw=El&&function(){}.name==="something",Xw=El&&(!xl||xl&&Yw(am,"name").configurable);nm.exports={EXISTS:El,PROPER:Kw,CONFIGURABLE:Xw}});var um=m(om=>{"use strict";var Jw=dt(),Zw=al(),eA=Mi(),tA=Ct(),iA=Ri(),rA=gl();om.f=Jw&&!Zw?Object.defineProperties:function(e,t){tA(e);for(var i=iA(t),r=rA(t),a=r.length,n=0,o;a>n;)eA.f(e,o=r[n++],i[o]);return e}});var wl=m((U_,lm)=>{"use strict";var sA=Jt();lm.exports=sA("document","documentElement")});var Ll=m((q_,bm)=>{"use strict";var aA=Ct(),nA=um(),cm=bl(),oA=kn(),uA=wl(),lA=In(),cA=wn(),dm=">",pm="<",kl="prototype",Rl="script",fm=cA("IE_PROTO"),Al=function(){},mm=function(s){return pm+Rl+dm+s+pm+"/"+Rl+dm},hm=function(s){s.write(mm("")),s.close();var e=s.parentWindow.Object;return s=null,e},dA=function(){var s=lA("iframe"),e="java"+Rl+":",t;return s.style.display="none",uA.appendChild(s),s.src=String(e),t=s.contentWindow.document,t.open(),t.write(mm("document.F=Object")),t.close(),t.F},Mn,$n=function(){try{Mn=new ActiveXObject("htmlfile")}catch{}$n=typeof document<"u"?document.domain&&Mn?hm(Mn):dA():hm(Mn);for(var s=cm.length;s--;)delete $n[kl][cm[s]];return $n()};oA[fm]=!0;bm.exports=Object.create||function(e,t){var i;return e!==null?(Al[kl]=aA(e),i=new Al,Al[kl]=null,i[fm]=e):i=$n(),t===void 0?i:nA.f(i,t)}});var cr=m((H_,gm)=>{"use strict";var pA=nr();gm.exports=function(s,e,t,i){return i&&i.enumerable?s[e]=t:pA(s,e,t),s}});var Dl=m((j_,ym)=>{"use strict";var hA=$e(),fA=me(),mA=ht(),bA=Ll(),Sm=An(),gA=cr(),SA=Be(),vA=Pt(),Bl=SA("iterator"),vm=!1,Zt,Ml,$l;[].keys&&($l=[].keys(),"next"in $l?(Ml=Sm(Sm($l)),Ml!==Object.prototype&&(Zt=Ml)):vm=!0);var yA=!mA(Zt)||hA(function(){var s={};return Zt[Bl].call(s)!==s});yA?Zt={}:vA&&(Zt=bA(Zt));fA(Zt[Bl])||gA(Zt,Bl,function(){return this});ym.exports={IteratorPrototype:Zt,BUGGY_SAFARI_ITERATORS:vm}});var Bn=m((z_,Im)=>{"use strict";var TA=Be(),IA=TA("toStringTag"),Tm={};Tm[IA]="z";Im.exports=String(Tm)==="[object z]"});var cs=m((G_,xm)=>{"use strict";var xA=Bn(),EA=me(),Dn=ki(),PA=Be(),wA=PA("toStringTag"),AA=Object,kA=Dn(function(){return arguments}())==="Arguments",RA=function(s,e){try{return s[e]}catch{}};xm.exports=xA?Dn:function(s){var e,t,i;return s===void 0?"Undefined":s===null?"Null":typeof(t=RA(e=AA(s),wA))=="string"?t:kA?Dn(e):(i=Dn(e))==="Object"&&EA(e.callee)?"Arguments":i}});var Pm=m((Q_,Em)=>{"use strict";var LA=Bn(),MA=cs();Em.exports=LA?{}.toString:function(){return"[object "+MA(this)+"]"}});var ds=m((W_,Am)=>{"use strict";var $A=Bn(),BA=Mi().f,DA=nr(),CA=wt(),VA=Pm(),OA=Be(),wm=OA("toStringTag");Am.exports=function(s,e,t,i){var r=t?s:s&&s.prototype;r&&(CA(r,wm)||BA(r,wm,{configurable:!0,value:e}),i&&!$A&&DA(r,"toString",VA))}});var Rm=m((Y_,km)=>{"use strict";var _A=Dl().IteratorPrototype,FA=Ll(),NA=es(),UA=ds(),qA=Bi(),HA=function(){return this};km.exports=function(s,e,t,i){var r=e+" Iterator";return s.prototype=FA(_A,{next:NA(+!i,t)}),UA(s,r,!1,!0),qA[r]=HA,s}});var Mm=m((K_,Lm)=>{"use strict";var jA=ke(),zA=Dt();Lm.exports=function(s,e,t){try{return jA(zA(Object.getOwnPropertyDescriptor(s,e)[t]))}catch{}}});var Bm=m((X_,$m)=>{"use strict";var GA=ht();$m.exports=function(s){return GA(s)||s===null}});var Cm=m((J_,Dm)=>{"use strict";var QA=Bm(),WA=String,YA=TypeError;Dm.exports=function(s){if(QA(s))return s;throw new YA("Can't set "+WA(s)+" as a prototype")}});var Cl=m((Z_,Vm)=>{"use strict";var KA=Mm(),XA=ht(),JA=ci(),ZA=Cm();Vm.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var s=!1,e={},t;try{t=KA(Object.prototype,"__proto__","set"),t(e,[]),s=e instanceof Array}catch{}return function(r,a){return JA(r),ZA(a),XA(r)&&(s?t(r,a):r.__proto__=a),r}}():void 0)});var Qm=m((eF,Gm)=>{"use strict";var ek=Ie(),tk=pt(),Cn=Pt(),jm=Pl(),ik=me(),rk=Rm(),Om=An(),_m=Cl(),sk=ds(),ak=nr(),Vl=cr(),nk=Be(),Fm=Bi(),zm=Dl(),ok=jm.PROPER,uk=jm.CONFIGURABLE,Nm=zm.IteratorPrototype,Vn=zm.BUGGY_SAFARI_ITERATORS,ps=nk("iterator"),Um="keys",hs="values",qm="entries",Hm=function(){return this};Gm.exports=function(s,e,t,i,r,a,n){rk(t,e,i);var o=function(S){if(S===r&&d)return d;if(!Vn&&S&&S in p)return p[S];switch(S){case Um:return function(){return new t(this,S)};case hs:return function(){return new t(this,S)};case qm:return function(){return new t(this,S)}}return function(){return new t(this)}},u=e+" Iterator",l=!1,p=s.prototype,c=p[ps]||p["@@iterator"]||r&&p[r],d=!Vn&&c||o(r),h=e==="Array"&&p.entries||c,f,b,g;if(h&&(f=Om(h.call(new s)),f!==Object.prototype&&f.next&&(!Cn&&Om(f)!==Nm&&(_m?_m(f,Nm):ik(f[ps])||Vl(f,ps,Hm)),sk(f,u,!0,!0),Cn&&(Fm[u]=Hm))),ok&&r===hs&&c&&c.name!==hs&&(!Cn&&uk?ak(p,"name",hs):(l=!0,d=function(){return tk(c,this)})),r)if(b={values:o(hs),keys:a?d:o(Um),entries:o(qm)},n)for(g in b)(Vn||l||!(g in p))&&Vl(p,g,b[g]);else ek({target:e,proto:!0,forced:Vn||l},b);return(!Cn||n)&&p[ps]!==d&&Vl(p,ps,d,{name:r}),Fm[e]=d,b}});var Ym=m((tF,Wm)=>{"use strict";Wm.exports=function(s,e){return{value:s,done:e}}});var _l=m((iF,eb)=>{"use strict";var lk=Ri(),Ol=us(),Km=Bi(),Jm=Il(),ck=Mi().f,dk=Qm(),On=Ym(),pk=Pt(),hk=dt(),Zm="Array Iterator",fk=Jm.set,mk=Jm.getterFor(Zm);eb.exports=dk(Array,"Array",function(s,e){fk(this,{type:Zm,target:lk(s),index:0,kind:e})},function(){var s=mk(this),e=s.target,t=s.index++;if(!e||t>=e.length)return s.target=void 0,On(void 0,!0);switch(s.kind){case"keys":return On(t,!1);case"values":return On(e[t],!1)}return On([t,e[t]],!1)},"values");var Xm=Km.Arguments=Km.Array;Ol("keys");Ol("values");Ol("entries");if(!pk&&hk&&Xm.name!=="values")try{ck(Xm,"name",{value:"values"})}catch{}});var ib=m((rF,tb)=>{"use strict";var bk=Be(),gk=Bi(),Sk=bk("iterator"),vk=Array.prototype;tb.exports=function(s){return s!==void 0&&(gk.Array===s||vk[Sk]===s)}});var Fl=m((sF,sb)=>{"use strict";var yk=cs(),rb=rs(),Tk=tr(),Ik=Bi(),xk=Be(),Ek=xk("iterator");sb.exports=function(s){if(!Tk(s))return rb(s,Ek)||rb(s,"@@iterator")||Ik[yk(s)]}});var nb=m((aF,ab)=>{"use strict";var Pk=pt(),wk=Dt(),Ak=Ct(),kk=is(),Rk=Fl(),Lk=TypeError;ab.exports=function(s,e){var t=arguments.length<2?Rk(s):e;if(wk(t))return Ak(Pk(t,s));throw new Lk(kk(s)+" is not iterable")}});var lb=m((nF,ub)=>{"use strict";var Mk=pt(),ob=Ct(),$k=rs();ub.exports=function(s,e,t){var i,r;ob(s);try{if(i=$k(s,"return"),!i){if(e==="throw")throw t;return t}i=Mk(i,s)}catch(a){r=!0,i=a}if(e==="throw")throw t;if(r)throw i;return ob(i),t}});var Fn=m((oF,hb)=>{"use strict";var Bk=ar(),Dk=pt(),Ck=Ct(),Vk=is(),Ok=ib(),_k=lr(),cb=ts(),Fk=nb(),Nk=Fl(),db=lb(),Uk=TypeError,_n=function(s,e){this.stopped=s,this.result=e},pb=_n.prototype;hb.exports=function(s,e,t){var i=t&&t.that,r=!!(t&&t.AS_ENTRIES),a=!!(t&&t.IS_RECORD),n=!!(t&&t.IS_ITERATOR),o=!!(t&&t.INTERRUPTED),u=Bk(e,i),l,p,c,d,h,f,b,g=function(T){return l&&db(l,"normal",T),new _n(!0,T)},S=function(T){return r?(Ck(T),o?u(T[0],T[1],g):u(T[0],T[1])):o?u(T,g):u(T)};if(a)l=s.iterator;else if(n)l=s;else{if(p=Nk(s),!p)throw new Uk(Vk(s)+" is not iterable");if(Ok(p)){for(c=0,d=_k(s);d>c;c++)if(h=S(s[c]),h&&cb(pb,h))return h;return new _n(!1)}l=Fk(s,p)}for(f=a?s.next:l.next;!(b=Dk(f,l)).done;){try{h=S(b.value)}catch(T){db(l,"throw",T)}if(typeof h=="object"&&h&&cb(pb,h))return h}return new _n(!1)}});var mb=m((uF,fb)=>{"use strict";var qk=dt(),Hk=Mi(),jk=es();fb.exports=function(s,e,t){qk?Hk.f(s,e,jk(0,t)):s[e]=t}});var bb=m(()=>{"use strict";var zk=Ie(),Gk=Fn(),Qk=mb();zk({target:"Object",stat:!0},{fromEntries:function(e){var t={};return Gk(e,function(i,r){Qk(t,i,r)},{AS_ENTRIES:!0}),t}})});var Sb=m((dF,gb)=>{"use strict";_l();bb();var Wk=ir();gb.exports=Wk.Object.fromEntries});var yb=m((pF,vb)=>{"use strict";vb.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}});var Ib=m(()=>{"use strict";_l();var Yk=yb(),Kk=ve(),Xk=ds(),Tb=Bi();for(Nn in Yk)Xk(Kk[Nn],Nn),Tb[Nn]=Tb.Array;var Nn});var Eb=m((mF,xb)=>{"use strict";var Jk=Sb();Ib();xb.exports=Jk});var Nl=m((bF,Pb)=>{"use strict";var Zk=Eb();Pb.exports=Zk});var wb=m(()=>{"use strict"});var Ul=m((vF,Ab)=>{"use strict";var fs=ve(),eR=Li(),tR=ki(),Un=function(s){return eR.slice(0,s.length)===s};Ab.exports=function(){return Un("Bun/")?"BUN":Un("Cloudflare-Workers")?"CLOUDFLARE":Un("Deno/")?"DENO":Un("Node.js/")?"NODE":fs.Bun&&typeof Bun.version=="string"?"BUN":fs.Deno&&typeof Deno.version=="object"?"DENO":tR(fs.process)==="process"?"NODE":fs.window&&fs.document?"BROWSER":"REST"}()});var qn=m((yF,kb)=>{"use strict";var iR=Ul();kb.exports=iR==="NODE"});var Lb=m((TF,Rb)=>{"use strict";var rR=Mi();Rb.exports=function(s,e,t){return rR.f(s,e,t)}});var Bb=m((IF,$b)=>{"use strict";var sR=Jt(),aR=Lb(),nR=Be(),oR=dt(),Mb=nR("species");$b.exports=function(s){var e=sR(s);oR&&e&&!e[Mb]&&aR(e,Mb,{configurable:!0,get:function(){return this}})}});var Cb=m((xF,Db)=>{"use strict";var uR=ts(),lR=TypeError;Db.exports=function(s,e){if(uR(e,s))return s;throw new lR("Incorrect invocation")}});var Hl=m((EF,Vb)=>{"use strict";var cR=ke(),dR=me(),ql=ss(),pR=cR(Function.toString);dR(ql.inspectSource)||(ql.inspectSource=function(s){return pR(s)});Vb.exports=ql.inspectSource});var zl=m((PF,Ub)=>{"use strict";var hR=ke(),fR=$e(),Ob=me(),mR=cs(),bR=Jt(),gR=Hl(),_b=function(){},Fb=bR("Reflect","construct"),jl=/^\s*(?:class|function)\b/,SR=hR(jl.exec),vR=!jl.test(_b),ms=function(e){if(!Ob(e))return!1;try{return Fb(_b,[],e),!0}catch{return!1}},Nb=function(e){if(!Ob(e))return!1;switch(mR(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return vR||!!SR(jl,gR(e))}catch{return!0}};Nb.sham=!0;Ub.exports=!Fb||fR(function(){var s;return ms(ms.call)||!ms(Object)||!ms(function(){s=!0})||s})?Nb:ms});var Hb=m((wF,qb)=>{"use strict";var yR=zl(),TR=is(),IR=TypeError;qb.exports=function(s){if(yR(s))return s;throw new IR(TR(s)+" is not a constructor")}});var Gl=m((AF,zb)=>{"use strict";var jb=Ct(),xR=Hb(),ER=tr(),PR=Be(),wR=PR("species");zb.exports=function(s,e){var t=jb(s).constructor,i;return t===void 0||ER(i=jb(t)[wR])?e:xR(i)}});var Qb=m((kF,Gb)=>{"use strict";var AR=ke();Gb.exports=AR([].slice)});var Yb=m((RF,Wb)=>{"use strict";var kR=TypeError;Wb.exports=function(s,e){if(s<e)throw new kR("Not enough arguments");return s}});var Ql=m((LF,Kb)=>{"use strict";var RR=Li();Kb.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(RR)});var ic=m((MF,ag)=>{"use strict";var mt=ve(),LR=Vu(),MR=ar(),Xb=me(),$R=wt(),sg=$e(),Jb=wl(),BR=Qb(),Zb=In(),DR=Yb(),CR=Ql(),VR=qn(),Zl=mt.setImmediate,ec=mt.clearImmediate,OR=mt.process,Wl=mt.Dispatch,_R=mt.Function,eg=mt.MessageChannel,FR=mt.String,Yl=0,bs={},tg="onreadystatechange",gs,Ci,Kl,Xl;sg(function(){gs=mt.location});var tc=function(s){if($R(bs,s)){var e=bs[s];delete bs[s],e()}},Jl=function(s){return function(){tc(s)}},ig=function(s){tc(s.data)},rg=function(s){mt.postMessage(FR(s),gs.protocol+"//"+gs.host)};(!Zl||!ec)&&(Zl=function(e){DR(arguments.length,1);var t=Xb(e)?e:_R(e),i=BR(arguments,1);return bs[++Yl]=function(){LR(t,void 0,i)},Ci(Yl),Yl},ec=function(e){delete bs[e]},VR?Ci=function(s){OR.nextTick(Jl(s))}:Wl&&Wl.now?Ci=function(s){Wl.now(Jl(s))}:eg&&!CR?(Kl=new eg,Xl=Kl.port2,Kl.port1.onmessage=ig,Ci=MR(Xl.postMessage,Xl)):mt.addEventListener&&Xb(mt.postMessage)&&!mt.importScripts&&gs&&gs.protocol!=="file:"&&!sg(rg)?(Ci=rg,mt.addEventListener("message",ig,!1)):tg in Zb("script")?Ci=function(s){Jb.appendChild(Zb("script"))[tg]=function(){Jb.removeChild(this),tc(s)}}:Ci=function(s){setTimeout(Jl(s),0)});ag.exports={set:Zl,clear:ec}});var ug=m(($F,og)=>{"use strict";var ng=ve(),NR=dt(),UR=Object.getOwnPropertyDescriptor;og.exports=function(s){if(!NR)return ng[s];var e=UR(ng,s);return e&&e.value}});var rc=m((BF,cg)=>{"use strict";var lg=function(){this.head=null,this.tail=null};lg.prototype={add:function(s){var e={item:s,next:null},t=this.tail;t?t.next=e:this.head=e,this.tail=e},get:function(){var s=this.head;if(s){var e=this.head=s.next;return e===null&&(this.tail=null),s.item}}};cg.exports=lg});var pg=m((DF,dg)=>{"use strict";var qR=Li();dg.exports=/ipad|iphone|ipod/i.test(qR)&&typeof Pebble<"u"});var fg=m((CF,hg)=>{"use strict";var HR=Li();hg.exports=/web0s(?!.*chrome)/i.test(HR)});var Tg=m((VF,yg)=>{"use strict";var pr=ve(),jR=ug(),mg=ar(),sc=ic().set,zR=rc(),GR=Ql(),QR=pg(),WR=fg(),ac=qn(),bg=pr.MutationObserver||pr.WebKitMutationObserver,gg=pr.document,Sg=pr.process,Hn=pr.Promise,uc=jR("queueMicrotask"),dr,nc,oc,jn,vg;uc||(Ss=new zR,vs=function(){var s,e;for(ac&&(s=Sg.domain)&&s.exit();e=Ss.get();)try{e()}catch(t){throw Ss.head&&dr(),t}s&&s.enter()},!GR&&!ac&&!WR&&bg&&gg?(nc=!0,oc=gg.createTextNode(""),new bg(vs).observe(oc,{characterData:!0}),dr=function(){oc.data=nc=!nc}):!QR&&Hn&&Hn.resolve?(jn=Hn.resolve(void 0),jn.constructor=Hn,vg=mg(jn.then,jn),dr=function(){vg(vs)}):ac?dr=function(){Sg.nextTick(vs)}:(sc=mg(sc,pr),dr=function(){sc(vs)}),uc=function(s){Ss.head||dr(),Ss.add(s)});var Ss,vs;yg.exports=uc});var xg=m((OF,Ig)=>{"use strict";Ig.exports=function(s,e){try{arguments.length===1?console.error(s):console.error(s,e)}catch{}}});var zn=m((_F,Eg)=>{"use strict";Eg.exports=function(s){try{return{error:!1,value:s()}}catch(e){return{error:!0,value:e}}}});var Vi=m((FF,Pg)=>{"use strict";var YR=ve();Pg.exports=YR.Promise});var hr=m((NF,Rg)=>{"use strict";var KR=ve(),ys=Vi(),XR=me(),JR=sl(),ZR=Hl(),eL=Be(),wg=Ul(),tL=Pt(),lc=zu(),Ag=ys&&ys.prototype,iL=eL("species"),cc=!1,kg=XR(KR.PromiseRejectionEvent),rL=JR("Promise",function(){var s=ZR(ys),e=s!==String(ys);if(!e&&lc===66||tL&&!(Ag.catch&&Ag.finally))return!0;if(!lc||lc<51||!/native code/.test(s)){var t=new ys(function(a){a(1)}),i=function(a){a(function(){},function(){})},r=t.constructor={};if(r[iL]=i,cc=t.then(function(){})instanceof i,!cc)return!0}return!e&&(wg==="BROWSER"||wg==="DENO")&&!kg});Rg.exports={CONSTRUCTOR:rL,REJECTION_EVENT:kg,SUBCLASSING:cc}});var fr=m((UF,Mg)=>{"use strict";var Lg=Dt(),sL=TypeError,aL=function(s){var e,t;this.promise=new s(function(i,r){if(e!==void 0||t!==void 0)throw new sL("Bad Promise constructor");e=i,t=r}),this.resolve=Lg(e),this.reject=Lg(t)};Mg.exports.f=function(s){return new aL(s)}});var Kg=m(()=>{"use strict";var nL=Ie(),oL=Pt(),Yn=qn(),pi=ve(),Sr=pt(),$g=cr(),Bg=Cl(),uL=ds(),lL=Bb(),cL=Dt(),Wn=me(),dL=ht(),pL=Cb(),hL=Gl(),_g=ic().set,mc=Tg(),fL=xg(),mL=zn(),bL=rc(),Fg=Il(),Kn=Vi(),bc=hr(),Ng=fr(),Xn="Promise",Ug=bc.CONSTRUCTOR,gL=bc.REJECTION_EVENT,SL=bc.SUBCLASSING,dc=Fg.getterFor(Xn),vL=Fg.set,mr=Kn&&Kn.prototype,Oi=Kn,Gn=mr,qg=pi.TypeError,pc=pi.document,gc=pi.process,hc=Ng.f,yL=hc,TL=!!(pc&&pc.createEvent&&pi.dispatchEvent),Hg="unhandledrejection",IL="rejectionhandled",Dg=0,jg=1,xL=2,Sc=1,zg=2,Qn,Cg,EL,Vg,Gg=function(s){var e;return dL(s)&&Wn(e=s.then)?e:!1},Qg=function(s,e){var t=e.value,i=e.state===jg,r=i?s.ok:s.fail,a=s.resolve,n=s.reject,o=s.domain,u,l,p;try{r?(i||(e.rejection===zg&&wL(e),e.rejection=Sc),r===!0?u=t:(o&&o.enter(),u=r(t),o&&(o.exit(),p=!0)),u===s.promise?n(new qg("Promise-chain cycle")):(l=Gg(u))?Sr(l,u,a,n):a(u)):n(t)}catch(c){o&&!p&&o.exit(),n(c)}},Wg=function(s,e){s.notified||(s.notified=!0,mc(function(){for(var t=s.reactions,i;i=t.get();)Qg(i,s);s.notified=!1,e&&!s.rejection&&PL(s)}))},Yg=function(s,e,t){var i,r;TL?(i=pc.createEvent("Event"),i.promise=e,i.reason=t,i.initEvent(s,!1,!0),pi.dispatchEvent(i)):i={promise:e,reason:t},!gL&&(r=pi["on"+s])?r(i):s===Hg&&fL("Unhandled promise rejection",t)},PL=function(s){Sr(_g,pi,function(){var e=s.facade,t=s.value,i=Og(s),r;if(i&&(r=mL(function(){Yn?gc.emit("unhandledRejection",t,e):Yg(Hg,e,t)}),s.rejection=Yn||Og(s)?zg:Sc,r.error))throw r.value})},Og=function(s){return s.rejection!==Sc&&!s.parent},wL=function(s){Sr(_g,pi,function(){var e=s.facade;Yn?gc.emit("rejectionHandled",e):Yg(IL,e,s.value)})},br=function(s,e,t){return function(i){s(e,i,t)}},gr=function(s,e,t){s.done||(s.done=!0,t&&(s=t),s.value=e,s.state=xL,Wg(s,!0))},fc=function(s,e,t){if(!s.done){s.done=!0,t&&(s=t);try{if(s.facade===e)throw new qg("Promise can't be resolved itself");var i=Gg(e);i?mc(function(){var r={done:!1};try{Sr(i,e,br(fc,r,s),br(gr,r,s))}catch(a){gr(r,a,s)}}):(s.value=e,s.state=jg,Wg(s,!1))}catch(r){gr({done:!1},r,s)}}};if(Ug&&(Oi=function(e){pL(this,Gn),cL(e),Sr(Qn,this);var t=dc(this);try{e(br(fc,t),br(gr,t))}catch(i){gr(t,i)}},Gn=Oi.prototype,Qn=function(e){vL(this,{type:Xn,done:!1,notified:!1,parent:!1,reactions:new bL,rejection:!1,state:Dg,value:void 0})},Qn.prototype=$g(Gn,"then",function(e,t){var i=dc(this),r=hc(hL(this,Oi));return i.parent=!0,r.ok=Wn(e)?e:!0,r.fail=Wn(t)&&t,r.domain=Yn?gc.domain:void 0,i.state===Dg?i.reactions.add(r):mc(function(){Qg(r,i)}),r.promise}),Cg=function(){var s=new Qn,e=dc(s);this.promise=s,this.resolve=br(fc,e),this.reject=br(gr,e)},Ng.f=hc=function(s){return s===Oi||s===EL?new Cg(s):yL(s)},!oL&&Wn(Kn)&&mr!==Object.prototype)){Vg=mr.then,SL||$g(mr,"then",function(e,t){var i=this;return new Oi(function(r,a){Sr(Vg,i,r,a)}).then(e,t)},{unsafe:!0});try{delete mr.constructor}catch{}Bg&&Bg(mr,Gn)}nL({global:!0,constructor:!0,wrap:!0,forced:Ug},{Promise:Oi});uL(Oi,Xn,!1,!0);lL(Xn)});var tS=m((jF,eS)=>{"use strict";var AL=Be(),Jg=AL("iterator"),Zg=!1;try{Xg=0,vc={next:function(){return{done:!!Xg++}},return:function(){Zg=!0}},vc[Jg]=function(){return this},Array.from(vc,function(){throw 2})}catch{}var Xg,vc;eS.exports=function(s,e){try{if(!e&&!Zg)return!1}catch{return!1}var t=!1;try{var i={};i[Jg]=function(){return{next:function(){return{done:t=!0}}}},s(i)}catch{}return t}});var yc=m((zF,iS)=>{"use strict";var kL=Vi(),RL=tS(),LL=hr().CONSTRUCTOR;iS.exports=LL||!RL(function(s){kL.all(s).then(void 0,function(){})})});var rS=m(()=>{"use strict";var ML=Ie(),$L=pt(),BL=Dt(),DL=fr(),CL=zn(),VL=Fn(),OL=yc();ML({target:"Promise",stat:!0,forced:OL},{all:function(e){var t=this,i=DL.f(t),r=i.resolve,a=i.reject,n=CL(function(){var o=BL(t.resolve),u=[],l=0,p=1;VL(e,function(c){var d=l++,h=!1;p++,$L(o,t,c).then(function(f){h||(h=!0,u[d]=f,--p||r(u))},a)}),--p||r(u)});return n.error&&a(n.value),i.promise}})});var aS=m(()=>{"use strict";var _L=Ie(),FL=Pt(),NL=hr().CONSTRUCTOR,Ic=Vi(),UL=Jt(),qL=me(),HL=cr(),sS=Ic&&Ic.prototype;_L({target:"Promise",proto:!0,forced:NL,real:!0},{catch:function(s){return this.then(void 0,s)}});!FL&&qL(Ic)&&(Tc=UL("Promise").prototype.catch,sS.catch!==Tc&&HL(sS,"catch",Tc,{unsafe:!0}));var Tc});var nS=m(()=>{"use strict";var jL=Ie(),zL=pt(),GL=Dt(),QL=fr(),WL=zn(),YL=Fn(),KL=yc();jL({target:"Promise",stat:!0,forced:KL},{race:function(e){var t=this,i=QL.f(t),r=i.reject,a=WL(function(){var n=GL(t.resolve);YL(e,function(o){zL(n,t,o).then(i.resolve,r)})});return a.error&&r(a.value),i.promise}})});var oS=m(()=>{"use strict";var XL=Ie(),JL=fr(),ZL=hr().CONSTRUCTOR;XL({target:"Promise",stat:!0,forced:ZL},{reject:function(e){var t=JL.f(this),i=t.reject;return i(e),t.promise}})});var xc=m((eN,uS)=>{"use strict";var eM=Ct(),tM=ht(),iM=fr();uS.exports=function(s,e){if(eM(s),tM(e)&&e.constructor===s)return e;var t=iM.f(s),i=t.resolve;return i(e),t.promise}});var dS=m(()=>{"use strict";var rM=Ie(),sM=Jt(),lS=Pt(),aM=Vi(),cS=hr().CONSTRUCTOR,nM=xc(),oM=sM("Promise"),uM=lS&&!cS;rM({target:"Promise",stat:!0,forced:lS||cS},{resolve:function(e){return nM(uM&&this===oM?aM:this,e)}})});var pS=m(()=>{"use strict";Kg();rS();aS();nS();oS();dS()});var bS=m(()=>{"use strict";var lM=Ie(),cM=Pt(),Jn=Vi(),dM=$e(),fS=Jt(),mS=me(),pM=Gl(),hS=xc(),hM=cr(),Pc=Jn&&Jn.prototype,fM=!!Jn&&dM(function(){Pc.finally.call({then:function(){}},function(){})});lM({target:"Promise",proto:!0,real:!0,forced:fM},{finally:function(s){var e=pM(this,fS("Promise")),t=mS(s);return this.then(t?function(i){return hS(e,s()).then(function(){return i})}:s,t?function(i){return hS(e,s()).then(function(){throw i})}:s)}});!cM&&mS(Jn)&&(Ec=fS("Promise").prototype.finally,Pc.finally!==Ec&&hM(Pc,"finally",Ec,{unsafe:!0}));var Ec});var SS=m((oN,gS)=>{"use strict";wb();pS();bS();var mM=di();gS.exports=mM("Promise","finally")});var yS=m((uN,vS)=>{"use strict";var bM=SS();vS.exports=bM});var Ts=m((lN,TS)=>{"use strict";var gM=yS();TS.exports=gM});var DS=m(()=>{"use strict";var MM=Ie(),$M=Sl().values;MM({target:"Object",stat:!0},{values:function(e){return $M(e)}})});var VS=m((QN,CS)=>{"use strict";DS();var BM=ir();CS.exports=BM.Object.values});var _S=m((WN,OS)=>{"use strict";var DM=VS();OS.exports=DM});var Ni=m((YN,FS)=>{"use strict";var CM=_S();FS.exports=CM});var iv=m(()=>{"use strict";var s$=Ie(),a$=rr(),n$=lr(),o$=os(),u$=us();s$({target:"Array",proto:!0},{at:function(e){var t=a$(this),i=n$(t),r=o$(e),a=r>=0?r:i+r;return a<0||a>=i?void 0:t[a]}});u$("at")});var sv=m((s1,rv)=>{"use strict";iv();var l$=di();rv.exports=l$("Array","at")});var nv=m((a1,av)=>{"use strict";var c$=sv();av.exports=c$});var kt=m((n1,ov)=>{"use strict";var d$=nv();ov.exports=d$});var Wc=m((zq,Nv)=>{"use strict";var z$=ki();Nv.exports=Array.isArray||function(e){return z$(e)==="Array"}});var qv=m((Gq,Uv)=>{"use strict";var G$=TypeError,Q$=9007199254740991;Uv.exports=function(s){if(s>Q$)throw G$("Maximum allowed index exceeded");return s}});var zv=m((Qq,jv)=>{"use strict";var W$=Wc(),Y$=lr(),K$=qv(),X$=ar(),Hv=function(s,e,t,i,r,a,n,o){for(var u=r,l=0,p=n?X$(n,o):!1,c,d;l<i;)l in t&&(c=p?p(t[l],l,e):t[l],a>0&&W$(c)?(d=Y$(c),u=Hv(s,e,c,d,u,a-1)-1):(K$(u+1),s[u]=c),u++),l++;return u};jv.exports=Hv});var Yv=m((Wq,Wv)=>{"use strict";var Gv=Wc(),J$=zl(),Z$=ht(),eB=Be(),tB=eB("species"),Qv=Array;Wv.exports=function(s){var e;return Gv(s)&&(e=s.constructor,J$(e)&&(e===Qv||Gv(e.prototype))?e=void 0:Z$(e)&&(e=e[tB],e===null&&(e=void 0))),e===void 0?Qv:e}});var Xv=m((Yq,Kv)=>{"use strict";var iB=Yv();Kv.exports=function(s,e){return new(iB(s))(e===0?0:e)}});var Jv=m(()=>{"use strict";var rB=Ie(),sB=zv(),aB=Dt(),nB=rr(),oB=lr(),uB=Xv();rB({target:"Array",proto:!0},{flatMap:function(e){var t=nB(this),i=oB(t),r;return aB(e),r=uB(t,0),r.length=sB(r,t,t,i,0,1,e,arguments.length>1?arguments[1]:void 0),r}})});var Zv=m(()=>{"use strict";var lB=us();lB("flatMap")});var ty=m((eH,ey)=>{"use strict";Jv();Zv();var cB=di();ey.exports=cB("Array","flatMap")});var ry=m((tH,iy)=>{"use strict";var dB=ty();iy.exports=dB});var Os=m((iH,sy)=>{"use strict";var pB=ry();sy.exports=pB});var _s=m((rH,ay)=>{"use strict";var hB=cs(),fB=String;ay.exports=function(s){if(hB(s)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return fB(s)}});var Yc=m((sH,ny)=>{"use strict";ny.exports=`
|
|
7
|
-
\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`});var ly=m((aH,uy)=>{"use strict";var mB=ke(),bB=ci(),gB=_s(),Xc=Yc(),oy=mB("".replace),SB=RegExp("^["+Xc+"]+"),vB=RegExp("(^|[^"+Xc+"])["+Xc+"]+$"),Kc=function(s){return function(e){var t=gB(bB(e));return s&1&&(t=oy(t,SB,"")),s&2&&(t=oy(t,vB,"$1")),t}};uy.exports={start:Kc(1),end:Kc(2),trim:Kc(3)}});var hy=m((nH,py)=>{"use strict";var yB=Pl().PROPER,TB=$e(),cy=Yc(),dy="\u200B\x85\u180E";py.exports=function(s){return TB(function(){return!!cy[s]()||dy[s]()!==dy||yB&&cy[s].name!==s})}});var Jc=m((oH,fy)=>{"use strict";var IB=ly().start,xB=hy();fy.exports=xB("trimStart")?function(){return IB(this)}:"".trimStart});var by=m(()=>{"use strict";var EB=Ie(),my=Jc();EB({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==my},{trimLeft:my})});var Sy=m(()=>{"use strict";by();var PB=Ie(),gy=Jc();PB({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==gy},{trimStart:gy})});var yy=m((pH,vy)=>{"use strict";Sy();var wB=di();vy.exports=wB("String","trimLeft")});var Iy=m((hH,Ty)=>{"use strict";var AB=yy();Ty.exports=AB});var Ey=m((fH,xy)=>{"use strict";var kB=Iy();xy.exports=kB});var Fy=m(()=>{"use strict"});var Ny=m(()=>{"use strict"});var qy=m((W2,Uy)=>{"use strict";var XB=ht(),JB=ki(),ZB=Be(),eD=ZB("match");Uy.exports=function(s){var e;return XB(s)&&((e=s[eD])!==void 0?!!e:JB(s)==="RegExp")}});var jy=m((Y2,Hy)=>{"use strict";var tD=Ct();Hy.exports=function(){var s=tD(this),e="";return s.hasIndices&&(e+="d"),s.global&&(e+="g"),s.ignoreCase&&(e+="i"),s.multiline&&(e+="m"),s.dotAll&&(e+="s"),s.unicode&&(e+="u"),s.unicodeSets&&(e+="v"),s.sticky&&(e+="y"),e}});var Qy=m((K2,Gy)=>{"use strict";var iD=pt(),rD=wt(),sD=ts(),aD=jy(),zy=RegExp.prototype;Gy.exports=function(s){var e=s.flags;return e===void 0&&!("flags"in zy)&&!rD(s,"flags")&&sD(zy,s)?iD(aD,s):e}});var Yy=m((X2,Wy)=>{"use strict";var sd=ke(),nD=rr(),oD=Math.floor,id=sd("".charAt),uD=sd("".replace),rd=sd("".slice),lD=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,cD=/\$([$&'`]|\d{1,2})/g;Wy.exports=function(s,e,t,i,r,a){var n=t+s.length,o=i.length,u=cD;return r!==void 0&&(r=nD(r),u=lD),uD(a,u,function(l,p){var c;switch(id(p,0)){case"$":return"$";case"&":return s;case"`":return rd(e,0,t);case"'":return rd(e,n);case"<":c=r[rd(p,1,-1)];break;default:var d=+p;if(d===0)return l;if(d>o){var h=oD(d/10);return h===0?l:h<=o?i[h-1]===void 0?id(p,1):i[h-1]+id(p,1):l}c=i[d-1]}return c===void 0?"":c})}});var Jy=m(()=>{"use strict";var dD=Ie(),pD=pt(),nd=ke(),Ky=ci(),hD=me(),fD=tr(),mD=qy(),$r=_s(),bD=rs(),gD=Qy(),SD=Yy(),vD=Be(),yD=Pt(),TD=vD("replace"),ID=TypeError,ad=nd("".indexOf),xD=nd("".replace),Xy=nd("".slice),ED=Math.max;dD({target:"String",proto:!0},{replaceAll:function(e,t){var i=Ky(this),r,a,n,o,u,l,p,c,d,h,f=0,b="";if(!fD(e)){if(r=mD(e),r&&(a=$r(Ky(gD(e))),!~ad(a,"g")))throw new ID("`.replaceAll` does not allow non-global regexes");if(n=bD(e,TD),n)return pD(n,e,i,t);if(yD&&r)return xD($r(i),e,t)}for(o=$r(i),u=$r(e),l=hD(t),l||(t=$r(t)),p=u.length,c=ED(1,p),d=ad(o,u);d!==-1;)h=l?$r(t(u,d,o)):SD(u,o,d,[],void 0,t),b+=Xy(o,f,d)+h,f=d+p,d=d+c>o.length?-1:ad(o,u,d+c);return f<o.length&&(b+=Xy(o,f)),b}})});var eT=m((e3,Zy)=>{"use strict";Fy();Ny();Jy();var PD=di();Zy.exports=PD("String","replaceAll")});var iT=m((t3,tT)=>{"use strict";var wD=eT();tT.exports=wD});var od=m((i3,rT)=>{"use strict";var AD=iT();rT.exports=AD});var aT=m((r3,sT)=>{"use strict";var kD=os(),RD=_s(),LD=ci(),MD=RangeError;sT.exports=function(e){var t=RD(LD(this)),i="",r=kD(e);if(r<0||r===1/0)throw new MD("Wrong number of repetitions");for(;r>0;(r>>>=1)&&(t+=t))r&1&&(i+=t);return i}});var cT=m((s3,lT)=>{"use strict";var uT=ke(),$D=cl(),nT=_s(),BD=aT(),DD=ci(),CD=uT(BD),VD=uT("".slice),OD=Math.ceil,oT=function(s){return function(e,t,i){var r=nT(DD(e)),a=$D(t),n=r.length,o=i===void 0?" ":nT(i),u,l;return a<=n||o===""?r:(u=a-n,l=CD(o,OD(u/o.length)),l.length>u&&(l=VD(l,0,u)),s?r+l:l+r)}};lT.exports={start:oT(!1),end:oT(!0)}});var pT=m((a3,dT)=>{"use strict";var _D=Li();dT.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(_D)});var hT=m(()=>{"use strict";var FD=Ie(),ND=cT().start,UD=pT();FD({target:"String",proto:!0,forced:UD},{padStart:function(e){return ND(this,e,arguments.length>1?arguments[1]:void 0)}})});var mT=m((u3,fT)=>{"use strict";hT();var qD=di();fT.exports=qD("String","padStart")});var gT=m((l3,bT)=>{"use strict";var HD=mT();bT.exports=HD});var ud=m((c3,ST)=>{"use strict";var jD=gT();ST.exports=jD});var Rp="2.0.134-dev.464b6f35.0";var Xe=(r=>(r.STOPPED="stopped",r.READY="ready",r.PLAYING="playing",r.PAUSED="paused",r))(Xe||{}),Xt=(y=>(y.MPEG="MPEG",y.DASH="DASH",y.DASH_SEP="DASH_SEP",y.DASH_SEP_VK="DASH_SEP",y.DASH_WEBM="DASH_WEBM",y.DASH_WEBM_AV1="DASH_WEBM_AV1",y.DASH_STREAMS="DASH_STREAMS",y.DASH_WEBM_VK="DASH_WEBM",y.DASH_ONDEMAND="DASH_ONDEMAND",y.DASH_ONDEMAND_VK="DASH_ONDEMAND",y.DASH_LIVE="DASH_LIVE",y.DASH_LIVE_CMAF="DASH_LIVE_CMAF",y.DASH_LIVE_WEBM="DASH_LIVE_WEBM",y.HLS="HLS",y.HLS_ONDEMAND="HLS_ONDEMAND",y.HLS_JS="HLS",y.HLS_LIVE="HLS_LIVE",y.HLS_LIVE_CMAF="HLS_LIVE_CMAF",y.WEB_RTC_LIVE="WEB_RTC_LIVE",y))(Xt||{});var Sn=(r=>(r.NOT_AVAILABLE="NOT_AVAILABLE",r.AVAILABLE="AVAILABLE",r.CONNECTING="CONNECTING",r.CONNECTED="CONNECTED",r))(Sn||{}),Bu=(i=>(i.HTTP1="http1",i.HTTP2="http2",i.QUIC="quic",i))(Bu||{});var Du=(n=>(n.NONE="none",n.INLINE="inline",n.FULLSCREEN="fullscreen",n.SECOND_SCREEN="second_screen",n.PIP="pip",n.INVISIBLE="invisible",n))(Du||{}),vn=(i=>(i.TRAFFIC_SAVING="traffic_saving",i.HIGH_QUALITY="high_quality",i.UNKNOWN="unknown",i))(vn||{});var Lx=C(ft(),1);import{assertNever as kf,assertNonNullable as sw,isNonNullable as En,ValueSubject as pl,Subject as aw,Subscription as nw,merge as ow,observableFrom as uw,fromEvent as Ef,map as Pf,tap as wf,filterChanged as lw,isNullable as hl,ErrorCategory as Af}from"@vkontakte/videoplayer-shared";var xf=s=>new Promise((e,t)=>{let i=document.createElement("script");i.setAttribute("src",s),i.onload=()=>e(),i.onerror=r=>t(r),document.body.appendChild(i)});var Pn=class{constructor(e){this.connection$=new pl(void 0);this.castState$=new pl("NOT_AVAILABLE");this.errorEvent$=new aw;this.realCastState$=new pl("NOT_AVAILABLE");this.subscription=new nw;this.isDestroyed=!1;this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");let t="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${t}`}),e.isDisabled||!t)return;let i=En(window.chrome?.cast),r=!!window.__onGCastApiAvailable;i?this.initializeCastApi():(window.__onGCastApiAvailable=a=>{delete window.__onGCastApiAvailable,a&&!this.isDestroyed&&this.initializeCastApi()},r||xf("https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1").catch(()=>this.errorEvent$.next({id:"ChromecastLoading",category:Af.NETWORK,message:"Script loading failed!"})))}connect(){cast.framework.CastContext.getInstance()?.requestSession()}disconnect(){cast.framework.CastContext.getInstance()?.getCurrentSession()?.endSession(!0)}stopMedia(){return new Promise((e,t)=>{cast.framework.CastContext.getInstance()?.getCurrentSession()?.getMediaSession()?.stop(new chrome.cast.media.StopRequest,e,t)})}toggleConnection(){En(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(e){let t=this.connection$.getValue();hl(t)||(t.remotePlayer.volumeLevel=e,t.remotePlayerController.setVolumeLevel())}setMuted(e){let t=this.connection$.getValue();hl(t)||e!==t.remotePlayer.isMuted&&t.remotePlayerController.muteOrUnmute()}destroy(){this.isDestroyed=!0,this.subscription.unsubscribe()}initListeners(){let e=new cast.framework.RemotePlayer,t=new cast.framework.RemotePlayerController(e),i=cast.framework.CastContext.getInstance();this.subscription.add(Ef(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe(r=>{switch(r.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=i.getCurrentSession()?.getMediaSession()?.media?.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return kf(r.sessionState)}})).add(ow(Ef(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(wf(r=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(r)}`})}),Pf(r=>r.castState)),uw([i.getCastState()])).pipe(lw(),Pf(cw),wf(r=>{this.log({message:`realCastState$: ${r}`})})).subscribe(this.realCastState$)).add(this.realCastState$.subscribe(r=>{let a=r==="CONNECTED",n=En(this.connection$.getValue());if(a&&!n){let o=i.getCurrentSession();sw(o);let u=o.getCastDevice(),l=o.getMediaSession()?.media?.contentId;(hl(l)||l===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:e,remotePlayerController:t,session:o,castDevice:u}))}else!a&&n&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r==="CONNECTED"?En(this.connection$.getValue())?"CONNECTED":"AVAILABLE":r)}))}initializeCastApi(){let e,t,i;try{e=cast.framework.CastContext.getInstance(),t=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,i=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch{return}try{e.setOptions({receiverApplicationId:this.params.receiverApplicationId??t,autoJoinPolicy:i}),this.initListeners()}catch(r){this.errorEvent$.next({id:"ChromecastInitializer",category:Af.EXTERNAL_API,message:"[initializeCastApi] failed",thrown:r})}}},cw=s=>{switch(s){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return"NOT_AVAILABLE";case cast.framework.CastState.NOT_CONNECTED:return"AVAILABLE";case cast.framework.CastState.CONNECTING:return"CONNECTING";case cast.framework.CastState.CONNECTED:return"CONNECTED";default:return kf(s)}};var yp=C(ft(),1),dx=C($i(),1),px=C(Nl(),1);var MS=C(Ts(),1);import{assertNever as IS}from"@vkontakte/videoplayer-shared";var be=(s,e=0,t=0)=>{switch(t){case 0:return s.replace("_offset_p",e===0?"":"_"+e.toFixed(0));case 1:{if(e===0)return s;let i=new URL(s);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}case 2:{let i=new URL(s);return!i.searchParams.get("offset_p")&&e===0?s:(i.searchParams.set("offset_p",e.toFixed(0)),i.toString())}default:IS(t)}return s},hi=(s,e)=>{switch(e){case 0:return NaN;case 1:{let t=new URL(s);return Number(t.searchParams.get("playback_shift"))}case 2:{let t=new URL(s);return Number(t.searchParams.get("offset_p")??0)}default:IS(e)}};var k=(s,e,t=!1)=>{let i=s.getTransition();(t||!i||i.to===e)&&s.setState(e)};import{isNonNullable as SM,Subject as Zn,merge as xS}from"@vkontakte/videoplayer-shared";var N=class{constructor(e){this.transitionStarted$=new Zn;this.transitionEnded$=new Zn;this.transitionUpdated$=new Zn;this.forceChanged$=new Zn;this.stateChangeStarted$=xS(this.transitionStarted$,this.transitionUpdated$);this.stateChangeEnded$=xS(this.transitionEnded$,this.forceChanged$);this.state=e,this.prevState=void 0}setState(e){let t=this.transition,i=this.state;this.transition=void 0,this.prevState=i,this.state=e,t?t.to===e?this.transitionEnded$.next(t):this.forceChanged$.next({from:t.from,to:e,canceledTransition:t}):this.forceChanged$.next({from:i,to:e,canceledTransition:t})}startTransitionTo(e){let t=this.transition,i=this.state;i===e||SM(t)&&t.to===e||(this.prevState=i,this.state=e,t?(this.transition={from:t.from,to:e,canceledTransition:t},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:e},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}getPrevState(){return this.prevState}};import{assertNever as vM}from"@vkontakte/videoplayer-shared";var ES=s=>{switch(s){case"MPEG":case"DASH":case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":case"HLS":case"HLS_ONDEMAND":return!1;case"DASH_LIVE":case"DASH_LIVE_CMAF":case"HLS_LIVE":case"HLS_LIVE_CMAF":case"DASH_LIVE_WEBM":case"WEB_RTC_LIVE":return!0;default:return vM(s)}};import{assertNever as vr,assertNonNullable as _i,debounce as PS,ErrorCategory as wS,fromEvent as Fi,isNonNullable as AS,map as kS,merge as RS,observableFrom as yM,Subject as TM,Subscription as wc,timeout as IM,getHighestQuality as xM}from"@vkontakte/videoplayer-shared";var EM=5,PM=5,wM=500,LS=7e3,Is=class{constructor(e){this.subscription=new wc;this.loadMediaTimeoutSubscription=new wc;this.videoState=new N("stopped");this.syncPlayback=()=>{let e=this.videoState.getState(),t=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekState.getState();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(t)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekState: ${JSON.stringify(a)};`}),i==="stopped"){e!=="stopped"&&(this.videoState.startTransitionTo("stopped"),this.stop());return}if(!t){if(r?.to!=="paused"&&a.state==="requested"&&e!=="stopped"){this.seek(a.position/1e3);return}switch(i){case"ready":{switch(e){case"playing":case"paused":case"ready":break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}case"playing":{switch(e){case"playing":break;case"paused":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"ready":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}case"paused":{switch(e){case"playing":this.videoState.startTransitionTo("paused"),this.params.connection.remotePlayerController.playOrPause();break;case"paused":break;case"ready":this.videoState.startTransitionTo("paused"),this.videoState.setState("paused");break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}default:vr(i)}}};this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${e.format}`}),this.params.output.isLive$.next(ES(e.format)),this.params.output.isAudioAvailable$.next(!0),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});let t=this.params.connection.session.getMediaSession();t&&this.restoreSession(t),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);let e=new wc;this.subscription.add(e),this.subscription.add(RS(this.videoState.stateChangeStarted$.pipe(kS(r=>`stateChangeStarted$ ${JSON.stringify(r)}`)),this.videoState.stateChangeEnded$.pipe(kS(r=>`stateChangeEnded$ ${JSON.stringify(r)}`))).subscribe(r=>this.log({message:`[videoState] ${r}`})));let t=(r,a)=>this.subscription.add(r.subscribe(a));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{let r=new TM;e.add(r.pipe(PS(wM)).subscribe(()=>{this.params.output.seekedEvent$.next()}));let a=NaN;e.add(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe(n=>{this.logRemoteEvent(n);let o=n.value;this.params.output.position$.next(o),(this.params.desiredState.seekState.getState().state==="applying"||Math.abs(o-a)>EM)&&r.next(o),a=o})),e.add(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe(n=>{this.logRemoteEvent(n),this.params.output.duration$.next(n.value)}))}t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemoteReady():(this.handleRemoteStop(),e.unsubscribe())}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemotePause():this.handleRemotePlay()}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),r=>{this.logRemoteEvent(r);let{remotePlayer:a}=this.params.connection,n=r.value,o=this.params.output.isBuffering$.getValue(),u=n===chrome.cast.media.PlayerState.BUFFERING;switch(o!==u&&this.params.output.isBuffering$.next(u),n){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&a.duration-a.currentTime<PM&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),k(this.params.desiredState.playbackState,"stopped");break;case chrome.cast.media.PlayerState.PAUSED:{this.handleRemotePause();break}case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:vr(n)}}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({volume:r.value})}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({muted:r.value})});let i=RS(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekState.stateChangeEnded$,this.videoState.stateChangeEnded$,yM(["init"])).pipe(PS(0));t(i,this.syncPlayback)}restoreSession(e){this.log({message:"restoreSession"});let{remotePlayer:t}=this.params.connection;if(e.playerState!==chrome.cast.media.PlayerState.IDLE){t.isPaused?(this.videoState.setState("paused"),k(this.params.desiredState.playbackState,"paused")):(this.videoState.setState("playing"),k(this.params.desiredState.playbackState,"playing"));let i=this.params.output.isLive$.getValue();this.params.output.duration$.next(i?0:t.duration),this.params.output.position$.next(i?0:t.currentTime),this.params.desiredState.seekState.setState({state:"none"})}}prepare(){let e=this.params.format;this.log({message:`[prepare] format: ${e}`});let t=this.createMediaInfo(e),i=this.createLoadRequest(t);this.loadMedia(i)}handleRemotePause(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="paused"||e==="playing")&&(this.videoState.setState("paused"),k(this.params.desiredState.playbackState,"paused"))}handleRemotePlay(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="playing"||e==="paused")&&(this.videoState.setState("playing"),k(this.params.desiredState.playbackState,"playing"))}handleRemoteReady(){this.videoState.getTransition()?.to==="ready"&&this.videoState.setState("ready"),this.params.desiredState.playbackState.getTransition()?.to==="ready"&&k(this.params.desiredState.playbackState,"ready")}handleRemoteStop(){this.videoState.getState()!=="stopped"&&this.videoState.setState("stopped")}handleRemoteVolumeChange(e){let t=this.params.output.volume$.getValue(),i={volume:e.volume??t.volume,muted:e.muted??t.muted};(i.volume!==t.volume||i.muted!==i.muted)&&this.params.output.volume$.next(i)}seek(e){this.params.output.willSeekEvent$.next();let{remotePlayer:t,remotePlayerController:i}=this.params.connection;t.currentTime=e,i.seek()}stop(){let{remotePlayerController:e}=this.params.connection;e.stop()}createMediaInfo(e){let t=this.params.source,i,r,a;switch(e){case"MPEG":{let l=t[e];_i(l);let p=xM(Object.keys(l));_i(p);let c=l[p];_i(c),i=c,r="video/mp4",a=chrome.cast.media.StreamType.BUFFERED;break}case"HLS":case"HLS_ONDEMAND":{let l=t[e];_i(l),i=l.url,r="application/x-mpegurl",a=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":{let l=t[e];_i(l),i=l.url,r="application/dash+xml",a=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_LIVE_CMAF":{let l=t[e];_i(l),i=l.url,r="application/dash+xml",a=chrome.cast.media.StreamType.LIVE;break}case"HLS_LIVE":case"HLS_LIVE_CMAF":{let l=t[e];_i(l),i=be(l.url),r="application/x-mpegurl",a=chrome.cast.media.StreamType.LIVE;break}case"DASH_LIVE":case"WEB_RTC_LIVE":{let l="Unsupported format for Chromecast",p=new Error(l);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",category:wS.VIDEO_PIPELINE,message:l,thrown:p}),p}case"DASH":case"DASH_LIVE_WEBM":throw new Error(`${e} is no longer supported`);default:return vr(e)}let n=new chrome.cast.media.MediaInfo(this.params.meta.videoId??i,r);n.contentUrl=i,n.streamType=a,n.metadata=new chrome.cast.media.GenericMediaMetadata;let{title:o,subtitle:u}=this.params.meta;return AS(o)&&(n.metadata.title=o),AS(u)&&(n.metadata.subtitle=u),n}createLoadRequest(e){let t=new chrome.cast.media.LoadRequest(e);t.autoplay=!1;let i=this.params.desiredState.seekState.getState();return i.state==="applying"||i.state==="requested"?t.currentTime=this.params.output.isLive$.getValue()?0:i.position/1e3:t.currentTime=0,t}loadMedia(e){let t=this.params.connection.session.loadMedia(e),i=new Promise((r,a)=>{this.loadMediaTimeoutSubscription.add(IM(LS).subscribe(()=>a(`timeout(${LS})`)))});(0,MS.default)(Promise.race([t,i]).then(()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`}),this.params.desiredState.seekState.getState().state==="applying"&&this.params.output.seekedEvent$.next(),this.handleRemoteReady()},r=>{let a=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${r}`;this.log({message:a}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",category:wS.VIDEO_PIPELINE,message:a,thrown:r})}),()=>{this.loadMediaTimeoutSubscription.unsubscribe()})}logRemoteEvent(e){this.log({message:`[remoteEvent] ${JSON.stringify(e)}`})}};var Gc=C(ft(),1);import{clearVideoElement as BS}from"@vkontakte/videoplayer-shared";import{clearVideoElement as AM}from"@vkontakte/videoplayer-shared";var $S=s=>{try{s.pause(),s.playbackRate=0,AM(s),s.remove()}catch(e){console.error(e)}};import{fromEvent as kM,Subscription as RM}from"@vkontakte/videoplayer-shared";var Ac=class{constructor(){this.attribute="data-pool-reused"}get(e){return e.hasAttribute(this.attribute)}set(e,t){e.toggleAttribute(this.attribute,t)}delete(e){e.removeAttribute(this.attribute)}},kc=window.WeakMap?new WeakMap:new Ac,Rc=window.WeakMap?new WeakMap:new Map,LM=(s,e=20)=>{let t=0;return kM(s,"ratechange").subscribe(i=>{t++,t>=e&&(s.currentTime=s.currentTime,t=0)})},De=(s,{audioVideoSyncRate:e,disableYandexPiP:t})=>{let i=s.querySelector("video"),r=!!i;i?BS(i):(i=document.createElement("video"),s.appendChild(i)),kc.set(i,r);let a=new RM;return a.add(LM(i,e)),Rc.set(i,a),i.setAttribute("crossorigin","anonymous"),i.setAttribute("playsinline","playsinline"),t&&i.setAttribute("x-yandex-pip","false"),i.controls=!1,i.setAttribute("poster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),i},Ce=s=>{Rc.get(s)?.unsubscribe(),Rc.delete(s);let t=kc.get(s);kc.delete(s),t?BS(s):$S(s)};var Mc=C(Ni(),1);import{assertNonNullable as xs,isNonNullable as Ot,isNullable as _M,fromEvent as yr,merge as NS,observableFrom as US,filterChanged as qS,map as Es,Subject as HS,Subscription as FM,ValueSubject as NM,ErrorCategory as UM}from"@vkontakte/videoplayer-shared";import{isNonNullable as Lc,isNullable as VM,Subscription as OM}from"@vkontakte/videoplayer-shared";var eo=(s,e,t,{equal:i=(n,o)=>n===o,changed$:r,onError:a}={})=>{let n=s.getState(),o=e(),u=VM(r),l=new OM;return r&&l.add(r.subscribe(p=>{let c=s.getState();i(p,c)&&s.setState(p)},a)),i(o,n)||(t(n),u&&s.setState(n)),l.add(s.stateChangeStarted$.subscribe(p=>{t(p.to),u&&s.setState(p.to)},a)),l},St=(s,e,t)=>eo(e,()=>s.loop,i=>{Lc(i)&&(s.loop=i)},{onError:t}),Ve=(s,e,t,i)=>eo(e,()=>({muted:s.muted,volume:s.volume}),r=>{Lc(r)&&(s.muted=r.muted,s.volume=r.volume)},{equal:(r,a)=>r===a||r?.muted===a?.muted&&r?.volume===a?.volume,changed$:t,onError:i}),Je=(s,e,t,i)=>eo(e,()=>s.playbackRate,r=>{Lc(r)&&(s.playbackRate=r)},{changed$:t,onError:i}),fi=eo;var qM=s=>["__",s.language,s.label].join("|"),HM=(s,e)=>{if(s.id===e)return!0;let[t,i,r]=e.split("|");return s.language===i&&s.label===r},$c=class s{constructor(e){this.available$=new HS;this.current$=new NM(void 0);this.error$=new HS;this.subscription=new FM;this.externalTracks=new Map;this.internalTracks=new Map;this.baseURL=e}connect(e,t,i){this.video=e,this.cueSettings=t.textTrackCuesSettings,this.subscribe();let r=a=>{this.error$.next({id:"TextTracksManager",category:UM.WTF,message:"Generic HtmlVideoTextTrackManager error",thrown:a})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(fi(t.internalTextTracks,()=>(0,Mc.default)(this.internalTracks),a=>{Ot(a)&&this.setInternal(a)},{equal:(a,n)=>Ot(a)&&Ot(n)&&a.length===n.length&&a.every(({id:o},u)=>o===n[u].id),changed$:this.available$.pipe(Es(a=>a.filter(({type:n})=>n==="internal"))),onError:r})),this.subscription.add(fi(t.externalTextTracks,()=>(0,Mc.default)(this.externalTracks),a=>{Ot(a)&&this.setExternal(a)},{equal:(a,n)=>Ot(a)&&Ot(n)&&a.length===n.length&&a.every(({id:o},u)=>o===n[u].id),changed$:this.available$.pipe(Es(a=>a.filter(({type:n})=>n==="external"))),onError:r})),this.subscription.add(fi(t.currentTextTrack,()=>{if(this.video)return;let a=this.htmlTextTracksAsArray().find(({mode:n})=>n==="showing");return a&&this.htmlTextTrackToITextTrack(a).id},a=>this.select(a),{changed$:this.current$,onError:r})),this.subscription.add(fi(t.textTrackCuesSettings,()=>({}),()=>{if(this.video)for(let a of this.htmlTextTracksAsArray())this.applyCueSettings(a.cues),this.applyCueSettings(a.activeCues)}))}subscribe(){xs(this.video);let{textTracks:e}=this.video;this.subscription.add(yr(e,"addtrack").subscribe(()=>{let i=this.current$.getValue();i&&this.select(i)})),this.subscription.add(NS(yr(e,"addtrack"),yr(e,"removetrack"),US(["init"])).pipe(Es(()=>this.htmlTextTracksAsArray().map(i=>this.htmlTextTrackToITextTrack(i))),qS((i,r)=>i.length===r.length&&i.every(({id:a},n)=>a===r[n].id))).subscribe(this.available$)),this.subscription.add(NS(yr(e,"change"),US(["init"])).pipe(Es(()=>this.htmlTextTracksAsArray().find(({mode:i})=>i==="showing")),Es(i=>i&&this.htmlTextTrackToITextTrack(i).id),qS()).subscribe(this.current$));let t=i=>this.applyCueSettings(i.target?.activeCues??null);this.subscription.add(yr(e,"addtrack").subscribe(i=>{i.track?.addEventListener("cuechange",t);let r=a=>{let n=a.target?.cues??null;n&&n.length&&(this.applyCueSettings(a.target?.cues??null),a.target?.removeEventListener("cuechange",r))};i.track?.addEventListener("cuechange",r)})),this.subscription.add(yr(e,"removetrack").subscribe(i=>{i.track?.removeEventListener("cuechange",t)}))}applyCueSettings(e){if(!e||!e.length)return;let t=this.cueSettings.getState();for(let i of Array.from(e)){let r=i;Ot(t.align)&&(r.align=t.align),Ot(t.position)&&(r.position=t.position),Ot(t.size)&&(r.size=t.size),Ot(t.line)&&(r.line=t.line)}}htmlTextTracksAsArray(e=!1){xs(this.video);let t=[...this.video.textTracks];return e?t:t.filter(s.isHealthyTrack)}htmlTextTrackToITextTrack(e){let{language:t,label:i}=e,r=e.id?e.id:qM(e),a=this.externalTracks.has(r),n=(a?this.externalTracks.get(r)?.isAuto:this.internalTracks.get(r)?.isAuto)??r.includes("auto");return a?{id:r,type:"external",isAuto:n,language:t,label:i,url:this.externalTracks.get(r)?.url}:{id:r,type:"internal",isAuto:n,language:t,label:i,url:this.internalTracks.get(r)?.url}}static isHealthyTrack(e){return!(e.kind==="metadata"||e.groupId||e.id===""&&e.label===""&&e.language==="")}setExternal(e){this.internalTracks.size>0&&Array.from(this.internalTracks).forEach(([,t])=>this.detach(t)),e.filter(({id:t})=>!this.externalTracks.has(t)).forEach(t=>this.attach(t)),Array.from(this.externalTracks).filter(([t])=>!e.find(i=>i.id===t)).forEach(([,t])=>this.detach(t))}setInternal(e){let t=[...this.externalTracks];e.filter(({id:i,language:r,isAuto:a})=>!this.internalTracks.has(i)&&!t.some(([,n])=>n.language===r&&n.isAuto===a)).forEach(i=>this.attach(i)),Array.from(this.internalTracks).filter(([i])=>!e.find(r=>r.id===i)).forEach(([,i])=>this.detach(i))}select(e){xs(this.video);for(let t of this.htmlTextTracksAsArray(!0))t.mode="showing";for(let t of this.htmlTextTracksAsArray(!0))(_M(e)||!HM(t,e))&&(t.mode="disabled")}destroy(){if(this.subscription.unsubscribe(),this.video)for(let e of Array.from(this.video.getElementsByTagName("track"))){let t=e.getAttribute("id");t&&this.externalTracks.has(t)&&this.video.removeChild(e)}this.externalTracks.clear()}attach(e){xs(this.video);let t=document.createElement("track");this.baseURL?t.setAttribute("src",new URL(e.url,this.baseURL).toString()):t.setAttribute("src",e.url),t.setAttribute("id",e.id),e.label&&t.setAttribute("label",e.label),e.language&&t.setAttribute("srclang",e.language),e.type==="external"?this.externalTracks.set(e.id,e):e.type==="internal"&&this.internalTracks.set(e.id,e),this.video.appendChild(t)}detach(e){xs(this.video);let t=Array.prototype.find.call(this.video.getElementsByTagName("track"),i=>i.getAttribute("id")===e.id);t&&this.video.removeChild(t),e.type==="external"?this.externalTracks.delete(e.id):e.type==="internal"&&this.internalTracks.delete(e.id)}},Ze=$c;var Ui=class{constructor(){this.pausedTime=0;this.streamOffset=0;this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){this.pauseTimestamp===0&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(e,t=!1){this.streamOffset=e,this.pauseTimestamp=0,this.pausedTime=0,t&&this.pause()}};var jS=s=>{let e=s;for(;!(e instanceof Document)&&!(e instanceof ShadowRoot)&&e!==null;)e=e?.parentNode;return e??void 0},Bc=s=>{let e=jS(s);return!!(e&&e.fullscreenElement&&e.fullscreenElement===s)},zS=s=>{let e=jS(s);return!!(e&&e.pictureInPictureElement&&e.pictureInPictureElement===s)};import{fromEvent as Ge,map as _t,merge as oo,filterChanged as ZS,isNonNullable as ev,Subject as JM,filter as Cc,mapTo as Vc,combine as ZM,once as e$,throttle as t$,ErrorCategory as i$,ValueSubject as tv,Subscription as r$}from"@vkontakte/videoplayer-shared";var jM=3,GS=(s,e,t=jM)=>{let i=0,r=0;for(let a=0;a<s.length;a++){let n=s.start(a),o=s.end(a);if(n<=e&&e<=o){if(i=n,r=o,!t)return{from:i,to:r};for(let u=a-1;u>=0;u--)s.end(u)+t>=i&&(i=s.start(u));for(let u=a+1;u<s.length;u++)s.start(u)-t<=r&&(r=s.end(u))}}return{from:i,to:r}};var to=class{constructor(){this._isMiuiBrowser=!1}get current(){return this._current}get isYandex(){return this.current==="Yandex"}get isSafari(){return this.current==="Safari"}get isFirefox(){return this.current==="Firefox"}get isSamsungBrowser(){return this.current==="SamsungBrowser"}get safariVersion(){return this._safariVersion}get isMiuiBrowser(){return this._isMiuiBrowser}detect(){let{userAgent:e}=navigator;try{let t=/yabrowser/i.test(e)?"Yandex":void 0,i=/samsungbrowser/i.test(e)?"SamsungBrowser":void 0,r=/chrome|crios/i.test(e)?"Chrome":void 0,a=/chromium/i.test(e)?"Chromium":void 0,n=/firefox|fxios/i.test(e)?"Firefox":void 0,o=/webkit|safari|khtml/i.test(e)?"Safari":void 0,u=/opr\//i.test(e)?"Opera":void 0,l=/edg/i.test(e)?"Edge":void 0;this._isMiuiBrowser=/(XiaoMi)|(MiuiBrowser)/i.test(e),this._current=t||i||n||u||l||r||a||o||"Rest"}catch(t){console.error(t)}this.isSafari&&this.detectSafariVersion()}detectSafariVersion(){try{let{userAgent:e}=window.navigator,t=e.match(/Version\/(\d+)/);if(!t)return;let i=t[1],r=parseInt(i,10);if(isNaN(r))return;this._safariVersion=r}catch(e){console.error(e)}}};var QS=C(ft(),1);var Ps=()=>/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion??navigator.userAgent)||navigator?.userAgentData?.mobile;var io=class{constructor(e){this._highEntropyValues={};this._displayChecker=e}get current(){return this._current}get isIOS(){let e=["iPhone","iPad","iPod"];return this._highEntropyValues.platform==="iOS"||(0,QS.default)(e,this.current)}get isMac(){return this._highEntropyValues.platform==="macOS"||this.current==="Mac"}get isApple(){return this.isIOS||this.isMac}get isIphoneOrOldIpad(){if(!this.isApple||!this._displayChecker.isTouch)return!1;let e=this.current==="iPad"||this._displayChecker.width>700,t=this._iosVersion;return!e||e&&!!t&&t<16}get isAndroid(){return this._highEntropyValues.platform==="Android"||this.current==="Android"}get isMobile(){return this._highEntropyValues.mobile||this._isMobile}get iOSVersion(){return this._iosVersion}detect(){let{userAgent:e}=navigator;try{this._isMobile=Ps()}catch(t){console.error(t)}this.detectDevice(e),this.detectHighEntropyValues(),this.isIOS&&this.detectIOSVersion()}async detectHighEntropyValues(){let{userAgentData:e}=navigator;if(e?.getHighEntropyValues){let t=await e.getHighEntropyValues(["architecture","bitness","brands","mobile","platform","formFactor","model","platformVersion","wow64"]);this._highEntropyValues=t}}detectDevice(e){try{let t=/android/i.test(e)?"Android":void 0,i=/iphone/i.test(e)?"iPhone":void 0,r=/ipad/i.test(e)?"iPad":void 0,a=/ipod/i.test(e)?"iPod":void 0,n=/mac/i.test(e)?"Mac":void 0,o=/webOS|BlackBerry|IEMobile|Opera Mini/i.test(e)?"RestMobile":void 0;this._current=t||i||r||a||o||n||"Desktop"}catch(t){console.error(t)}}detectIOSVersion(){try{if(this._highEntropyValues.platformVersion){let a=this._highEntropyValues.platformVersion.split(".").slice(0,2).join("."),n=parseFloat(a);this._iosVersion=n;return}let{userAgent:e}=window.navigator,t=e.match(/OS (\d+(_\d+)?)/i);if(!t)return;let i=t[1].replace(/_/g,".");if(!i)return;let r=parseFloat(i);if(isNaN(r))return;this._iosVersion=r}catch(e){console.error(e)}}};var ro=class{get isTouch(){return typeof this._maxTouchPoints=="number"?this._maxTouchPoints>1:"ontouchstart"in window}get maxTouchPoints(){return this._maxTouchPoints}get height(){return this._height}get width(){return this._width}get screenHeight(){return this._screenHeight}get screenWidth(){return this._screenWidth}get pixelRatio(){return this._pixelRatio}get isHDR(){return this._isHdr}get colorDepth(){return this._colorDepth}detect(){let{maxTouchPoints:e}=navigator;try{this._maxTouchPoints=e??0,this._isHdr=!!matchMedia("(dynamic-range: high)")?.matches,this._colorDepth=screen.colorDepth}catch(t){console.error(t)}try{this._pixelRatio=window.devicePixelRatio||1,this._height=screen.height,this._width=screen.width,this._height=screen.height,this._screenHeight=this._height*this._pixelRatio,this._screenWidth=this._width*this._pixelRatio}catch(t){console.error(t)}}};var bt=()=>window.ManagedMediaSource||window.MediaSource,Tr=()=>!!(window.ManagedMediaSource&&window.ManagedSourceBuffer?.prototype?.appendBuffer),WS=()=>!!(window.MediaSource&&window.SourceBuffer?.prototype?.appendBuffer),so=()=>window.ManagedMediaSource?new ManagedMediaSource:new MediaSource;var zM=document.createElement("video"),GM='video/mp4; codecs="avc1.42000a,mp4a.40.2"',QM='video/mp4; codecs="hev1.1.6.L93.B0"',YS='video/webm; codecs="vp09.00.10.08"',KS='video/webm; codecs="av01.0.00M.08"',WM='audio/mp4; codecs="mp4a.40.2"',YM='audio/webm; codecs="opus"',XS,KM=async()=>{if(!window.navigator.mediaCapabilities)return;let s={type:"media-source",video:{contentType:"video/webm",width:1280,height:720,bitrate:1e6,framerate:30}},[e,t]=await Promise.all([window.navigator.mediaCapabilities.decodingInfo({...s,video:{...s.video,contentType:KS}}),window.navigator.mediaCapabilities.decodingInfo({...s,video:{...s.video,contentType:YS}})]);XS={DASH_WEBM_AV1:e,DASH_WEBM:t}};KM().catch(s=>{console.log(zM),console.error(s)});var ao=class{constructor(e,t){this._deviceChecker=e,this._browserChecker=t}get protocols(){return this._protocols}get containers(){return this._containers}get codecs(){return this._codecs}get webmDecodingInfo(){return XS}get supportedCodecs(){return Object.keys(this._codecs).filter(e=>this._codecs[e])}get nativeHlsSupported(){return this._nativeHlsSupported}detect(){this._video=document.createElement("video");try{this._protocols={mms:Tr(),mse:WS(),hls:!!(this._video.canPlayType?.("application/x-mpegurl")||this._video.canPlayType?.("vnd.apple.mpegURL")),webrtc:!!window.RTCPeerConnection,ws:!!window.WebSocket},this._containers={mp4:!!this._video.canPlayType?.("video/mp4"),webm:!!this._video.canPlayType?.("video/webm"),cmaf:!0};let e=!!bt()?.isTypeSupported?.(GM),t=!!bt()?.isTypeSupported?.(QM),i=!!bt()?.isTypeSupported?.(WM);this._codecs={h264:e,h265:t,vp9:!!bt()?.isTypeSupported?.(YS),av1:!!bt()?.isTypeSupported?.(KS),aac:i,opus:!!bt()?.isTypeSupported?.(YM),mpeg:(e||t)&&i},this._nativeHlsSupported=this._protocols.hls&&this._containers.mp4}catch(e){console.error(e)}this.destroyVideoElement()}destroyVideoElement(){if(!this._video)return;if(this._video.pause(),this._video.currentTime=0,this._video.removeAttribute("src"),this._video.src="",this._video.load(),this._video.remove){this._video.remove(),this._video=null;return}this._video.parentNode&&this._video.parentNode.removeChild(this._video);let e=this._video.cloneNode(!1);this._video.parentNode?.replaceChild(e,this._video),this._video=null}};var JS="audio/mpeg",no=class{supportMp3(){return this._codecs.mp3&&this._containers.mpeg}detect(){this._audio=document.createElement("audio");try{this._containers={mpeg:!!this._audio.canPlayType?.(JS)},this._codecs={mp3:!!bt()?.isTypeSupported?.(JS)}}catch(e){console.error(e)}this.destroyAudioElement()}destroyAudioElement(){if(!this._audio)return;if(this._audio.pause(),this._audio.currentTime=0,this._audio.removeAttribute("src"),this._audio.src="",this._audio.load(),this._audio.remove){this._audio.remove(),this._audio=null;return}this._audio.parentNode&&this._audio.parentNode.removeChild(this._audio);let e=this._audio.cloneNode(!1);this._audio.parentNode?.replaceChild(e,this._audio),this._audio=null}};import{ValueSubject as XM}from"@vkontakte/videoplayer-shared";var Dc=class{constructor(){this.isInited$=new XM(!1);this._displayChecker=new ro,this._deviceChecker=new io(this._displayChecker),this._browserChecker=new to,this._videoChecker=new ao(this._deviceChecker,this._browserChecker),this._audioChecker=new no,this.detect()}get display(){return this._displayChecker}get device(){return this._deviceChecker}get browser(){return this._browserChecker}get video(){return this._videoChecker}get audio(){return this._audioChecker}async detect(){this._displayChecker.detect(),this._deviceChecker.detect(),this._browserChecker.detect(),this._videoChecker.detect(),this._audioChecker.detect(),this.isInited$.next(!0)}},_=new Dc;var Oe=s=>{let e=v=>Ge(s,v).pipe(Vc(void 0)),t=new r$,i=()=>t.unsubscribe(),r=oo(Ge(s,"progress"),Ge(s,"timeupdate")).pipe(_t(()=>GS(s.buffered,s.currentTime))),a=_.browser.isSafari?ZM({play:e("play").pipe(e$()),playing:e("playing")}).pipe(Vc(void 0)):e("playing"),n=Ge(s,"volumechange").pipe(_t(()=>({muted:s.muted,volume:s.volume}))),o=Ge(s,"ratechange").pipe(_t(()=>s.playbackRate)),u=Ge(s,"error").pipe(Cc(()=>!!(s.error||s.played.length)),_t(()=>{let v=s.error;return{id:v?`MediaError#${v.code}`:"HtmlVideoError",category:i$.VIDEO_PIPELINE,message:v?v.message:"Error event from HTML video element",thrown:s.error??void 0}})),l=Ge(s,"timeupdate").pipe(_t(()=>s.currentTime)),p=["waiting","seeking","seeked","timeupdate"],c=new JM,d=.3,h;t.add(oo(...p.map(v=>Ge(s,v))).subscribe(v=>{let D=s.currentTime;s.loop&&ev(h)&&ev(D)&&h>=s.duration-d&&D<=d&&c.next(h),h=D}));let f=e("pause").pipe(Cc(()=>!s.error&&h!==s.duration)),b=Ge(s,"enterpictureinpicture"),g=Ge(s,"leavepictureinpicture"),S=new tv(zS(s));t.add(b.subscribe(()=>S.next(!0))),t.add(g.subscribe(()=>S.next(!1)));let T=new tv(Bc(s)),y=Ge(s,"fullscreenchange");t.add(y.pipe(_t(()=>Bc(s))).subscribe(T));let E=.1,P=1e3,M=Ge(s,"timeupdate").pipe(_t(v=>s.duration-s.currentTime<E),ZS()),O=oo(M.pipe(Cc(v=>!s.loop&&v)),Ge(s,"ended")).pipe(t$(P),Vc(void 0)),A=oo(...["waiting","pause","canplay","play","canplaythrough","playing","seeking","seeked","ended"].map(v=>Ge(s,v)),M.pipe(_t(v=>({type:v?"ended":"unknown"})))).pipe(_t(v=>_.browser.isFirefox&&v.type==="ended"?s.readyState<2:s.readyState<3),ZS());return{playing$:a,pause$:f,canplay$:e("canplay"),ended$:O,looped$:c,error$:u,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadStart$:e("loadstart"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:l,durationChange$:Ge(s,"durationchange").pipe(_t(()=>s.duration)),isBuffering$:A,currentBuffer$:r,volumeState$:n,playbackRateState$:o,inPiP$:S,inFullscreen$:T,enterPip$:b,leavePip$:g,destroy:i}};import{VideoQuality as mi}from"@vkontakte/videoplayer-shared";var Ft=s=>{switch(s){case"mobile":return mi.Q_144P;case"lowest":return mi.Q_240P;case"low":return mi.Q_360P;case"sd":case"medium":return mi.Q_480P;case"hd":case"high":return mi.Q_720P;case"fullhd":case"full":return mi.Q_1080P;case"quadhd":case"quad":return mi.Q_1440P;case"ultrahd":case"ultra":return mi.Q_2160P}};var We=C(kt(),1),Fc=C(ft(),1),qi=C($i(),1);import{isNonNullable as X,isNullable as ho,now as gv,isHigher as fo,isHigherOrEqual as xr,isInvariantQuality as mo,isLowerOrEqual as Er,videoSizeToQuality as Sv,assertNotEmptyArray as bo,assertNonNullable as vv}from"@vkontakte/videoplayer-shared";var Oc=!1,ei={},uv=s=>{Oc=s},lv=()=>{ei={}},cv=s=>{s(ei)},ws=(s,e)=>{Oc&&(ei.meta=ei.meta??{},ei.meta[s]=e)},Qe=class{constructor(e){this.name=e}next(e){if(!Oc)return;ei.series=ei.series??{};let t=ei.series[this.name]??[];t.push([Date.now(),e]),ei.series[this.name]=t}};import{isHigher as p$,isHigherOrEqual as p1,isLower as dv,isLowerOrEqual as h1,isNonNullable as uo,isNullable as h$,videoHeightToQuality as lo}from"@vkontakte/videoplayer-shared";function _c(s,e,t){return!s.max&&s.min===e?"high_quality":!s.min&&s.max===t?"traffic_saving":"unknown"}function co(s,e,t){return!!s&&_c(s,e,t)==="high_quality"}function Ir(s,e,t){return h$(s)||uo(s.min)&&uo(s.max)&&dv(s.max,s.min)||uo(s.min)&&e&&p$(s.min,e)||uo(s.max)&&t&&dv(s.max,t)}function pv({limits:s,highestAvailableHeight:e,lowestAvailableHeight:t}){return Ir({max:s?.max?lo(s.max):void 0,min:s?.min?lo(s.min):void 0},e?lo(e):void 0,t?lo(t):void 0)}var yv=new Qe("best_bitrate"),go=(s,e,t)=>(e-t)*Math.pow(2,-10*s)+t;var Pr=s=>(e,t)=>s*(Number(e.bitrate)-Number(t.bitrate)),bi=class{constructor(){this.history={}}recordSelection(e){this.history[e.id]=gv()}recordSwitch(e){this.last=e}clear(){this.last=void 0,this.history={}}},So='Assertion "ABR Tracks is empty array" failed',po=new WeakMap,hv=new WeakMap,fv=new WeakMap,As=(s,e,t,i)=>{let r=[...e].sort(Pr(1)),a=[...t].sort(Pr(1)),n=a.filter(u=>X(u.bitrate)&&X(s.bitrate)?s.bitrate/u.bitrate>i:!0),o=(0,We.default)(a,Math.round(a.length*r.indexOf(s)/(r.length+1)))??(0,We.default)(a,-1);return o&&(0,Fc.default)(n,o)?o:n.length?(0,We.default)(n,-1):(0,We.default)(a,0)},ks=(s,e,t,i)=>{let r=po.get(e);r||(r=[...e].sort(Pr(1)),po.set(e,r));let a=po.get(t);a||(a=[...t].sort(Pr(1)),po.set(t,a));let n=fv.get(s);n||(n=a.filter(u=>X(u.bitrate)&&X(s.bitrate)?s.bitrate/u.bitrate>i:!0),fv.set(s,n));let o=(0,We.default)(a,Math.round(a.length*r.indexOf(s)/(r.length+1)))??(0,We.default)(a,-1);return o&&(0,Fc.default)(n,o)?o:n.length?(0,We.default)(n,-1):(0,We.default)(a,0)},mv=s=>"quality"in s,vo=(s,e,t,i)=>{let r=X(i?.last?.bitrate)&&X(t?.bitrate)&&i.last.bitrate<t.bitrate?s.trackCooldownIncreaseQuality:s.trackCooldownDecreaseQuality,a=t&&i&&i.history[t.id]&&gv()-i.history[t.id]<=r&&(!i.last||t.id!==i.last.id);if(t?.id&&i&&!a&&i.recordSelection(t),a&&i?.last){let n=i.last;i?.recordSwitch(n);let o=mv(n)?"video":"audio",u=mv(n)?n.quality:n.bitrate;return e({message:`
|
|
7
|
+
\v\f\r \xA0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF`});var ly=m((aH,uy)=>{"use strict";var mB=ke(),bB=ci(),gB=_s(),Xc=Yc(),oy=mB("".replace),SB=RegExp("^["+Xc+"]+"),vB=RegExp("(^|[^"+Xc+"])["+Xc+"]+$"),Kc=function(s){return function(e){var t=gB(bB(e));return s&1&&(t=oy(t,SB,"")),s&2&&(t=oy(t,vB,"$1")),t}};uy.exports={start:Kc(1),end:Kc(2),trim:Kc(3)}});var hy=m((nH,py)=>{"use strict";var yB=Pl().PROPER,TB=$e(),cy=Yc(),dy="\u200B\x85\u180E";py.exports=function(s){return TB(function(){return!!cy[s]()||dy[s]()!==dy||yB&&cy[s].name!==s})}});var Jc=m((oH,fy)=>{"use strict";var IB=ly().start,xB=hy();fy.exports=xB("trimStart")?function(){return IB(this)}:"".trimStart});var by=m(()=>{"use strict";var EB=Ie(),my=Jc();EB({target:"String",proto:!0,name:"trimStart",forced:"".trimLeft!==my},{trimLeft:my})});var Sy=m(()=>{"use strict";by();var PB=Ie(),gy=Jc();PB({target:"String",proto:!0,name:"trimStart",forced:"".trimStart!==gy},{trimStart:gy})});var yy=m((pH,vy)=>{"use strict";Sy();var wB=di();vy.exports=wB("String","trimLeft")});var Iy=m((hH,Ty)=>{"use strict";var AB=yy();Ty.exports=AB});var Ey=m((fH,xy)=>{"use strict";var kB=Iy();xy.exports=kB});var Fy=m(()=>{"use strict"});var Ny=m(()=>{"use strict"});var qy=m((W2,Uy)=>{"use strict";var XB=ht(),JB=ki(),ZB=Be(),eD=ZB("match");Uy.exports=function(s){var e;return XB(s)&&((e=s[eD])!==void 0?!!e:JB(s)==="RegExp")}});var jy=m((Y2,Hy)=>{"use strict";var tD=Ct();Hy.exports=function(){var s=tD(this),e="";return s.hasIndices&&(e+="d"),s.global&&(e+="g"),s.ignoreCase&&(e+="i"),s.multiline&&(e+="m"),s.dotAll&&(e+="s"),s.unicode&&(e+="u"),s.unicodeSets&&(e+="v"),s.sticky&&(e+="y"),e}});var Qy=m((K2,Gy)=>{"use strict";var iD=pt(),rD=wt(),sD=ts(),aD=jy(),zy=RegExp.prototype;Gy.exports=function(s){var e=s.flags;return e===void 0&&!("flags"in zy)&&!rD(s,"flags")&&sD(zy,s)?iD(aD,s):e}});var Yy=m((X2,Wy)=>{"use strict";var sd=ke(),nD=rr(),oD=Math.floor,id=sd("".charAt),uD=sd("".replace),rd=sd("".slice),lD=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,cD=/\$([$&'`]|\d{1,2})/g;Wy.exports=function(s,e,t,i,r,a){var n=t+s.length,o=i.length,u=cD;return r!==void 0&&(r=nD(r),u=lD),uD(a,u,function(l,p){var c;switch(id(p,0)){case"$":return"$";case"&":return s;case"`":return rd(e,0,t);case"'":return rd(e,n);case"<":c=r[rd(p,1,-1)];break;default:var d=+p;if(d===0)return l;if(d>o){var h=oD(d/10);return h===0?l:h<=o?i[h-1]===void 0?id(p,1):i[h-1]+id(p,1):l}c=i[d-1]}return c===void 0?"":c})}});var Jy=m(()=>{"use strict";var dD=Ie(),pD=pt(),nd=ke(),Ky=ci(),hD=me(),fD=tr(),mD=qy(),$r=_s(),bD=rs(),gD=Qy(),SD=Yy(),vD=Be(),yD=Pt(),TD=vD("replace"),ID=TypeError,ad=nd("".indexOf),xD=nd("".replace),Xy=nd("".slice),ED=Math.max;dD({target:"String",proto:!0},{replaceAll:function(e,t){var i=Ky(this),r,a,n,o,u,l,p,c,d,h,f=0,b="";if(!fD(e)){if(r=mD(e),r&&(a=$r(Ky(gD(e))),!~ad(a,"g")))throw new ID("`.replaceAll` does not allow non-global regexes");if(n=bD(e,TD),n)return pD(n,e,i,t);if(yD&&r)return xD($r(i),e,t)}for(o=$r(i),u=$r(e),l=hD(t),l||(t=$r(t)),p=u.length,c=ED(1,p),d=ad(o,u);d!==-1;)h=l?$r(t(u,d,o)):SD(u,o,d,[],void 0,t),b+=Xy(o,f,d)+h,f=d+p,d=d+c>o.length?-1:ad(o,u,d+c);return f<o.length&&(b+=Xy(o,f)),b}})});var eT=m((e3,Zy)=>{"use strict";Fy();Ny();Jy();var PD=di();Zy.exports=PD("String","replaceAll")});var iT=m((t3,tT)=>{"use strict";var wD=eT();tT.exports=wD});var od=m((i3,rT)=>{"use strict";var AD=iT();rT.exports=AD});var aT=m((r3,sT)=>{"use strict";var kD=os(),RD=_s(),LD=ci(),MD=RangeError;sT.exports=function(e){var t=RD(LD(this)),i="",r=kD(e);if(r<0||r===1/0)throw new MD("Wrong number of repetitions");for(;r>0;(r>>>=1)&&(t+=t))r&1&&(i+=t);return i}});var cT=m((s3,lT)=>{"use strict";var uT=ke(),$D=cl(),nT=_s(),BD=aT(),DD=ci(),CD=uT(BD),VD=uT("".slice),OD=Math.ceil,oT=function(s){return function(e,t,i){var r=nT(DD(e)),a=$D(t),n=r.length,o=i===void 0?" ":nT(i),u,l;return a<=n||o===""?r:(u=a-n,l=CD(o,OD(u/o.length)),l.length>u&&(l=VD(l,0,u)),s?r+l:l+r)}};lT.exports={start:oT(!1),end:oT(!0)}});var pT=m((a3,dT)=>{"use strict";var _D=Li();dT.exports=/Version\/10(?:\.\d+){1,2}(?: [\w./]+)?(?: Mobile\/\w+)? Safari\//.test(_D)});var hT=m(()=>{"use strict";var FD=Ie(),ND=cT().start,UD=pT();FD({target:"String",proto:!0,forced:UD},{padStart:function(e){return ND(this,e,arguments.length>1?arguments[1]:void 0)}})});var mT=m((u3,fT)=>{"use strict";hT();var qD=di();fT.exports=qD("String","padStart")});var gT=m((l3,bT)=>{"use strict";var HD=mT();bT.exports=HD});var ud=m((c3,ST)=>{"use strict";var jD=gT();ST.exports=jD});var Rp="2.0.134-dev.6250ee46.0";var Xe=(r=>(r.STOPPED="stopped",r.READY="ready",r.PLAYING="playing",r.PAUSED="paused",r))(Xe||{}),Xt=(y=>(y.MPEG="MPEG",y.DASH="DASH",y.DASH_SEP="DASH_SEP",y.DASH_SEP_VK="DASH_SEP",y.DASH_WEBM="DASH_WEBM",y.DASH_WEBM_AV1="DASH_WEBM_AV1",y.DASH_STREAMS="DASH_STREAMS",y.DASH_WEBM_VK="DASH_WEBM",y.DASH_ONDEMAND="DASH_ONDEMAND",y.DASH_ONDEMAND_VK="DASH_ONDEMAND",y.DASH_LIVE="DASH_LIVE",y.DASH_LIVE_CMAF="DASH_LIVE_CMAF",y.DASH_LIVE_WEBM="DASH_LIVE_WEBM",y.HLS="HLS",y.HLS_ONDEMAND="HLS_ONDEMAND",y.HLS_JS="HLS",y.HLS_LIVE="HLS_LIVE",y.HLS_LIVE_CMAF="HLS_LIVE_CMAF",y.WEB_RTC_LIVE="WEB_RTC_LIVE",y))(Xt||{});var Sn=(r=>(r.NOT_AVAILABLE="NOT_AVAILABLE",r.AVAILABLE="AVAILABLE",r.CONNECTING="CONNECTING",r.CONNECTED="CONNECTED",r))(Sn||{}),Bu=(i=>(i.HTTP1="http1",i.HTTP2="http2",i.QUIC="quic",i))(Bu||{});var Du=(n=>(n.NONE="none",n.INLINE="inline",n.FULLSCREEN="fullscreen",n.SECOND_SCREEN="second_screen",n.PIP="pip",n.INVISIBLE="invisible",n))(Du||{}),vn=(i=>(i.TRAFFIC_SAVING="traffic_saving",i.HIGH_QUALITY="high_quality",i.UNKNOWN="unknown",i))(vn||{});var Lx=C(ft(),1);import{assertNever as kf,assertNonNullable as sw,isNonNullable as En,ValueSubject as pl,Subject as aw,Subscription as nw,merge as ow,observableFrom as uw,fromEvent as Ef,map as Pf,tap as wf,filterChanged as lw,isNullable as hl,ErrorCategory as Af}from"@vkontakte/videoplayer-shared";var xf=s=>new Promise((e,t)=>{let i=document.createElement("script");i.setAttribute("src",s),i.onload=()=>e(),i.onerror=r=>t(r),document.body.appendChild(i)});var Pn=class{constructor(e){this.connection$=new pl(void 0);this.castState$=new pl("NOT_AVAILABLE");this.errorEvent$=new aw;this.realCastState$=new pl("NOT_AVAILABLE");this.subscription=new nw;this.isDestroyed=!1;this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");let t="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${t}`}),e.isDisabled||!t)return;let i=En(window.chrome?.cast),r=!!window.__onGCastApiAvailable;i?this.initializeCastApi():(window.__onGCastApiAvailable=a=>{delete window.__onGCastApiAvailable,a&&!this.isDestroyed&&this.initializeCastApi()},r||xf("https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1").catch(()=>this.errorEvent$.next({id:"ChromecastLoading",category:Af.NETWORK,message:"Script loading failed!"})))}connect(){cast.framework.CastContext.getInstance()?.requestSession()}disconnect(){cast.framework.CastContext.getInstance()?.getCurrentSession()?.endSession(!0)}stopMedia(){return new Promise((e,t)=>{cast.framework.CastContext.getInstance()?.getCurrentSession()?.getMediaSession()?.stop(new chrome.cast.media.StopRequest,e,t)})}toggleConnection(){En(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(e){let t=this.connection$.getValue();hl(t)||(t.remotePlayer.volumeLevel=e,t.remotePlayerController.setVolumeLevel())}setMuted(e){let t=this.connection$.getValue();hl(t)||e!==t.remotePlayer.isMuted&&t.remotePlayerController.muteOrUnmute()}destroy(){this.isDestroyed=!0,this.subscription.unsubscribe()}initListeners(){let e=new cast.framework.RemotePlayer,t=new cast.framework.RemotePlayerController(e),i=cast.framework.CastContext.getInstance();this.subscription.add(Ef(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe(r=>{switch(r.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=i.getCurrentSession()?.getMediaSession()?.media?.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return kf(r.sessionState)}})).add(ow(Ef(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(wf(r=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(r)}`})}),Pf(r=>r.castState)),uw([i.getCastState()])).pipe(lw(),Pf(cw),wf(r=>{this.log({message:`realCastState$: ${r}`})})).subscribe(this.realCastState$)).add(this.realCastState$.subscribe(r=>{let a=r==="CONNECTED",n=En(this.connection$.getValue());if(a&&!n){let o=i.getCurrentSession();sw(o);let u=o.getCastDevice(),l=o.getMediaSession()?.media?.contentId;(hl(l)||l===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:e,remotePlayerController:t,session:o,castDevice:u}))}else!a&&n&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r==="CONNECTED"?En(this.connection$.getValue())?"CONNECTED":"AVAILABLE":r)}))}initializeCastApi(){let e,t,i;try{e=cast.framework.CastContext.getInstance(),t=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,i=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch{return}try{e.setOptions({receiverApplicationId:this.params.receiverApplicationId??t,autoJoinPolicy:i}),this.initListeners()}catch(r){this.errorEvent$.next({id:"ChromecastInitializer",category:Af.EXTERNAL_API,message:"[initializeCastApi] failed",thrown:r})}}},cw=s=>{switch(s){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return"NOT_AVAILABLE";case cast.framework.CastState.NOT_CONNECTED:return"AVAILABLE";case cast.framework.CastState.CONNECTING:return"CONNECTING";case cast.framework.CastState.CONNECTED:return"CONNECTED";default:return kf(s)}};var yp=C(ft(),1),dx=C($i(),1),px=C(Nl(),1);var MS=C(Ts(),1);import{assertNever as IS}from"@vkontakte/videoplayer-shared";var be=(s,e=0,t=0)=>{switch(t){case 0:return s.replace("_offset_p",e===0?"":"_"+e.toFixed(0));case 1:{if(e===0)return s;let i=new URL(s);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}case 2:{let i=new URL(s);return!i.searchParams.get("offset_p")&&e===0?s:(i.searchParams.set("offset_p",e.toFixed(0)),i.toString())}default:IS(t)}return s},hi=(s,e)=>{switch(e){case 0:return NaN;case 1:{let t=new URL(s);return Number(t.searchParams.get("playback_shift"))}case 2:{let t=new URL(s);return Number(t.searchParams.get("offset_p")??0)}default:IS(e)}};var k=(s,e,t=!1)=>{let i=s.getTransition();(t||!i||i.to===e)&&s.setState(e)};import{isNonNullable as SM,Subject as Zn,merge as xS}from"@vkontakte/videoplayer-shared";var N=class{constructor(e){this.transitionStarted$=new Zn;this.transitionEnded$=new Zn;this.transitionUpdated$=new Zn;this.forceChanged$=new Zn;this.stateChangeStarted$=xS(this.transitionStarted$,this.transitionUpdated$);this.stateChangeEnded$=xS(this.transitionEnded$,this.forceChanged$);this.state=e,this.prevState=void 0}setState(e){let t=this.transition,i=this.state;this.transition=void 0,this.prevState=i,this.state=e,t?t.to===e?this.transitionEnded$.next(t):this.forceChanged$.next({from:t.from,to:e,canceledTransition:t}):this.forceChanged$.next({from:i,to:e,canceledTransition:t})}startTransitionTo(e){let t=this.transition,i=this.state;i===e||SM(t)&&t.to===e||(this.prevState=i,this.state=e,t?(this.transition={from:t.from,to:e,canceledTransition:t},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:e},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}getPrevState(){return this.prevState}};import{assertNever as vM}from"@vkontakte/videoplayer-shared";var ES=s=>{switch(s){case"MPEG":case"DASH":case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":case"HLS":case"HLS_ONDEMAND":return!1;case"DASH_LIVE":case"DASH_LIVE_CMAF":case"HLS_LIVE":case"HLS_LIVE_CMAF":case"DASH_LIVE_WEBM":case"WEB_RTC_LIVE":return!0;default:return vM(s)}};import{assertNever as vr,assertNonNullable as _i,debounce as PS,ErrorCategory as wS,fromEvent as Fi,isNonNullable as AS,map as kS,merge as RS,observableFrom as yM,Subject as TM,Subscription as wc,timeout as IM,getHighestQuality as xM}from"@vkontakte/videoplayer-shared";var EM=5,PM=5,wM=500,LS=7e3,Is=class{constructor(e){this.subscription=new wc;this.loadMediaTimeoutSubscription=new wc;this.videoState=new N("stopped");this.syncPlayback=()=>{let e=this.videoState.getState(),t=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekState.getState();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(t)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekState: ${JSON.stringify(a)};`}),i==="stopped"){e!=="stopped"&&(this.videoState.startTransitionTo("stopped"),this.stop());return}if(!t){if(r?.to!=="paused"&&a.state==="requested"&&e!=="stopped"){this.seek(a.position/1e3);return}switch(i){case"ready":{switch(e){case"playing":case"paused":case"ready":break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}case"playing":{switch(e){case"playing":break;case"paused":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"ready":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}case"paused":{switch(e){case"playing":this.videoState.startTransitionTo("paused"),this.params.connection.remotePlayerController.playOrPause();break;case"paused":break;case"ready":this.videoState.startTransitionTo("paused"),this.videoState.setState("paused");break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:vr(e)}break}default:vr(i)}}};this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${e.format}`}),this.params.output.isLive$.next(ES(e.format)),this.params.output.isAudioAvailable$.next(!0),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});let t=this.params.connection.session.getMediaSession();t&&this.restoreSession(t),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);let e=new wc;this.subscription.add(e),this.subscription.add(RS(this.videoState.stateChangeStarted$.pipe(kS(r=>`stateChangeStarted$ ${JSON.stringify(r)}`)),this.videoState.stateChangeEnded$.pipe(kS(r=>`stateChangeEnded$ ${JSON.stringify(r)}`))).subscribe(r=>this.log({message:`[videoState] ${r}`})));let t=(r,a)=>this.subscription.add(r.subscribe(a));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{let r=new TM;e.add(r.pipe(PS(wM)).subscribe(()=>{this.params.output.seekedEvent$.next()}));let a=NaN;e.add(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe(n=>{this.logRemoteEvent(n);let o=n.value;this.params.output.position$.next(o),(this.params.desiredState.seekState.getState().state==="applying"||Math.abs(o-a)>EM)&&r.next(o),a=o})),e.add(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe(n=>{this.logRemoteEvent(n),this.params.output.duration$.next(n.value)}))}t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemoteReady():(this.handleRemoteStop(),e.unsubscribe())}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemotePause():this.handleRemotePlay()}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),r=>{this.logRemoteEvent(r);let{remotePlayer:a}=this.params.connection,n=r.value,o=this.params.output.isBuffering$.getValue(),u=n===chrome.cast.media.PlayerState.BUFFERING;switch(o!==u&&this.params.output.isBuffering$.next(u),n){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&a.duration-a.currentTime<PM&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),k(this.params.desiredState.playbackState,"stopped");break;case chrome.cast.media.PlayerState.PAUSED:{this.handleRemotePause();break}case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:vr(n)}}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({volume:r.value})}),t(Fi(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({muted:r.value})});let i=RS(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekState.stateChangeEnded$,this.videoState.stateChangeEnded$,yM(["init"])).pipe(PS(0));t(i,this.syncPlayback)}restoreSession(e){this.log({message:"restoreSession"});let{remotePlayer:t}=this.params.connection;if(e.playerState!==chrome.cast.media.PlayerState.IDLE){t.isPaused?(this.videoState.setState("paused"),k(this.params.desiredState.playbackState,"paused")):(this.videoState.setState("playing"),k(this.params.desiredState.playbackState,"playing"));let i=this.params.output.isLive$.getValue();this.params.output.duration$.next(i?0:t.duration),this.params.output.position$.next(i?0:t.currentTime),this.params.desiredState.seekState.setState({state:"none"})}}prepare(){let e=this.params.format;this.log({message:`[prepare] format: ${e}`});let t=this.createMediaInfo(e),i=this.createLoadRequest(t);this.loadMedia(i)}handleRemotePause(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="paused"||e==="playing")&&(this.videoState.setState("paused"),k(this.params.desiredState.playbackState,"paused"))}handleRemotePlay(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="playing"||e==="paused")&&(this.videoState.setState("playing"),k(this.params.desiredState.playbackState,"playing"))}handleRemoteReady(){this.videoState.getTransition()?.to==="ready"&&this.videoState.setState("ready"),this.params.desiredState.playbackState.getTransition()?.to==="ready"&&k(this.params.desiredState.playbackState,"ready")}handleRemoteStop(){this.videoState.getState()!=="stopped"&&this.videoState.setState("stopped")}handleRemoteVolumeChange(e){let t=this.params.output.volume$.getValue(),i={volume:e.volume??t.volume,muted:e.muted??t.muted};(i.volume!==t.volume||i.muted!==i.muted)&&this.params.output.volume$.next(i)}seek(e){this.params.output.willSeekEvent$.next();let{remotePlayer:t,remotePlayerController:i}=this.params.connection;t.currentTime=e,i.seek()}stop(){let{remotePlayerController:e}=this.params.connection;e.stop()}createMediaInfo(e){let t=this.params.source,i,r,a;switch(e){case"MPEG":{let l=t[e];_i(l);let p=xM(Object.keys(l));_i(p);let c=l[p];_i(c),i=c,r="video/mp4",a=chrome.cast.media.StreamType.BUFFERED;break}case"HLS":case"HLS_ONDEMAND":{let l=t[e];_i(l),i=l.url,r="application/x-mpegurl",a=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":{let l=t[e];_i(l),i=l.url,r="application/dash+xml",a=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_LIVE_CMAF":{let l=t[e];_i(l),i=l.url,r="application/dash+xml",a=chrome.cast.media.StreamType.LIVE;break}case"HLS_LIVE":case"HLS_LIVE_CMAF":{let l=t[e];_i(l),i=be(l.url),r="application/x-mpegurl",a=chrome.cast.media.StreamType.LIVE;break}case"DASH_LIVE":case"WEB_RTC_LIVE":{let l="Unsupported format for Chromecast",p=new Error(l);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",category:wS.VIDEO_PIPELINE,message:l,thrown:p}),p}case"DASH":case"DASH_LIVE_WEBM":throw new Error(`${e} is no longer supported`);default:return vr(e)}let n=new chrome.cast.media.MediaInfo(this.params.meta.videoId??i,r);n.contentUrl=i,n.streamType=a,n.metadata=new chrome.cast.media.GenericMediaMetadata;let{title:o,subtitle:u}=this.params.meta;return AS(o)&&(n.metadata.title=o),AS(u)&&(n.metadata.subtitle=u),n}createLoadRequest(e){let t=new chrome.cast.media.LoadRequest(e);t.autoplay=!1;let i=this.params.desiredState.seekState.getState();return i.state==="applying"||i.state==="requested"?t.currentTime=this.params.output.isLive$.getValue()?0:i.position/1e3:t.currentTime=0,t}loadMedia(e){let t=this.params.connection.session.loadMedia(e),i=new Promise((r,a)=>{this.loadMediaTimeoutSubscription.add(IM(LS).subscribe(()=>a(`timeout(${LS})`)))});(0,MS.default)(Promise.race([t,i]).then(()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`}),this.params.desiredState.seekState.getState().state==="applying"&&this.params.output.seekedEvent$.next(),this.handleRemoteReady()},r=>{let a=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${r}`;this.log({message:a}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",category:wS.VIDEO_PIPELINE,message:a,thrown:r})}),()=>{this.loadMediaTimeoutSubscription.unsubscribe()})}logRemoteEvent(e){this.log({message:`[remoteEvent] ${JSON.stringify(e)}`})}};var Gc=C(ft(),1);import{clearVideoElement as BS}from"@vkontakte/videoplayer-shared";import{clearVideoElement as AM}from"@vkontakte/videoplayer-shared";var $S=s=>{try{s.pause(),s.playbackRate=0,AM(s),s.remove()}catch(e){console.error(e)}};import{fromEvent as kM,Subscription as RM}from"@vkontakte/videoplayer-shared";var Ac=class{constructor(){this.attribute="data-pool-reused"}get(e){return e.hasAttribute(this.attribute)}set(e,t){e.toggleAttribute(this.attribute,t)}delete(e){e.removeAttribute(this.attribute)}},kc=window.WeakMap?new WeakMap:new Ac,Rc=window.WeakMap?new WeakMap:new Map,LM=(s,e=20)=>{let t=0;return kM(s,"ratechange").subscribe(i=>{t++,t>=e&&(s.currentTime=s.currentTime,t=0)})},De=(s,{audioVideoSyncRate:e,disableYandexPiP:t})=>{let i=s.querySelector("video"),r=!!i;i?BS(i):(i=document.createElement("video"),s.appendChild(i)),kc.set(i,r);let a=new RM;return a.add(LM(i,e)),Rc.set(i,a),i.setAttribute("crossorigin","anonymous"),i.setAttribute("playsinline","playsinline"),t&&i.setAttribute("x-yandex-pip","false"),i.controls=!1,i.setAttribute("poster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),i},Ce=s=>{Rc.get(s)?.unsubscribe(),Rc.delete(s);let t=kc.get(s);kc.delete(s),t?BS(s):$S(s)};var Mc=C(Ni(),1);import{assertNonNullable as xs,isNonNullable as Ot,isNullable as _M,fromEvent as yr,merge as NS,observableFrom as US,filterChanged as qS,map as Es,Subject as HS,Subscription as FM,ValueSubject as NM,ErrorCategory as UM}from"@vkontakte/videoplayer-shared";import{isNonNullable as Lc,isNullable as VM,Subscription as OM}from"@vkontakte/videoplayer-shared";var eo=(s,e,t,{equal:i=(n,o)=>n===o,changed$:r,onError:a}={})=>{let n=s.getState(),o=e(),u=VM(r),l=new OM;return r&&l.add(r.subscribe(p=>{let c=s.getState();i(p,c)&&s.setState(p)},a)),i(o,n)||(t(n),u&&s.setState(n)),l.add(s.stateChangeStarted$.subscribe(p=>{t(p.to),u&&s.setState(p.to)},a)),l},St=(s,e,t)=>eo(e,()=>s.loop,i=>{Lc(i)&&(s.loop=i)},{onError:t}),Ve=(s,e,t,i)=>eo(e,()=>({muted:s.muted,volume:s.volume}),r=>{Lc(r)&&(s.muted=r.muted,s.volume=r.volume)},{equal:(r,a)=>r===a||r?.muted===a?.muted&&r?.volume===a?.volume,changed$:t,onError:i}),Je=(s,e,t,i)=>eo(e,()=>s.playbackRate,r=>{Lc(r)&&(s.playbackRate=r)},{changed$:t,onError:i}),fi=eo;var qM=s=>["__",s.language,s.label].join("|"),HM=(s,e)=>{if(s.id===e)return!0;let[t,i,r]=e.split("|");return s.language===i&&s.label===r},$c=class s{constructor(e){this.available$=new HS;this.current$=new NM(void 0);this.error$=new HS;this.subscription=new FM;this.externalTracks=new Map;this.internalTracks=new Map;this.baseURL=e}connect(e,t,i){this.video=e,this.cueSettings=t.textTrackCuesSettings,this.subscribe();let r=a=>{this.error$.next({id:"TextTracksManager",category:UM.WTF,message:"Generic HtmlVideoTextTrackManager error",thrown:a})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(fi(t.internalTextTracks,()=>(0,Mc.default)(this.internalTracks),a=>{Ot(a)&&this.setInternal(a)},{equal:(a,n)=>Ot(a)&&Ot(n)&&a.length===n.length&&a.every(({id:o},u)=>o===n[u].id),changed$:this.available$.pipe(Es(a=>a.filter(({type:n})=>n==="internal"))),onError:r})),this.subscription.add(fi(t.externalTextTracks,()=>(0,Mc.default)(this.externalTracks),a=>{Ot(a)&&this.setExternal(a)},{equal:(a,n)=>Ot(a)&&Ot(n)&&a.length===n.length&&a.every(({id:o},u)=>o===n[u].id),changed$:this.available$.pipe(Es(a=>a.filter(({type:n})=>n==="external"))),onError:r})),this.subscription.add(fi(t.currentTextTrack,()=>{if(this.video)return;let a=this.htmlTextTracksAsArray().find(({mode:n})=>n==="showing");return a&&this.htmlTextTrackToITextTrack(a).id},a=>this.select(a),{changed$:this.current$,onError:r})),this.subscription.add(fi(t.textTrackCuesSettings,()=>({}),()=>{if(this.video)for(let a of this.htmlTextTracksAsArray())this.applyCueSettings(a.cues),this.applyCueSettings(a.activeCues)}))}subscribe(){xs(this.video);let{textTracks:e}=this.video;this.subscription.add(yr(e,"addtrack").subscribe(()=>{let i=this.current$.getValue();i&&this.select(i)})),this.subscription.add(NS(yr(e,"addtrack"),yr(e,"removetrack"),US(["init"])).pipe(Es(()=>this.htmlTextTracksAsArray().map(i=>this.htmlTextTrackToITextTrack(i))),qS((i,r)=>i.length===r.length&&i.every(({id:a},n)=>a===r[n].id))).subscribe(this.available$)),this.subscription.add(NS(yr(e,"change"),US(["init"])).pipe(Es(()=>this.htmlTextTracksAsArray().find(({mode:i})=>i==="showing")),Es(i=>i&&this.htmlTextTrackToITextTrack(i).id),qS()).subscribe(this.current$));let t=i=>this.applyCueSettings(i.target?.activeCues??null);this.subscription.add(yr(e,"addtrack").subscribe(i=>{i.track?.addEventListener("cuechange",t);let r=a=>{let n=a.target?.cues??null;n&&n.length&&(this.applyCueSettings(a.target?.cues??null),a.target?.removeEventListener("cuechange",r))};i.track?.addEventListener("cuechange",r)})),this.subscription.add(yr(e,"removetrack").subscribe(i=>{i.track?.removeEventListener("cuechange",t)}))}applyCueSettings(e){if(!e||!e.length)return;let t=this.cueSettings.getState();for(let i of Array.from(e)){let r=i;Ot(t.align)&&(r.align=t.align),Ot(t.position)&&(r.position=t.position),Ot(t.size)&&(r.size=t.size),Ot(t.line)&&(r.line=t.line)}}htmlTextTracksAsArray(e=!1){xs(this.video);let t=[...this.video.textTracks];return e?t:t.filter(s.isHealthyTrack)}htmlTextTrackToITextTrack(e){let{language:t,label:i}=e,r=e.id?e.id:qM(e),a=this.externalTracks.has(r),n=(a?this.externalTracks.get(r)?.isAuto:this.internalTracks.get(r)?.isAuto)??r.includes("auto");return a?{id:r,type:"external",isAuto:n,language:t,label:i,url:this.externalTracks.get(r)?.url}:{id:r,type:"internal",isAuto:n,language:t,label:i,url:this.internalTracks.get(r)?.url}}static isHealthyTrack(e){return!(e.kind==="metadata"||e.groupId||e.id===""&&e.label===""&&e.language==="")}setExternal(e){this.internalTracks.size>0&&Array.from(this.internalTracks).forEach(([,t])=>this.detach(t)),e.filter(({id:t})=>!this.externalTracks.has(t)).forEach(t=>this.attach(t)),Array.from(this.externalTracks).filter(([t])=>!e.find(i=>i.id===t)).forEach(([,t])=>this.detach(t))}setInternal(e){let t=[...this.externalTracks];e.filter(({id:i,language:r,isAuto:a})=>!this.internalTracks.has(i)&&!t.some(([,n])=>n.language===r&&n.isAuto===a)).forEach(i=>this.attach(i)),Array.from(this.internalTracks).filter(([i])=>!e.find(r=>r.id===i)).forEach(([,i])=>this.detach(i))}select(e){xs(this.video);for(let t of this.htmlTextTracksAsArray(!0))t.mode="showing";for(let t of this.htmlTextTracksAsArray(!0))(_M(e)||!HM(t,e))&&(t.mode="disabled")}destroy(){if(this.subscription.unsubscribe(),this.video)for(let e of Array.from(this.video.getElementsByTagName("track"))){let t=e.getAttribute("id");t&&this.externalTracks.has(t)&&this.video.removeChild(e)}this.externalTracks.clear()}attach(e){xs(this.video);let t=document.createElement("track");this.baseURL?t.setAttribute("src",new URL(e.url,this.baseURL).toString()):t.setAttribute("src",e.url),t.setAttribute("id",e.id),e.label&&t.setAttribute("label",e.label),e.language&&t.setAttribute("srclang",e.language),e.type==="external"?this.externalTracks.set(e.id,e):e.type==="internal"&&this.internalTracks.set(e.id,e),this.video.appendChild(t)}detach(e){xs(this.video);let t=Array.prototype.find.call(this.video.getElementsByTagName("track"),i=>i.getAttribute("id")===e.id);t&&this.video.removeChild(t),e.type==="external"?this.externalTracks.delete(e.id):e.type==="internal"&&this.internalTracks.delete(e.id)}},Ze=$c;var Ui=class{constructor(){this.pausedTime=0;this.streamOffset=0;this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){this.pauseTimestamp===0&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(e,t=!1){this.streamOffset=e,this.pauseTimestamp=0,this.pausedTime=0,t&&this.pause()}};var jS=s=>{let e=s;for(;!(e instanceof Document)&&!(e instanceof ShadowRoot)&&e!==null;)e=e?.parentNode;return e??void 0},Bc=s=>{let e=jS(s);return!!(e&&e.fullscreenElement&&e.fullscreenElement===s)},zS=s=>{let e=jS(s);return!!(e&&e.pictureInPictureElement&&e.pictureInPictureElement===s)};import{fromEvent as Ge,map as _t,merge as oo,filterChanged as ZS,isNonNullable as ev,Subject as JM,filter as Cc,mapTo as Vc,combine as ZM,once as e$,throttle as t$,ErrorCategory as i$,ValueSubject as tv,Subscription as r$}from"@vkontakte/videoplayer-shared";var jM=3,GS=(s,e,t=jM)=>{let i=0,r=0;for(let a=0;a<s.length;a++){let n=s.start(a),o=s.end(a);if(n<=e&&e<=o){if(i=n,r=o,!t)return{from:i,to:r};for(let u=a-1;u>=0;u--)s.end(u)+t>=i&&(i=s.start(u));for(let u=a+1;u<s.length;u++)s.start(u)-t<=r&&(r=s.end(u))}}return{from:i,to:r}};var to=class{constructor(){this._isMiuiBrowser=!1}get current(){return this._current}get isYandex(){return this.current==="Yandex"}get isSafari(){return this.current==="Safari"}get isFirefox(){return this.current==="Firefox"}get isSamsungBrowser(){return this.current==="SamsungBrowser"}get safariVersion(){return this._safariVersion}get isMiuiBrowser(){return this._isMiuiBrowser}detect(){let{userAgent:e}=navigator;try{let t=/yabrowser/i.test(e)?"Yandex":void 0,i=/samsungbrowser/i.test(e)?"SamsungBrowser":void 0,r=/chrome|crios/i.test(e)?"Chrome":void 0,a=/chromium/i.test(e)?"Chromium":void 0,n=/firefox|fxios/i.test(e)?"Firefox":void 0,o=/webkit|safari|khtml/i.test(e)?"Safari":void 0,u=/opr\//i.test(e)?"Opera":void 0,l=/edg/i.test(e)?"Edge":void 0;this._isMiuiBrowser=/(XiaoMi)|(MiuiBrowser)/i.test(e),this._current=t||i||n||u||l||r||a||o||"Rest"}catch(t){console.error(t)}this.isSafari&&this.detectSafariVersion()}detectSafariVersion(){try{let{userAgent:e}=window.navigator,t=e.match(/Version\/(\d+)/);if(!t)return;let i=t[1],r=parseInt(i,10);if(isNaN(r))return;this._safariVersion=r}catch(e){console.error(e)}}};var QS=C(ft(),1);var Ps=()=>/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion??navigator.userAgent)||navigator?.userAgentData?.mobile;var io=class{constructor(e){this._highEntropyValues={};this._displayChecker=e}get current(){return this._current}get isIOS(){let e=["iPhone","iPad","iPod"];return this._highEntropyValues.platform==="iOS"||(0,QS.default)(e,this.current)}get isMac(){return this._highEntropyValues.platform==="macOS"||this.current==="Mac"}get isApple(){return this.isIOS||this.isMac}get isIphoneOrOldIpad(){if(!this.isApple||!this._displayChecker.isTouch)return!1;let e=this.current==="iPad"||this._displayChecker.width>700,t=this._iosVersion;return!e||e&&!!t&&t<16}get isAndroid(){return this._highEntropyValues.platform==="Android"||this.current==="Android"}get isMobile(){return this._highEntropyValues.mobile||this._isMobile}get iOSVersion(){return this._iosVersion}detect(){let{userAgent:e}=navigator;try{this._isMobile=Ps()}catch(t){console.error(t)}this.detectDevice(e),this.detectHighEntropyValues(),this.isIOS&&this.detectIOSVersion()}async detectHighEntropyValues(){let{userAgentData:e}=navigator;if(e?.getHighEntropyValues){let t=await e.getHighEntropyValues(["architecture","bitness","brands","mobile","platform","formFactor","model","platformVersion","wow64"]);this._highEntropyValues=t}}detectDevice(e){try{let t=/android/i.test(e)?"Android":void 0,i=/iphone/i.test(e)?"iPhone":void 0,r=/ipad/i.test(e)?"iPad":void 0,a=/ipod/i.test(e)?"iPod":void 0,n=/mac/i.test(e)?"Mac":void 0,o=/webOS|BlackBerry|IEMobile|Opera Mini/i.test(e)?"RestMobile":void 0;this._current=t||i||r||a||o||n||"Desktop"}catch(t){console.error(t)}}detectIOSVersion(){try{if(this._highEntropyValues.platformVersion){let a=this._highEntropyValues.platformVersion.split(".").slice(0,2).join("."),n=parseFloat(a);this._iosVersion=n;return}let{userAgent:e}=window.navigator,t=e.match(/OS (\d+(_\d+)?)/i);if(!t)return;let i=t[1].replace(/_/g,".");if(!i)return;let r=parseFloat(i);if(isNaN(r))return;this._iosVersion=r}catch(e){console.error(e)}}};var ro=class{get isTouch(){return typeof this._maxTouchPoints=="number"?this._maxTouchPoints>1:"ontouchstart"in window}get maxTouchPoints(){return this._maxTouchPoints}get height(){return this._height}get width(){return this._width}get screenHeight(){return this._screenHeight}get screenWidth(){return this._screenWidth}get pixelRatio(){return this._pixelRatio}get isHDR(){return this._isHdr}get colorDepth(){return this._colorDepth}detect(){let{maxTouchPoints:e}=navigator;try{this._maxTouchPoints=e??0,this._isHdr=!!matchMedia("(dynamic-range: high)")?.matches,this._colorDepth=screen.colorDepth}catch(t){console.error(t)}try{this._pixelRatio=window.devicePixelRatio||1,this._height=screen.height,this._width=screen.width,this._height=screen.height,this._screenHeight=this._height*this._pixelRatio,this._screenWidth=this._width*this._pixelRatio}catch(t){console.error(t)}}};var bt=()=>window.ManagedMediaSource||window.MediaSource,Tr=()=>!!(window.ManagedMediaSource&&window.ManagedSourceBuffer?.prototype?.appendBuffer),WS=()=>!!(window.MediaSource&&window.SourceBuffer?.prototype?.appendBuffer),so=()=>window.ManagedMediaSource?new ManagedMediaSource:new MediaSource;var zM=document.createElement("video"),GM='video/mp4; codecs="avc1.42000a,mp4a.40.2"',QM='video/mp4; codecs="hev1.1.6.L93.B0"',YS='video/webm; codecs="vp09.00.10.08"',KS='video/webm; codecs="av01.0.00M.08"',WM='audio/mp4; codecs="mp4a.40.2"',YM='audio/webm; codecs="opus"',XS,KM=async()=>{if(!window.navigator.mediaCapabilities)return;let s={type:"media-source",video:{contentType:"video/webm",width:1280,height:720,bitrate:1e6,framerate:30}},[e,t]=await Promise.all([window.navigator.mediaCapabilities.decodingInfo({...s,video:{...s.video,contentType:KS}}),window.navigator.mediaCapabilities.decodingInfo({...s,video:{...s.video,contentType:YS}})]);XS={DASH_WEBM_AV1:e,DASH_WEBM:t}};KM().catch(s=>{console.log(zM),console.error(s)});var ao=class{constructor(e,t){this._deviceChecker=e,this._browserChecker=t}get protocols(){return this._protocols}get containers(){return this._containers}get codecs(){return this._codecs}get webmDecodingInfo(){return XS}get supportedCodecs(){return Object.keys(this._codecs).filter(e=>this._codecs[e])}get nativeHlsSupported(){return this._nativeHlsSupported}detect(){this._video=document.createElement("video");try{this._protocols={mms:Tr(),mse:WS(),hls:!!(this._video.canPlayType?.("application/x-mpegurl")||this._video.canPlayType?.("vnd.apple.mpegURL")),webrtc:!!window.RTCPeerConnection,ws:!!window.WebSocket},this._containers={mp4:!!this._video.canPlayType?.("video/mp4"),webm:!!this._video.canPlayType?.("video/webm"),cmaf:!0};let e=!!bt()?.isTypeSupported?.(GM),t=!!bt()?.isTypeSupported?.(QM),i=!!bt()?.isTypeSupported?.(WM);this._codecs={h264:e,h265:t,vp9:!!bt()?.isTypeSupported?.(YS),av1:!!bt()?.isTypeSupported?.(KS),aac:i,opus:!!bt()?.isTypeSupported?.(YM),mpeg:(e||t)&&i},this._nativeHlsSupported=this._protocols.hls&&this._containers.mp4}catch(e){console.error(e)}this.destroyVideoElement()}destroyVideoElement(){if(!this._video)return;if(this._video.pause(),this._video.currentTime=0,this._video.removeAttribute("src"),this._video.src="",this._video.load(),this._video.remove){this._video.remove(),this._video=null;return}this._video.parentNode&&this._video.parentNode.removeChild(this._video);let e=this._video.cloneNode(!1);this._video.parentNode?.replaceChild(e,this._video),this._video=null}};var JS="audio/mpeg",no=class{supportMp3(){return this._codecs.mp3&&this._containers.mpeg}detect(){this._audio=document.createElement("audio");try{this._containers={mpeg:!!this._audio.canPlayType?.(JS)},this._codecs={mp3:!!bt()?.isTypeSupported?.(JS)}}catch(e){console.error(e)}this.destroyAudioElement()}destroyAudioElement(){if(!this._audio)return;if(this._audio.pause(),this._audio.currentTime=0,this._audio.removeAttribute("src"),this._audio.src="",this._audio.load(),this._audio.remove){this._audio.remove(),this._audio=null;return}this._audio.parentNode&&this._audio.parentNode.removeChild(this._audio);let e=this._audio.cloneNode(!1);this._audio.parentNode?.replaceChild(e,this._audio),this._audio=null}};import{ValueSubject as XM}from"@vkontakte/videoplayer-shared";var Dc=class{constructor(){this.isInited$=new XM(!1);this._displayChecker=new ro,this._deviceChecker=new io(this._displayChecker),this._browserChecker=new to,this._videoChecker=new ao(this._deviceChecker,this._browserChecker),this._audioChecker=new no,this.detect()}get display(){return this._displayChecker}get device(){return this._deviceChecker}get browser(){return this._browserChecker}get video(){return this._videoChecker}get audio(){return this._audioChecker}async detect(){this._displayChecker.detect(),this._deviceChecker.detect(),this._browserChecker.detect(),this._videoChecker.detect(),this._audioChecker.detect(),this.isInited$.next(!0)}},_=new Dc;var Oe=s=>{let e=v=>Ge(s,v).pipe(Vc(void 0)),t=new r$,i=()=>t.unsubscribe(),r=oo(Ge(s,"progress"),Ge(s,"timeupdate")).pipe(_t(()=>GS(s.buffered,s.currentTime))),a=_.browser.isSafari?ZM({play:e("play").pipe(e$()),playing:e("playing")}).pipe(Vc(void 0)):e("playing"),n=Ge(s,"volumechange").pipe(_t(()=>({muted:s.muted,volume:s.volume}))),o=Ge(s,"ratechange").pipe(_t(()=>s.playbackRate)),u=Ge(s,"error").pipe(Cc(()=>!!(s.error||s.played.length)),_t(()=>{let v=s.error;return{id:v?`MediaError#${v.code}`:"HtmlVideoError",category:i$.VIDEO_PIPELINE,message:v?v.message:"Error event from HTML video element",thrown:s.error??void 0}})),l=Ge(s,"timeupdate").pipe(_t(()=>s.currentTime)),p=["waiting","seeking","seeked","timeupdate"],c=new JM,d=.3,h;t.add(oo(...p.map(v=>Ge(s,v))).subscribe(v=>{let D=s.currentTime;s.loop&&ev(h)&&ev(D)&&h>=s.duration-d&&D<=d&&c.next(h),h=D}));let f=e("pause").pipe(Cc(()=>!s.error&&h!==s.duration)),b=Ge(s,"enterpictureinpicture"),g=Ge(s,"leavepictureinpicture"),S=new tv(zS(s));t.add(b.subscribe(()=>S.next(!0))),t.add(g.subscribe(()=>S.next(!1)));let T=new tv(Bc(s)),y=Ge(s,"fullscreenchange");t.add(y.pipe(_t(()=>Bc(s))).subscribe(T));let E=.1,P=1e3,M=Ge(s,"timeupdate").pipe(_t(v=>s.duration-s.currentTime<E),ZS()),O=oo(M.pipe(Cc(v=>!s.loop&&v)),Ge(s,"ended")).pipe(t$(P),Vc(void 0)),A=oo(...["waiting","pause","canplay","play","canplaythrough","playing","seeking","seeked","ended"].map(v=>Ge(s,v)),M.pipe(_t(v=>({type:v?"ended":"unknown"})))).pipe(_t(v=>_.browser.isFirefox&&v.type==="ended"?s.readyState<2:s.readyState<3),ZS());return{playing$:a,pause$:f,canplay$:e("canplay"),ended$:O,looped$:c,error$:u,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadStart$:e("loadstart"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:l,durationChange$:Ge(s,"durationchange").pipe(_t(()=>s.duration)),isBuffering$:A,currentBuffer$:r,volumeState$:n,playbackRateState$:o,inPiP$:S,inFullscreen$:T,enterPip$:b,leavePip$:g,destroy:i}};import{VideoQuality as mi}from"@vkontakte/videoplayer-shared";var Ft=s=>{switch(s){case"mobile":return mi.Q_144P;case"lowest":return mi.Q_240P;case"low":return mi.Q_360P;case"sd":case"medium":return mi.Q_480P;case"hd":case"high":return mi.Q_720P;case"fullhd":case"full":return mi.Q_1080P;case"quadhd":case"quad":return mi.Q_1440P;case"ultrahd":case"ultra":return mi.Q_2160P}};var We=C(kt(),1),Fc=C(ft(),1),qi=C($i(),1);import{isNonNullable as X,isNullable as ho,now as gv,isHigher as fo,isHigherOrEqual as xr,isInvariantQuality as mo,isLowerOrEqual as Er,videoSizeToQuality as Sv,assertNotEmptyArray as bo,assertNonNullable as vv}from"@vkontakte/videoplayer-shared";var Oc=!1,ei={},uv=s=>{Oc=s},lv=()=>{ei={}},cv=s=>{s(ei)},ws=(s,e)=>{Oc&&(ei.meta=ei.meta??{},ei.meta[s]=e)},Qe=class{constructor(e){this.name=e}next(e){if(!Oc)return;ei.series=ei.series??{};let t=ei.series[this.name]??[];t.push([Date.now(),e]),ei.series[this.name]=t}};import{isHigher as p$,isHigherOrEqual as p1,isLower as dv,isLowerOrEqual as h1,isNonNullable as uo,isNullable as h$,videoHeightToQuality as lo}from"@vkontakte/videoplayer-shared";function _c(s,e,t){return!s.max&&s.min===e?"high_quality":!s.min&&s.max===t?"traffic_saving":"unknown"}function co(s,e,t){return!!s&&_c(s,e,t)==="high_quality"}function Ir(s,e,t){return h$(s)||uo(s.min)&&uo(s.max)&&dv(s.max,s.min)||uo(s.min)&&e&&p$(s.min,e)||uo(s.max)&&t&&dv(s.max,t)}function pv({limits:s,highestAvailableHeight:e,lowestAvailableHeight:t}){return Ir({max:s?.max?lo(s.max):void 0,min:s?.min?lo(s.min):void 0},e?lo(e):void 0,t?lo(t):void 0)}var yv=new Qe("best_bitrate"),go=(s,e,t)=>(e-t)*Math.pow(2,-10*s)+t;var Pr=s=>(e,t)=>s*(Number(e.bitrate)-Number(t.bitrate)),bi=class{constructor(){this.history={}}recordSelection(e){this.history[e.id]=gv()}recordSwitch(e){this.last=e}clear(){this.last=void 0,this.history={}}},So='Assertion "ABR Tracks is empty array" failed',po=new WeakMap,hv=new WeakMap,fv=new WeakMap,As=(s,e,t,i)=>{let r=[...e].sort(Pr(1)),a=[...t].sort(Pr(1)),n=a.filter(u=>X(u.bitrate)&&X(s.bitrate)?s.bitrate/u.bitrate>i:!0),o=(0,We.default)(a,Math.round(a.length*r.indexOf(s)/(r.length+1)))??(0,We.default)(a,-1);return o&&(0,Fc.default)(n,o)?o:n.length?(0,We.default)(n,-1):(0,We.default)(a,0)},ks=(s,e,t,i)=>{let r=po.get(e);r||(r=[...e].sort(Pr(1)),po.set(e,r));let a=po.get(t);a||(a=[...t].sort(Pr(1)),po.set(t,a));let n=fv.get(s);n||(n=a.filter(u=>X(u.bitrate)&&X(s.bitrate)?s.bitrate/u.bitrate>i:!0),fv.set(s,n));let o=(0,We.default)(a,Math.round(a.length*r.indexOf(s)/(r.length+1)))??(0,We.default)(a,-1);return o&&(0,Fc.default)(n,o)?o:n.length?(0,We.default)(n,-1):(0,We.default)(a,0)},mv=s=>"quality"in s,vo=(s,e,t,i)=>{let r=X(i?.last?.bitrate)&&X(t?.bitrate)&&i.last.bitrate<t.bitrate?s.trackCooldownIncreaseQuality:s.trackCooldownDecreaseQuality,a=t&&i&&i.history[t.id]&&gv()-i.history[t.id]<=r&&(!i.last||t.id!==i.last.id);if(t?.id&&i&&!a&&i.recordSelection(t),a&&i?.last){let n=i.last;i?.recordSwitch(n);let o=mv(n)?"video":"audio",u=mv(n)?n.quality:n.bitrate;return e({message:`
|
|
8
8
|
[last ${o} selected] ${u}
|
|
9
9
|
`}),n}return i?.recordSwitch(t),t},f$=(s,e)=>Math.log(e)/Math.log(s),Tv=({tuning:s,container:e,limits:t,panelSize:i})=>{let r=s.containerSizeFactor;if(i)return{containerSizeLimit:i,containerSizeFactor:r};if(s.usePixelRatio&&_.display.pixelRatio){let a=_.display.pixelRatio;if(s.pixelRatioMultiplier)r*=s.pixelRatioMultiplier*(a-1)+1;else{let n=s.pixelRatioLogBase,[o=0,u=0,l=0]=s.pixelRatioLogCoefficients,p=f$(n,o*a+u)+l;Number.isFinite(p)&&(r*=p)}}return co(t,s.highQualityLimit,s.trafficSavingLimit)&&(r*=2),{containerSizeLimit:s.limitByContainer&&e&&e.width>0&&e.height>0?{width:e.width*r,height:e.height*r}:void 0,containerSizeFactor:r}},bv=new WeakMap,Nt=(s,{container:e,estimatedThroughput:t,tuning:i,limits:r,reserve:a=0,forwardBufferHealth:n,playbackRate:o,current:u,history:l,visible:p,droppedVideoMaxQualityLimit:c,stallsVideoMaxQualityLimit:d,stallsPredictedThroughput:h,abrLogger:f,panelSize:b})=>{bo(s,So);let{containerSizeFactor:g,containerSizeLimit:S}=Tv({container:e,tuning:i,limits:r,panelSize:b}),T=i.considerPlaybackRate&&X(o)?o:1,y=bv.get(s);y||(y=s.filter(x=>!mo(x.quality)).sort((x,R)=>fo(x.quality,R.quality)?-1:1),bv.set(s,y));let E=(0,We.default)(y,-1)?.quality,P=(0,We.default)(y,0)?.quality,M=Ir(r,P,E),O=T*go(n??.5,i.bitrateFactorAtEmptyBuffer,i.bitrateFactorAtFullBuffer),w={},A=null;for(let x of y){let R=!0;if(S)if(x.size)R=x.size.width<=S.width&&x.size.height<=S.height;else{let L=S&&Sv(S);R=L?Er(x.quality,L):!0}if(!R){w[x.quality]="FitsContainer";continue}let re=h||t,B=X(re)&&isFinite(re)&&X(x.bitrate)?re-a>=x.bitrate*O:!0,q=co(r,i.highQualityLimit,i.trafficSavingLimit)&&r?.min===x.quality;if(!B&&!q){w[x.quality]="FitsThroughput";continue}if(i.lazyQualitySwitch&&X(i.minBufferToSwitchUp)&&u&&!mo(u.quality)&&(n??0)<i.minBufferToSwitchUp&&fo(x.quality,u.quality)){w[x.quality]="Buffer";continue}if(!!c&&xr(x.quality,c)&&!q){w[x.quality]="DroppedFramesLimit";continue}if(!!d&&xr(x.quality,d)&&!q){w[x.quality]="StallsLimit";continue}let oe=M||(ho(r?.max)||Er(x.quality,r.max))&&(ho(r?.min)||xr(x.quality,r.min)),Z=X(p)&&!p?Er(x.quality,i.backgroundVideoQualityLimit):!0;if(!oe||!Z){w[x.quality]="FitsQualityLimits";continue}A||(A=x)}A&&A.bitrate&&yv.next(A.bitrate);let v=A??(0,We.default)(y,-1)??s[0],D=l?.last,I=vo(i,f,v,l);return X(l)&&I.quality!==D?.quality&&f({message:`
|
|
10
10
|
[VIDEO TRACKS ABR]
|
package/evergreen.esm.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vkontakte/videoplayer-core v2.0.134-dev.
|
|
3
|
-
*
|
|
2
|
+
* @vkontakte/videoplayer-core v2.0.134-dev.6250ee46.0
|
|
3
|
+
* Tue, 10 Jun 2025 05:36:00 GMT
|
|
4
4
|
* https://st.mycdn.me/static/vkontakte-videoplayer/2-0-134/doc/
|
|
5
5
|
*/
|
|
6
|
-
var Ho="2.0.134-dev.464b6f35.0";var Ue=(r=>(r.STOPPED="stopped",r.READY="ready",r.PLAYING="playing",r.PAUSED="paused",r))(Ue||{}),wt=(v=>(v.MPEG="MPEG",v.DASH="DASH",v.DASH_SEP="DASH_SEP",v.DASH_SEP_VK="DASH_SEP",v.DASH_WEBM="DASH_WEBM",v.DASH_WEBM_AV1="DASH_WEBM_AV1",v.DASH_STREAMS="DASH_STREAMS",v.DASH_WEBM_VK="DASH_WEBM",v.DASH_ONDEMAND="DASH_ONDEMAND",v.DASH_ONDEMAND_VK="DASH_ONDEMAND",v.DASH_LIVE="DASH_LIVE",v.DASH_LIVE_CMAF="DASH_LIVE_CMAF",v.DASH_LIVE_WEBM="DASH_LIVE_WEBM",v.HLS="HLS",v.HLS_ONDEMAND="HLS_ONDEMAND",v.HLS_JS="HLS",v.HLS_LIVE="HLS_LIVE",v.HLS_LIVE_CMAF="HLS_LIVE_CMAF",v.WEB_RTC_LIVE="WEB_RTC_LIVE",v))(wt||{});var $s=(r=>(r.NOT_AVAILABLE="NOT_AVAILABLE",r.AVAILABLE="AVAILABLE",r.CONNECTING="CONNECTING",r.CONNECTED="CONNECTED",r))($s||{}),un=(i=>(i.HTTP1="http1",i.HTTP2="http2",i.QUIC="quic",i))(un||{});var ln=(a=>(a.NONE="none",a.INLINE="inline",a.FULLSCREEN="fullscreen",a.SECOND_SCREEN="second_screen",a.PIP="pip",a.INVISIBLE="invisible",a))(ln||{}),Bs=(i=>(i.TRAFFIC_SAVING="traffic_saving",i.HIGH_QUALITY="high_quality",i.UNKNOWN="unknown",i))(Bs||{});import{assertNever as Go,assertNonNullable as ed,isNonNullable as Rs,ValueSubject as cn,Subject as td,Subscription as id,merge as rd,observableFrom as sd,fromEvent as zo,map as Qo,tap as Wo,filterChanged as ad,isNullable as dn,ErrorCategory as qo}from"@vkontakte/videoplayer-shared/evergreen";var jo=n=>new Promise((e,t)=>{let i=document.createElement("script");i.setAttribute("src",n),i.onload=()=>e(),i.onerror=r=>t(r),document.body.appendChild(i)});var Ds=class{constructor(e){this.connection$=new cn(void 0);this.castState$=new cn("NOT_AVAILABLE");this.errorEvent$=new td;this.realCastState$=new cn("NOT_AVAILABLE");this.subscription=new id;this.isDestroyed=!1;this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");let t="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${t}`}),e.isDisabled||!t)return;let i=Rs(window.chrome?.cast),r=!!window.__onGCastApiAvailable;i?this.initializeCastApi():(window.__onGCastApiAvailable=s=>{delete window.__onGCastApiAvailable,s&&!this.isDestroyed&&this.initializeCastApi()},r||jo("https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1").catch(()=>this.errorEvent$.next({id:"ChromecastLoading",category:qo.NETWORK,message:"Script loading failed!"})))}connect(){cast.framework.CastContext.getInstance()?.requestSession()}disconnect(){cast.framework.CastContext.getInstance()?.getCurrentSession()?.endSession(!0)}stopMedia(){return new Promise((e,t)=>{cast.framework.CastContext.getInstance()?.getCurrentSession()?.getMediaSession()?.stop(new chrome.cast.media.StopRequest,e,t)})}toggleConnection(){Rs(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(e){let t=this.connection$.getValue();dn(t)||(t.remotePlayer.volumeLevel=e,t.remotePlayerController.setVolumeLevel())}setMuted(e){let t=this.connection$.getValue();dn(t)||e!==t.remotePlayer.isMuted&&t.remotePlayerController.muteOrUnmute()}destroy(){this.isDestroyed=!0,this.subscription.unsubscribe()}initListeners(){let e=new cast.framework.RemotePlayer,t=new cast.framework.RemotePlayerController(e),i=cast.framework.CastContext.getInstance();this.subscription.add(zo(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe(r=>{switch(r.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=i.getCurrentSession()?.getMediaSession()?.media?.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return Go(r.sessionState)}})).add(rd(zo(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(Wo(r=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(r)}`})}),Qo(r=>r.castState)),sd([i.getCastState()])).pipe(ad(),Qo(nd),Wo(r=>{this.log({message:`realCastState$: ${r}`})})).subscribe(this.realCastState$)).add(this.realCastState$.subscribe(r=>{let s=r==="CONNECTED",a=Rs(this.connection$.getValue());if(s&&!a){let o=i.getCurrentSession();ed(o);let u=o.getCastDevice(),l=o.getMediaSession()?.media?.contentId;(dn(l)||l===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:e,remotePlayerController:t,session:o,castDevice:u}))}else!s&&a&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r==="CONNECTED"?Rs(this.connection$.getValue())?"CONNECTED":"AVAILABLE":r)}))}initializeCastApi(){let e,t,i;try{e=cast.framework.CastContext.getInstance(),t=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,i=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch{return}try{e.setOptions({receiverApplicationId:this.params.receiverApplicationId??t,autoJoinPolicy:i}),this.initListeners()}catch(r){this.errorEvent$.next({id:"ChromecastInitializer",category:qo.EXTERNAL_API,message:"[initializeCastApi] failed",thrown:r})}}},nd=n=>{switch(n){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return"NOT_AVAILABLE";case cast.framework.CastState.NOT_CONNECTED:return"AVAILABLE";case cast.framework.CastState.CONNECTING:return"CONNECTING";case cast.framework.CastState.CONNECTED:return"CONNECTED";default:return Go(n)}};import{assertNever as Yo}from"@vkontakte/videoplayer-shared/evergreen";var pe=(n,e=0,t=0)=>{switch(t){case 0:return n.replace("_offset_p",e===0?"":"_"+e.toFixed(0));case 1:{if(e===0)return n;let i=new URL(n);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}case 2:{let i=new URL(n);return!i.searchParams.get("offset_p")&&e===0?n:(i.searchParams.set("offset_p",e.toFixed(0)),i.toString())}default:Yo(t)}return n},Ft=(n,e)=>{switch(e){case 0:return NaN;case 1:{let t=new URL(n);return Number(t.searchParams.get("playback_shift"))}case 2:{let t=new URL(n);return Number(t.searchParams.get("offset_p")??0)}default:Yo(e)}};var w=(n,e,t=!1)=>{let i=n.getTransition();(t||!i||i.to===e)&&n.setState(e)};import{isNonNullable as od,Subject as Vs,merge as Ko}from"@vkontakte/videoplayer-shared/evergreen";var F=class{constructor(e){this.transitionStarted$=new Vs;this.transitionEnded$=new Vs;this.transitionUpdated$=new Vs;this.forceChanged$=new Vs;this.stateChangeStarted$=Ko(this.transitionStarted$,this.transitionUpdated$);this.stateChangeEnded$=Ko(this.transitionEnded$,this.forceChanged$);this.state=e,this.prevState=void 0}setState(e){let t=this.transition,i=this.state;this.transition=void 0,this.prevState=i,this.state=e,t?t.to===e?this.transitionEnded$.next(t):this.forceChanged$.next({from:t.from,to:e,canceledTransition:t}):this.forceChanged$.next({from:i,to:e,canceledTransition:t})}startTransitionTo(e){let t=this.transition,i=this.state;i===e||od(t)&&t.to===e||(this.prevState=i,this.state=e,t?(this.transition={from:t.from,to:e,canceledTransition:t},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:e},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}getPrevState(){return this.prevState}};import{assertNever as ud}from"@vkontakte/videoplayer-shared/evergreen";var Xo=n=>{switch(n){case"MPEG":case"DASH":case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":case"HLS":case"HLS_ONDEMAND":return!1;case"DASH_LIVE":case"DASH_LIVE_CMAF":case"HLS_LIVE":case"HLS_LIVE_CMAF":case"DASH_LIVE_WEBM":case"WEB_RTC_LIVE":return!0;default:return ud(n)}};import{assertNever as mi,assertNonNullable as Zt,debounce as Jo,ErrorCategory as Zo,fromEvent as ei,isNonNullable as eu,map as tu,merge as iu,observableFrom as ld,Subject as cd,Subscription as pn,timeout as dd,getHighestQuality as pd}from"@vkontakte/videoplayer-shared/evergreen";var hd=5,md=5,fd=500,ru=7e3,Hi=class{constructor(e){this.subscription=new pn;this.loadMediaTimeoutSubscription=new pn;this.videoState=new F("stopped");this.syncPlayback=()=>{let e=this.videoState.getState(),t=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),s=this.params.desiredState.seekState.getState();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(t)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekState: ${JSON.stringify(s)};`}),i==="stopped"){e!=="stopped"&&(this.videoState.startTransitionTo("stopped"),this.stop());return}if(!t){if(r?.to!=="paused"&&s.state==="requested"&&e!=="stopped"){this.seek(s.position/1e3);return}switch(i){case"ready":{switch(e){case"playing":case"paused":case"ready":break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}case"playing":{switch(e){case"playing":break;case"paused":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"ready":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}case"paused":{switch(e){case"playing":this.videoState.startTransitionTo("paused"),this.params.connection.remotePlayerController.playOrPause();break;case"paused":break;case"ready":this.videoState.startTransitionTo("paused"),this.videoState.setState("paused");break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}default:mi(i)}}};this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${e.format}`}),this.params.output.isLive$.next(Xo(e.format)),this.params.output.isAudioAvailable$.next(!0),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});let t=this.params.connection.session.getMediaSession();t&&this.restoreSession(t),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);let e=new pn;this.subscription.add(e),this.subscription.add(iu(this.videoState.stateChangeStarted$.pipe(tu(r=>`stateChangeStarted$ ${JSON.stringify(r)}`)),this.videoState.stateChangeEnded$.pipe(tu(r=>`stateChangeEnded$ ${JSON.stringify(r)}`))).subscribe(r=>this.log({message:`[videoState] ${r}`})));let t=(r,s)=>this.subscription.add(r.subscribe(s));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{let r=new cd;e.add(r.pipe(Jo(fd)).subscribe(()=>{this.params.output.seekedEvent$.next()}));let s=NaN;e.add(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe(a=>{this.logRemoteEvent(a);let o=a.value;this.params.output.position$.next(o),(this.params.desiredState.seekState.getState().state==="applying"||Math.abs(o-s)>hd)&&r.next(o),s=o})),e.add(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe(a=>{this.logRemoteEvent(a),this.params.output.duration$.next(a.value)}))}t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemoteReady():(this.handleRemoteStop(),e.unsubscribe())}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemotePause():this.handleRemotePlay()}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),r=>{this.logRemoteEvent(r);let{remotePlayer:s}=this.params.connection,a=r.value,o=this.params.output.isBuffering$.getValue(),u=a===chrome.cast.media.PlayerState.BUFFERING;switch(o!==u&&this.params.output.isBuffering$.next(u),a){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&s.duration-s.currentTime<md&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),w(this.params.desiredState.playbackState,"stopped");break;case chrome.cast.media.PlayerState.PAUSED:{this.handleRemotePause();break}case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:mi(a)}}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({volume:r.value})}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({muted:r.value})});let i=iu(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekState.stateChangeEnded$,this.videoState.stateChangeEnded$,ld(["init"])).pipe(Jo(0));t(i,this.syncPlayback)}restoreSession(e){this.log({message:"restoreSession"});let{remotePlayer:t}=this.params.connection;if(e.playerState!==chrome.cast.media.PlayerState.IDLE){t.isPaused?(this.videoState.setState("paused"),w(this.params.desiredState.playbackState,"paused")):(this.videoState.setState("playing"),w(this.params.desiredState.playbackState,"playing"));let i=this.params.output.isLive$.getValue();this.params.output.duration$.next(i?0:t.duration),this.params.output.position$.next(i?0:t.currentTime),this.params.desiredState.seekState.setState({state:"none"})}}prepare(){let e=this.params.format;this.log({message:`[prepare] format: ${e}`});let t=this.createMediaInfo(e),i=this.createLoadRequest(t);this.loadMedia(i)}handleRemotePause(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="paused"||e==="playing")&&(this.videoState.setState("paused"),w(this.params.desiredState.playbackState,"paused"))}handleRemotePlay(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="playing"||e==="paused")&&(this.videoState.setState("playing"),w(this.params.desiredState.playbackState,"playing"))}handleRemoteReady(){this.videoState.getTransition()?.to==="ready"&&this.videoState.setState("ready"),this.params.desiredState.playbackState.getTransition()?.to==="ready"&&w(this.params.desiredState.playbackState,"ready")}handleRemoteStop(){this.videoState.getState()!=="stopped"&&this.videoState.setState("stopped")}handleRemoteVolumeChange(e){let t=this.params.output.volume$.getValue(),i={volume:e.volume??t.volume,muted:e.muted??t.muted};(i.volume!==t.volume||i.muted!==i.muted)&&this.params.output.volume$.next(i)}seek(e){this.params.output.willSeekEvent$.next();let{remotePlayer:t,remotePlayerController:i}=this.params.connection;t.currentTime=e,i.seek()}stop(){let{remotePlayerController:e}=this.params.connection;e.stop()}createMediaInfo(e){let t=this.params.source,i,r,s;switch(e){case"MPEG":{let l=t[e];Zt(l);let p=pd(Object.keys(l));Zt(p);let c=l[p];Zt(c),i=c,r="video/mp4",s=chrome.cast.media.StreamType.BUFFERED;break}case"HLS":case"HLS_ONDEMAND":{let l=t[e];Zt(l),i=l.url,r="application/x-mpegurl",s=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":{let l=t[e];Zt(l),i=l.url,r="application/dash+xml",s=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_LIVE_CMAF":{let l=t[e];Zt(l),i=l.url,r="application/dash+xml",s=chrome.cast.media.StreamType.LIVE;break}case"HLS_LIVE":case"HLS_LIVE_CMAF":{let l=t[e];Zt(l),i=pe(l.url),r="application/x-mpegurl",s=chrome.cast.media.StreamType.LIVE;break}case"DASH_LIVE":case"WEB_RTC_LIVE":{let l="Unsupported format for Chromecast",p=new Error(l);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",category:Zo.VIDEO_PIPELINE,message:l,thrown:p}),p}case"DASH":case"DASH_LIVE_WEBM":throw new Error(`${e} is no longer supported`);default:return mi(e)}let a=new chrome.cast.media.MediaInfo(this.params.meta.videoId??i,r);a.contentUrl=i,a.streamType=s,a.metadata=new chrome.cast.media.GenericMediaMetadata;let{title:o,subtitle:u}=this.params.meta;return eu(o)&&(a.metadata.title=o),eu(u)&&(a.metadata.subtitle=u),a}createLoadRequest(e){let t=new chrome.cast.media.LoadRequest(e);t.autoplay=!1;let i=this.params.desiredState.seekState.getState();return i.state==="applying"||i.state==="requested"?t.currentTime=this.params.output.isLive$.getValue()?0:i.position/1e3:t.currentTime=0,t}loadMedia(e){let t=this.params.connection.session.loadMedia(e),i=new Promise((r,s)=>{this.loadMediaTimeoutSubscription.add(dd(ru).subscribe(()=>s(`timeout(${ru})`)))});Promise.race([t,i]).then(()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`}),this.params.desiredState.seekState.getState().state==="applying"&&this.params.output.seekedEvent$.next(),this.handleRemoteReady()},r=>{let s=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${r}`;this.log({message:s}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",category:Zo.VIDEO_PIPELINE,message:s,thrown:r})}).finally(()=>{this.loadMediaTimeoutSubscription.unsubscribe()})}logRemoteEvent(e){this.log({message:`[remoteEvent] ${JSON.stringify(e)}`})}};import{clearVideoElement as au}from"@vkontakte/videoplayer-shared/evergreen";import{clearVideoElement as bd}from"@vkontakte/videoplayer-shared/evergreen";var su=n=>{try{n.pause(),n.playbackRate=0,bd(n),n.remove()}catch(e){console.error(e)}};import{fromEvent as gd,Subscription as Sd}from"@vkontakte/videoplayer-shared/evergreen";var hn=class{constructor(){this.attribute="data-pool-reused"}get(e){return e.hasAttribute(this.attribute)}set(e,t){e.toggleAttribute(this.attribute,t)}delete(e){e.removeAttribute(this.attribute)}},mn=window.WeakMap?new WeakMap:new hn,fn=window.WeakMap?new WeakMap:new Map,vd=(n,e=20)=>{let t=0;return gd(n,"ratechange").subscribe(i=>{t++,t>=e&&(n.currentTime=n.currentTime,t=0)})},ke=(n,{audioVideoSyncRate:e,disableYandexPiP:t})=>{let i=n.querySelector("video"),r=!!i;i?au(i):(i=document.createElement("video"),n.appendChild(i)),mn.set(i,r);let s=new Sd;return s.add(vd(i,e)),fn.set(i,s),i.setAttribute("crossorigin","anonymous"),i.setAttribute("playsinline","playsinline"),t&&i.setAttribute("x-yandex-pip","false"),i.controls=!1,i.setAttribute("poster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),i},Ae=n=>{fn.get(n)?.unsubscribe(),fn.delete(n);let t=mn.get(n);mn.delete(n),t?au(n):su(n)};import{assertNonNullable as ji,isNonNullable as mt,isNullable as Id,fromEvent as fi,merge as nu,observableFrom as ou,filterChanged as uu,map as zi,Subject as lu,Subscription as xd,ValueSubject as Ed,ErrorCategory as kd}from"@vkontakte/videoplayer-shared/evergreen";import{isNonNullable as bn,isNullable as yd,Subscription as Td}from"@vkontakte/videoplayer-shared/evergreen";var Cs=(n,e,t,{equal:i=(a,o)=>a===o,changed$:r,onError:s}={})=>{let a=n.getState(),o=e(),u=yd(r),l=new Td;return r&&l.add(r.subscribe(p=>{let c=n.getState();i(p,c)&&n.setState(p)},s)),i(o,a)||(t(a),u&&n.setState(a)),l.add(n.stateChangeStarted$.subscribe(p=>{t(p.to),u&&n.setState(p.to)},s)),l},rt=(n,e,t)=>Cs(e,()=>n.loop,i=>{bn(i)&&(n.loop=i)},{onError:t}),we=(n,e,t,i)=>Cs(e,()=>({muted:n.muted,volume:n.volume}),r=>{bn(r)&&(n.muted=r.muted,n.volume=r.volume)},{equal:(r,s)=>r===s||r?.muted===s?.muted&&r?.volume===s?.volume,changed$:t,onError:i}),He=(n,e,t,i)=>Cs(e,()=>n.playbackRate,r=>{bn(r)&&(n.playbackRate=r)},{changed$:t,onError:i}),Nt=Cs;var Ad=n=>["__",n.language,n.label].join("|"),wd=(n,e)=>{if(n.id===e)return!0;let[t,i,r]=e.split("|");return n.language===i&&n.label===r},gn=class n{constructor(e){this.available$=new lu;this.current$=new Ed(void 0);this.error$=new lu;this.subscription=new xd;this.externalTracks=new Map;this.internalTracks=new Map;this.baseURL=e}connect(e,t,i){this.video=e,this.cueSettings=t.textTrackCuesSettings,this.subscribe();let r=s=>{this.error$.next({id:"TextTracksManager",category:kd.WTF,message:"Generic HtmlVideoTextTrackManager error",thrown:s})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(Nt(t.internalTextTracks,()=>Object.values(this.internalTracks),s=>{mt(s)&&this.setInternal(s)},{equal:(s,a)=>mt(s)&&mt(a)&&s.length===a.length&&s.every(({id:o},u)=>o===a[u].id),changed$:this.available$.pipe(zi(s=>s.filter(({type:a})=>a==="internal"))),onError:r})),this.subscription.add(Nt(t.externalTextTracks,()=>Object.values(this.externalTracks),s=>{mt(s)&&this.setExternal(s)},{equal:(s,a)=>mt(s)&&mt(a)&&s.length===a.length&&s.every(({id:o},u)=>o===a[u].id),changed$:this.available$.pipe(zi(s=>s.filter(({type:a})=>a==="external"))),onError:r})),this.subscription.add(Nt(t.currentTextTrack,()=>{if(this.video)return;let s=this.htmlTextTracksAsArray().find(({mode:a})=>a==="showing");return s&&this.htmlTextTrackToITextTrack(s).id},s=>this.select(s),{changed$:this.current$,onError:r})),this.subscription.add(Nt(t.textTrackCuesSettings,()=>({}),()=>{if(this.video)for(let s of this.htmlTextTracksAsArray())this.applyCueSettings(s.cues),this.applyCueSettings(s.activeCues)}))}subscribe(){ji(this.video);let{textTracks:e}=this.video;this.subscription.add(fi(e,"addtrack").subscribe(()=>{let i=this.current$.getValue();i&&this.select(i)})),this.subscription.add(nu(fi(e,"addtrack"),fi(e,"removetrack"),ou(["init"])).pipe(zi(()=>this.htmlTextTracksAsArray().map(i=>this.htmlTextTrackToITextTrack(i))),uu((i,r)=>i.length===r.length&&i.every(({id:s},a)=>s===r[a].id))).subscribe(this.available$)),this.subscription.add(nu(fi(e,"change"),ou(["init"])).pipe(zi(()=>this.htmlTextTracksAsArray().find(({mode:i})=>i==="showing")),zi(i=>i&&this.htmlTextTrackToITextTrack(i).id),uu()).subscribe(this.current$));let t=i=>this.applyCueSettings(i.target?.activeCues??null);this.subscription.add(fi(e,"addtrack").subscribe(i=>{i.track?.addEventListener("cuechange",t);let r=s=>{let a=s.target?.cues??null;a&&a.length&&(this.applyCueSettings(s.target?.cues??null),s.target?.removeEventListener("cuechange",r))};i.track?.addEventListener("cuechange",r)})),this.subscription.add(fi(e,"removetrack").subscribe(i=>{i.track?.removeEventListener("cuechange",t)}))}applyCueSettings(e){if(!e||!e.length)return;let t=this.cueSettings.getState();for(let i of Array.from(e)){let r=i;mt(t.align)&&(r.align=t.align),mt(t.position)&&(r.position=t.position),mt(t.size)&&(r.size=t.size),mt(t.line)&&(r.line=t.line)}}htmlTextTracksAsArray(e=!1){ji(this.video);let t=[...this.video.textTracks];return e?t:t.filter(n.isHealthyTrack)}htmlTextTrackToITextTrack(e){let{language:t,label:i}=e,r=e.id?e.id:Ad(e),s=this.externalTracks.has(r),a=(s?this.externalTracks.get(r)?.isAuto:this.internalTracks.get(r)?.isAuto)??r.includes("auto");return s?{id:r,type:"external",isAuto:a,language:t,label:i,url:this.externalTracks.get(r)?.url}:{id:r,type:"internal",isAuto:a,language:t,label:i,url:this.internalTracks.get(r)?.url}}static isHealthyTrack(e){return!(e.kind==="metadata"||e.groupId||e.id===""&&e.label===""&&e.language==="")}setExternal(e){this.internalTracks.size>0&&Array.from(this.internalTracks).forEach(([,t])=>this.detach(t)),e.filter(({id:t})=>!this.externalTracks.has(t)).forEach(t=>this.attach(t)),Array.from(this.externalTracks).filter(([t])=>!e.find(i=>i.id===t)).forEach(([,t])=>this.detach(t))}setInternal(e){let t=[...this.externalTracks];e.filter(({id:i,language:r,isAuto:s})=>!this.internalTracks.has(i)&&!t.some(([,a])=>a.language===r&&a.isAuto===s)).forEach(i=>this.attach(i)),Array.from(this.internalTracks).filter(([i])=>!e.find(r=>r.id===i)).forEach(([,i])=>this.detach(i))}select(e){ji(this.video);for(let t of this.htmlTextTracksAsArray(!0))t.mode="showing";for(let t of this.htmlTextTracksAsArray(!0))(Id(e)||!wd(t,e))&&(t.mode="disabled")}destroy(){if(this.subscription.unsubscribe(),this.video)for(let e of Array.from(this.video.getElementsByTagName("track"))){let t=e.getAttribute("id");t&&this.externalTracks.has(t)&&this.video.removeChild(e)}this.externalTracks.clear()}attach(e){ji(this.video);let t=document.createElement("track");this.baseURL?t.setAttribute("src",new URL(e.url,this.baseURL).toString()):t.setAttribute("src",e.url),t.setAttribute("id",e.id),e.label&&t.setAttribute("label",e.label),e.language&&t.setAttribute("srclang",e.language),e.type==="external"?this.externalTracks.set(e.id,e):e.type==="internal"&&this.internalTracks.set(e.id,e),this.video.appendChild(t)}detach(e){ji(this.video);let t=Array.prototype.find.call(this.video.getElementsByTagName("track"),i=>i.getAttribute("id")===e.id);t&&this.video.removeChild(t),e.type==="external"?this.externalTracks.delete(e.id):e.type==="internal"&&this.internalTracks.delete(e.id)}},je=gn;var ti=class{constructor(){this.pausedTime=0;this.streamOffset=0;this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){this.pauseTimestamp===0&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(e,t=!1){this.streamOffset=e,this.pauseTimestamp=0,this.pausedTime=0,t&&this.pause()}};var cu=n=>{let e=n;for(;!(e instanceof Document)&&!(e instanceof ShadowRoot)&&e!==null;)e=e?.parentNode;return e??void 0},Sn=n=>{let e=cu(n);return!!(e&&e.fullscreenElement&&e.fullscreenElement===n)},du=n=>{let e=cu(n);return!!(e&&e.pictureInPictureElement&&e.pictureInPictureElement===n)};import{fromEvent as Oe,map as ft,merge as js,filterChanged as Su,isNonNullable as vu,Subject as Cd,filter as yn,mapTo as Tn,combine as Od,once as Fd,throttle as Nd,ErrorCategory as _d,ValueSubject as yu,Subscription as Ud}from"@vkontakte/videoplayer-shared/evergreen";var Pd=3,pu=(n,e,t=Pd)=>{let i=0,r=0;for(let s=0;s<n.length;s++){let a=n.start(s),o=n.end(s);if(a<=e&&e<=o){if(i=a,r=o,!t)return{from:i,to:r};for(let u=s-1;u>=0;u--)n.end(u)+t>=i&&(i=n.start(u));for(let u=s+1;u<n.length;u++)n.start(u)-t<=r&&(r=n.end(u))}}return{from:i,to:r}};var Os=class{constructor(){this._isMiuiBrowser=!1}get current(){return this._current}get isYandex(){return this.current==="Yandex"}get isSafari(){return this.current==="Safari"}get isFirefox(){return this.current==="Firefox"}get isSamsungBrowser(){return this.current==="SamsungBrowser"}get safariVersion(){return this._safariVersion}get isMiuiBrowser(){return this._isMiuiBrowser}detect(){let{userAgent:e}=navigator;try{let t=/yabrowser/i.test(e)?"Yandex":void 0,i=/samsungbrowser/i.test(e)?"SamsungBrowser":void 0,r=/chrome|crios/i.test(e)?"Chrome":void 0,s=/chromium/i.test(e)?"Chromium":void 0,a=/firefox|fxios/i.test(e)?"Firefox":void 0,o=/webkit|safari|khtml/i.test(e)?"Safari":void 0,u=/opr\//i.test(e)?"Opera":void 0,l=/edg/i.test(e)?"Edge":void 0;this._isMiuiBrowser=/(XiaoMi)|(MiuiBrowser)/i.test(e),this._current=t||i||a||u||l||r||s||o||"Rest"}catch(t){console.error(t)}this.isSafari&&this.detectSafariVersion()}detectSafariVersion(){try{let{userAgent:e}=window.navigator,t=e.match(/Version\/(\d+)/);if(!t)return;let i=t[1],r=parseInt(i,10);if(isNaN(r))return;this._safariVersion=r}catch(e){console.error(e)}}};var Qi=()=>/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion??navigator.userAgent)||navigator?.userAgentData?.mobile;var Fs=class{constructor(e){this._highEntropyValues={};this._displayChecker=e}get current(){return this._current}get isIOS(){let e=["iPhone","iPad","iPod"];return this._highEntropyValues.platform==="iOS"||e.includes(this.current)}get isMac(){return this._highEntropyValues.platform==="macOS"||this.current==="Mac"}get isApple(){return this.isIOS||this.isMac}get isIphoneOrOldIpad(){if(!this.isApple||!this._displayChecker.isTouch)return!1;let e=this.current==="iPad"||this._displayChecker.width>700,t=this._iosVersion;return!e||e&&!!t&&t<16}get isAndroid(){return this._highEntropyValues.platform==="Android"||this.current==="Android"}get isMobile(){return this._highEntropyValues.mobile||this._isMobile}get iOSVersion(){return this._iosVersion}detect(){let{userAgent:e}=navigator;try{this._isMobile=Qi()}catch(t){console.error(t)}this.detectDevice(e),this.detectHighEntropyValues(),this.isIOS&&this.detectIOSVersion()}async detectHighEntropyValues(){let{userAgentData:e}=navigator;if(e?.getHighEntropyValues){let t=await e.getHighEntropyValues(["architecture","bitness","brands","mobile","platform","formFactor","model","platformVersion","wow64"]);this._highEntropyValues=t}}detectDevice(e){try{let t=/android/i.test(e)?"Android":void 0,i=/iphone/i.test(e)?"iPhone":void 0,r=/ipad/i.test(e)?"iPad":void 0,s=/ipod/i.test(e)?"iPod":void 0,a=/mac/i.test(e)?"Mac":void 0,o=/webOS|BlackBerry|IEMobile|Opera Mini/i.test(e)?"RestMobile":void 0;this._current=t||i||r||s||o||a||"Desktop"}catch(t){console.error(t)}}detectIOSVersion(){try{if(this._highEntropyValues.platformVersion){let s=this._highEntropyValues.platformVersion.split(".").slice(0,2).join("."),a=parseFloat(s);this._iosVersion=a;return}let{userAgent:e}=window.navigator,t=e.match(/OS (\d+(_\d+)?)/i);if(!t)return;let i=t[1].replace(/_/g,".");if(!i)return;let r=parseFloat(i);if(isNaN(r))return;this._iosVersion=r}catch(e){console.error(e)}}};var Ns=class{get isTouch(){return typeof this._maxTouchPoints=="number"?this._maxTouchPoints>1:"ontouchstart"in window}get maxTouchPoints(){return this._maxTouchPoints}get height(){return this._height}get width(){return this._width}get screenHeight(){return this._screenHeight}get screenWidth(){return this._screenWidth}get pixelRatio(){return this._pixelRatio}get isHDR(){return this._isHdr}get colorDepth(){return this._colorDepth}detect(){let{maxTouchPoints:e}=navigator;try{this._maxTouchPoints=e??0,this._isHdr=!!matchMedia("(dynamic-range: high)")?.matches,this._colorDepth=screen.colorDepth}catch(t){console.error(t)}try{this._pixelRatio=window.devicePixelRatio||1,this._height=screen.height,this._width=screen.width,this._height=screen.height,this._screenHeight=this._height*this._pixelRatio,this._screenWidth=this._width*this._pixelRatio}catch(t){console.error(t)}}};var tt=()=>window.ManagedMediaSource||window.MediaSource,bi=()=>!!(window.ManagedMediaSource&&window.ManagedSourceBuffer?.prototype?.appendBuffer),hu=()=>!!(window.MediaSource&&window.SourceBuffer?.prototype?.appendBuffer),_s=()=>window.ManagedMediaSource?new ManagedMediaSource:new MediaSource;var Md=document.createElement("video"),Ld='video/mp4; codecs="avc1.42000a,mp4a.40.2"',$d='video/mp4; codecs="hev1.1.6.L93.B0"',mu='video/webm; codecs="vp09.00.10.08"',fu='video/webm; codecs="av01.0.00M.08"',Bd='audio/mp4; codecs="mp4a.40.2"',Rd='audio/webm; codecs="opus"',bu,Dd=async()=>{if(!window.navigator.mediaCapabilities)return;let n={type:"media-source",video:{contentType:"video/webm",width:1280,height:720,bitrate:1e6,framerate:30}},[e,t]=await Promise.all([window.navigator.mediaCapabilities.decodingInfo({...n,video:{...n.video,contentType:fu}}),window.navigator.mediaCapabilities.decodingInfo({...n,video:{...n.video,contentType:mu}})]);bu={DASH_WEBM_AV1:e,DASH_WEBM:t}};Dd().catch(n=>{console.log(Md),console.error(n)});var Us=class{constructor(e,t){this._deviceChecker=e,this._browserChecker=t}get protocols(){return this._protocols}get containers(){return this._containers}get codecs(){return this._codecs}get webmDecodingInfo(){return bu}get supportedCodecs(){return Object.keys(this._codecs).filter(e=>this._codecs[e])}get nativeHlsSupported(){return this._nativeHlsSupported}detect(){this._video=document.createElement("video");try{this._protocols={mms:bi(),mse:hu(),hls:!!(this._video.canPlayType?.("application/x-mpegurl")||this._video.canPlayType?.("vnd.apple.mpegURL")),webrtc:!!window.RTCPeerConnection,ws:!!window.WebSocket},this._containers={mp4:!!this._video.canPlayType?.("video/mp4"),webm:!!this._video.canPlayType?.("video/webm"),cmaf:!0};let e=!!tt()?.isTypeSupported?.(Ld),t=!!tt()?.isTypeSupported?.($d),i=!!tt()?.isTypeSupported?.(Bd);this._codecs={h264:e,h265:t,vp9:!!tt()?.isTypeSupported?.(mu),av1:!!tt()?.isTypeSupported?.(fu),aac:i,opus:!!tt()?.isTypeSupported?.(Rd),mpeg:(e||t)&&i},this._nativeHlsSupported=this._protocols.hls&&this._containers.mp4}catch(e){console.error(e)}this.destroyVideoElement()}destroyVideoElement(){if(!this._video)return;if(this._video.pause(),this._video.currentTime=0,this._video.removeAttribute("src"),this._video.src="",this._video.load(),this._video.remove){this._video.remove(),this._video=null;return}this._video.parentNode&&this._video.parentNode.removeChild(this._video);let e=this._video.cloneNode(!1);this._video.parentNode?.replaceChild(e,this._video),this._video=null}};var gu="audio/mpeg",Hs=class{supportMp3(){return this._codecs.mp3&&this._containers.mpeg}detect(){this._audio=document.createElement("audio");try{this._containers={mpeg:!!this._audio.canPlayType?.(gu)},this._codecs={mp3:!!tt()?.isTypeSupported?.(gu)}}catch(e){console.error(e)}this.destroyAudioElement()}destroyAudioElement(){if(!this._audio)return;if(this._audio.pause(),this._audio.currentTime=0,this._audio.removeAttribute("src"),this._audio.src="",this._audio.load(),this._audio.remove){this._audio.remove(),this._audio=null;return}this._audio.parentNode&&this._audio.parentNode.removeChild(this._audio);let e=this._audio.cloneNode(!1);this._audio.parentNode?.replaceChild(e,this._audio),this._audio=null}};import{ValueSubject as Vd}from"@vkontakte/videoplayer-shared/evergreen";var vn=class{constructor(){this.isInited$=new Vd(!1);this._displayChecker=new Ns,this._deviceChecker=new Fs(this._displayChecker),this._browserChecker=new Os,this._videoChecker=new Us(this._deviceChecker,this._browserChecker),this._audioChecker=new Hs,this.detect()}get display(){return this._displayChecker}get device(){return this._deviceChecker}get browser(){return this._browserChecker}get video(){return this._videoChecker}get audio(){return this._audioChecker}async detect(){this._displayChecker.detect(),this._deviceChecker.detect(),this._browserChecker.detect(),this._videoChecker.detect(),this._audioChecker.detect(),this.isInited$.next(!0)}},C=new vn;var Pe=n=>{let e=S=>Oe(n,S).pipe(Tn(void 0)),t=new Ud,i=()=>t.unsubscribe(),r=js(Oe(n,"progress"),Oe(n,"timeupdate")).pipe(ft(()=>pu(n.buffered,n.currentTime))),s=C.browser.isSafari?Od({play:e("play").pipe(Fd()),playing:e("playing")}).pipe(Tn(void 0)):e("playing"),a=Oe(n,"volumechange").pipe(ft(()=>({muted:n.muted,volume:n.volume}))),o=Oe(n,"ratechange").pipe(ft(()=>n.playbackRate)),u=Oe(n,"error").pipe(yn(()=>!!(n.error||n.played.length)),ft(()=>{let S=n.error;return{id:S?`MediaError#${S.code}`:"HtmlVideoError",category:_d.VIDEO_PIPELINE,message:S?S.message:"Error event from HTML video element",thrown:n.error??void 0}})),l=Oe(n,"timeupdate").pipe(ft(()=>n.currentTime)),p=["waiting","seeking","seeked","timeupdate"],c=new Cd,d=.3,h;t.add(js(...p.map(S=>Oe(n,S))).subscribe(S=>{let R=n.currentTime;n.loop&&vu(h)&&vu(R)&&h>=n.duration-d&&R<=d&&c.next(h),h=R}));let m=e("pause").pipe(yn(()=>!n.error&&h!==n.duration)),f=Oe(n,"enterpictureinpicture"),b=Oe(n,"leavepictureinpicture"),g=new yu(du(n));t.add(f.subscribe(()=>g.next(!0))),t.add(b.subscribe(()=>g.next(!1)));let E=new yu(Sn(n)),v=Oe(n,"fullscreenchange");t.add(v.pipe(ft(()=>Sn(n))).subscribe(E));let I=.1,x=1e3,L=Oe(n,"timeupdate").pipe(ft(S=>n.duration-n.currentTime<I),Su()),V=js(L.pipe(yn(S=>!n.loop&&S)),Oe(n,"ended")).pipe(Nd(x),Tn(void 0)),A=js(...["waiting","pause","canplay","play","canplaythrough","playing","seeking","seeked","ended"].map(S=>Oe(n,S)),L.pipe(ft(S=>({type:S?"ended":"unknown"})))).pipe(ft(S=>C.browser.isFirefox&&S.type==="ended"?n.readyState<2:n.readyState<3),Su());return{playing$:s,pause$:m,canplay$:e("canplay"),ended$:V,looped$:c,error$:u,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadStart$:e("loadstart"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:l,durationChange$:Oe(n,"durationchange").pipe(ft(()=>n.duration)),isBuffering$:A,currentBuffer$:r,volumeState$:a,playbackRateState$:o,inPiP$:g,inFullscreen$:E,enterPip$:f,leavePip$:b,destroy:i}};import{VideoQuality as _t}from"@vkontakte/videoplayer-shared/evergreen";var bt=n=>{switch(n){case"mobile":return _t.Q_144P;case"lowest":return _t.Q_240P;case"low":return _t.Q_360P;case"sd":case"medium":return _t.Q_480P;case"hd":case"high":return _t.Q_720P;case"fullhd":case"full":return _t.Q_1080P;case"quadhd":case"quad":return _t.Q_1440P;case"ultrahd":case"ultra":return _t.Q_2160P}};import{isNonNullable as Y,isNullable as Gs,now as Lu,isHigher as Ys,isHigherOrEqual as Si,isInvariantQuality as Ks,isLowerOrEqual as vi,videoSizeToQuality as $u,assertNotEmptyArray as Xs,assertNonNullable as Bu}from"@vkontakte/videoplayer-shared/evergreen";var In=!1,Pt={},Tu=n=>{In=n},Iu=()=>{Pt={}},xu=n=>{n(Pt)},Wi=(n,e)=>{In&&(Pt.meta=Pt.meta??{},Pt.meta[n]=e)},Fe=class{constructor(e){this.name=e}next(e){if(!In)return;Pt.series=Pt.series??{};let t=Pt.series[this.name]??[];t.push([Date.now(),e]),Pt.series[this.name]=t}};import{isHigher as Hd,isHigherOrEqual as rS,isLower as Eu,isLowerOrEqual as sS,isNonNullable as zs,isNullable as jd,videoHeightToQuality as Qs}from"@vkontakte/videoplayer-shared/evergreen";function xn(n,e,t){return!n.max&&n.min===e?"high_quality":!n.min&&n.max===t?"traffic_saving":"unknown"}function Ws(n,e,t){return!!n&&xn(n,e,t)==="high_quality"}function gi(n,e,t){return jd(n)||zs(n.min)&&zs(n.max)&&Eu(n.max,n.min)||zs(n.min)&&e&&Hd(n.min,e)||zs(n.max)&&t&&Eu(n.max,t)}function ku({limits:n,highestAvailableHeight:e,lowestAvailableHeight:t}){return gi({max:n?.max?Qs(n.max):void 0,min:n?.min?Qs(n.min):void 0},e?Qs(e):void 0,t?Qs(t):void 0)}var Ru=new Fe("best_bitrate"),Js=(n,e,t)=>(e-t)*Math.pow(2,-10*n)+t;var yi=n=>(e,t)=>n*(Number(e.bitrate)-Number(t.bitrate)),Ut=class{constructor(){this.history={}}recordSelection(e){this.history[e.id]=Lu()}recordSwitch(e){this.last=e}clear(){this.last=void 0,this.history={}}},Zs='Assertion "ABR Tracks is empty array" failed',qs=new WeakMap,Au=new WeakMap,wu=new WeakMap,qi=(n,e,t,i)=>{let r=[...e].sort(yi(1)),s=[...t].sort(yi(1)),a=s.filter(u=>Y(u.bitrate)&&Y(n.bitrate)?n.bitrate/u.bitrate>i:!0),o=s.at(Math.round(s.length*r.indexOf(n)/(r.length+1)))??s.at(-1);return o&&a.includes(o)?o:a.length?a.at(-1):s.at(0)},Gi=(n,e,t,i)=>{let r=qs.get(e);r||(r=[...e].sort(yi(1)),qs.set(e,r));let s=qs.get(t);s||(s=[...t].sort(yi(1)),qs.set(t,s));let a=wu.get(n);a||(a=s.filter(u=>Y(u.bitrate)&&Y(n.bitrate)?n.bitrate/u.bitrate>i:!0),wu.set(n,a));let o=s.at(Math.round(s.length*r.indexOf(n)/(r.length+1)))??s.at(-1);return o&&a.includes(o)?o:a.length?a.at(-1):s.at(0)},Pu=n=>"quality"in n,ea=(n,e,t,i)=>{let r=Y(i?.last?.bitrate)&&Y(t?.bitrate)&&i.last.bitrate<t.bitrate?n.trackCooldownIncreaseQuality:n.trackCooldownDecreaseQuality,s=t&&i&&i.history[t.id]&&Lu()-i.history[t.id]<=r&&(!i.last||t.id!==i.last.id);if(t?.id&&i&&!s&&i.recordSelection(t),s&&i?.last){let a=i.last;i?.recordSwitch(a);let o=Pu(a)?"video":"audio",u=Pu(a)?a.quality:a.bitrate;return e({message:`
|
|
6
|
+
var Ho="2.0.134-dev.6250ee46.0";var Ue=(r=>(r.STOPPED="stopped",r.READY="ready",r.PLAYING="playing",r.PAUSED="paused",r))(Ue||{}),wt=(v=>(v.MPEG="MPEG",v.DASH="DASH",v.DASH_SEP="DASH_SEP",v.DASH_SEP_VK="DASH_SEP",v.DASH_WEBM="DASH_WEBM",v.DASH_WEBM_AV1="DASH_WEBM_AV1",v.DASH_STREAMS="DASH_STREAMS",v.DASH_WEBM_VK="DASH_WEBM",v.DASH_ONDEMAND="DASH_ONDEMAND",v.DASH_ONDEMAND_VK="DASH_ONDEMAND",v.DASH_LIVE="DASH_LIVE",v.DASH_LIVE_CMAF="DASH_LIVE_CMAF",v.DASH_LIVE_WEBM="DASH_LIVE_WEBM",v.HLS="HLS",v.HLS_ONDEMAND="HLS_ONDEMAND",v.HLS_JS="HLS",v.HLS_LIVE="HLS_LIVE",v.HLS_LIVE_CMAF="HLS_LIVE_CMAF",v.WEB_RTC_LIVE="WEB_RTC_LIVE",v))(wt||{});var $s=(r=>(r.NOT_AVAILABLE="NOT_AVAILABLE",r.AVAILABLE="AVAILABLE",r.CONNECTING="CONNECTING",r.CONNECTED="CONNECTED",r))($s||{}),un=(i=>(i.HTTP1="http1",i.HTTP2="http2",i.QUIC="quic",i))(un||{});var ln=(a=>(a.NONE="none",a.INLINE="inline",a.FULLSCREEN="fullscreen",a.SECOND_SCREEN="second_screen",a.PIP="pip",a.INVISIBLE="invisible",a))(ln||{}),Bs=(i=>(i.TRAFFIC_SAVING="traffic_saving",i.HIGH_QUALITY="high_quality",i.UNKNOWN="unknown",i))(Bs||{});import{assertNever as Go,assertNonNullable as ed,isNonNullable as Rs,ValueSubject as cn,Subject as td,Subscription as id,merge as rd,observableFrom as sd,fromEvent as zo,map as Qo,tap as Wo,filterChanged as ad,isNullable as dn,ErrorCategory as qo}from"@vkontakte/videoplayer-shared/evergreen";var jo=n=>new Promise((e,t)=>{let i=document.createElement("script");i.setAttribute("src",n),i.onload=()=>e(),i.onerror=r=>t(r),document.body.appendChild(i)});var Ds=class{constructor(e){this.connection$=new cn(void 0);this.castState$=new cn("NOT_AVAILABLE");this.errorEvent$=new td;this.realCastState$=new cn("NOT_AVAILABLE");this.subscription=new id;this.isDestroyed=!1;this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");let t="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${t}`}),e.isDisabled||!t)return;let i=Rs(window.chrome?.cast),r=!!window.__onGCastApiAvailable;i?this.initializeCastApi():(window.__onGCastApiAvailable=s=>{delete window.__onGCastApiAvailable,s&&!this.isDestroyed&&this.initializeCastApi()},r||jo("https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1").catch(()=>this.errorEvent$.next({id:"ChromecastLoading",category:qo.NETWORK,message:"Script loading failed!"})))}connect(){cast.framework.CastContext.getInstance()?.requestSession()}disconnect(){cast.framework.CastContext.getInstance()?.getCurrentSession()?.endSession(!0)}stopMedia(){return new Promise((e,t)=>{cast.framework.CastContext.getInstance()?.getCurrentSession()?.getMediaSession()?.stop(new chrome.cast.media.StopRequest,e,t)})}toggleConnection(){Rs(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(e){let t=this.connection$.getValue();dn(t)||(t.remotePlayer.volumeLevel=e,t.remotePlayerController.setVolumeLevel())}setMuted(e){let t=this.connection$.getValue();dn(t)||e!==t.remotePlayer.isMuted&&t.remotePlayerController.muteOrUnmute()}destroy(){this.isDestroyed=!0,this.subscription.unsubscribe()}initListeners(){let e=new cast.framework.RemotePlayer,t=new cast.framework.RemotePlayerController(e),i=cast.framework.CastContext.getInstance();this.subscription.add(zo(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe(r=>{switch(r.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=i.getCurrentSession()?.getMediaSession()?.media?.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return Go(r.sessionState)}})).add(rd(zo(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(Wo(r=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(r)}`})}),Qo(r=>r.castState)),sd([i.getCastState()])).pipe(ad(),Qo(nd),Wo(r=>{this.log({message:`realCastState$: ${r}`})})).subscribe(this.realCastState$)).add(this.realCastState$.subscribe(r=>{let s=r==="CONNECTED",a=Rs(this.connection$.getValue());if(s&&!a){let o=i.getCurrentSession();ed(o);let u=o.getCastDevice(),l=o.getMediaSession()?.media?.contentId;(dn(l)||l===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:e,remotePlayerController:t,session:o,castDevice:u}))}else!s&&a&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r==="CONNECTED"?Rs(this.connection$.getValue())?"CONNECTED":"AVAILABLE":r)}))}initializeCastApi(){let e,t,i;try{e=cast.framework.CastContext.getInstance(),t=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,i=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch{return}try{e.setOptions({receiverApplicationId:this.params.receiverApplicationId??t,autoJoinPolicy:i}),this.initListeners()}catch(r){this.errorEvent$.next({id:"ChromecastInitializer",category:qo.EXTERNAL_API,message:"[initializeCastApi] failed",thrown:r})}}},nd=n=>{switch(n){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return"NOT_AVAILABLE";case cast.framework.CastState.NOT_CONNECTED:return"AVAILABLE";case cast.framework.CastState.CONNECTING:return"CONNECTING";case cast.framework.CastState.CONNECTED:return"CONNECTED";default:return Go(n)}};import{assertNever as Yo}from"@vkontakte/videoplayer-shared/evergreen";var pe=(n,e=0,t=0)=>{switch(t){case 0:return n.replace("_offset_p",e===0?"":"_"+e.toFixed(0));case 1:{if(e===0)return n;let i=new URL(n);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}case 2:{let i=new URL(n);return!i.searchParams.get("offset_p")&&e===0?n:(i.searchParams.set("offset_p",e.toFixed(0)),i.toString())}default:Yo(t)}return n},Ft=(n,e)=>{switch(e){case 0:return NaN;case 1:{let t=new URL(n);return Number(t.searchParams.get("playback_shift"))}case 2:{let t=new URL(n);return Number(t.searchParams.get("offset_p")??0)}default:Yo(e)}};var w=(n,e,t=!1)=>{let i=n.getTransition();(t||!i||i.to===e)&&n.setState(e)};import{isNonNullable as od,Subject as Vs,merge as Ko}from"@vkontakte/videoplayer-shared/evergreen";var F=class{constructor(e){this.transitionStarted$=new Vs;this.transitionEnded$=new Vs;this.transitionUpdated$=new Vs;this.forceChanged$=new Vs;this.stateChangeStarted$=Ko(this.transitionStarted$,this.transitionUpdated$);this.stateChangeEnded$=Ko(this.transitionEnded$,this.forceChanged$);this.state=e,this.prevState=void 0}setState(e){let t=this.transition,i=this.state;this.transition=void 0,this.prevState=i,this.state=e,t?t.to===e?this.transitionEnded$.next(t):this.forceChanged$.next({from:t.from,to:e,canceledTransition:t}):this.forceChanged$.next({from:i,to:e,canceledTransition:t})}startTransitionTo(e){let t=this.transition,i=this.state;i===e||od(t)&&t.to===e||(this.prevState=i,this.state=e,t?(this.transition={from:t.from,to:e,canceledTransition:t},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:e},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}getPrevState(){return this.prevState}};import{assertNever as ud}from"@vkontakte/videoplayer-shared/evergreen";var Xo=n=>{switch(n){case"MPEG":case"DASH":case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":case"HLS":case"HLS_ONDEMAND":return!1;case"DASH_LIVE":case"DASH_LIVE_CMAF":case"HLS_LIVE":case"HLS_LIVE_CMAF":case"DASH_LIVE_WEBM":case"WEB_RTC_LIVE":return!0;default:return ud(n)}};import{assertNever as mi,assertNonNullable as Zt,debounce as Jo,ErrorCategory as Zo,fromEvent as ei,isNonNullable as eu,map as tu,merge as iu,observableFrom as ld,Subject as cd,Subscription as pn,timeout as dd,getHighestQuality as pd}from"@vkontakte/videoplayer-shared/evergreen";var hd=5,md=5,fd=500,ru=7e3,Hi=class{constructor(e){this.subscription=new pn;this.loadMediaTimeoutSubscription=new pn;this.videoState=new F("stopped");this.syncPlayback=()=>{let e=this.videoState.getState(),t=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),s=this.params.desiredState.seekState.getState();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(t)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekState: ${JSON.stringify(s)};`}),i==="stopped"){e!=="stopped"&&(this.videoState.startTransitionTo("stopped"),this.stop());return}if(!t){if(r?.to!=="paused"&&s.state==="requested"&&e!=="stopped"){this.seek(s.position/1e3);return}switch(i){case"ready":{switch(e){case"playing":case"paused":case"ready":break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}case"playing":{switch(e){case"playing":break;case"paused":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"ready":this.videoState.startTransitionTo("playing"),this.params.connection.remotePlayerController.playOrPause();break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}case"paused":{switch(e){case"playing":this.videoState.startTransitionTo("paused"),this.params.connection.remotePlayerController.playOrPause();break;case"paused":break;case"ready":this.videoState.startTransitionTo("paused"),this.videoState.setState("paused");break;case"stopped":this.videoState.startTransitionTo("ready"),this.prepare();break;default:mi(e)}break}default:mi(i)}}};this.params=e,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${e.format}`}),this.params.output.isLive$.next(Xo(e.format)),this.params.output.isAudioAvailable$.next(!0),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});let t=this.params.connection.session.getMediaSession();t&&this.restoreSession(t),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);let e=new pn;this.subscription.add(e),this.subscription.add(iu(this.videoState.stateChangeStarted$.pipe(tu(r=>`stateChangeStarted$ ${JSON.stringify(r)}`)),this.videoState.stateChangeEnded$.pipe(tu(r=>`stateChangeEnded$ ${JSON.stringify(r)}`))).subscribe(r=>this.log({message:`[videoState] ${r}`})));let t=(r,s)=>this.subscription.add(r.subscribe(s));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{let r=new cd;e.add(r.pipe(Jo(fd)).subscribe(()=>{this.params.output.seekedEvent$.next()}));let s=NaN;e.add(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe(a=>{this.logRemoteEvent(a);let o=a.value;this.params.output.position$.next(o),(this.params.desiredState.seekState.getState().state==="applying"||Math.abs(o-s)>hd)&&r.next(o),s=o})),e.add(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe(a=>{this.logRemoteEvent(a),this.params.output.duration$.next(a.value)}))}t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemoteReady():(this.handleRemoteStop(),e.unsubscribe())}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),r=>{this.logRemoteEvent(r),r.value?this.handleRemotePause():this.handleRemotePlay()}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),r=>{this.logRemoteEvent(r);let{remotePlayer:s}=this.params.connection,a=r.value,o=this.params.output.isBuffering$.getValue(),u=a===chrome.cast.media.PlayerState.BUFFERING;switch(o!==u&&this.params.output.isBuffering$.next(u),a){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&s.duration-s.currentTime<md&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),w(this.params.desiredState.playbackState,"stopped");break;case chrome.cast.media.PlayerState.PAUSED:{this.handleRemotePause();break}case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:mi(a)}}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({volume:r.value})}),t(ei(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),r=>{this.logRemoteEvent(r),this.handleRemoteVolumeChange({muted:r.value})});let i=iu(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekState.stateChangeEnded$,this.videoState.stateChangeEnded$,ld(["init"])).pipe(Jo(0));t(i,this.syncPlayback)}restoreSession(e){this.log({message:"restoreSession"});let{remotePlayer:t}=this.params.connection;if(e.playerState!==chrome.cast.media.PlayerState.IDLE){t.isPaused?(this.videoState.setState("paused"),w(this.params.desiredState.playbackState,"paused")):(this.videoState.setState("playing"),w(this.params.desiredState.playbackState,"playing"));let i=this.params.output.isLive$.getValue();this.params.output.duration$.next(i?0:t.duration),this.params.output.position$.next(i?0:t.currentTime),this.params.desiredState.seekState.setState({state:"none"})}}prepare(){let e=this.params.format;this.log({message:`[prepare] format: ${e}`});let t=this.createMediaInfo(e),i=this.createLoadRequest(t);this.loadMedia(i)}handleRemotePause(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="paused"||e==="playing")&&(this.videoState.setState("paused"),w(this.params.desiredState.playbackState,"paused"))}handleRemotePlay(){let e=this.videoState.getState();(this.videoState.getTransition()?.to==="playing"||e==="paused")&&(this.videoState.setState("playing"),w(this.params.desiredState.playbackState,"playing"))}handleRemoteReady(){this.videoState.getTransition()?.to==="ready"&&this.videoState.setState("ready"),this.params.desiredState.playbackState.getTransition()?.to==="ready"&&w(this.params.desiredState.playbackState,"ready")}handleRemoteStop(){this.videoState.getState()!=="stopped"&&this.videoState.setState("stopped")}handleRemoteVolumeChange(e){let t=this.params.output.volume$.getValue(),i={volume:e.volume??t.volume,muted:e.muted??t.muted};(i.volume!==t.volume||i.muted!==i.muted)&&this.params.output.volume$.next(i)}seek(e){this.params.output.willSeekEvent$.next();let{remotePlayer:t,remotePlayerController:i}=this.params.connection;t.currentTime=e,i.seek()}stop(){let{remotePlayerController:e}=this.params.connection;e.stop()}createMediaInfo(e){let t=this.params.source,i,r,s;switch(e){case"MPEG":{let l=t[e];Zt(l);let p=pd(Object.keys(l));Zt(p);let c=l[p];Zt(c),i=c,r="video/mp4",s=chrome.cast.media.StreamType.BUFFERED;break}case"HLS":case"HLS_ONDEMAND":{let l=t[e];Zt(l),i=l.url,r="application/x-mpegurl",s=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_SEP":case"DASH_ONDEMAND":case"DASH_WEBM":case"DASH_WEBM_AV1":case"DASH_STREAMS":{let l=t[e];Zt(l),i=l.url,r="application/dash+xml",s=chrome.cast.media.StreamType.BUFFERED;break}case"DASH_LIVE_CMAF":{let l=t[e];Zt(l),i=l.url,r="application/dash+xml",s=chrome.cast.media.StreamType.LIVE;break}case"HLS_LIVE":case"HLS_LIVE_CMAF":{let l=t[e];Zt(l),i=pe(l.url),r="application/x-mpegurl",s=chrome.cast.media.StreamType.LIVE;break}case"DASH_LIVE":case"WEB_RTC_LIVE":{let l="Unsupported format for Chromecast",p=new Error(l);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",category:Zo.VIDEO_PIPELINE,message:l,thrown:p}),p}case"DASH":case"DASH_LIVE_WEBM":throw new Error(`${e} is no longer supported`);default:return mi(e)}let a=new chrome.cast.media.MediaInfo(this.params.meta.videoId??i,r);a.contentUrl=i,a.streamType=s,a.metadata=new chrome.cast.media.GenericMediaMetadata;let{title:o,subtitle:u}=this.params.meta;return eu(o)&&(a.metadata.title=o),eu(u)&&(a.metadata.subtitle=u),a}createLoadRequest(e){let t=new chrome.cast.media.LoadRequest(e);t.autoplay=!1;let i=this.params.desiredState.seekState.getState();return i.state==="applying"||i.state==="requested"?t.currentTime=this.params.output.isLive$.getValue()?0:i.position/1e3:t.currentTime=0,t}loadMedia(e){let t=this.params.connection.session.loadMedia(e),i=new Promise((r,s)=>{this.loadMediaTimeoutSubscription.add(dd(ru).subscribe(()=>s(`timeout(${ru})`)))});Promise.race([t,i]).then(()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`}),this.params.desiredState.seekState.getState().state==="applying"&&this.params.output.seekedEvent$.next(),this.handleRemoteReady()},r=>{let s=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${r}`;this.log({message:s}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",category:Zo.VIDEO_PIPELINE,message:s,thrown:r})}).finally(()=>{this.loadMediaTimeoutSubscription.unsubscribe()})}logRemoteEvent(e){this.log({message:`[remoteEvent] ${JSON.stringify(e)}`})}};import{clearVideoElement as au}from"@vkontakte/videoplayer-shared/evergreen";import{clearVideoElement as bd}from"@vkontakte/videoplayer-shared/evergreen";var su=n=>{try{n.pause(),n.playbackRate=0,bd(n),n.remove()}catch(e){console.error(e)}};import{fromEvent as gd,Subscription as Sd}from"@vkontakte/videoplayer-shared/evergreen";var hn=class{constructor(){this.attribute="data-pool-reused"}get(e){return e.hasAttribute(this.attribute)}set(e,t){e.toggleAttribute(this.attribute,t)}delete(e){e.removeAttribute(this.attribute)}},mn=window.WeakMap?new WeakMap:new hn,fn=window.WeakMap?new WeakMap:new Map,vd=(n,e=20)=>{let t=0;return gd(n,"ratechange").subscribe(i=>{t++,t>=e&&(n.currentTime=n.currentTime,t=0)})},ke=(n,{audioVideoSyncRate:e,disableYandexPiP:t})=>{let i=n.querySelector("video"),r=!!i;i?au(i):(i=document.createElement("video"),n.appendChild(i)),mn.set(i,r);let s=new Sd;return s.add(vd(i,e)),fn.set(i,s),i.setAttribute("crossorigin","anonymous"),i.setAttribute("playsinline","playsinline"),t&&i.setAttribute("x-yandex-pip","false"),i.controls=!1,i.setAttribute("poster","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),i},Ae=n=>{fn.get(n)?.unsubscribe(),fn.delete(n);let t=mn.get(n);mn.delete(n),t?au(n):su(n)};import{assertNonNullable as ji,isNonNullable as mt,isNullable as Id,fromEvent as fi,merge as nu,observableFrom as ou,filterChanged as uu,map as zi,Subject as lu,Subscription as xd,ValueSubject as Ed,ErrorCategory as kd}from"@vkontakte/videoplayer-shared/evergreen";import{isNonNullable as bn,isNullable as yd,Subscription as Td}from"@vkontakte/videoplayer-shared/evergreen";var Cs=(n,e,t,{equal:i=(a,o)=>a===o,changed$:r,onError:s}={})=>{let a=n.getState(),o=e(),u=yd(r),l=new Td;return r&&l.add(r.subscribe(p=>{let c=n.getState();i(p,c)&&n.setState(p)},s)),i(o,a)||(t(a),u&&n.setState(a)),l.add(n.stateChangeStarted$.subscribe(p=>{t(p.to),u&&n.setState(p.to)},s)),l},rt=(n,e,t)=>Cs(e,()=>n.loop,i=>{bn(i)&&(n.loop=i)},{onError:t}),we=(n,e,t,i)=>Cs(e,()=>({muted:n.muted,volume:n.volume}),r=>{bn(r)&&(n.muted=r.muted,n.volume=r.volume)},{equal:(r,s)=>r===s||r?.muted===s?.muted&&r?.volume===s?.volume,changed$:t,onError:i}),He=(n,e,t,i)=>Cs(e,()=>n.playbackRate,r=>{bn(r)&&(n.playbackRate=r)},{changed$:t,onError:i}),Nt=Cs;var Ad=n=>["__",n.language,n.label].join("|"),wd=(n,e)=>{if(n.id===e)return!0;let[t,i,r]=e.split("|");return n.language===i&&n.label===r},gn=class n{constructor(e){this.available$=new lu;this.current$=new Ed(void 0);this.error$=new lu;this.subscription=new xd;this.externalTracks=new Map;this.internalTracks=new Map;this.baseURL=e}connect(e,t,i){this.video=e,this.cueSettings=t.textTrackCuesSettings,this.subscribe();let r=s=>{this.error$.next({id:"TextTracksManager",category:kd.WTF,message:"Generic HtmlVideoTextTrackManager error",thrown:s})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(Nt(t.internalTextTracks,()=>Object.values(this.internalTracks),s=>{mt(s)&&this.setInternal(s)},{equal:(s,a)=>mt(s)&&mt(a)&&s.length===a.length&&s.every(({id:o},u)=>o===a[u].id),changed$:this.available$.pipe(zi(s=>s.filter(({type:a})=>a==="internal"))),onError:r})),this.subscription.add(Nt(t.externalTextTracks,()=>Object.values(this.externalTracks),s=>{mt(s)&&this.setExternal(s)},{equal:(s,a)=>mt(s)&&mt(a)&&s.length===a.length&&s.every(({id:o},u)=>o===a[u].id),changed$:this.available$.pipe(zi(s=>s.filter(({type:a})=>a==="external"))),onError:r})),this.subscription.add(Nt(t.currentTextTrack,()=>{if(this.video)return;let s=this.htmlTextTracksAsArray().find(({mode:a})=>a==="showing");return s&&this.htmlTextTrackToITextTrack(s).id},s=>this.select(s),{changed$:this.current$,onError:r})),this.subscription.add(Nt(t.textTrackCuesSettings,()=>({}),()=>{if(this.video)for(let s of this.htmlTextTracksAsArray())this.applyCueSettings(s.cues),this.applyCueSettings(s.activeCues)}))}subscribe(){ji(this.video);let{textTracks:e}=this.video;this.subscription.add(fi(e,"addtrack").subscribe(()=>{let i=this.current$.getValue();i&&this.select(i)})),this.subscription.add(nu(fi(e,"addtrack"),fi(e,"removetrack"),ou(["init"])).pipe(zi(()=>this.htmlTextTracksAsArray().map(i=>this.htmlTextTrackToITextTrack(i))),uu((i,r)=>i.length===r.length&&i.every(({id:s},a)=>s===r[a].id))).subscribe(this.available$)),this.subscription.add(nu(fi(e,"change"),ou(["init"])).pipe(zi(()=>this.htmlTextTracksAsArray().find(({mode:i})=>i==="showing")),zi(i=>i&&this.htmlTextTrackToITextTrack(i).id),uu()).subscribe(this.current$));let t=i=>this.applyCueSettings(i.target?.activeCues??null);this.subscription.add(fi(e,"addtrack").subscribe(i=>{i.track?.addEventListener("cuechange",t);let r=s=>{let a=s.target?.cues??null;a&&a.length&&(this.applyCueSettings(s.target?.cues??null),s.target?.removeEventListener("cuechange",r))};i.track?.addEventListener("cuechange",r)})),this.subscription.add(fi(e,"removetrack").subscribe(i=>{i.track?.removeEventListener("cuechange",t)}))}applyCueSettings(e){if(!e||!e.length)return;let t=this.cueSettings.getState();for(let i of Array.from(e)){let r=i;mt(t.align)&&(r.align=t.align),mt(t.position)&&(r.position=t.position),mt(t.size)&&(r.size=t.size),mt(t.line)&&(r.line=t.line)}}htmlTextTracksAsArray(e=!1){ji(this.video);let t=[...this.video.textTracks];return e?t:t.filter(n.isHealthyTrack)}htmlTextTrackToITextTrack(e){let{language:t,label:i}=e,r=e.id?e.id:Ad(e),s=this.externalTracks.has(r),a=(s?this.externalTracks.get(r)?.isAuto:this.internalTracks.get(r)?.isAuto)??r.includes("auto");return s?{id:r,type:"external",isAuto:a,language:t,label:i,url:this.externalTracks.get(r)?.url}:{id:r,type:"internal",isAuto:a,language:t,label:i,url:this.internalTracks.get(r)?.url}}static isHealthyTrack(e){return!(e.kind==="metadata"||e.groupId||e.id===""&&e.label===""&&e.language==="")}setExternal(e){this.internalTracks.size>0&&Array.from(this.internalTracks).forEach(([,t])=>this.detach(t)),e.filter(({id:t})=>!this.externalTracks.has(t)).forEach(t=>this.attach(t)),Array.from(this.externalTracks).filter(([t])=>!e.find(i=>i.id===t)).forEach(([,t])=>this.detach(t))}setInternal(e){let t=[...this.externalTracks];e.filter(({id:i,language:r,isAuto:s})=>!this.internalTracks.has(i)&&!t.some(([,a])=>a.language===r&&a.isAuto===s)).forEach(i=>this.attach(i)),Array.from(this.internalTracks).filter(([i])=>!e.find(r=>r.id===i)).forEach(([,i])=>this.detach(i))}select(e){ji(this.video);for(let t of this.htmlTextTracksAsArray(!0))t.mode="showing";for(let t of this.htmlTextTracksAsArray(!0))(Id(e)||!wd(t,e))&&(t.mode="disabled")}destroy(){if(this.subscription.unsubscribe(),this.video)for(let e of Array.from(this.video.getElementsByTagName("track"))){let t=e.getAttribute("id");t&&this.externalTracks.has(t)&&this.video.removeChild(e)}this.externalTracks.clear()}attach(e){ji(this.video);let t=document.createElement("track");this.baseURL?t.setAttribute("src",new URL(e.url,this.baseURL).toString()):t.setAttribute("src",e.url),t.setAttribute("id",e.id),e.label&&t.setAttribute("label",e.label),e.language&&t.setAttribute("srclang",e.language),e.type==="external"?this.externalTracks.set(e.id,e):e.type==="internal"&&this.internalTracks.set(e.id,e),this.video.appendChild(t)}detach(e){ji(this.video);let t=Array.prototype.find.call(this.video.getElementsByTagName("track"),i=>i.getAttribute("id")===e.id);t&&this.video.removeChild(t),e.type==="external"?this.externalTracks.delete(e.id):e.type==="internal"&&this.internalTracks.delete(e.id)}},je=gn;var ti=class{constructor(){this.pausedTime=0;this.streamOffset=0;this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){this.pauseTimestamp===0&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(e,t=!1){this.streamOffset=e,this.pauseTimestamp=0,this.pausedTime=0,t&&this.pause()}};var cu=n=>{let e=n;for(;!(e instanceof Document)&&!(e instanceof ShadowRoot)&&e!==null;)e=e?.parentNode;return e??void 0},Sn=n=>{let e=cu(n);return!!(e&&e.fullscreenElement&&e.fullscreenElement===n)},du=n=>{let e=cu(n);return!!(e&&e.pictureInPictureElement&&e.pictureInPictureElement===n)};import{fromEvent as Oe,map as ft,merge as js,filterChanged as Su,isNonNullable as vu,Subject as Cd,filter as yn,mapTo as Tn,combine as Od,once as Fd,throttle as Nd,ErrorCategory as _d,ValueSubject as yu,Subscription as Ud}from"@vkontakte/videoplayer-shared/evergreen";var Pd=3,pu=(n,e,t=Pd)=>{let i=0,r=0;for(let s=0;s<n.length;s++){let a=n.start(s),o=n.end(s);if(a<=e&&e<=o){if(i=a,r=o,!t)return{from:i,to:r};for(let u=s-1;u>=0;u--)n.end(u)+t>=i&&(i=n.start(u));for(let u=s+1;u<n.length;u++)n.start(u)-t<=r&&(r=n.end(u))}}return{from:i,to:r}};var Os=class{constructor(){this._isMiuiBrowser=!1}get current(){return this._current}get isYandex(){return this.current==="Yandex"}get isSafari(){return this.current==="Safari"}get isFirefox(){return this.current==="Firefox"}get isSamsungBrowser(){return this.current==="SamsungBrowser"}get safariVersion(){return this._safariVersion}get isMiuiBrowser(){return this._isMiuiBrowser}detect(){let{userAgent:e}=navigator;try{let t=/yabrowser/i.test(e)?"Yandex":void 0,i=/samsungbrowser/i.test(e)?"SamsungBrowser":void 0,r=/chrome|crios/i.test(e)?"Chrome":void 0,s=/chromium/i.test(e)?"Chromium":void 0,a=/firefox|fxios/i.test(e)?"Firefox":void 0,o=/webkit|safari|khtml/i.test(e)?"Safari":void 0,u=/opr\//i.test(e)?"Opera":void 0,l=/edg/i.test(e)?"Edge":void 0;this._isMiuiBrowser=/(XiaoMi)|(MiuiBrowser)/i.test(e),this._current=t||i||a||u||l||r||s||o||"Rest"}catch(t){console.error(t)}this.isSafari&&this.detectSafariVersion()}detectSafariVersion(){try{let{userAgent:e}=window.navigator,t=e.match(/Version\/(\d+)/);if(!t)return;let i=t[1],r=parseInt(i,10);if(isNaN(r))return;this._safariVersion=r}catch(e){console.error(e)}}};var Qi=()=>/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion??navigator.userAgent)||navigator?.userAgentData?.mobile;var Fs=class{constructor(e){this._highEntropyValues={};this._displayChecker=e}get current(){return this._current}get isIOS(){let e=["iPhone","iPad","iPod"];return this._highEntropyValues.platform==="iOS"||e.includes(this.current)}get isMac(){return this._highEntropyValues.platform==="macOS"||this.current==="Mac"}get isApple(){return this.isIOS||this.isMac}get isIphoneOrOldIpad(){if(!this.isApple||!this._displayChecker.isTouch)return!1;let e=this.current==="iPad"||this._displayChecker.width>700,t=this._iosVersion;return!e||e&&!!t&&t<16}get isAndroid(){return this._highEntropyValues.platform==="Android"||this.current==="Android"}get isMobile(){return this._highEntropyValues.mobile||this._isMobile}get iOSVersion(){return this._iosVersion}detect(){let{userAgent:e}=navigator;try{this._isMobile=Qi()}catch(t){console.error(t)}this.detectDevice(e),this.detectHighEntropyValues(),this.isIOS&&this.detectIOSVersion()}async detectHighEntropyValues(){let{userAgentData:e}=navigator;if(e?.getHighEntropyValues){let t=await e.getHighEntropyValues(["architecture","bitness","brands","mobile","platform","formFactor","model","platformVersion","wow64"]);this._highEntropyValues=t}}detectDevice(e){try{let t=/android/i.test(e)?"Android":void 0,i=/iphone/i.test(e)?"iPhone":void 0,r=/ipad/i.test(e)?"iPad":void 0,s=/ipod/i.test(e)?"iPod":void 0,a=/mac/i.test(e)?"Mac":void 0,o=/webOS|BlackBerry|IEMobile|Opera Mini/i.test(e)?"RestMobile":void 0;this._current=t||i||r||s||o||a||"Desktop"}catch(t){console.error(t)}}detectIOSVersion(){try{if(this._highEntropyValues.platformVersion){let s=this._highEntropyValues.platformVersion.split(".").slice(0,2).join("."),a=parseFloat(s);this._iosVersion=a;return}let{userAgent:e}=window.navigator,t=e.match(/OS (\d+(_\d+)?)/i);if(!t)return;let i=t[1].replace(/_/g,".");if(!i)return;let r=parseFloat(i);if(isNaN(r))return;this._iosVersion=r}catch(e){console.error(e)}}};var Ns=class{get isTouch(){return typeof this._maxTouchPoints=="number"?this._maxTouchPoints>1:"ontouchstart"in window}get maxTouchPoints(){return this._maxTouchPoints}get height(){return this._height}get width(){return this._width}get screenHeight(){return this._screenHeight}get screenWidth(){return this._screenWidth}get pixelRatio(){return this._pixelRatio}get isHDR(){return this._isHdr}get colorDepth(){return this._colorDepth}detect(){let{maxTouchPoints:e}=navigator;try{this._maxTouchPoints=e??0,this._isHdr=!!matchMedia("(dynamic-range: high)")?.matches,this._colorDepth=screen.colorDepth}catch(t){console.error(t)}try{this._pixelRatio=window.devicePixelRatio||1,this._height=screen.height,this._width=screen.width,this._height=screen.height,this._screenHeight=this._height*this._pixelRatio,this._screenWidth=this._width*this._pixelRatio}catch(t){console.error(t)}}};var tt=()=>window.ManagedMediaSource||window.MediaSource,bi=()=>!!(window.ManagedMediaSource&&window.ManagedSourceBuffer?.prototype?.appendBuffer),hu=()=>!!(window.MediaSource&&window.SourceBuffer?.prototype?.appendBuffer),_s=()=>window.ManagedMediaSource?new ManagedMediaSource:new MediaSource;var Md=document.createElement("video"),Ld='video/mp4; codecs="avc1.42000a,mp4a.40.2"',$d='video/mp4; codecs="hev1.1.6.L93.B0"',mu='video/webm; codecs="vp09.00.10.08"',fu='video/webm; codecs="av01.0.00M.08"',Bd='audio/mp4; codecs="mp4a.40.2"',Rd='audio/webm; codecs="opus"',bu,Dd=async()=>{if(!window.navigator.mediaCapabilities)return;let n={type:"media-source",video:{contentType:"video/webm",width:1280,height:720,bitrate:1e6,framerate:30}},[e,t]=await Promise.all([window.navigator.mediaCapabilities.decodingInfo({...n,video:{...n.video,contentType:fu}}),window.navigator.mediaCapabilities.decodingInfo({...n,video:{...n.video,contentType:mu}})]);bu={DASH_WEBM_AV1:e,DASH_WEBM:t}};Dd().catch(n=>{console.log(Md),console.error(n)});var Us=class{constructor(e,t){this._deviceChecker=e,this._browserChecker=t}get protocols(){return this._protocols}get containers(){return this._containers}get codecs(){return this._codecs}get webmDecodingInfo(){return bu}get supportedCodecs(){return Object.keys(this._codecs).filter(e=>this._codecs[e])}get nativeHlsSupported(){return this._nativeHlsSupported}detect(){this._video=document.createElement("video");try{this._protocols={mms:bi(),mse:hu(),hls:!!(this._video.canPlayType?.("application/x-mpegurl")||this._video.canPlayType?.("vnd.apple.mpegURL")),webrtc:!!window.RTCPeerConnection,ws:!!window.WebSocket},this._containers={mp4:!!this._video.canPlayType?.("video/mp4"),webm:!!this._video.canPlayType?.("video/webm"),cmaf:!0};let e=!!tt()?.isTypeSupported?.(Ld),t=!!tt()?.isTypeSupported?.($d),i=!!tt()?.isTypeSupported?.(Bd);this._codecs={h264:e,h265:t,vp9:!!tt()?.isTypeSupported?.(mu),av1:!!tt()?.isTypeSupported?.(fu),aac:i,opus:!!tt()?.isTypeSupported?.(Rd),mpeg:(e||t)&&i},this._nativeHlsSupported=this._protocols.hls&&this._containers.mp4}catch(e){console.error(e)}this.destroyVideoElement()}destroyVideoElement(){if(!this._video)return;if(this._video.pause(),this._video.currentTime=0,this._video.removeAttribute("src"),this._video.src="",this._video.load(),this._video.remove){this._video.remove(),this._video=null;return}this._video.parentNode&&this._video.parentNode.removeChild(this._video);let e=this._video.cloneNode(!1);this._video.parentNode?.replaceChild(e,this._video),this._video=null}};var gu="audio/mpeg",Hs=class{supportMp3(){return this._codecs.mp3&&this._containers.mpeg}detect(){this._audio=document.createElement("audio");try{this._containers={mpeg:!!this._audio.canPlayType?.(gu)},this._codecs={mp3:!!tt()?.isTypeSupported?.(gu)}}catch(e){console.error(e)}this.destroyAudioElement()}destroyAudioElement(){if(!this._audio)return;if(this._audio.pause(),this._audio.currentTime=0,this._audio.removeAttribute("src"),this._audio.src="",this._audio.load(),this._audio.remove){this._audio.remove(),this._audio=null;return}this._audio.parentNode&&this._audio.parentNode.removeChild(this._audio);let e=this._audio.cloneNode(!1);this._audio.parentNode?.replaceChild(e,this._audio),this._audio=null}};import{ValueSubject as Vd}from"@vkontakte/videoplayer-shared/evergreen";var vn=class{constructor(){this.isInited$=new Vd(!1);this._displayChecker=new Ns,this._deviceChecker=new Fs(this._displayChecker),this._browserChecker=new Os,this._videoChecker=new Us(this._deviceChecker,this._browserChecker),this._audioChecker=new Hs,this.detect()}get display(){return this._displayChecker}get device(){return this._deviceChecker}get browser(){return this._browserChecker}get video(){return this._videoChecker}get audio(){return this._audioChecker}async detect(){this._displayChecker.detect(),this._deviceChecker.detect(),this._browserChecker.detect(),this._videoChecker.detect(),this._audioChecker.detect(),this.isInited$.next(!0)}},C=new vn;var Pe=n=>{let e=S=>Oe(n,S).pipe(Tn(void 0)),t=new Ud,i=()=>t.unsubscribe(),r=js(Oe(n,"progress"),Oe(n,"timeupdate")).pipe(ft(()=>pu(n.buffered,n.currentTime))),s=C.browser.isSafari?Od({play:e("play").pipe(Fd()),playing:e("playing")}).pipe(Tn(void 0)):e("playing"),a=Oe(n,"volumechange").pipe(ft(()=>({muted:n.muted,volume:n.volume}))),o=Oe(n,"ratechange").pipe(ft(()=>n.playbackRate)),u=Oe(n,"error").pipe(yn(()=>!!(n.error||n.played.length)),ft(()=>{let S=n.error;return{id:S?`MediaError#${S.code}`:"HtmlVideoError",category:_d.VIDEO_PIPELINE,message:S?S.message:"Error event from HTML video element",thrown:n.error??void 0}})),l=Oe(n,"timeupdate").pipe(ft(()=>n.currentTime)),p=["waiting","seeking","seeked","timeupdate"],c=new Cd,d=.3,h;t.add(js(...p.map(S=>Oe(n,S))).subscribe(S=>{let R=n.currentTime;n.loop&&vu(h)&&vu(R)&&h>=n.duration-d&&R<=d&&c.next(h),h=R}));let m=e("pause").pipe(yn(()=>!n.error&&h!==n.duration)),f=Oe(n,"enterpictureinpicture"),b=Oe(n,"leavepictureinpicture"),g=new yu(du(n));t.add(f.subscribe(()=>g.next(!0))),t.add(b.subscribe(()=>g.next(!1)));let E=new yu(Sn(n)),v=Oe(n,"fullscreenchange");t.add(v.pipe(ft(()=>Sn(n))).subscribe(E));let I=.1,x=1e3,L=Oe(n,"timeupdate").pipe(ft(S=>n.duration-n.currentTime<I),Su()),V=js(L.pipe(yn(S=>!n.loop&&S)),Oe(n,"ended")).pipe(Nd(x),Tn(void 0)),A=js(...["waiting","pause","canplay","play","canplaythrough","playing","seeking","seeked","ended"].map(S=>Oe(n,S)),L.pipe(ft(S=>({type:S?"ended":"unknown"})))).pipe(ft(S=>C.browser.isFirefox&&S.type==="ended"?n.readyState<2:n.readyState<3),Su());return{playing$:s,pause$:m,canplay$:e("canplay"),ended$:V,looped$:c,error$:u,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadStart$:e("loadstart"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:l,durationChange$:Oe(n,"durationchange").pipe(ft(()=>n.duration)),isBuffering$:A,currentBuffer$:r,volumeState$:a,playbackRateState$:o,inPiP$:g,inFullscreen$:E,enterPip$:f,leavePip$:b,destroy:i}};import{VideoQuality as _t}from"@vkontakte/videoplayer-shared/evergreen";var bt=n=>{switch(n){case"mobile":return _t.Q_144P;case"lowest":return _t.Q_240P;case"low":return _t.Q_360P;case"sd":case"medium":return _t.Q_480P;case"hd":case"high":return _t.Q_720P;case"fullhd":case"full":return _t.Q_1080P;case"quadhd":case"quad":return _t.Q_1440P;case"ultrahd":case"ultra":return _t.Q_2160P}};import{isNonNullable as Y,isNullable as Gs,now as Lu,isHigher as Ys,isHigherOrEqual as Si,isInvariantQuality as Ks,isLowerOrEqual as vi,videoSizeToQuality as $u,assertNotEmptyArray as Xs,assertNonNullable as Bu}from"@vkontakte/videoplayer-shared/evergreen";var In=!1,Pt={},Tu=n=>{In=n},Iu=()=>{Pt={}},xu=n=>{n(Pt)},Wi=(n,e)=>{In&&(Pt.meta=Pt.meta??{},Pt.meta[n]=e)},Fe=class{constructor(e){this.name=e}next(e){if(!In)return;Pt.series=Pt.series??{};let t=Pt.series[this.name]??[];t.push([Date.now(),e]),Pt.series[this.name]=t}};import{isHigher as Hd,isHigherOrEqual as rS,isLower as Eu,isLowerOrEqual as sS,isNonNullable as zs,isNullable as jd,videoHeightToQuality as Qs}from"@vkontakte/videoplayer-shared/evergreen";function xn(n,e,t){return!n.max&&n.min===e?"high_quality":!n.min&&n.max===t?"traffic_saving":"unknown"}function Ws(n,e,t){return!!n&&xn(n,e,t)==="high_quality"}function gi(n,e,t){return jd(n)||zs(n.min)&&zs(n.max)&&Eu(n.max,n.min)||zs(n.min)&&e&&Hd(n.min,e)||zs(n.max)&&t&&Eu(n.max,t)}function ku({limits:n,highestAvailableHeight:e,lowestAvailableHeight:t}){return gi({max:n?.max?Qs(n.max):void 0,min:n?.min?Qs(n.min):void 0},e?Qs(e):void 0,t?Qs(t):void 0)}var Ru=new Fe("best_bitrate"),Js=(n,e,t)=>(e-t)*Math.pow(2,-10*n)+t;var yi=n=>(e,t)=>n*(Number(e.bitrate)-Number(t.bitrate)),Ut=class{constructor(){this.history={}}recordSelection(e){this.history[e.id]=Lu()}recordSwitch(e){this.last=e}clear(){this.last=void 0,this.history={}}},Zs='Assertion "ABR Tracks is empty array" failed',qs=new WeakMap,Au=new WeakMap,wu=new WeakMap,qi=(n,e,t,i)=>{let r=[...e].sort(yi(1)),s=[...t].sort(yi(1)),a=s.filter(u=>Y(u.bitrate)&&Y(n.bitrate)?n.bitrate/u.bitrate>i:!0),o=s.at(Math.round(s.length*r.indexOf(n)/(r.length+1)))??s.at(-1);return o&&a.includes(o)?o:a.length?a.at(-1):s.at(0)},Gi=(n,e,t,i)=>{let r=qs.get(e);r||(r=[...e].sort(yi(1)),qs.set(e,r));let s=qs.get(t);s||(s=[...t].sort(yi(1)),qs.set(t,s));let a=wu.get(n);a||(a=s.filter(u=>Y(u.bitrate)&&Y(n.bitrate)?n.bitrate/u.bitrate>i:!0),wu.set(n,a));let o=s.at(Math.round(s.length*r.indexOf(n)/(r.length+1)))??s.at(-1);return o&&a.includes(o)?o:a.length?a.at(-1):s.at(0)},Pu=n=>"quality"in n,ea=(n,e,t,i)=>{let r=Y(i?.last?.bitrate)&&Y(t?.bitrate)&&i.last.bitrate<t.bitrate?n.trackCooldownIncreaseQuality:n.trackCooldownDecreaseQuality,s=t&&i&&i.history[t.id]&&Lu()-i.history[t.id]<=r&&(!i.last||t.id!==i.last.id);if(t?.id&&i&&!s&&i.recordSelection(t),s&&i?.last){let a=i.last;i?.recordSwitch(a);let o=Pu(a)?"video":"audio",u=Pu(a)?a.quality:a.bitrate;return e({message:`
|
|
7
7
|
[last ${o} selected] ${u}
|
|
8
8
|
`}),a}return i?.recordSwitch(t),t},zd=(n,e)=>Math.log(e)/Math.log(n),Du=({tuning:n,container:e,limits:t,panelSize:i})=>{let r=n.containerSizeFactor;if(i)return{containerSizeLimit:i,containerSizeFactor:r};if(n.usePixelRatio&&C.display.pixelRatio){let s=C.display.pixelRatio;if(n.pixelRatioMultiplier)r*=n.pixelRatioMultiplier*(s-1)+1;else{let a=n.pixelRatioLogBase,[o=0,u=0,l=0]=n.pixelRatioLogCoefficients,p=zd(a,o*s+u)+l;Number.isFinite(p)&&(r*=p)}}return Ws(t,n.highQualityLimit,n.trafficSavingLimit)&&(r*=2),{containerSizeLimit:n.limitByContainer&&e&&e.width>0&&e.height>0?{width:e.width*r,height:e.height*r}:void 0,containerSizeFactor:r}},Mu=new WeakMap,gt=(n,{container:e,estimatedThroughput:t,tuning:i,limits:r,reserve:s=0,forwardBufferHealth:a,playbackRate:o,current:u,history:l,visible:p,droppedVideoMaxQualityLimit:c,stallsVideoMaxQualityLimit:d,stallsPredictedThroughput:h,abrLogger:m,panelSize:f})=>{Xs(n,Zs);let{containerSizeFactor:b,containerSizeLimit:g}=Du({container:e,tuning:i,limits:r,panelSize:f}),E=i.considerPlaybackRate&&Y(o)?o:1,v=Mu.get(n);v||(v=n.filter(T=>!Ks(T.quality)).sort((T,P)=>Ys(T.quality,P.quality)?-1:1),Mu.set(n,v));let I=v.at(-1)?.quality,x=v.at(0)?.quality,L=gi(r,x,I),V=E*Js(a??.5,i.bitrateFactorAtEmptyBuffer,i.bitrateFactorAtFullBuffer),k={},A=null;for(let T of v){let P=!0;if(g)if(T.size)P=T.size.width<=g.width&&T.size.height<=g.height;else{let M=g&&$u(g);P=M?vi(T.quality,M):!0}if(!P){k[T.quality]="FitsContainer";continue}let ee=h||t,B=Y(ee)&&isFinite(ee)&&Y(T.bitrate)?ee-s>=T.bitrate*V:!0,_=Ws(r,i.highQualityLimit,i.trafficSavingLimit)&&r?.min===T.quality;if(!B&&!_){k[T.quality]="FitsThroughput";continue}if(i.lazyQualitySwitch&&Y(i.minBufferToSwitchUp)&&u&&!Ks(u.quality)&&(a??0)<i.minBufferToSwitchUp&&Ys(T.quality,u.quality)){k[T.quality]="Buffer";continue}if(!!c&&Si(T.quality,c)&&!_){k[T.quality]="DroppedFramesLimit";continue}if(!!d&&Si(T.quality,d)&&!_){k[T.quality]="StallsLimit";continue}let se=L||(Gs(r?.max)||vi(T.quality,r.max))&&(Gs(r?.min)||Si(T.quality,r.min)),X=Y(p)&&!p?vi(T.quality,i.backgroundVideoQualityLimit):!0;if(!se||!X){k[T.quality]="FitsQualityLimits";continue}A||(A=T)}A&&A.bitrate&&Ru.next(A.bitrate);let S=A??v.at(-1)??n[0],R=l?.last,y=ea(i,m,S,l);return Y(l)&&y.quality!==R?.quality&&m({message:`
|
|
9
9
|
[VIDEO TRACKS ABR]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vkontakte/videoplayer-core",
|
|
3
|
-
"version": "2.0.134-dev.
|
|
3
|
+
"version": "2.0.134-dev.6250ee46.0",
|
|
4
4
|
"author": "vk.com",
|
|
5
5
|
"description": "Videoplayer core library based on the vk.com platform",
|
|
6
6
|
"homepage": "https://vk.com",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"**/*.d.ts"
|
|
55
55
|
],
|
|
56
56
|
"dependencies": {
|
|
57
|
-
"@vkontakte/videoplayer-shared": "1.0.62-dev.
|
|
57
|
+
"@vkontakte/videoplayer-shared": "1.0.62-dev.23036491.0",
|
|
58
58
|
"hls.js": "~1.4.7"
|
|
59
59
|
}
|
|
60
60
|
}
|