@4players/odin-plugin-web 1.9.8 → 1.10.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/lib/cjs/plugin/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var Yx=Object.defineProperty;var kA=Object.getOwnPropertyDescriptor;var cA=Object.getOwnPropertyNames;var dA=Object.prototype.hasOwnProperty;var d=(D,x)=>()=>(D&&(x=D(D=0)),x);var kx=(D,x)=>{for(var A in x)Yx(D,A,{get:x[A],enumerable:!0})},pA=(D,x,A,F)=>{if(x&&typeof x=="object"||typeof x=="function")for(let r of cA(x))!dA.call(D,r)&&r!==A&&Yx(D,r,{get:()=>x[r],enumerable:!(F=kA(x,r))||F.enumerable});return D};var hA=D=>pA(Yx({},"__esModule",{value:!0}),D);var C={};kx(C,{AdditionalCaptureBlocks:()=>mA,AdditionalPlaybackBlocks:()=>qA,ClockJumpCheckInterval:()=>LA,ClockJumpThreshold:()=>HA,ConnectInterval:()=>TA,ConnectTimeout:()=>JA,DefaultRefreshRate:()=>IA,DefaultVideoCodec:()=>SA,HealthCheckTimeout:()=>_A,MainConnectionPingInterval:()=>NA,MaxNumberOfDecoders:()=>$A,MinDBFs:()=>x0,MinTokenLifetime:()=>OA,MinTokenRefreshInterval:()=>MA,PlaybackPreload:()=>GA,RenderQuantumSize:()=>yA,VadPreload:()=>gA,WebRtcIceTimeout:()=>PA,WebRtcStatsSnapshotInterval:()=>wA,WebRtcTimeout:()=>KA});var qA,mA,GA,IA,gA,$A,yA,x0,_A,LA,HA,NA,wA,PA,KA,JA,OA,MA,TA,SA,A0=d(()=>{"use strict";qA=3,mA=3,GA=3,IA=250,gA=3,$A=512,yA=128,x0=-758.596,_A=1e4,LA=1e3,HA=1e4,NA=3e3,wA=1e3,PA=3e3,KA=1e4,JA=5e3,OA=6e4,MA=5e3,TA=[0,100,200,200,500],SA="H264"});function cx(D){return typeof D!="symbol"}function s(D){return typeof D=="symbol"}var q,B,S,m,dx=d(()=>{"use strict";q=Symbol("Unencrypted"),B=Symbol("Invalid"),S=Symbol("Retry"),m=Symbol("UnexpectedEof")});function o(D,x,A){return D.postMessage(x,A)}function xx(D,x){return new Promise(A=>{let F=r=>{let[t,j]=r.data;t===x&&(A(r.data[1]),D.removeEventListener("message",F))};D.addEventListener("message",F)})}var a0=d(()=>{"use strict"});function F0(D,x){D.values[0]=x[0],D.values[1]=x[1]}function l0(D,x){return D.values[2+x*5]}function u0(D,x,A){let F=2+x*5+1;D.values[F+0]=A[0],D.values[F+1]=A[1]}function k0(D){return D.values[0]!==0}function c0(D){return D.values[1]}function d0(D){return D.values[2]}function p0(D,x){return D.values[3]=x}var h0=d(()=>{"use strict"});function q0(D,x){let A=new R(D);A.position=x;let F=A.readObjects(1);return cx(F)?A.position:F}var R,m0=d(()=>{"use strict";dx();R=class{constructor(x,A=0){this.bytes=x;this.position=A}readArrayLength(){let x=this.readTag();return s(x)?x:(x&240)===144?x&15:x===220?this.readUint16():x===221?this.readUint32():B}readNumber(){let x=this.readTag();return s(x)||(x&128)===0?x:(x&224)===224?x-256:x===202?this.readFloat32():x===203?this.readFloat64():x===204?this.readUint8():x===205?this.readUint16():x===206?this.readUint32():x===207?this.readUint64():x===208?this.readInt8():x===209?this.readInt16():x===210?this.readInt32():x===211?this.readInt64():B}readBytes(){let x=this.readTag();if(s(x))return x;let A;if(x===196)A=this.readUint8();else if(x===197)A=this.readUint16();else if(x===198)A=this.readUint32();else return B;if(s(A))return A;let F=this.consume(A);return F!==m?this.bytes.subarray(F,F+A):m}readObjects(x){for(;x>0;x-=1){let A=this.readTag();if(s(A))return A;let F,r=0,t=0;switch(A){case 192:break;case 194:break;case 195:break;case 196:r=this.readUint8();break;case 197:r=this.readUint16();break;case 198:r=this.readUint32();break;case 199:r=this.readUint8(),t=1;break;case 200:r=this.readUint8(),t=1;break;case 201:r=this.readUint32(),t=1;break;case 202:r=4;break;case 203:r=8;break;case 204:r=1;break;case 205:r=2;break;case 206:r=4;break;case 207:r=8;break;case 208:r=1;break;case 209:r=2;break;case 210:r=4;break;case 211:r=8;break;case 212:r=2;break;case 213:r=3;break;case 214:r=5;break;case 215:r=9;break;case 216:r=17;break;case 217:r=this.readUint8();break;case 218:r=this.readUint16();break;case 219:r=this.readUint32();break;case 220:if(F=this.readUint16(),s(F))return F;x+=F;break;case 221:if(F=this.readUint32(),s(F))return F;x+=F;break;case 222:if(F=this.readUint16(),s(F))return F;x+=F*2;break;case 223:if(F=this.readUint32(),s(F))return F;x+=F*2;break;default:if((A&128)!==0){if((A&240)===128)x+=(A&15)*2;else if((A&240)===144)x+=A&15;else if((A&224)===160)r=A&31;else if((A&224)!==224)return B}}if(r===m)return m;if(this.consume(r+t)===m)return m}}consume(x){if(x===m||this.position+x>this.bytes.length)return m;let A=this.position;return this.position=A+x,A}readTag(){let x=this.consume(1);return cx(x)?this.bytes[x]:x}readUint8(){let x=this.consume(1);return cx(x)?this.bytes[x]:x}readUint16(){let x=this.consume(2);return s(x)?x:this.bytes[x]<<8|this.bytes[x+1]}readUint32(){let x=this.consume(4);return s(x)?x:this.bytes[x]<<24|this.bytes[x+1]<<16|this.bytes[x+2]<<8|this.bytes[x+3]}readUint64(){let x=this.readUint32();if(s(x))return x;if(x>=2097152)return B;let A=this.readUint32();return s(A)?A:x<<32|A}readInt8(){let x=this.readUint8();return s(x)||x>=128&&(x=x-256),x}readInt16(){let x=this.readUint16();return s(x)||x>=32768&&(x=x-65536),x}readInt32(){let x=this.readUint32();return s(x)||x>=2147483648&&(x=x-4294967296),x}readInt64(){let x=this.readUint32();if(s(x))return x;if(x>=2097152||x<-2097152)return B;let A=this.readUint32();return s(A)?A:x<<32|A}readFloat32(){let x=this.consume(4);return s(x)?x:new Float32Array(this.bytes.subarray(x,x+4))[0]}readFloat64(){let x=this.consume(8);return s(x)?x:new Float64Array(this.bytes.subarray(x,x+8))[0]}}});var G0,I0=d(()=>{"use strict";G0="1.9.8"});function g0(D,x){G||(G=D??new c.Logger(c.LogLevel.DEBUG,"odin-plugin-web",[]),x&&G.sinks.push(new c.CallbackSink(x,c.Formatter.structured)))}function a(D,...x){let A=px(x);G?G?.error(D,A):(0,c.error)(D,A)}function l(D,...x){let A=px(x);G?G?.warn(D,A):(0,c.warn)(D,A)}function E(D,...x){let A=px(x);G?G?.info(D,A):(0,c.info)(D,A)}function n(D,...x){let A=px(x);G?G?.debug(D,A):(0,c.debug)(D,A)}function px(...D){if(D.length===1&&typeof D[0]=="object"&&D[0]!==null)return{...D[0]};if(D.length>0)return{args:D}}var c,G,$0=d(()=>{"use strict";c=require("@4players/odin-common")});function p(D){return D.connectionId*4294967296+D.mediaId}var $,z,b=d(()=>{"use strict";A0();dx();A0();a0();h0();m0();I0();$0();dx();$={isSilent:!0,rmsDBFS:-758.596};z=class{constructor(){this.inFlight=null}run(x){return this.inFlight||(this.inFlight=x().finally(()=>{this.inFlight=null})),this.inFlight}}});function jx(D,x,A,F,r){return Promise.all([UA(D),WA(A,x,F,r)])}async function UA(D){let x=URL.createObjectURL(new Blob([D],{type:"text/javascript"})),A=new Worker(x,{type:"module",name:"odin worker"});return Fx.push(A),A}async function WA(D,x,A,F){try{let j=new AudioWorkletNode(D,A,F);return X.push(j),j}catch{}let r=r0.get(D);if(r===void 0){let j=URL.createObjectURL(new Blob([x],{type:"text/javascript"}));r=D.audioWorklet.addModule(j),r0.set(D,r),r.catch(()=>r0.delete(D))}await r;let t=new AudioWorkletNode(D,A,F);return X.push(t),t}async function L0(){return{workers:await Promise.all(Fx.map(tx)),worklets:await Promise.all(X.map(D=>tx(D.port)))}}function tx(D){let{port1:x,port2:A}=new MessageChannel,{promise:F,resolve:r}=Promise.withResolvers();return A.onmessage=t=>r(t.data),setTimeout(()=>r("timeout"),100),o(D,["dump",{result:x}],[x]),F}var Fx,X,rx,Dx,r0,qx=d(()=>{"use strict";b();Fx=[],X=[],rx=class{constructor(x,A,F){this.audioContext=x;this.worklet=A;this.worker=F;this.availableIndexes=[];this.medias=new Map;F.addEventListener("message",this._OnMessages.bind(this))}connectOutput(x){this.worklet.disconnect(),this.worklet.connect(x)}receivePacket(x,A){o(this.worker,["playbackReceivePacket",{connectionId:x,packet:A}],[A.buffer])}addMedias(x,A,F=[1,1]){let r=[];for(let t of A){let j=this._GetFreeIndex();j!==void 0&&(this.medias.set(p({connectionId:x,mediaId:t}),{index:j}),r.push({connectionId:x,mediaId:t,index:j,volume:F}))}o(this.worker,["playbackUpdateMedias",{added:r,removed:[]}])}removeMedias(x,A){let F=[];for(let r of A){let t=p({connectionId:x,mediaId:r}),j=this.medias.get(t);j!==void 0&&(this.medias.delete(t),this.availableIndexes.push(j.index),F.push({connectionId:x,mediaId:r,index:j.index}))}o(this.worker,["playbackUpdateMedias",{added:[],removed:F}])}close(){o(this.worker,["close",void 0]),o(this.worklet.port,["close",void 0]);let x=Fx.indexOf(this.worker);x>=0&&Fx.splice(x,1);let A=X.indexOf(this.worklet);A>=0&&X.splice(A,1)}async dump(){return{playbackWorker:await tx(this.worker),playbackWorklet:await tx(this.worklet.port)}}_GetFreeIndex(){return this.availableIndexes.pop()}_OnMessages(x){}},Dx=class D{constructor(x,A,F,r,t){this.worklet=x;this.worker=A;this.sink=(j,e)=>{t.deref()!==void 0?F(j,e):(a("capture worker was left abandoned, aborting capture worker"),D.shutdown(x,A))},this.monitorSink=(j,e)=>{t.deref()!==void 0?r(j,e):(a("capture worker was left abandoned, aborting capture worker"),D.shutdown(x,A))},A.addEventListener("message",this._OnMessages.bind(this))}get context(){return this.worklet.context}setMedias(x){o(this.worker,["captureSetMedias",{connections:x}])}setVad(x){o(this.worker,["captureSetVad",x])}close(){D.shutdown(this.worklet,this.worker)}static shutdown(x,A){o(x.port,["close",void 0]),o(A,["close",void 0]);let F=Fx.indexOf(A);F>=0&&Fx.splice(F,1);let r=X.indexOf(x);r>=0&&X.splice(r,1)}async dump(){return{captureWorker:await tx(this.worker),captureWorklet:await tx(this.worklet.port)}}_OnMessages(x){let[A,F]=x.data;A==="sendPacket"&&(F.connectionId===0?this.monitorSink(F.connectionId,F.packet):this.sink(F.connectionId,F.packet))}};r0=new WeakMap});var D0,H0=d(()=>{D0=`"use strict";(()=>{var Cn=Object.create;var or=Object.defineProperty;var Gn=Object.getOwnPropertyDescriptor;var pn=Object.getOwnPropertyNames;var hn=Object.getPrototypeOf,In=Object.prototype.hasOwnProperty;var mn=(n,A)=>()=>(A||n((A={exports:{}}).exports,A),A.exports),En=(n,A)=>{for(var t in A)or(n,t,{get:A[t],enumerable:!0})},$n=(n,A,t,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let i of pn(A))!In.call(n,i)&&i!==t&&or(n,i,{get:()=>A[i],enumerable:!(e=Gn(A,i))||e.enumerable});return n};var Fn=(n,A,t)=>(t=n!=null?Cn(hn(n)):{},$n(A||!n||!n.__esModule?or(t,"default",{value:n,enumerable:!0}):t,n));var $t=mn((Et,MA)=>{"use strict";var wA=(()=>{var n=globalThis.document?.currentScript?.src;return async function(A={}){var t,e=A,i=!!globalThis.window,d=!!globalThis.WorkerGlobalScope,q=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",C=d&&globalThis.name=="em-pthread",v=[],B="./this.program",CA=(r,j)=>{throw j};d&&(n=self.location.href);var w="",Ht,_t;if(i||d){try{w=new URL(".",n).href}catch{}d&&(_t=r=>{var j=new XMLHttpRequest;return j.open("GET",r,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),Ht=async r=>{var j=await fetch(r,{credentials:"same-origin"});if(j.ok)return j.arrayBuffer();throw new Error(j.status+" : "+j.url)}}var TA=console.log.bind(console),N=console.error.bind(console),gr,eA,GA=!1,Q;function yt(r){for(var j=0,s=r.length,l=new Uint8Array(s),o;j<s;++j)o=r.charCodeAt(j),l[j]=~o>>8&o;return l}var UA,Lr,Hr;if(C){let r=function(j){try{var s=j.data,l=s.cmd;if(l==="load"){let o=[];self.onmessage=k=>o.push(k),Hr=()=>{postMessage({cmd:"loaded"});for(let k of o)r(k);self.onmessage=r};for(let k of s.handlers)(!e[k]||e[k].proxy)&&(e[k]=(...a)=>{postMessage({cmd:"callHandler",handler:k,args:a})},k=="print"&&(TA=e[k]),k=="printErr"&&(N=e[k]));X=s.wasmMemory,yr(),eA=s.wasmModule,Nr(),Dj()}else if(l==="run"){St(s.pthread_ptr),sr(s.pthread_ptr,0,0,1,0,0),h.threadInitTLS(),tr(s.pthread_ptr),SA||(Ij(),SA=!0);try{Vt(s.start_routine,s.arg)}catch(o){if(o!="unwind")throw o}}else s.target==="setimmediate"||(l==="checkMailbox"?SA&&HA():l&&(N(\`worker: received unknown command \${l}\`),N(s)))}catch(o){throw mj(),o}};var ys=r,SA=!1;self.onunhandledrejection=j=>{throw j.reason||j},self.onmessage=r}var _r=!1;function yr(){var r=X.buffer;V=new Int8Array(r),pA=new Int16Array(r),e.HEAPU8=x=new Uint8Array(r),nA=new Uint16Array(r),e.HEAP32=z=new Int32Array(r),e.HEAPU32=E=new Uint32Array(r),e.HEAPF32=Jr=new Float32Array(r),hA=new Float64Array(r),S=new BigInt64Array(r),Kr=new BigUint64Array(r)}function xt(){if(!C){if(e.wasmMemory)X=e.wasmMemory;else{var r=e.INITIAL_MEMORY||16777216;X=new WebAssembly.Memory({initial:r/65536,maximum:r/65536,shared:!0})}yr()}}function Dt(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Ot(e.preRun.shift());wr(Mr)}function xr(){if(_r=!0,C)return Hr();jA.F()}function Bt(){if(!C){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)Ut(e.postRun.shift());wr(Vr)}}function VA(r){e.onAbort?.(r),r="Aborted("+r+")",N(r),GA=!0,r+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(r);throw Lr?.(j),j}var Dr;function Nt(){return yt(\`\\0asm\\0\\0\\0\\xB2>\\\`\\x7F\\0\\\`\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\\`\\0\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`||\\\`\\x7F}\\\`}}\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\0\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F~\\\`\\x7F\\x7F}\\\`\\x7F}}\\\`\\x7F\\x7F}}\\0\\\`
|
|
1
|
+
"use strict";var F0=Object.defineProperty;var hA=Object.getOwnPropertyDescriptor;var qA=Object.getOwnPropertyNames;var mA=Object.prototype.hasOwnProperty;var p=(t,x)=>()=>(t&&(x=t(t=0)),x);var cx=(t,x)=>{for(var A in x)F0(t,A,{get:x[A],enumerable:!0})},GA=(t,x,A,F)=>{if(x&&typeof x=="object"||typeof x=="function")for(let r of qA(x))!mA.call(t,r)&&r!==A&&F0(t,r,{get:()=>x[r],enumerable:!(F=hA(x,r))||F.enumerable});return t};var IA=t=>GA(F0({},"__esModule",{value:!0}),t);var C={};cx(C,{AdditionalCaptureBlocks:()=>$A,AdditionalPlaybackBlocks:()=>gA,ClockJumpCheckInterval:()=>PA,ClockJumpThreshold:()=>KA,ConnectInterval:()=>QA,ConnectTimeout:()=>VA,DefaultRefreshRate:()=>_A,DefaultVideoCodec:()=>zA,HealthCheckTimeout:()=>wA,MainConnectionPingInterval:()=>JA,MaxNumberOfDecoders:()=>HA,MinDBFs:()=>r0,MinTokenLifetime:()=>UA,MinTokenRefreshInterval:()=>WA,PlaybackPreload:()=>yA,RenderQuantumSize:()=>NA,VadPreload:()=>LA,WebRtcAnswerTimeout:()=>SA,WebRtcIceTimeout:()=>MA,WebRtcMaxNegotiationAttempts:()=>RA,WebRtcStatsSnapshotInterval:()=>OA,WebRtcTimeout:()=>TA});var gA,$A,yA,_A,LA,HA,NA,r0,wA,PA,KA,JA,OA,MA,TA,SA,RA,VA,UA,WA,QA,zA,t0=p(()=>{"use strict";gA=3,$A=3,yA=3,_A=250,LA=3,HA=512,NA=128,r0=-758.596,wA=1e4,PA=1e3,KA=1e4,JA=3e3,OA=1e3,MA=3e3,TA=1e4,SA=1e4,RA=3,VA=5e3,UA=6e4,WA=5e3,QA=[0,100,200,200,500],zA="H264"});function dx(t){return typeof t!="symbol"}function s(t){return typeof t=="symbol"}var m,B,R,G,px=p(()=>{"use strict";m=Symbol("Unencrypted"),B=Symbol("Invalid"),R=Symbol("Retry"),G=Symbol("UnexpectedEof")});function l(t,x,A){return t.postMessage(x,A)}function Ax(t,x){return new Promise(A=>{let F=r=>{let[D,e]=r.data;D===x&&(A(r.data[1]),t.removeEventListener("message",F))};t.addEventListener("message",F)})}var k0=p(()=>{"use strict"});function D0(t,x){t.values[0]=x[0],t.values[1]=x[1]}function c0(t,x){return t.values[2+x*5]}function d0(t,x,A){let F=2+x*5+1;t.values[F+0]=A[0],t.values[F+1]=A[1]}function p0(t){return t.values[0]!==0}function h0(t){return t.values[1]}function q0(t){return t.values[2]}function m0(t,x){return t.values[3]=x}var G0=p(()=>{"use strict"});function I0(t,x){let A=new V(t);A.position=x;let F=A.readObjects(1);return dx(F)?A.position:F}var V,g0=p(()=>{"use strict";px();V=class{constructor(x,A=0){this.bytes=x;this.position=A}readArrayLength(){let x=this.readTag();return s(x)?x:(x&240)===144?x&15:x===220?this.readUint16():x===221?this.readUint32():B}readNumber(){let x=this.readTag();return s(x)||(x&128)===0?x:(x&224)===224?x-256:x===202?this.readFloat32():x===203?this.readFloat64():x===204?this.readUint8():x===205?this.readUint16():x===206?this.readUint32():x===207?this.readUint64():x===208?this.readInt8():x===209?this.readInt16():x===210?this.readInt32():x===211?this.readInt64():B}readBytes(){let x=this.readTag();if(s(x))return x;let A;if(x===196)A=this.readUint8();else if(x===197)A=this.readUint16();else if(x===198)A=this.readUint32();else return B;if(s(A))return A;let F=this.consume(A);return F!==G?this.bytes.subarray(F,F+A):G}readObjects(x){for(;x>0;x-=1){let A=this.readTag();if(s(A))return A;let F,r=0,D=0;switch(A){case 192:break;case 194:break;case 195:break;case 196:r=this.readUint8();break;case 197:r=this.readUint16();break;case 198:r=this.readUint32();break;case 199:r=this.readUint8(),D=1;break;case 200:r=this.readUint8(),D=1;break;case 201:r=this.readUint32(),D=1;break;case 202:r=4;break;case 203:r=8;break;case 204:r=1;break;case 205:r=2;break;case 206:r=4;break;case 207:r=8;break;case 208:r=1;break;case 209:r=2;break;case 210:r=4;break;case 211:r=8;break;case 212:r=2;break;case 213:r=3;break;case 214:r=5;break;case 215:r=9;break;case 216:r=17;break;case 217:r=this.readUint8();break;case 218:r=this.readUint16();break;case 219:r=this.readUint32();break;case 220:if(F=this.readUint16(),s(F))return F;x+=F;break;case 221:if(F=this.readUint32(),s(F))return F;x+=F;break;case 222:if(F=this.readUint16(),s(F))return F;x+=F*2;break;case 223:if(F=this.readUint32(),s(F))return F;x+=F*2;break;default:if((A&128)!==0){if((A&240)===128)x+=(A&15)*2;else if((A&240)===144)x+=A&15;else if((A&224)===160)r=A&31;else if((A&224)!==224)return B}}if(r===G)return G;if(this.consume(r+D)===G)return G}}consume(x){if(x===G||this.position+x>this.bytes.length)return G;let A=this.position;return this.position=A+x,A}readTag(){let x=this.consume(1);return dx(x)?this.bytes[x]:x}readUint8(){let x=this.consume(1);return dx(x)?this.bytes[x]:x}readUint16(){let x=this.consume(2);return s(x)?x:this.bytes[x]<<8|this.bytes[x+1]}readUint32(){let x=this.consume(4);return s(x)?x:this.bytes[x]<<24|this.bytes[x+1]<<16|this.bytes[x+2]<<8|this.bytes[x+3]}readUint64(){let x=this.readUint32();if(s(x))return x;if(x>=2097152)return B;let A=this.readUint32();return s(A)?A:x<<32|A}readInt8(){let x=this.readUint8();return s(x)||x>=128&&(x=x-256),x}readInt16(){let x=this.readUint16();return s(x)||x>=32768&&(x=x-65536),x}readInt32(){let x=this.readUint32();return s(x)||x>=2147483648&&(x=x-4294967296),x}readInt64(){let x=this.readUint32();if(s(x))return x;if(x>=2097152||x<-2097152)return B;let A=this.readUint32();return s(A)?A:x<<32|A}readFloat32(){let x=this.consume(4);return s(x)?x:new Float32Array(this.bytes.subarray(x,x+4))[0]}readFloat64(){let x=this.consume(8);return s(x)?x:new Float64Array(this.bytes.subarray(x,x+8))[0]}}});var $0,y0=p(()=>{"use strict";$0="1.10.0"});function _0(t,x){I||(I=t??new d.Logger(d.LogLevel.DEBUG,"odin-plugin-web",[]),x&&I.sinks.push(new d.CallbackSink(x,d.Formatter.structured)))}function k(t,...x){let A=hx(x);I?I?.error(t,A):(0,d.error)(t,A)}function a(t,...x){let A=hx(x);I?I?.warn(t,A):(0,d.warn)(t,A)}function f(t,...x){let A=hx(x);I?I?.info(t,A):(0,d.info)(t,A)}function n(t,...x){let A=hx(x);I?I?.debug(t,A):(0,d.debug)(t,A)}function hx(...t){if(t.length===1&&typeof t[0]=="object"&&t[0]!==null)return{...t[0]};if(t.length>0)return{args:t}}var d,I,L0=p(()=>{"use strict";d=require("@4players/odin-common")});function h(t){return t.connectionId*4294967296+t.mediaId}var y,z,o=p(()=>{"use strict";t0();px();t0();k0();G0();g0();y0();L0();px();y={isSilent:!0,rmsDBFS:-758.596};z=class{constructor(){this.inFlight=null}run(x){return this.inFlight||(this.inFlight=x().finally(()=>{this.inFlight=null})),this.inFlight}}});function jx(t,x,A,F,r){return Promise.all([YA(t),xF(A,x,F,r)])}async function YA(t){let x=URL.createObjectURL(new Blob([t],{type:"text/javascript"})),A=new Worker(x,{type:"module",name:"odin worker"});return rx.push(A),A}async function xF(t,x,A,F){try{let e=new AudioWorkletNode(t,A,F);return X.push(e),e}catch{}let r=e0.get(t);if(r===void 0){let e=URL.createObjectURL(new Blob([x],{type:"text/javascript"}));r=t.audioWorklet.addModule(e),e0.set(t,r),r.catch(()=>e0.delete(t))}await r;let D=new AudioWorkletNode(t,A,F);return X.push(D),D}async function w0(){return{workers:await Promise.all(rx.map(ex)),worklets:await Promise.all(X.map(t=>ex(t.port)))}}function ex(t){let{port1:x,port2:A}=new MessageChannel,{promise:F,resolve:r}=Promise.withResolvers();return A.onmessage=D=>r(D.data),setTimeout(()=>r("timeout"),100),l(t,["dump",{result:x}],[x]),F}var rx,X,tx,Dx,e0,mx=p(()=>{"use strict";o();rx=[],X=[],tx=class{constructor(x,A,F){this.audioContext=x;this.worklet=A;this.worker=F;this.availableIndexes=[];this.medias=new Map;F.addEventListener("message",this._OnMessages.bind(this))}connectOutput(x){this.worklet.disconnect(),this.worklet.connect(x)}receivePacket(x,A){l(this.worker,["playbackReceivePacket",{connectionId:x,packet:A}],[A.buffer])}addMedias(x,A,F=[1,1]){let r=[];for(let D of A){let e=this._GetFreeIndex();e!==void 0&&(this.medias.set(h({connectionId:x,mediaId:D}),{index:e}),r.push({connectionId:x,mediaId:D,index:e,volume:F}))}l(this.worker,["playbackUpdateMedias",{added:r,removed:[]}])}removeMedias(x,A){let F=[];for(let r of A){let D=h({connectionId:x,mediaId:r}),e=this.medias.get(D);e!==void 0&&(this.medias.delete(D),this.availableIndexes.push(e.index),F.push({connectionId:x,mediaId:r,index:e.index}))}l(this.worker,["playbackUpdateMedias",{added:[],removed:F}])}close(){l(this.worker,["close",void 0]),l(this.worklet.port,["close",void 0]);let x=rx.indexOf(this.worker);x>=0&&rx.splice(x,1);let A=X.indexOf(this.worklet);A>=0&&X.splice(A,1)}async dump(){return{playbackWorker:await ex(this.worker),playbackWorklet:await ex(this.worklet.port)}}_GetFreeIndex(){return this.availableIndexes.pop()}_OnMessages(x){}},Dx=class t{constructor(x,A,F,r,D){this.worklet=x;this.worker=A;this.sink=(e,j)=>{D.deref()!==void 0?F(e,j):(k("capture worker was left abandoned, aborting capture worker"),t.shutdown(x,A))},this.monitorSink=(e,j)=>{D.deref()!==void 0?r(e,j):(k("capture worker was left abandoned, aborting capture worker"),t.shutdown(x,A))},A.addEventListener("message",this._OnMessages.bind(this))}get context(){return this.worklet.context}setMedias(x){l(this.worker,["captureSetMedias",{connections:x}])}setVad(x){l(this.worker,["captureSetVad",x])}close(){t.shutdown(this.worklet,this.worker)}static shutdown(x,A){l(x.port,["close",void 0]),l(A,["close",void 0]);let F=rx.indexOf(A);F>=0&&rx.splice(F,1);let r=X.indexOf(x);r>=0&&X.splice(r,1)}async dump(){return{captureWorker:await ex(this.worker),captureWorklet:await ex(this.worklet.port)}}_OnMessages(x){let[A,F]=x.data;A==="sendPacket"&&(F.connectionId===0?this.monitorSink(F.connectionId,F.packet):this.sink(F.connectionId,F.packet))}};e0=new WeakMap});var j0,P0=p(()=>{j0=`"use strict";(()=>{var Cn=Object.create;var or=Object.defineProperty;var Gn=Object.getOwnPropertyDescriptor;var pn=Object.getOwnPropertyNames;var hn=Object.getPrototypeOf,In=Object.prototype.hasOwnProperty;var mn=(n,A)=>()=>(A||n((A={exports:{}}).exports,A),A.exports),En=(n,A)=>{for(var t in A)or(n,t,{get:A[t],enumerable:!0})},$n=(n,A,t,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let i of pn(A))!In.call(n,i)&&i!==t&&or(n,i,{get:()=>A[i],enumerable:!(e=Gn(A,i))||e.enumerable});return n};var Fn=(n,A,t)=>(t=n!=null?Cn(hn(n)):{},$n(A||!n||!n.__esModule?or(t,"default",{value:n,enumerable:!0}):t,n));var $t=mn((Et,MA)=>{"use strict";var wA=(()=>{var n=globalThis.document?.currentScript?.src;return async function(A={}){var t,e=A,i=!!globalThis.window,d=!!globalThis.WorkerGlobalScope,q=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",C=d&&globalThis.name=="em-pthread",v=[],B="./this.program",CA=(r,j)=>{throw j};d&&(n=self.location.href);var w="",Ht,_t;if(i||d){try{w=new URL(".",n).href}catch{}d&&(_t=r=>{var j=new XMLHttpRequest;return j.open("GET",r,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),Ht=async r=>{var j=await fetch(r,{credentials:"same-origin"});if(j.ok)return j.arrayBuffer();throw new Error(j.status+" : "+j.url)}}var TA=console.log.bind(console),N=console.error.bind(console),gr,eA,GA=!1,Q;function yt(r){for(var j=0,s=r.length,l=new Uint8Array(s),o;j<s;++j)o=r.charCodeAt(j),l[j]=~o>>8&o;return l}var UA,Lr,Hr;if(C){let r=function(j){try{var s=j.data,l=s.cmd;if(l==="load"){let o=[];self.onmessage=k=>o.push(k),Hr=()=>{postMessage({cmd:"loaded"});for(let k of o)r(k);self.onmessage=r};for(let k of s.handlers)(!e[k]||e[k].proxy)&&(e[k]=(...a)=>{postMessage({cmd:"callHandler",handler:k,args:a})},k=="print"&&(TA=e[k]),k=="printErr"&&(N=e[k]));X=s.wasmMemory,yr(),eA=s.wasmModule,Nr(),Dj()}else if(l==="run"){St(s.pthread_ptr),sr(s.pthread_ptr,0,0,1,0,0),h.threadInitTLS(),tr(s.pthread_ptr),SA||(Ij(),SA=!0);try{Vt(s.start_routine,s.arg)}catch(o){if(o!="unwind")throw o}}else s.target==="setimmediate"||(l==="checkMailbox"?SA&&HA():l&&(N(\`worker: received unknown command \${l}\`),N(s)))}catch(o){throw mj(),o}};var Ds=r,SA=!1;self.onunhandledrejection=j=>{throw j.reason||j},self.onmessage=r}var _r=!1;function yr(){var r=X.buffer;V=new Int8Array(r),pA=new Int16Array(r),e.HEAPU8=x=new Uint8Array(r),nA=new Uint16Array(r),e.HEAP32=z=new Int32Array(r),e.HEAPU32=E=new Uint32Array(r),e.HEAPF32=Jr=new Float32Array(r),hA=new Float64Array(r),S=new BigInt64Array(r),Kr=new BigUint64Array(r)}function xt(){if(!C){if(e.wasmMemory)X=e.wasmMemory;else{var r=e.INITIAL_MEMORY||16777216;X=new WebAssembly.Memory({initial:r/65536,maximum:r/65536,shared:!0})}yr()}}function Dt(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Ot(e.preRun.shift());wr(Mr)}function xr(){if(_r=!0,C)return Hr();jA.F()}function Bt(){if(!C){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)Ut(e.postRun.shift());wr(Vr)}}function VA(r){e.onAbort?.(r),r="Aborted("+r+")",N(r),GA=!0,r+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(r);throw Lr?.(j),j}var Dr;function Nt(){return yt(\`\\0asm\\0\\0\\0\\xB2>\\\`\\x7F\\0\\\`\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\\`\\0\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`||\\\`\\x7F}\\\`}}\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\0\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F~\\\`\\x7F\\x7F}\\\`\\x7F}}\\\`\\x7F\\x7F}}\\0\\\`
|
|
2
2
|
\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`|}\\\`|\\x7F|\\\`\\x7F\\x7F}\\0\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\` \\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\f\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F|\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F|}\\\`\\0|\\\`\\x7F\\x7F\\x7F~~\\0\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F|\\\`\\r\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F\\x7F\\x7F\\\`\\x7F\\x7F|\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\x7F\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F}}\\x7F\\x7F\\x7F\\x7F\\0\\\`~\\x7F\\x7F\\\` \\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\\`||\\x7F|\\\`|||\\\`\\x7F\\x7F\\x7F|\\\`\\x7F\\x7F|\\x7F\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\\`\\f\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`}\\x7F\\x7F\\\`|\\x7F\\x7F\\\`\\x7F\\x7F\\x7F}\\\`\\x7F}\\x7F\\0\\\`\\x7F\\x7F}\\x7F\\x7F\\x7F}\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F}}\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F|\\\`\\x7F\\x7F|\\0\\xBFab\\0ac\\0ad\\0ae\\0af\\0!ag\\0ah\\0"ai\\0aj\\0
|
|
3
3
|
ak\\0#al\\0am\\0 an\\0$ao\\0ap\\0aq\\0ar\\0\\0as\\0\\0at\\0au\\0av\\0%aw\\0ax\\0\\bay\\0\\0az\\0\\0aA\\0\\baB\\0\\0aC\\0\\baD\\0\\0aE\\0aa\\x80\\x80\\xFB\\xF9\\0\\x07\\f&\\0\\f\\x07\\f\\f\\0\\x07\\0\\x07'(
|
|
4
4
|
\\b\\v)\\x07*\\0\\f+,-\\v\\0\\0\\x07\\0.\\b\\b\\x1B
|
|
@@ -3222,7 +3222,7 @@ K\\xE08\\xDF\\0}\\xBC\\x8A\\x1B\\f\\xE5\\xFF\\xCF\\xE8?\\x9F\\xFFFq\\0\\x88\\xB
|
|
|
3222
3222
|
|
|
3223
3223
|
|
|
3224
3224
|
\\x07\\0\\0 \\v\\0\\0 \\v\\0\\0\\v\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\v\\r\\0\\r\\0\\0\\0 \\0\\0\\0 \\0\\0\\0!\\f\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\f\\0\\0\\0\\0\\0\\f\\0\\0\\f!\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0*\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 !\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\xC0 \\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0\\x000123456789ABCDEF\\xA0\\0\\xF8\\0NSt3__214__shared_countE\\0\\0\\0\\0$\\0,\\0\\0\\0\\0\\0\\0\\0\\0\\xF0\\0\\0\\0\\0\\0NSt3__219__shared_weak_countE\\0\\0\\0\\xC8\\0X\\0h\\0N10__cxxabiv116__shim_type_infoE\\0\\0\\0\\0\\xC8\\0\\x88\\0L\\0N10__cxxabiv117__class_type_infoE\\0\\0\\0\\xC8\\0\\xB8\\0L\\0N10__cxxabiv117__pbase_type_infoE\\0\\0\\0\\xC8\\0\\xE8\\0\\xAC\\0N10__cxxabiv119__pointer_type_infoE\\0\\xC8\\0\\0L\\0N10__cxxabiv120__function_type_infoE\\0\\0\\0\\0\\xC8\\0L\\0\\xAC\\0N10__cxxabiv129__pointer_to_member_type_infoE\\0\\0\\0\\0\\0\\0\\0\\x98\\0n\\0\\0\\0o\\0\\0\\0p\\0\\0\\0q\\0\\0\\0r\\0\\0\\0\\xC8\\0\\xA4\\0L\\0N10__cxxabiv123__fundamental_type_infoE\\0\\x84\\0\\xD4\\0v\\0Dn\\0\\0\\0\\0\\x84\\0\\xE4\\0b\\0\\0\\0\\x84\\0\\xF0\\0c\\0\\0\\0\\x84\\0\\xFC\\0h\\0\\0\\0\\x84\\0\\b\\0a\\0\\0\\0\\x84\\0\\0s\\0\\0\\0\\x84\\0 \\0t\\0\\0\\0\\x84\\0,\\0i\\0\\0\\0\\x84\\x008\\0j\\0\\0\\0\\x84\\0D\\0l\\0\\0\\0\\x84\\0P\\0m\\0\\0\\0\\x84\\0\\\\\\0x\\0\\0\\0\\x84\\0h\\0y\\0\\0\\0\\x84\\0t\\0f\\0\\0\\0\\x80\\0\\x88\\0\\0\\0\\0\\0l\\0Pf\\0\\0\\x84\\0\\x94\\0d\\0\\0\\0\\0\\0\\0\\0|\\0n\\0\\0\\0s\\0\\0\\0p\\0\\0\\0q\\0\\0\\0t\\0\\0\\0u\\0\\0\\0v\\0\\0\\0w\\0\\0\\0\\0\\0\\0\\0\\xE8\\0n\\0\\0\\0x\\0\\0\\0p\\0\\0\\0q\\0\\0\\0t\\0\\0\\0y\\0\\0\\0z\\0\\0\\0{\\0\\0\\0\\xC8\\0\\xF4\\0|\\0N10__cxxabiv120__si_class_type_infoE\\0\\0\\0\\0\\0\\0\\0\\0D\\0n\\0\\0\\0|\\0\\0\\0p\\0\\0\\0q\\0\\0\\0t\\0\\0\\0}\\0\\0\\0~\\0\\0\\0\\x7F\\0\\0\\0\\xC8\\0P\\0|\\0N10__cxxabiv121__vmi_class_type_infoE\\0\\0\\0\\0\\0\\0\\0\\xDC\\0n\\0\\0\\0\\x80\\0\\0\\0p\\0\\0\\0q\\0\\0\\0\\x81\\0\\0\\0\\0\\0\\0\\0\\xDC\\0F\\0\\0\\0\\x82\\0\\0\\0\\x83\\0\\0\\0\\xA0\\0\\xB0\\0St9exception\\0\\0\\0\\0\\xC8\\0\\xCC\\0\\xA8\\0St9bad_alloc\\0\\0\\0\\0\\xC8\\0\\xE8\\0\\xC0\\0St20bad_array_new_length\\0\\0\\0\\0\\0\\0\\0\\0\\0H\\0\\0\\0\\x84\\0\\0\\0\\x85\\0\\0\\0\\xC8\\0$\\0\\xA8\\0St11logic_error\\0\\0\\0\\0\\0H\\0H\\0\\0\\0\\x86\\0\\0\\0\\x85\\0\\0\\0\\xC8\\0T\\0\\0St12length_error\\0\\0\\0\\0\\xA0\\0p\\0St9type_info\\0\\\`\\x80\\0\\x80\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0f\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0g\\0\\0\\0h\\0\\0\\0P\\x1B\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFFY\\xC0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0i\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0g\\0\\0\\0j\\0\\0\\0X\\x1B\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\xFF\\xFF\\xFF\\xFF
|
|
3225
|
-
\\fX\\0\\x90!\\0\\0\\0\\0\`)}function _s(r){return r}async function bt(r){return r}async function Jt(r,j){try{var s=await bt(r),l=await WebAssembly.instantiate(s,j);return l}catch(o){N(\`failed to asynchronously prepare wasm: \${o}\`),VA(o)}}async function Kt(r,j,s){return Jt(j,s)}function Br(){qn();var r={a:xj};return r}async function Nr(){function r(a,u){return jA=a.exports,Rt(jA.M),dn(jA),eA=u,jA}function j(a){return r(a.instance,a.module)}var s=Br();if(e.instantiateWasm)return new Promise((a,u)=>{e.instantiateWasm(s,(c,f)=>{a(r(c,f))})});if(C){var l=new WebAssembly.Instance(eA,Br());return r(l,eA)}Dr??=Nt();var o=await Kt(gr,Dr,s),k=j(o);return k}class br{name="ExitStatus";constructor(j){this.message=\`Program terminated with exit(\${j})\`,this.status=j}}var pA,z,S,V,Jr,hA,nA,E,Kr,x,Or=r=>{r.terminate(),r.onmessage=j=>{}},Pr=r=>{var j=h.pthreads[r];h.returnWorkerToPool(j)},wr=r=>{for(;r.length>0;)r.shift()(e)},Mr=[],Ot=r=>Mr.push(r),Pt=r=>{var j=h.getNewWorker();if(!j)return 6;h.runningWorkers.push(j),h.pthreads[r.pthread_ptr]=j,j.pthread_ptr=r.pthread_ptr;var s={cmd:"run",start_routine:r.startRoutine,arg:r.arg,pthread_ptr:r.pthread_ptr};return j.postMessage(s,r.transferList),0},RA=0,WA=()=>zA||RA>0,wt=()=>_j(),Tr=r=>Lj(r),Mt=r=>Hj(r),sA=(r,j,s,...l)=>{var o=8*l.length*2,k=wt(),a=Mt(o),u=a>>3;for(var c of l)typeof c=="bigint"?(S[u++]=1n,S[u++]=c):(S[u++]=0n,hA[u++]=c);var f=$j(r,j,o,a,s);return Tr(k),f};function Ur(r){if(C)return sA(0,0,1,r);Q=r,WA()||(h.terminateAllThreads(),e.onExit?.(r),GA=!0),CA(r,new br(r))}function Sr(r){if(C)return sA(1,0,0,r);QA(r)}var Tt=(r,j)=>{if(Q=r,C)throw Sr(r),"unwind";Ur(r)},QA=Tt,h={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){C||h.initMainThread()},initMainThread(){},terminateAllThreads:()=>{for(var r of h.runningWorkers)Or(r);for(var r of h.unusedWorkers)Or(r);h.unusedWorkers=[],h.runningWorkers=[],h.pthreads={}},returnWorkerToPool:r=>{var j=r.pthread_ptr;delete h.pthreads[j],h.unusedWorkers.push(r),h.runningWorkers.splice(h.runningWorkers.indexOf(r),1),r.pthread_ptr=0,Fj(j)},threadInitTLS(){h.tlsInitFunctions.forEach(r=>r())},loadWasmModuleToWorker:r=>new Promise(j=>{r.onmessage=k=>{var a=k.data,u=a.cmd;if(a.targetThread&&a.targetThread!=_A()){var c=h.pthreads[a.targetThread];c?c.postMessage(a,a.transferList):N(\`Internal error! Worker sent a message "\${u}" to target pthread \${a.targetThread}, but that thread no longer exists!\`);return}u==="checkMailbox"?HA():u==="spawnThread"?Pt(a):u==="cleanupThread"?fj(()=>Pr(a.thread)):u==="loaded"?(r.loaded=!0,j(r)):a.target==="setimmediate"?r.postMessage(a):u==="callHandler"?e[a.handler](...a.args):u&&N(\`worker sent an unknown command \${u}\`)},r.onerror=k=>{var a="worker sent an error!";throw N(\`\${a} \${k.filename}:\${k.lineno}: \${k.message}\`),k};var s=[],l=["onExit","onAbort","print","printErr"];for(var o of l)e.propertyIsEnumerable(o)&&s.push(o);r.postMessage({cmd:"load",handlers:s,wasmMemory:X,wasmModule:eA})}),allocateUnusedWorker(){var r,j=n;e.mainScriptUrlOrBlob&&(j=e.mainScriptUrlOrBlob,typeof j!="string"&&(j=URL.createObjectURL(j))),r=new Worker(j,{name:"em-pthread"}),h.unusedWorkers.push(r)},getNewWorker(){return h.unusedWorkers.length==0&&(h.allocateUnusedWorker(),h.loadWasmModuleToWorker(h.unusedWorkers[0])),h.unusedWorkers.pop()}},Vr=[],Ut=r=>Vr.push(r);function St(r){var j=E[r+48>>2],s=E[r+52>>2],l=j-s;gj(j,l),Tr(j)}var Rr=[],Wr=r=>{var j=Rr[r];return j||(Rr[r]=j=yj.get(r)),j},Vt=(r,j)=>{RA=0,zA=0;var s=Wr(r)(j);function l(o){if(WA()){Q=o;return}ir(o)}l(s)},zA=!0,Rt=r=>h.tlsInitFunctions.push(r),X;class Wt{constructor(j){this.excPtr=j,this.ptr=j-24}set_type(j){E[this.ptr+4>>2]=j}get_type(){return E[this.ptr+4>>2]}set_destructor(j){E[this.ptr+8>>2]=j}get_destructor(){return E[this.ptr+8>>2]}set_caught(j){j=j?1:0,V[this.ptr+12]=j}get_caught(){return V[this.ptr+12]!=0}set_rethrown(j){j=j?1:0,V[this.ptr+13]=j}get_rethrown(){return V[this.ptr+13]!=0}init(j,s){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(s)}set_adjusted_ptr(j){E[this.ptr+16>>2]=j}get_adjusted_ptr(){return E[this.ptr+16>>2]}}var Qr=0,Qt=0,zt=(r,j,s)=>{var l=new Wt(r);throw l.init(j,s),Qr=r,Qt++,Qr},Xt=()=>VA(""),g=r=>{for(var j="";;){var s=x[r++];if(!s)return j;j+=String.fromCharCode(s)}},Z={},Y={},IA={},iA=class extends Error{constructor(j){super(j),this.name="BindingError"}},p=r=>{throw new iA(r)};function Zt(r,j,s={}){var l=j.name;if(r||p(\`type "\${l}" must have a positive integer typeid pointer\`),Y.hasOwnProperty(r)){if(s.ignoreDuplicateRegistrations)return;p(\`Cannot register type '\${l}' twice\`)}if(Y[r]=j,delete IA[r],Z.hasOwnProperty(r)){var o=Z[r];delete Z[r],o.forEach(k=>k())}}function b(r,j,s={}){return Zt(r,j,s)}var zr=(r,j,s)=>{switch(j){case 1:return s?l=>V[l]:l=>x[l];case 2:return s?l=>pA[l>>1]:l=>nA[l>>1];case 4:return s?l=>z[l>>2]:l=>E[l>>2];case 8:return s?l=>S[l>>3]:l=>Kr[l>>3];default:throw new TypeError(\`invalid integer width (\${j}): \${r}\`)}},Yt=(r,j,s,l,o)=>{j=g(j);let k=l===0n,a=u=>u;if(k){let u=s*8;a=c=>BigInt.asUintN(u,c),o=a(o)}b(r,{name:j,fromWireType:a,toWireType:(u,c)=>(typeof c=="number"&&(c=BigInt(c)),c),readValueFromPointer:zr(j,s,!k),destructorFunction:null})},Ae=(r,j,s,l)=>{j=g(j),b(r,{name:j,fromWireType:function(o){return!!o},toWireType:function(o,k){return k?s:l},readValueFromPointer:function(o){return this.fromWireType(x[o])},destructorFunction:null})},re=r=>({count:r.count,deleteScheduled:r.deleteScheduled,preservePointerOnDelete:r.preservePointerOnDelete,ptr:r.ptr,ptrType:r.ptrType,smartPtr:r.smartPtr,smartPtrType:r.smartPtrType}),XA=r=>{function j(s){return s.$$.ptrType.registeredClass.name}p(j(r)+" instance already deleted")},ZA=!1,Xr=r=>{},je=r=>{r.smartPtr?r.smartPtrType.rawDestructor(r.smartPtr):r.ptrType.registeredClass.rawDestructor(r.ptr)},Zr=r=>{r.count.value-=1;var j=r.count.value===0;j&&je(r)},lA=r=>globalThis.FinalizationRegistry?(ZA=new FinalizationRegistry(j=>{Zr(j.$$)}),lA=j=>{var s=j.$$,l=!!s.smartPtr;if(l){var o={$$:s};ZA.register(j,o,j)}return j},Xr=j=>ZA.unregister(j),lA(r)):(lA=j=>j,r),mA=[],te=()=>{for(;mA.length;){var r=mA.pop();r.$$.deleteScheduled=!1,r.delete()}},Yr,ee=()=>{let r=EA.prototype;Object.assign(r,{isAliasOf(s){if(!(this instanceof EA)||!(s instanceof EA))return!1;var l=this.$$.ptrType.registeredClass,o=this.$$.ptr;s.$$=s.$$;for(var k=s.$$.ptrType.registeredClass,a=s.$$.ptr;l.baseClass;)o=l.upcast(o),l=l.baseClass;for(;k.baseClass;)a=k.upcast(a),k=k.baseClass;return l===k&&o===a},clone(){if(this.$$.ptr||XA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var s=lA(Object.create(Object.getPrototypeOf(this),{$$:{value:re(this.$$)}}));return s.$$.count.value+=1,s.$$.deleteScheduled=!1,s},delete(){this.$$.ptr||XA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&p("Object already scheduled for deletion"),Xr(this),Zr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||XA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&p("Object already scheduled for deletion"),mA.push(this),mA.length===1&&Yr&&Yr(te),this.$$.deleteScheduled=!0,this}});let j=Symbol.dispose;j&&(r[j]=r.delete)};function EA(){}var Aj=(r,j)=>Object.defineProperty(j,"name",{value:r}),rj={},jj=(r,j,s)=>{if(r[j].overloadTable===void 0){var l=r[j];r[j]=function(...o){return r[j].overloadTable.hasOwnProperty(o.length)||p(\`Function '\${s}' called with an invalid number of arguments (\${o.length}) - expects one of (\${r[j].overloadTable})!\`),r[j].overloadTable[o.length].apply(this,o)},r[j].overloadTable=[],r[j].overloadTable[l.argCount]=l}},tj=(r,j,s)=>{e.hasOwnProperty(r)?((s===void 0||e[r].overloadTable!==void 0&&e[r].overloadTable[s]!==void 0)&&p(\`Cannot register public name '\${r}' twice\`),jj(e,r,r),e[r].overloadTable.hasOwnProperty(s)&&p(\`Cannot register multiple overloads of a function with the same number of arguments (\${s})!\`),e[r].overloadTable[s]=j):(e[r]=j,e[r].argCount=s)},ne=48,se=57,ie=r=>{r=r.replace(/[^a-zA-Z0-9_]/g,"$");var j=r.charCodeAt(0);return j>=ne&&j<=se?\`_\${r}\`:r};function le(r,j,s,l,o,k,a,u){this.name=r,this.constructor=j,this.instancePrototype=s,this.rawDestructor=l,this.baseClass=o,this.getActualType=k,this.upcast=a,this.downcast=u,this.pureVirtualFunctions=[]}var $A=(r,j,s)=>{for(;j!==s;)j.upcast||p(\`Expected null or instance of \${s.name}, got an instance of \${j.name}\`),r=j.upcast(r),j=j.baseClass;return r},YA=r=>{if(r===null)return"null";var j=typeof r;return j==="object"||j==="array"||j==="function"?r.toString():""+r};function oe(r,j){if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),0;j.$$||p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`);var s=j.$$.ptrType.registeredClass,l=$A(j.$$.ptr,s,this.registeredClass);return l}function ae(r,j){var s;if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),this.isSmartPointer?(s=this.rawConstructor(),r!==null&&r.push(this.rawDestructor,s),s):0;(!j||!j.$$)&&p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`),!this.isConst&&j.$$.ptrType.isConst&&p(\`Cannot convert argument of type \${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type \${this.name}\`);var l=j.$$.ptrType.registeredClass;if(s=$A(j.$$.ptr,l,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&p("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?s=j.$$.smartPtr:p(\`Cannot convert argument of type \${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type \${this.name}\`);break;case 1:s=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)s=j.$$.smartPtr;else{var o=j.clone();s=this.rawShare(s,jr.toHandle(()=>o.delete())),r!==null&&r.push(this.rawDestructor,s)}break;default:p("Unsupported sharing policy")}return s}function ke(r,j){if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),0;j.$$||p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`),j.$$.ptrType.isConst&&p(\`Cannot convert argument of type \${j.$$.ptrType.name} to parameter type \${this.name}\`);var s=j.$$.ptrType.registeredClass,l=$A(j.$$.ptr,s,this.registeredClass);return l}function FA(r){return this.fromWireType(E[r>>2])}var ej=(r,j,s)=>{if(j===s)return r;if(s.baseClass===void 0)return null;var l=ej(r,j,s.baseClass);return l===null?null:s.downcast(l)},ue={},ce=(r,j)=>{for(j===void 0&&p("ptr should not be undefined");r.baseClass;)j=r.upcast(j),r=r.baseClass;return j},de=(r,j)=>(j=ce(r,j),ue[j]),qe=class extends Error{constructor(j){super(j),this.name="InternalError"}},vA=r=>{throw new qe(r)},gA=(r,j)=>{(!j.ptrType||!j.ptr)&&vA("makeClassHandle requires ptr and ptrType");var s=!!j.smartPtrType,l=!!j.smartPtr;return s!==l&&vA("Both smartPtrType and smartPtr must be specified"),j.count={value:1},lA(Object.create(r,{$$:{value:j,writable:!0}}))};function fe(r){var j=this.getPointee(r);if(!j)return this.destructor(r),null;var s=de(this.registeredClass,j);if(s!==void 0){if(s.$$.count.value===0)return s.$$.ptr=j,s.$$.smartPtr=r,s.clone();var l=s.clone();return this.destructor(r),l}function o(){return this.isSmartPointer?gA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:r}):gA(this.registeredClass.instancePrototype,{ptrType:this,ptr:r})}var k=this.registeredClass.getActualType(j),a=rj[k];if(!a)return o.call(this);var u;this.isConst?u=a.constPointerType:u=a.pointerType;var c=ej(j,this.registeredClass,u.registeredClass);return c===null?o.call(this):this.isSmartPointer?gA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c,smartPtrType:this,smartPtr:r}):gA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c})}var Ce=()=>{Object.assign(LA.prototype,{getPointee(r){return this.rawGetPointee&&(r=this.rawGetPointee(r)),r},destructor(r){this.rawDestructor?.(r)},readValueFromPointer:FA,fromWireType:fe})};function LA(r,j,s,l,o,k,a,u,c,f,G){this.name=r,this.registeredClass=j,this.isReference=s,this.isConst=l,this.isSmartPointer=o,this.pointeeType=k,this.sharingPolicy=a,this.rawGetPointee=u,this.rawConstructor=c,this.rawShare=f,this.rawDestructor=G,!o&&j.baseClass===void 0?l?(this.toWireType=oe,this.destructorFunction=null):(this.toWireType=ke,this.destructorFunction=null):this.toWireType=ae}var nj=(r,j,s)=>{e.hasOwnProperty(r)||vA("Replacing nonexistent public symbol"),e[r].overloadTable!==void 0&&s!==void 0?e[r].overloadTable[s]=j:(e[r]=j,e[r].argCount=s)},K=(r,j,s=!1)=>{r=g(r);function l(){var k=Wr(j);return k}var o=l();return typeof o!="function"&&p(\`unknown function pointer with signature \${r}: \${j}\`),o};class Ge extends Error{}var pe=r=>{var j=hj(r),s=g(j);return O(j),s},AA=(r,j)=>{var s=[],l={};function o(k){if(!l[k]&&!Y[k]){if(IA[k]){IA[k].forEach(o);return}s.push(k),l[k]=!0}}throw j.forEach(o),new Ge(\`\${r}: \`+s.map(pe).join([", "]))},M=(r,j,s)=>{r.forEach(u=>IA[u]=j);function l(u){var c=s(u);c.length!==r.length&&vA("Mismatched type converter count");for(var f=0;f<r.length;++f)b(r[f],c[f])}var o=new Array(j.length),k=[],a=0;for(let[u,c]of j.entries())Y.hasOwnProperty(c)?o[u]=Y[c]:(k.push(c),Z.hasOwnProperty(c)||(Z[c]=[]),Z[c].push(()=>{o[u]=Y[c],++a,a===k.length&&l(o)}));k.length===0&&l(o)},he=(r,j,s,l,o,k,a,u,c,f,G,I,$)=>{G=g(G),k=K(o,k),u&&=K(a,u),f&&=K(c,f),$=K(I,$);var m=ie(G);tj(m,function(){AA(\`Cannot construct \${G} due to unbound types\`,[l])}),M([r,j,s],l?[l]:[],F=>{F=F[0];var _,P;l?(_=F.registeredClass,P=_.instancePrototype):P=EA.prototype;var y=Aj(G,function(...lr){if(Object.getPrototypeOf(this)!==oA)throw new iA(\`Use 'new' to construct \${G}\`);if(H.constructor_body===void 0)throw new iA(\`\${G} has no accessible constructor\`);var bj=H.constructor_body[lr.length];if(bj===void 0)throw new iA(\`Tried to invoke ctor of \${G} with invalid number of parameters (\${lr.length}) - expected (\${Object.keys(H.constructor_body).toString()}) parameters instead!\`);return bj.apply(this,lr)}),oA=Object.create(P,{constructor:{value:y}});y.prototype=oA;var H=new le(G,y,oA,$,_,k,u,f);H.baseClass&&(H.baseClass.__derivedClasses??=[],H.baseClass.__derivedClasses.push(H));var fn=new LA(G,H,!0,!1,!1),Bj=new LA(G+"*",H,!1,!1,!1),Nj=new LA(G+" const*",H,!1,!0,!1);return rj[r]={pointerType:Bj,constPointerType:Nj},nj(m,y),[fn,Bj,Nj]})},Ar=(r,j)=>{for(var s=[],l=0;l<r;l++)s.push(E[j+l*4>>2]);return s},sj=r=>{for(;r.length;){var j=r.pop(),s=r.pop();s(j)}};function ij(r){for(var j=1;j<r.length;++j)if(r[j]!==null&&r[j].destructorFunction===void 0)return!0;return!1}function Ie(r,j,s,l){var o=ij(r),k=r.length-2,a=[],u=["fn"];j&&u.push("thisWired");for(var c=0;c<k;++c)a.push(\`arg\${c}\`),u.push(\`arg\${c}Wired\`);a=a.join(","),u=u.join(",");var f=\`return function (\${a}) {
|
|
3225
|
+
\\fX\\0\\x90!\\0\\0\\0\\0\`)}function xs(r){return r}async function bt(r){return r}async function Jt(r,j){try{var s=await bt(r),l=await WebAssembly.instantiate(s,j);return l}catch(o){N(\`failed to asynchronously prepare wasm: \${o}\`),VA(o)}}async function Kt(r,j,s){return Jt(j,s)}function Br(){qn();var r={a:xj};return r}async function Nr(){function r(a,u){return jA=a.exports,Rt(jA.M),dn(jA),eA=u,jA}function j(a){return r(a.instance,a.module)}var s=Br();if(e.instantiateWasm)return new Promise((a,u)=>{e.instantiateWasm(s,(c,f)=>{a(r(c,f))})});if(C){var l=new WebAssembly.Instance(eA,Br());return r(l,eA)}Dr??=Nt();var o=await Kt(gr,Dr,s),k=j(o);return k}class br{name="ExitStatus";constructor(j){this.message=\`Program terminated with exit(\${j})\`,this.status=j}}var pA,z,S,V,Jr,hA,nA,E,Kr,x,Or=r=>{r.terminate(),r.onmessage=j=>{}},Pr=r=>{var j=h.pthreads[r];h.returnWorkerToPool(j)},wr=r=>{for(;r.length>0;)r.shift()(e)},Mr=[],Ot=r=>Mr.push(r),Pt=r=>{var j=h.getNewWorker();if(!j)return 6;h.runningWorkers.push(j),h.pthreads[r.pthread_ptr]=j,j.pthread_ptr=r.pthread_ptr;var s={cmd:"run",start_routine:r.startRoutine,arg:r.arg,pthread_ptr:r.pthread_ptr};return j.postMessage(s,r.transferList),0},RA=0,WA=()=>zA||RA>0,wt=()=>_j(),Tr=r=>Lj(r),Mt=r=>Hj(r),sA=(r,j,s,...l)=>{var o=8*l.length*2,k=wt(),a=Mt(o),u=a>>3;for(var c of l)typeof c=="bigint"?(S[u++]=1n,S[u++]=c):(S[u++]=0n,hA[u++]=c);var f=$j(r,j,o,a,s);return Tr(k),f};function Ur(r){if(C)return sA(0,0,1,r);Q=r,WA()||(h.terminateAllThreads(),e.onExit?.(r),GA=!0),CA(r,new br(r))}function Sr(r){if(C)return sA(1,0,0,r);QA(r)}var Tt=(r,j)=>{if(Q=r,C)throw Sr(r),"unwind";Ur(r)},QA=Tt,h={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){C||h.initMainThread()},initMainThread(){},terminateAllThreads:()=>{for(var r of h.runningWorkers)Or(r);for(var r of h.unusedWorkers)Or(r);h.unusedWorkers=[],h.runningWorkers=[],h.pthreads={}},returnWorkerToPool:r=>{var j=r.pthread_ptr;delete h.pthreads[j],h.unusedWorkers.push(r),h.runningWorkers.splice(h.runningWorkers.indexOf(r),1),r.pthread_ptr=0,Fj(j)},threadInitTLS(){h.tlsInitFunctions.forEach(r=>r())},loadWasmModuleToWorker:r=>new Promise(j=>{r.onmessage=k=>{var a=k.data,u=a.cmd;if(a.targetThread&&a.targetThread!=_A()){var c=h.pthreads[a.targetThread];c?c.postMessage(a,a.transferList):N(\`Internal error! Worker sent a message "\${u}" to target pthread \${a.targetThread}, but that thread no longer exists!\`);return}u==="checkMailbox"?HA():u==="spawnThread"?Pt(a):u==="cleanupThread"?fj(()=>Pr(a.thread)):u==="loaded"?(r.loaded=!0,j(r)):a.target==="setimmediate"?r.postMessage(a):u==="callHandler"?e[a.handler](...a.args):u&&N(\`worker sent an unknown command \${u}\`)},r.onerror=k=>{var a="worker sent an error!";throw N(\`\${a} \${k.filename}:\${k.lineno}: \${k.message}\`),k};var s=[],l=["onExit","onAbort","print","printErr"];for(var o of l)e.propertyIsEnumerable(o)&&s.push(o);r.postMessage({cmd:"load",handlers:s,wasmMemory:X,wasmModule:eA})}),allocateUnusedWorker(){var r,j=n;e.mainScriptUrlOrBlob&&(j=e.mainScriptUrlOrBlob,typeof j!="string"&&(j=URL.createObjectURL(j))),r=new Worker(j,{name:"em-pthread"}),h.unusedWorkers.push(r)},getNewWorker(){return h.unusedWorkers.length==0&&(h.allocateUnusedWorker(),h.loadWasmModuleToWorker(h.unusedWorkers[0])),h.unusedWorkers.pop()}},Vr=[],Ut=r=>Vr.push(r);function St(r){var j=E[r+48>>2],s=E[r+52>>2],l=j-s;gj(j,l),Tr(j)}var Rr=[],Wr=r=>{var j=Rr[r];return j||(Rr[r]=j=yj.get(r)),j},Vt=(r,j)=>{RA=0,zA=0;var s=Wr(r)(j);function l(o){if(WA()){Q=o;return}ir(o)}l(s)},zA=!0,Rt=r=>h.tlsInitFunctions.push(r),X;class Wt{constructor(j){this.excPtr=j,this.ptr=j-24}set_type(j){E[this.ptr+4>>2]=j}get_type(){return E[this.ptr+4>>2]}set_destructor(j){E[this.ptr+8>>2]=j}get_destructor(){return E[this.ptr+8>>2]}set_caught(j){j=j?1:0,V[this.ptr+12]=j}get_caught(){return V[this.ptr+12]!=0}set_rethrown(j){j=j?1:0,V[this.ptr+13]=j}get_rethrown(){return V[this.ptr+13]!=0}init(j,s){this.set_adjusted_ptr(0),this.set_type(j),this.set_destructor(s)}set_adjusted_ptr(j){E[this.ptr+16>>2]=j}get_adjusted_ptr(){return E[this.ptr+16>>2]}}var Qr=0,Qt=0,zt=(r,j,s)=>{var l=new Wt(r);throw l.init(j,s),Qr=r,Qt++,Qr},Xt=()=>VA(""),g=r=>{for(var j="";;){var s=x[r++];if(!s)return j;j+=String.fromCharCode(s)}},Z={},Y={},IA={},iA=class extends Error{constructor(j){super(j),this.name="BindingError"}},p=r=>{throw new iA(r)};function Zt(r,j,s={}){var l=j.name;if(r||p(\`type "\${l}" must have a positive integer typeid pointer\`),Y.hasOwnProperty(r)){if(s.ignoreDuplicateRegistrations)return;p(\`Cannot register type '\${l}' twice\`)}if(Y[r]=j,delete IA[r],Z.hasOwnProperty(r)){var o=Z[r];delete Z[r],o.forEach(k=>k())}}function b(r,j,s={}){return Zt(r,j,s)}var zr=(r,j,s)=>{switch(j){case 1:return s?l=>V[l]:l=>x[l];case 2:return s?l=>pA[l>>1]:l=>nA[l>>1];case 4:return s?l=>z[l>>2]:l=>E[l>>2];case 8:return s?l=>S[l>>3]:l=>Kr[l>>3];default:throw new TypeError(\`invalid integer width (\${j}): \${r}\`)}},Yt=(r,j,s,l,o)=>{j=g(j);let k=l===0n,a=u=>u;if(k){let u=s*8;a=c=>BigInt.asUintN(u,c),o=a(o)}b(r,{name:j,fromWireType:a,toWireType:(u,c)=>(typeof c=="number"&&(c=BigInt(c)),c),readValueFromPointer:zr(j,s,!k),destructorFunction:null})},Ae=(r,j,s,l)=>{j=g(j),b(r,{name:j,fromWireType:function(o){return!!o},toWireType:function(o,k){return k?s:l},readValueFromPointer:function(o){return this.fromWireType(x[o])},destructorFunction:null})},re=r=>({count:r.count,deleteScheduled:r.deleteScheduled,preservePointerOnDelete:r.preservePointerOnDelete,ptr:r.ptr,ptrType:r.ptrType,smartPtr:r.smartPtr,smartPtrType:r.smartPtrType}),XA=r=>{function j(s){return s.$$.ptrType.registeredClass.name}p(j(r)+" instance already deleted")},ZA=!1,Xr=r=>{},je=r=>{r.smartPtr?r.smartPtrType.rawDestructor(r.smartPtr):r.ptrType.registeredClass.rawDestructor(r.ptr)},Zr=r=>{r.count.value-=1;var j=r.count.value===0;j&&je(r)},lA=r=>globalThis.FinalizationRegistry?(ZA=new FinalizationRegistry(j=>{Zr(j.$$)}),lA=j=>{var s=j.$$,l=!!s.smartPtr;if(l){var o={$$:s};ZA.register(j,o,j)}return j},Xr=j=>ZA.unregister(j),lA(r)):(lA=j=>j,r),mA=[],te=()=>{for(;mA.length;){var r=mA.pop();r.$$.deleteScheduled=!1,r.delete()}},Yr,ee=()=>{let r=EA.prototype;Object.assign(r,{isAliasOf(s){if(!(this instanceof EA)||!(s instanceof EA))return!1;var l=this.$$.ptrType.registeredClass,o=this.$$.ptr;s.$$=s.$$;for(var k=s.$$.ptrType.registeredClass,a=s.$$.ptr;l.baseClass;)o=l.upcast(o),l=l.baseClass;for(;k.baseClass;)a=k.upcast(a),k=k.baseClass;return l===k&&o===a},clone(){if(this.$$.ptr||XA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var s=lA(Object.create(Object.getPrototypeOf(this),{$$:{value:re(this.$$)}}));return s.$$.count.value+=1,s.$$.deleteScheduled=!1,s},delete(){this.$$.ptr||XA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&p("Object already scheduled for deletion"),Xr(this),Zr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||XA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&p("Object already scheduled for deletion"),mA.push(this),mA.length===1&&Yr&&Yr(te),this.$$.deleteScheduled=!0,this}});let j=Symbol.dispose;j&&(r[j]=r.delete)};function EA(){}var Aj=(r,j)=>Object.defineProperty(j,"name",{value:r}),rj={},jj=(r,j,s)=>{if(r[j].overloadTable===void 0){var l=r[j];r[j]=function(...o){return r[j].overloadTable.hasOwnProperty(o.length)||p(\`Function '\${s}' called with an invalid number of arguments (\${o.length}) - expects one of (\${r[j].overloadTable})!\`),r[j].overloadTable[o.length].apply(this,o)},r[j].overloadTable=[],r[j].overloadTable[l.argCount]=l}},tj=(r,j,s)=>{e.hasOwnProperty(r)?((s===void 0||e[r].overloadTable!==void 0&&e[r].overloadTable[s]!==void 0)&&p(\`Cannot register public name '\${r}' twice\`),jj(e,r,r),e[r].overloadTable.hasOwnProperty(s)&&p(\`Cannot register multiple overloads of a function with the same number of arguments (\${s})!\`),e[r].overloadTable[s]=j):(e[r]=j,e[r].argCount=s)},ne=48,se=57,ie=r=>{r=r.replace(/[^a-zA-Z0-9_]/g,"$");var j=r.charCodeAt(0);return j>=ne&&j<=se?\`_\${r}\`:r};function le(r,j,s,l,o,k,a,u){this.name=r,this.constructor=j,this.instancePrototype=s,this.rawDestructor=l,this.baseClass=o,this.getActualType=k,this.upcast=a,this.downcast=u,this.pureVirtualFunctions=[]}var $A=(r,j,s)=>{for(;j!==s;)j.upcast||p(\`Expected null or instance of \${s.name}, got an instance of \${j.name}\`),r=j.upcast(r),j=j.baseClass;return r},YA=r=>{if(r===null)return"null";var j=typeof r;return j==="object"||j==="array"||j==="function"?r.toString():""+r};function oe(r,j){if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),0;j.$$||p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`);var s=j.$$.ptrType.registeredClass,l=$A(j.$$.ptr,s,this.registeredClass);return l}function ae(r,j){var s;if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),this.isSmartPointer?(s=this.rawConstructor(),r!==null&&r.push(this.rawDestructor,s),s):0;(!j||!j.$$)&&p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`),!this.isConst&&j.$$.ptrType.isConst&&p(\`Cannot convert argument of type \${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type \${this.name}\`);var l=j.$$.ptrType.registeredClass;if(s=$A(j.$$.ptr,l,this.registeredClass),this.isSmartPointer)switch(j.$$.smartPtr===void 0&&p("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:j.$$.smartPtrType===this?s=j.$$.smartPtr:p(\`Cannot convert argument of type \${j.$$.smartPtrType?j.$$.smartPtrType.name:j.$$.ptrType.name} to parameter type \${this.name}\`);break;case 1:s=j.$$.smartPtr;break;case 2:if(j.$$.smartPtrType===this)s=j.$$.smartPtr;else{var o=j.clone();s=this.rawShare(s,jr.toHandle(()=>o.delete())),r!==null&&r.push(this.rawDestructor,s)}break;default:p("Unsupported sharing policy")}return s}function ke(r,j){if(j===null)return this.isReference&&p(\`null is not a valid \${this.name}\`),0;j.$$||p(\`Cannot pass "\${YA(j)}" as a \${this.name}\`),j.$$.ptr||p(\`Cannot pass deleted object as a pointer of type \${this.name}\`),j.$$.ptrType.isConst&&p(\`Cannot convert argument of type \${j.$$.ptrType.name} to parameter type \${this.name}\`);var s=j.$$.ptrType.registeredClass,l=$A(j.$$.ptr,s,this.registeredClass);return l}function FA(r){return this.fromWireType(E[r>>2])}var ej=(r,j,s)=>{if(j===s)return r;if(s.baseClass===void 0)return null;var l=ej(r,j,s.baseClass);return l===null?null:s.downcast(l)},ue={},ce=(r,j)=>{for(j===void 0&&p("ptr should not be undefined");r.baseClass;)j=r.upcast(j),r=r.baseClass;return j},de=(r,j)=>(j=ce(r,j),ue[j]),qe=class extends Error{constructor(j){super(j),this.name="InternalError"}},vA=r=>{throw new qe(r)},gA=(r,j)=>{(!j.ptrType||!j.ptr)&&vA("makeClassHandle requires ptr and ptrType");var s=!!j.smartPtrType,l=!!j.smartPtr;return s!==l&&vA("Both smartPtrType and smartPtr must be specified"),j.count={value:1},lA(Object.create(r,{$$:{value:j,writable:!0}}))};function fe(r){var j=this.getPointee(r);if(!j)return this.destructor(r),null;var s=de(this.registeredClass,j);if(s!==void 0){if(s.$$.count.value===0)return s.$$.ptr=j,s.$$.smartPtr=r,s.clone();var l=s.clone();return this.destructor(r),l}function o(){return this.isSmartPointer?gA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:j,smartPtrType:this,smartPtr:r}):gA(this.registeredClass.instancePrototype,{ptrType:this,ptr:r})}var k=this.registeredClass.getActualType(j),a=rj[k];if(!a)return o.call(this);var u;this.isConst?u=a.constPointerType:u=a.pointerType;var c=ej(j,this.registeredClass,u.registeredClass);return c===null?o.call(this):this.isSmartPointer?gA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c,smartPtrType:this,smartPtr:r}):gA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c})}var Ce=()=>{Object.assign(LA.prototype,{getPointee(r){return this.rawGetPointee&&(r=this.rawGetPointee(r)),r},destructor(r){this.rawDestructor?.(r)},readValueFromPointer:FA,fromWireType:fe})};function LA(r,j,s,l,o,k,a,u,c,f,G){this.name=r,this.registeredClass=j,this.isReference=s,this.isConst=l,this.isSmartPointer=o,this.pointeeType=k,this.sharingPolicy=a,this.rawGetPointee=u,this.rawConstructor=c,this.rawShare=f,this.rawDestructor=G,!o&&j.baseClass===void 0?l?(this.toWireType=oe,this.destructorFunction=null):(this.toWireType=ke,this.destructorFunction=null):this.toWireType=ae}var nj=(r,j,s)=>{e.hasOwnProperty(r)||vA("Replacing nonexistent public symbol"),e[r].overloadTable!==void 0&&s!==void 0?e[r].overloadTable[s]=j:(e[r]=j,e[r].argCount=s)},K=(r,j,s=!1)=>{r=g(r);function l(){var k=Wr(j);return k}var o=l();return typeof o!="function"&&p(\`unknown function pointer with signature \${r}: \${j}\`),o};class Ge extends Error{}var pe=r=>{var j=hj(r),s=g(j);return O(j),s},AA=(r,j)=>{var s=[],l={};function o(k){if(!l[k]&&!Y[k]){if(IA[k]){IA[k].forEach(o);return}s.push(k),l[k]=!0}}throw j.forEach(o),new Ge(\`\${r}: \`+s.map(pe).join([", "]))},M=(r,j,s)=>{r.forEach(u=>IA[u]=j);function l(u){var c=s(u);c.length!==r.length&&vA("Mismatched type converter count");for(var f=0;f<r.length;++f)b(r[f],c[f])}var o=new Array(j.length),k=[],a=0;for(let[u,c]of j.entries())Y.hasOwnProperty(c)?o[u]=Y[c]:(k.push(c),Z.hasOwnProperty(c)||(Z[c]=[]),Z[c].push(()=>{o[u]=Y[c],++a,a===k.length&&l(o)}));k.length===0&&l(o)},he=(r,j,s,l,o,k,a,u,c,f,G,I,$)=>{G=g(G),k=K(o,k),u&&=K(a,u),f&&=K(c,f),$=K(I,$);var m=ie(G);tj(m,function(){AA(\`Cannot construct \${G} due to unbound types\`,[l])}),M([r,j,s],l?[l]:[],F=>{F=F[0];var _,P;l?(_=F.registeredClass,P=_.instancePrototype):P=EA.prototype;var y=Aj(G,function(...lr){if(Object.getPrototypeOf(this)!==oA)throw new iA(\`Use 'new' to construct \${G}\`);if(H.constructor_body===void 0)throw new iA(\`\${G} has no accessible constructor\`);var bj=H.constructor_body[lr.length];if(bj===void 0)throw new iA(\`Tried to invoke ctor of \${G} with invalid number of parameters (\${lr.length}) - expected (\${Object.keys(H.constructor_body).toString()}) parameters instead!\`);return bj.apply(this,lr)}),oA=Object.create(P,{constructor:{value:y}});y.prototype=oA;var H=new le(G,y,oA,$,_,k,u,f);H.baseClass&&(H.baseClass.__derivedClasses??=[],H.baseClass.__derivedClasses.push(H));var fn=new LA(G,H,!0,!1,!1),Bj=new LA(G+"*",H,!1,!1,!1),Nj=new LA(G+" const*",H,!1,!0,!1);return rj[r]={pointerType:Bj,constPointerType:Nj},nj(m,y),[fn,Bj,Nj]})},Ar=(r,j)=>{for(var s=[],l=0;l<r;l++)s.push(E[j+l*4>>2]);return s},sj=r=>{for(;r.length;){var j=r.pop(),s=r.pop();s(j)}};function ij(r){for(var j=1;j<r.length;++j)if(r[j]!==null&&r[j].destructorFunction===void 0)return!0;return!1}function Ie(r,j,s,l){var o=ij(r),k=r.length-2,a=[],u=["fn"];j&&u.push("thisWired");for(var c=0;c<k;++c)a.push(\`arg\${c}\`),u.push(\`arg\${c}Wired\`);a=a.join(","),u=u.join(",");var f=\`return function (\${a}) {
|
|
3226
3226
|
\`;o&&(f+=\`var destructors = [];
|
|
3227
3227
|
\`);var G=o?"destructors":"null",I=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];j&&(f+=\`var thisWired = toClassParamWire(\${G}, this);
|
|
3228
3228
|
\`);for(var c=0;c<k;++c){var $=\`toArg\${c}Wire\`;f+=\`var arg\${c}Wired = \${$}(\${G}, arg\${c});
|
|
@@ -3232,8 +3232,8 @@ K\\xE08\\xDF\\0}\\xBC\\x8A\\x1B\\f\\xE5\\xFF\\xCF\\xE8?\\x9F\\xFFFq\\0\\x88\\xB
|
|
|
3232
3232
|
\`,I.push(\`\${m}_dtor\`))}return s&&(f+=\`var ret = fromRetWire(rv);
|
|
3233
3233
|
return ret;
|
|
3234
3234
|
\`),f+=\`}
|
|
3235
|
-
\`,new Function(I,f)}function rr(r,j,s,l,o,k){var a=j.length;a<2&&p("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var u=j[1]!==null&&s!==null,c=ij(j),f=!j[0].isVoid,G=j[0],I=j[1],$=[r,p,l,o,sj,G.fromWireType.bind(G),I?.toWireType.bind(I)],m=2;m<a;++m){var F=j[m];$.push(F.toWireType.bind(F))}if(!c)for(var m=u?1:2;m<j.length;++m)j[m].destructorFunction!==null&&$.push(j[m].destructorFunction);var P=Ie(j,u,f,k)(...$);return Aj(r,P)}var me=(r,j,s,l,o,k)=>{var a=Ar(j,s);o=K(l,o),M([],[r],u=>{u=u[0];var c=\`constructor \${u.name}\`;if(u.registeredClass.constructor_body===void 0&&(u.registeredClass.constructor_body=[]),u.registeredClass.constructor_body[j-1]!==void 0)throw new iA(\`Cannot register multiple constructors with identical number of parameters (\${j-1}) for class '\${u.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!\`);return u.registeredClass.constructor_body[j-1]=()=>{AA(\`Cannot construct \${u.name} due to unbound types\`,a)},M([],a,f=>(f.splice(1,0,null),u.registeredClass.constructor_body[j-1]=rr(c,f,null,o,k),[])),[]})},lj=r=>{r=r.trim();let j=r.indexOf("(");return j===-1?r:r.slice(0,j)},Ee=(r,j,s,l,o,k,a,u,c,f)=>{var G=Ar(s,l);j=g(j),j=lj(j),k=K(o,k,c),M([],[r],I=>{I=I[0];var $=\`\${I.name}.\${j}\`;j.startsWith("@@")&&(j=Symbol[j.substring(2)]),u&&I.registeredClass.pureVirtualFunctions.push(j);function m(){AA(\`Cannot call \${$} due to unbound types\`,G)}var F=I.registeredClass.instancePrototype,_=F[j];return _===void 0||_.overloadTable===void 0&&_.className!==I.name&&_.argCount===s-2?(m.argCount=s-2,m.className=I.name,F[j]=m):(jj(F,j,$),F[j].overloadTable[s-2]=m),M([],G,P=>{var y=rr($,P,I,k,a,c);return F[j].overloadTable===void 0?(y.argCount=s-2,F[j]=y):F[j].overloadTable[s-2]=y,[]}),[]})},oj=(r,j,s)=>(r instanceof Object||p(\`\${s} with invalid "this": \${r}\`),r instanceof j.registeredClass.constructor||p(\`\${s} incompatible with "this" of type \${r.constructor.name}\`),r.$$.ptr||p(\`cannot call emscripten binding method \${s} on deleted object\`),$A(r.$$.ptr,r.$$.ptrType.registeredClass,j.registeredClass)),$e=(r,j,s,l,o,k,a,u,c,f)=>{j=g(j),o=K(l,o),M([],[r],G=>{G=G[0];var I=\`\${G.name}.\${j}\`,$={get(){AA(\`Cannot access \${I} due to unbound types\`,[s,a])},enumerable:!0,configurable:!0};return c?$.set=()=>AA(\`Cannot access \${I} due to unbound types\`,[s,a]):$.set=m=>p(I+" is a read-only property"),Object.defineProperty(G.registeredClass.instancePrototype,j,$),M([],c?[s,a]:[s],m=>{var F=m[0],_={get(){var y=oj(this,G,I+" getter");return F.fromWireType(o(k,y))},enumerable:!0};if(c){c=K(u,c);var P=m[1];_.set=function(y){var oA=oj(this,G,I+" setter"),H=[];c(f,oA,P.toWireType(H,y)),sj(H)}}return Object.defineProperty(G.registeredClass.instancePrototype,j,_),[]}),[]})},aj=[],rA=[0,1,,1,null,1,!0,1,!1,1],Fe=r=>{r>9&&--rA[r+1]===0&&(rA[r]=void 0,aj.push(r))},jr={toValue:r=>(r||p(\`Cannot use deleted val. handle = \${r}\`),rA[r]),toHandle:r=>{switch(r){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let j=aj.pop()||rA.length;return rA[j]=r,rA[j+1]=1,j}}}},ve={name:"emscripten::val",fromWireType:r=>{var j=jr.toValue(r);return Fe(r),j},toWireType:(r,j)=>jr.toHandle(j),readValueFromPointer:FA,destructorFunction:null},ge=r=>b(r,ve),Le=(r,j)=>{switch(j){case 4:return function(s){return this.fromWireType(Jr[s>>2])};case 8:return function(s){return this.fromWireType(hA[s>>3])};default:throw new TypeError(\`invalid float width (\${j}): \${r}\`)}},He=(r,j,s)=>{j=g(j),b(r,{name:j,fromWireType:l=>l,toWireType:(l,o)=>o,readValueFromPointer:Le(j,s),destructorFunction:null})},_e=(r,j,s,l,o,k,a,u)=>{var c=Ar(j,s);r=g(r),r=lj(r),o=K(l,o,a),tj(r,function(){AA(\`Cannot call \${r} due to unbound types\`,c)},j-1),M([],c,f=>{var G=[f[0],null].concat(f.slice(1));return nj(r,rr(r,G,null,o,k,a),j-1),[]})},ye=(r,j,s,l,o)=>{j=g(j);let k=l===0,a=c=>c;if(k){var u=32-8*s;a=c=>c<<u>>>u,o=a(o)}b(r,{name:j,fromWireType:a,toWireType:(c,f)=>f,readValueFromPointer:zr(j,s,l!==0),destructorFunction:null})},xe=(r,j,s)=>{var l=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],o=l[j];function k(a){var u=E[a>>2],c=E[a+4>>2];return new o(V.buffer,c,u)}s=g(s),b(r,{name:s,fromWireType:k,readValueFromPointer:k},{ignoreDuplicateRegistrations:!0})},De=(r,j,s,l)=>{if(!(l>0))return 0;for(var o=s,k=s+l-1,a=0;a<r.length;++a){var u=r.codePointAt(a);if(u<=127){if(s>=k)break;j[s++]=u}else if(u<=2047){if(s+1>=k)break;j[s++]=192|u>>6,j[s++]=128|u&63}else if(u<=65535){if(s+2>=k)break;j[s++]=224|u>>12,j[s++]=128|u>>6&63,j[s++]=128|u&63}else{if(s+3>=k)break;j[s++]=240|u>>18,j[s++]=128|u>>12&63,j[s++]=128|u>>6&63,j[s++]=128|u&63,a++}}return j[s]=0,s-o},Be=(r,j,s)=>De(r,x,j,s),Ne=r=>{for(var j=0,s=0;s<r.length;++s){var l=r.charCodeAt(s);l<=127?j++:l<=2047?j+=2:l>=55296&&l<=57343?(j+=4,++s):j+=3}return j},kj=globalThis.TextDecoder&&new TextDecoder,uj=(r,j,s,l)=>{var o=j+s;if(l)return o;for(;r[j]&&!(j>=o);)++j;return j},cj=(r,j=0,s,l)=>{var o=uj(r,j,s,l);if(o-j>16&&r.buffer&&kj)return kj.decode(r.buffer instanceof ArrayBuffer?r.subarray(j,o):r.slice(j,o));for(var k="";j<o;){var a=r[j++];if(!(a&128)){k+=String.fromCharCode(a);continue}var u=r[j++]&63;if((a&224)==192){k+=String.fromCharCode((a&31)<<6|u);continue}var c=r[j++]&63;if((a&240)==224?a=(a&15)<<12|u<<6|c:a=(a&7)<<18|u<<12|c<<6|r[j++]&63,a<65536)k+=String.fromCharCode(a);else{var f=a-65536;k+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return k},be=(r,j,s)=>r?cj(x,r,j,s):"",Je=(r,j)=>{j=g(j);var s=!0;b(r,{name:j,fromWireType(l){var o=E[l>>2],k=l+4,a;if(s)a=be(k,o,!0);else{a="";for(var u=0;u<o;++u)a+=String.fromCharCode(x[k+u])}return O(l),a},toWireType(l,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var k,a=typeof o=="string";a||ArrayBuffer.isView(o)&&o.BYTES_PER_ELEMENT==1||p("Cannot pass non-string to std::string"),s&&a?k=Ne(o):k=o.length;var u=nr(4+k+1),c=u+4;if(E[u>>2]=k,a)if(s)Be(o,c,k+1);else for(var f=0;f<k;++f){var G=o.charCodeAt(f);G>255&&(O(u),p("String has UTF-16 code units that do not fit in 8 bits")),x[c+f]=G}else x.set(o,c);return l!==null&&l.push(O,u),u},readValueFromPointer:FA,destructorFunction(l){O(l)}})},dj=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ke=(r,j,s)=>{var l=r>>1,o=uj(nA,l,j/2,s);if(o-l>16&&dj)return dj.decode(nA.slice(l,o));for(var k="",a=l;a<o;++a){var u=nA[a];k+=String.fromCharCode(u)}return k},Oe=(r,j,s)=>{if(s??=2147483647,s<2)return 0;s-=2;for(var l=j,o=s<r.length*2?s/2:r.length,k=0;k<o;++k){var a=r.charCodeAt(k);pA[j>>1]=a,j+=2}return pA[j>>1]=0,j-l},Pe=r=>r.length*2,we=(r,j,s)=>{for(var l="",o=r>>2,k=0;!(k>=j/4);k++){var a=E[o+k];if(!a&&!s)break;l+=String.fromCodePoint(a)}return l},Me=(r,j,s)=>{if(s??=2147483647,s<4)return 0;for(var l=j,o=l+s-4,k=0;k<r.length;++k){var a=r.codePointAt(k);if(a>65535&&k++,z[j>>2]=a,j+=4,j+4>o)break}return z[j>>2]=0,j-l},Te=r=>{for(var j=0,s=0;s<r.length;++s){var l=r.codePointAt(s);l>65535&&s++,j+=4}return j},Ue=(r,j,s)=>{s=g(s);var l,o,k;j===2?(l=Ke,o=Oe,k=Pe):(l=we,o=Me,k=Te),b(r,{name:s,fromWireType:a=>{var u=E[a>>2],c=l(a+4,u*j,!0);return O(a),c},toWireType:(a,u)=>{typeof u!="string"&&p(\`Cannot pass non-string to C++ string type \${s}\`);var c=k(u),f=nr(4+c+j);return E[f>>2]=c/j,o(u,f+4,c+j),a!==null&&a.push(O,f),f},readValueFromPointer:FA,destructorFunction(a){O(a)}})},Se=(r,j)=>{j=g(j),b(r,{isVoid:!0,name:j,fromWireType:()=>{},toWireType:(s,l)=>{}})},Ve=r=>{sr(r,!d,1,!i,65536,!1),h.threadInitTLS()},qj=r=>{if(r instanceof br||r=="unwind")return Q;CA(1,r)},Re=()=>{if(!WA())try{if(C){_A()&&ir(Q);return}QA(Q)}catch(r){qj(r)}},fj=r=>{if(!GA)try{return r()}catch(j){qj(j)}finally{Re()}},We=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./)||[])[2])<91,tr=r=>{if(!We){var j=Atomics.waitAsync(z,r>>2,r);j.value.then(HA);var s=r+120;Atomics.store(z,s>>2,1)}},HA=()=>fj(()=>{var r=_A();r&&(tr(r),vj())}),Qe=(r,j)=>{if(r==j)setTimeout(HA);else if(C)postMessage({targetThread:r,cmd:"checkMailbox"});else{var s=h.pthreads[r];if(!s)return;s.postMessage({cmd:"checkMailbox"})}},er=[],ze=(r,j,s,l,o,k,a)=>{er.length=0;for(var u=o>>3,c=o+l>>3;u<c;){var f;S[u++]?f=S[u++]:f=hA[u++],er.push(f)}var G=kn[r];h.currentProxiedOperationCallerThread=s;var I=G(...er);if(h.currentProxiedOperationCallerThread=0,k){I.then($=>Ej(k,a,$));return}return I},Xe=r=>{C?postMessage({cmd:"cleanupThread",thread:r}):Pr(r)},Ze=r=>{},Ye=()=>performance.timeOrigin+performance.now(),An=9007199254740992,rn=-9007199254740992,jn=r=>r<rn||r>An?NaN:Number(r),tn=()=>{},en=()=>{RA+=1},nn=()=>{throw en(),"unwind"},sn=r=>{VA("OOM")},ln=r=>{var j=x.length;r>>>=0,sn(r)};function Cj(r){return C?sA(2,0,1,r):52}function Gj(r,j,s,l){return C?sA(3,0,1,r,j,s,l):(j=jn(j),70)}var on=[null,[],[]],an=(r,j)=>{var s=on[r];j===0||j===10?((r===1?TA:N)(cj(s)),s.length=0):s.push(j)};function pj(r,j,s,l){if(C)return sA(4,0,1,r,j,s,l);for(var o=0,k=0;k<s;k++){var a=E[j>>2],u=E[j+4>>2];j+=8;for(var c=0;c<u;c++)an(r,x[a+c]);o+=u}return E[l>>2]=o,0}if(h.init(),ee(),Ce(),xt(),e.noExitRuntime&&(zA=e.noExitRuntime),e.print&&(TA=e.print),e.printErr&&(N=e.printErr),e.wasmBinary&&(gr=e.wasmBinary),e.arguments&&(v=e.arguments),e.thisProgram&&(B=e.thisProgram),e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()();var kn=[Ur,Sr,Cj,Gj,pj],hj,Ij,_A,nr,O,un,sr,mj,Ej,$j,Fj,ir,vj,gj,Lj,Hj,_j,cn,yj;function dn(r){hj=r.G,Ij=r.H,_A=r.J,nr=e._malloc=r.K,O=e._free=r.L,un=r.M,sr=r.N,mj=r.O,Ej=r.P,$j=r.Q,Fj=r.R,ir=r.S,vj=r.T,gj=r.U,Lj=r.V,Hj=r.W,_j=r.X,cn=yj=r.I}var xj;function qn(){xj={i:zt,C:Xt,h:Yt,o:Ae,n:he,m:me,e:Ee,b:$e,D:ge,l:He,q:_e,d:ye,c:xe,E:Je,g:Ue,p:Se,z:Ve,u:Qe,k:ze,s:Xe,y:tr,B:Ze,x:tn,A:nn,f:Ye,t:ln,r:QA,w:Cj,v:Gj,j:pj,a:X}}function Dj(){if(C){UA?.(e),xr();return}Dt();function r(){e.calledRun=!0,!GA&&(xr(),UA?.(e),e.onRuntimeInitialized?.(),Bt())}e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1),r()},1)):r()}var jA;return C||(jA=await Nr(),Dj()),_r?t=e:t=new Promise((r,j)=>{UA=r,Lr=j}),t}})();typeof Et=="object"&&typeof MA=="object"?(MA.exports=wA,MA.exports.default=wA):typeof define=="function"&&define.amd&&define([],()=>wA);var Hs=globalThis.name=="em-pthread";Hs&&wA()});var J={};En(J,{AdditionalCaptureBlocks:()=>gn,AdditionalPlaybackBlocks:()=>vn,ClockJumpCheckInterval:()=>Bn,ClockJumpThreshold:()=>Nn,ConnectInterval:()=>Tn,ConnectTimeout:()=>Pn,DefaultRefreshRate:()=>Hn,DefaultVideoCodec:()=>Un,HealthCheckTimeout:()=>Dn,MainConnectionPingInterval:()=>bn,MaxNumberOfDecoders:()=>yn,MinDBFs:()=>Jj,MinTokenLifetime:()=>wn,MinTokenRefreshInterval:()=>Mn,PlaybackPreload:()=>Ln,RenderQuantumSize:()=>xn,VadPreload:()=>_n,WebRtcIceTimeout:()=>Kn,WebRtcStatsSnapshotInterval:()=>Jn,WebRtcTimeout:()=>On});var vn=3,gn=3,Ln=3,Hn=250,_n=3,yn=512,xn=128,Jj=-758.596,Dn=1e4,Bn=1e3,Nn=1e4,bn=3e3,Jn=1e3,Kn=3e3,On=1e4,Pn=5e3,wn=6e4,Mn=5e3,Tn=[0,100,200,200,500],Un="H264";function aA(n,A,t){return n.postMessage(A,t)}function ar(n){return n.sampleRate*.02*(n.stereo?2:1)}function kr(n,A){let t=ar(n),e=t*A,i=e+t;return n.samples.subarray(e,i)}function ur(n,A,t){n.headers[A]=t.id}function Kj(n){return[n.values[0],n.values[1]]}function Oj(n,A){n.values[0]=A[0],n.values[1]=A[1]}function Pj(n,A){return n.values[2+A*5]}function wj(n,A,t){n.values[2+A*5]=t}function Mj(n,A){let t=2+A*5+1;return[n.values[t+0],n.values[t+1]]}function Tj(n,A,t){let e=2+A*5+1;n.values[e+0]=t[0],n.values[e+1]=t[1]}function Uj(n,A){return n.values[2+A*5+3]}function Sj(n,A,t){n.values[2+A*5+3]=t}function Vj(n,A){return n.values[2+A*5+4]}function Rj(n,A,t){n.values[2+A*5+4]=t}function Wj(n){return n.values[0]!==0}function Qj(n){return n.values[1]}function zj(n){return n.values[2]}function Xj(n){return n.values[3]}function Zj(n,A){return n.values[3]=A}function Yj(n){return n?Array.from(n).map(A=>A.toString(16).padStart(2,"0")).join(""):null}var Sn;(n=>{let A;(t=>(t[t.InvalidPassword=-1]="InvalidPassword",t[t.Unknown=0]="Unknown",t[t.Unencrypted=1]="Unencrypted",t[t.Encrypted=2]="Encrypted"))(A=n.PeerCipherStatus||={})})(Sn||={});function et(n){return{type:"Success",value:n}}function D(n){return{type:"Failure",reason:n}}var{Deno:At}=globalThis,Vn=typeof At?.noColor=="boolean"?At.noColor:!1,Rn=!Vn;function dr(n,A){return{open:\`\\x1B[\${n.join(";")}m\`,close:\`\\x1B[\${A}m\`,regexp:new RegExp(\`\\\\x1b\\\\[\${A}m\`,"g")}}function qr(n,A){return Rn?\`\${A.open}\${n.replace(A.regexp,A.open)}\${A.close}\`:n}function cr(n){return qr(n,dr([0],0))}function rt(n){return qr(n,dr([1],22))}function Wn(n){return qr(n,dr([2],22))}var Ts=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),Qn=new Date,yA=(n=>(n[n.CRITICAL=0]="CRITICAL",n[n.ERROR=1]="ERROR",n[n.WARN=2]="WARN",n[n.INFO=3]="INFO",n[n.DEBUG=4]="DEBUG",n))(yA||{}),nt={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},zn={4:Wn,3:cr,2:cr,1:rt,0:rt};function Xn({message:n}){return String(n)}function jt(n){return JSON.stringify({timestamp:n.date.toISOString(),level:yA[n.level],message:n.message,extra:n.extra})}function tt(n){function A(q,C){return[Math.floor(q/C),q%C]}function t(){let q,C=n.date.valueOf()-Qn.valueOf();[C,q]=A(C,1e3);let[v,B]=A(C,60);return\`\${v.toString().padStart(4,"0")}:\${B.toString().padStart(2,"0")}.\${q.toString().padStart(3,"0")}\`}function e(){return n.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(n.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(n.extra)}let i=nt[n.level],d=n.logger.name!==void 0?\`@\${n.logger.name}\`:"";return\`\${cr(t())}\${d} \${i} \${zn[n.level](String(n.message))}\${e()}\`}function Zn(n){let A=\`[\${n.date.toISOString()}]\`,t=\`[\${yA[n.level]}]\`,e=n.logger.name!==void 0?\`[\${n.logger.name}] \`:"",i=nt[n.level];return\`\${A} \${i} \${t.padEnd(7," ")} \${e}\${n.message}\`}function Yn(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var st=class{static sparse=Xn;static json=jt;static pretty=tt;static structured=Zn;static default=Yn()?tt:jt;constructor(){}};var As=class{formatter;consoleObject;filter;constructor(n=st.default,A=4,t=console){this.filter=A,this.formatter=n,this.consoleObject=t}handle(n){let A=this.formatter(n);switch(n.level){case 0:case 1:this.consoleObject.error(A);break;case 2:this.consoleObject.warn(A);break;case 3:this.consoleObject.info(A);break;case 4:this.consoleObject.debug(A);break}}};var R=class{#A;sinks;filter;parent;get name(){return this.#A}constructor(n,A=void 0,t=[],e=void 0){this.#A=A,this.sinks=t,this.filter=n,this.parent=e}log(n,A,t=void 0){let e={date:new Date,level:n,logger:this,message:A,extra:t};this.filter<n||this.insert(e)}insert(n){if(!(this.filter<n.level)){for(let A of this.sinks)A.filter>=n.level&&A.handle(n);this.parent!==void 0&&this.parent.insert(n)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},kA=globalThis[Symbol.for("odin-global-logger")]??=new R(3,void 0,[new As]),rs=R.prototype.log.bind(kA,1),js=R.prototype.log.bind(kA,2),it=R.prototype.log.bind(kA,3),ts=R.prototype.log.bind(kA,4),Us=R.prototype.log.bind(kA);var lt;function ot(n,...A){let t=es(A);lt?lt?.info(n,t):it(n,t)}function es(...n){if(n.length===1&&typeof n[0]=="object"&&n[0]!==null)return{...n[0]};if(n.length>0)return{args:n}}function xA(n){return n.connectionId*4294967296+n.mediaId}function at(n){return{mediaId:n%4294967296,connectionId:Math.floor(n/4294967296)}}function T(n,A,t){let e;switch(A){case"f32":e=n.HEAPF32;break;case"u32":e=n.HEAPU32;break;case"i32":e=n.HEAP32;break;case"u8":e=n.HEAPU8;break;default:throw new Error(\`allocating \${A} is not supported\`)}let i=n._malloc(t*e.BYTES_PER_ELEMENT);if(i===0||i%e.BYTES_PER_ELEMENT!==0)throw new Error(\`failed allocating a \${t} \${A} array\`);let d=i/e.BYTES_PER_ELEMENT;return e.subarray(d,d+t)}function tA(n,A){n._free(A.byteOffset)}function fr(n,A,t,e){return{headers:T(n,"i32",t),samples:T(n,"f32",t*ar({sampleRate:A,stereo:e})),length:t,sampleRate:A,stereo:e}}function Cr(n,A){tA(n,A.headers),tA(n,A.samples)}function kt(n,A){return{values:T(n,"f32",2+A*5),length:A}}function ut(n,A){tA(n,A.values)}function ct(n){return{values:T(n,"f32",4)}}function dt(n,A){tA(n,A.values)}function qt(n){let A=n.length,t=0,e=0;for(;e<A;){let i=n.charCodeAt(e++);if((i&4294967168)===0){t++;continue}else if((i&4294965248)===0)t+=2;else{if(i>=55296&&i<=56319&&e<A){let d=n.charCodeAt(e);(d&64512)===56320&&(++e,i=((i&1023)<<10)+(d&1023)+65536)}(i&4294901760)===0?t+=3:t+=4}}return t}function ns(n,A,t){let e=n.length,i=t,d=0;for(;d<e;){let q=n.charCodeAt(d++);if((q&4294967168)===0){A[i++]=q;continue}else if((q&4294965248)===0)A[i++]=q>>6&31|192;else{if(q>=55296&&q<=56319&&d<e){let C=n.charCodeAt(d);(C&64512)===56320&&(++d,q=((q&1023)<<10)+(C&1023)+65536)}(q&4294901760)===0?(A[i++]=q>>12&15|224,A[i++]=q>>6&63|128):(A[i++]=q>>18&7|240,A[i++]=q>>12&63|128,A[i++]=q>>6&63|128)}A[i++]=q&63|128}}var ss=new TextEncoder,is=50;function ls(n,A,t){ss.encodeInto(n,A.subarray(t))}function ft(n,A,t){n.length>is?ls(n,A,t):ns(n,A,t)}var os=4096;function Gr(n,A,t){let e=A,i=e+t,d=[],q="";for(;e<i;){let C=n[e++];if((C&128)===0)d.push(C);else if((C&224)===192){let v=n[e++]&63;d.push((C&31)<<6|v)}else if((C&240)===224){let v=n[e++]&63,B=n[e++]&63;d.push((C&31)<<12|v<<6|B)}else if((C&248)===240){let v=n[e++]&63,B=n[e++]&63,CA=n[e++]&63,w=(C&7)<<18|v<<12|B<<6|CA;w>65535&&(w-=65536,d.push(w>>>10&1023|55296),w=56320|w&1023),d.push(w)}else d.push(C);d.length>=os&&(q+=String.fromCharCode(...d),d.length=0)}return d.length>0&&(q+=String.fromCharCode(...d)),q}var as=new TextDecoder,ks=200;function us(n,A,t){let e=n.subarray(A,A+t);return as.decode(e)}function Ct(n,A,t){return t>ks?us(n,A,t):Gr(n,A,t)}var W=class{constructor(A,t){this.type=A,this.data=t}};var L=class n extends Error{constructor(A){super(A);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};function Gt(n,A,t){let e=t/4294967296,i=t;n.setUint32(A,e),n.setUint32(A+4,i)}function DA(n,A,t){let e=Math.floor(t/4294967296),i=t;n.setUint32(A,e),n.setUint32(A+4,i)}function BA(n,A){let t=n.getInt32(A),e=n.getUint32(A+4);return t*4294967296+e}function pt(n,A){let t=n.getUint32(A),e=n.getUint32(A+4);return t*4294967296+e}var cs=-1,ds=4294967296-1,qs=17179869184-1;function fs({sec:n,nsec:A}){if(n>=0&&A>=0&&n<=qs)if(A===0&&n<=ds){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,e=n&4294967295,i=new Uint8Array(8),d=new DataView(i.buffer);return d.setUint32(0,A<<2|t&3),d.setUint32(4,e),i}else{let t=new Uint8Array(12),e=new DataView(t.buffer);return e.setUint32(0,A),DA(e,4,n),t}}function Cs(n){let A=n.getTime(),t=Math.floor(A/1e3),e=(A-t*1e3)*1e6,i=Math.floor(e/1e9);return{sec:t+i,nsec:e-i*1e9}}function Gs(n){if(n instanceof Date){let A=Cs(n);return fs(A)}else return null}function ps(n){let A=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:A.getUint32(0),nsec:0};case 8:{let t=A.getUint32(0),e=A.getUint32(4),i=(t&3)*4294967296+e,d=t>>>2;return{sec:i,nsec:d}}case 12:{let t=BA(A,4),e=A.getUint32(0);return{sec:t,nsec:e}}default:throw new L(\`Unrecognized data size for timestamp (expected 4, 8, or 12): \${n.length}\`)}}function hs(n){let A=ps(n);return new Date(A.sec*1e3+A.nsec/1e6)}var ht={type:cs,encode:Gs,decode:hs};var U=class{constructor(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(ht)}register({type:A,encode:t,decode:e}){if(A>=0)this.encoders[A]=t,this.decoders[A]=e;else{let i=-1-A;this.builtInEncoders[i]=t,this.builtInDecoders[i]=e}}tryToEncode(A,t){for(let e=0;e<this.builtInEncoders.length;e++){let i=this.builtInEncoders[e];if(i!=null){let d=i(A,t);if(d!=null){let q=-1-e;return new W(q,d)}}}for(let e=0;e<this.encoders.length;e++){let i=this.encoders[e];if(i!=null){let d=i(A,t);if(d!=null){let q=e;return new W(q,d)}}}return A instanceof W?A:null}decode(A,t,e){let i=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return i?i(A,t,e):new W(t,A)}};U.defaultCodec=new U;function Is(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function uA(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Is(n)?new Uint8Array(n):Uint8Array.from(n)}var ms=100,Es=2048,NA=class n{constructor(A){this.entered=!1,this.extensionCodec=A?.extensionCodec??U.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.maxDepth=A?.maxDepth??ms,this.initialBufferSize=A?.initialBufferSize??Es,this.sortKeys=A?.sortKeys??!1,this.forceFloat32=A?.forceFloat32??!1,this.ignoreUndefined=A?.ignoreUndefined??!1,this.forceIntegerToFloat=A?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(A){if(this.entered)return this.clone().encodeSharedRef(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(A){if(this.entered)return this.clone().encode(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(A,t){if(t>this.maxDepth)throw new Error(\`Too deep objects in depth \${t}\`);A==null?this.encodeNil():typeof A=="boolean"?this.encodeBoolean(A):typeof A=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(A):this.encodeNumber(A):typeof A=="string"?this.encodeString(A):this.useBigInt64&&typeof A=="bigint"?this.encodeBigInt64(A):this.encodeObject(A,t)}ensureBufferSizeToWrite(A){let t=this.pos+A;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(A){let t=new ArrayBuffer(A),e=new Uint8Array(t),i=new DataView(t);e.set(this.bytes),this.view=i,this.bytes=e}encodeNil(){this.writeU8(192)}encodeBoolean(A){A===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(A){!this.forceIntegerToFloat&&Number.isSafeInteger(A)?A>=0?A<128?this.writeU8(A):A<256?(this.writeU8(204),this.writeU8(A)):A<65536?(this.writeU8(205),this.writeU16(A)):A<4294967296?(this.writeU8(206),this.writeU32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(207),this.writeU64(A)):A>=-32?this.writeU8(224|A+32):A>=-128?(this.writeU8(208),this.writeI8(A)):A>=-32768?(this.writeU8(209),this.writeI16(A)):A>=-2147483648?(this.writeU8(210),this.writeI32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(211),this.writeI64(A)):this.encodeNumberAsFloat(A)}encodeNumberAsFloat(A){this.forceFloat32?(this.writeU8(202),this.writeF32(A)):(this.writeU8(203),this.writeF64(A))}encodeBigInt64(A){A>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(A)):(this.writeU8(211),this.writeBigInt64(A))}writeStringHeader(A){if(A<32)this.writeU8(160+A);else if(A<256)this.writeU8(217),this.writeU8(A);else if(A<65536)this.writeU8(218),this.writeU16(A);else if(A<4294967296)this.writeU8(219),this.writeU32(A);else throw new Error(\`Too long string: \${A} bytes in UTF-8\`)}encodeString(A){let e=qt(A);this.ensureBufferSizeToWrite(5+e),this.writeStringHeader(e),ft(A,this.bytes,this.pos),this.pos+=e}encodeObject(A,t){let e=this.extensionCodec.tryToEncode(A,this.context);if(e!=null)this.encodeExtension(e);else if(Array.isArray(A))this.encodeArray(A,t);else if(ArrayBuffer.isView(A))this.encodeBinary(A);else if(typeof A=="object")this.encodeMap(A,t);else throw new Error(\`Unrecognized object: \${Object.prototype.toString.apply(A)}\`)}encodeBinary(A){let t=A.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(\`Too large binary: \${t}\`);let e=uA(A);this.writeU8a(e)}encodeArray(A,t){let e=A.length;if(e<16)this.writeU8(144+e);else if(e<65536)this.writeU8(220),this.writeU16(e);else if(e<4294967296)this.writeU8(221),this.writeU32(e);else throw new Error(\`Too large array: \${e}\`);for(let i of A)this.doEncode(i,t+1)}countWithoutUndefined(A,t){let e=0;for(let i of t)A[i]!==void 0&&e++;return e}encodeMap(A,t){let e=Object.keys(A);this.sortKeys&&e.sort();let i=this.ignoreUndefined?this.countWithoutUndefined(A,e):e.length;if(i<16)this.writeU8(128+i);else if(i<65536)this.writeU8(222),this.writeU16(i);else if(i<4294967296)this.writeU8(223),this.writeU32(i);else throw new Error(\`Too large map object: \${i}\`);for(let d of e){let q=A[d];this.ignoreUndefined&&q===void 0||(this.encodeString(d),this.doEncode(q,t+1))}}encodeExtension(A){if(typeof A.data=="function"){let e=A.data(this.pos+6),i=e.length;if(i>=4294967296)throw new Error(\`Too large extension object: \${i}\`);this.writeU8(201),this.writeU32(i),this.writeI8(A.type),this.writeU8a(e);return}let t=A.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(\`Too large extension object: \${t}\`);this.writeI8(A.type),this.writeU8a(A.data)}writeU8(A){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,A),this.pos++}writeU8a(A){let t=A.length;this.ensureBufferSizeToWrite(t),this.bytes.set(A,this.pos),this.pos+=t}writeI8(A){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,A),this.pos++}writeU16(A){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,A),this.pos+=2}writeI16(A){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,A),this.pos+=2}writeU32(A){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,A),this.pos+=4}writeI32(A){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,A),this.pos+=4}writeF32(A){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,A),this.pos+=4}writeF64(A){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,A),this.pos+=8}writeU64(A){this.ensureBufferSizeToWrite(8),Gt(this.view,this.pos,A),this.pos+=8}writeI64(A){this.ensureBufferSizeToWrite(8),DA(this.view,this.pos,A),this.pos+=8}writeBigUint64(A){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,A),this.pos+=8}writeBigInt64(A){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,A),this.pos+=8}};function pr(n,A){return new NA(A).encodeSharedRef(n)}function bA(n){return\`\${n<0?"-":""}0x\${Math.abs(n).toString(16).padStart(2,"0")}\`}var $s=16,Fs=16,JA=class{constructor(A=$s,t=Fs){this.hit=0,this.miss=0,this.maxKeyLength=A,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(A){return A>0&&A<=this.maxKeyLength}find(A,t,e){let i=this.caches[e-1];A:for(let d of i){let q=d.bytes;for(let C=0;C<e;C++)if(q[C]!==A[t+C])continue A;return d.str}return null}store(A,t){let e=this.caches[A.length-1],i={bytes:A,str:t};e.length>=this.maxLengthPerKey?e[Math.random()*e.length|0]=i:e.push(i)}decode(A,t,e){let i=this.find(A,t,e);if(i!=null)return this.hit++,i;this.miss++;let d=Gr(A,t,e),q=Uint8Array.prototype.slice.call(A,t,t+e);return this.store(q,d),d}};var hr="array",qA="map_key",mt="map_value",vs=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new L("The type of key must be string or number but "+typeof n)},Ir=class{constructor(){this.stack=[],this.stackHeadPosition=-1}get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(A){let t=this.getUninitializedStateFromPool();t.type=hr,t.position=0,t.size=A,t.array=new Array(A)}pushMapState(A){let t=this.getUninitializedStateFromPool();t.type=qA,t.readCount=0,t.size=A,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let A={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(A)}return this.stack[this.stackHeadPosition]}release(A){if(this.stack[this.stackHeadPosition]!==A)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(A.type===hr){let e=A;e.size=0,e.array=void 0,e.position=0,e.type=void 0}if(A.type===qA||A.type===mt){let e=A;e.size=0,e.map=void 0,e.readCount=0,e.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},dA=-1,mr=new DataView(new ArrayBuffer(0)),gs=new Uint8Array(mr.buffer);try{mr.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var It=new RangeError("Insufficient data"),Ls=new JA,KA=class n{constructor(A){this.totalPos=0,this.pos=0,this.view=mr,this.bytes=gs,this.headByte=dA,this.stack=new Ir,this.entered=!1,this.extensionCodec=A?.extensionCodec??U.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.rawStrings=A?.rawStrings??!1,this.maxStrLength=A?.maxStrLength??4294967295,this.maxBinLength=A?.maxBinLength??4294967295,this.maxArrayLength=A?.maxArrayLength??4294967295,this.maxMapLength=A?.maxMapLength??4294967295,this.maxExtLength=A?.maxExtLength??4294967295,this.keyDecoder=A?.keyDecoder!==void 0?A.keyDecoder:Ls,this.mapKeyConverter=A?.mapKeyConverter??vs}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=dA,this.stack.reset()}setBuffer(A){let t=uA(A);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(A){if(this.headByte===dA&&!this.hasRemaining(1))this.setBuffer(A);else{let t=this.bytes.subarray(this.pos),e=uA(A),i=new Uint8Array(t.length+e.length);i.set(t),i.set(e,t.length),this.setBuffer(i)}}hasRemaining(A){return this.view.byteLength-this.pos>=A}createExtraByteError(A){let{view:t,pos:e}=this;return new RangeError(\`Extra \${t.byteLength-e} of \${t.byteLength} byte(s) found at buffer[\${A}]\`)}decode(A){if(this.entered)return this.clone().decode(A);try{this.entered=!0,this.reinitializeState(),this.setBuffer(A);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(A){if(this.entered){yield*this.clone().decodeMulti(A);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(A);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(A){if(this.entered)return this.clone().decodeAsync(A);try{this.entered=!0;let t=!1,e;for await(let C of A){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(C);try{e=this.doDecodeSync(),t=!0}catch(v){if(!(v instanceof RangeError))throw v}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return e}let{headByte:i,pos:d,totalPos:q}=this;throw new RangeError(\`Insufficient data in parsing \${bA(i)} at \${q} (\${d} in the current buffer)\`)}finally{this.entered=!1}}decodeArrayStream(A){return this.decodeMultiAsync(A,!0)}decodeStream(A){return this.decodeMultiAsync(A,!1)}async*decodeMultiAsync(A,t){if(this.entered){yield*this.clone().decodeMultiAsync(A,t);return}try{this.entered=!0;let e=t,i=-1;for await(let d of A){if(t&&i===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(d),e&&(i=this.readArraySize(),e=!1,this.complete());try{for(;yield this.doDecodeSync(),--i!==0;);}catch(q){if(!(q instanceof RangeError))throw q}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){A:for(;;){let A=this.readHeadByte(),t;if(A>=224)t=A-256;else if(A<192)if(A<128)t=A;else if(A<144){let i=A-128;if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A<160){let i=A-144;if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else{let i=A-160;t=this.decodeString(i,0)}else if(A===192)t=null;else if(A===194)t=!1;else if(A===195)t=!0;else if(A===202)t=this.readF32();else if(A===203)t=this.readF64();else if(A===204)t=this.readU8();else if(A===205)t=this.readU16();else if(A===206)t=this.readU32();else if(A===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(A===208)t=this.readI8();else if(A===209)t=this.readI16();else if(A===210)t=this.readI32();else if(A===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(A===217){let i=this.lookU8();t=this.decodeString(i,1)}else if(A===218){let i=this.lookU16();t=this.decodeString(i,2)}else if(A===219){let i=this.lookU32();t=this.decodeString(i,4)}else if(A===220){let i=this.readU16();if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else if(A===221){let i=this.readU32();if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else if(A===222){let i=this.readU16();if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A===223){let i=this.readU32();if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A===196){let i=this.lookU8();t=this.decodeBinary(i,1)}else if(A===197){let i=this.lookU16();t=this.decodeBinary(i,2)}else if(A===198){let i=this.lookU32();t=this.decodeBinary(i,4)}else if(A===212)t=this.decodeExtension(1,0);else if(A===213)t=this.decodeExtension(2,0);else if(A===214)t=this.decodeExtension(4,0);else if(A===215)t=this.decodeExtension(8,0);else if(A===216)t=this.decodeExtension(16,0);else if(A===199){let i=this.lookU8();t=this.decodeExtension(i,1)}else if(A===200){let i=this.lookU16();t=this.decodeExtension(i,2)}else if(A===201){let i=this.lookU32();t=this.decodeExtension(i,4)}else throw new L(\`Unrecognized type byte: \${bA(A)}\`);this.complete();let e=this.stack;for(;e.length>0;){let i=e.top();if(i.type===hr)if(i.array[i.position]=t,i.position++,i.position===i.size)t=i.array,e.release(i);else continue A;else if(i.type===qA){if(t==="__proto__")throw new L("The key __proto__ is not allowed");i.key=this.mapKeyConverter(t),i.type=mt;continue A}else if(i.map[i.key]=t,i.readCount++,i.readCount===i.size)t=i.map,e.release(i);else{i.key=null,i.type=qA;continue A}}return t}}readHeadByte(){return this.headByte===dA&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=dA}readArraySize(){let A=this.readHeadByte();switch(A){case 220:return this.readU16();case 221:return this.readU32();default:{if(A<160)return A-144;throw new L(\`Unrecognized array type byte: \${bA(A)}\`)}}}pushMapState(A){if(A>this.maxMapLength)throw new L(\`Max length exceeded: map length (\${A}) > maxMapLengthLength (\${this.maxMapLength})\`);this.stack.pushMapState(A)}pushArrayState(A){if(A>this.maxArrayLength)throw new L(\`Max length exceeded: array length (\${A}) > maxArrayLength (\${this.maxArrayLength})\`);this.stack.pushArrayState(A)}decodeString(A,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(A,t):this.decodeBinary(A,t)}decodeUtf8String(A,t){if(A>this.maxStrLength)throw new L(\`Max length exceeded: UTF-8 byte length (\${A}) > maxStrLength (\${this.maxStrLength})\`);if(this.bytes.byteLength<this.pos+t+A)throw It;let e=this.pos+t,i;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(A)?i=this.keyDecoder.decode(this.bytes,e,A):i=Ct(this.bytes,e,A),this.pos+=t+A,i}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===qA:!1}decodeBinary(A,t){if(A>this.maxBinLength)throw new L(\`Max length exceeded: bin length (\${A}) > maxBinLength (\${this.maxBinLength})\`);if(!this.hasRemaining(A+t))throw It;let e=this.pos+t,i=this.bytes.subarray(e,e+A);return this.pos+=t+A,i}decodeExtension(A,t){if(A>this.maxExtLength)throw new L(\`Max length exceeded: ext length (\${A}) > maxExtLength (\${this.maxExtLength})\`);let e=this.view.getInt8(this.pos+t),i=this.decodeBinary(A,t+1);return this.extensionCodec.decode(i,e,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let A=this.view.getUint8(this.pos);return this.pos++,A}readI8(){let A=this.view.getInt8(this.pos);return this.pos++,A}readU16(){let A=this.view.getUint16(this.pos);return this.pos+=2,A}readI16(){let A=this.view.getInt16(this.pos);return this.pos+=2,A}readU32(){let A=this.view.getUint32(this.pos);return this.pos+=4,A}readI32(){let A=this.view.getInt32(this.pos);return this.pos+=4,A}readU64(){let A=pt(this.view,this.pos);return this.pos+=8,A}readI64(){let A=BA(this.view,this.pos);return this.pos+=8,A}readU64AsBigInt(){let A=this.view.getBigUint64(this.pos);return this.pos+=8,A}readI64AsBigInt(){let A=this.view.getBigInt64(this.pos);return this.pos+=8,A}readF32(){let A=this.view.getFloat32(this.pos);return this.pos+=4,A}readF64(){let A=this.view.getFloat64(this.pos);return this.pos+=8,A}};function Er(n,A){return new KA(A).decode(n)}var fA=class n{constructor(A,t,e,i,d){this.mediaIds=A;this.sequenceNumber=t;this.timeStamp=e;this.isEndOfSpurt=i;this.payload=d}static parse(A){let t;try{t=Er(A)}catch{return D("not valid msgpack")}if(!Array.isArray(t))return D("container must be an array");if(t.length<6)return D("missing fields");if(t[0]!==1)return D("unknown type");if(!Array.isArray(t[1]))return D("media ids must be an array");if(!t[1].every(B=>typeof B=="number"))return D("media ids must be numbers");if(typeof t[2]!="number")return D("sequence number must be a number");if(typeof t[3]!="number")return D("timestamp must be a number");if(typeof t[4]!="number")return D("flags must be a number");let e=t[1],i=t[2]>>>0,d=t[3]>>>0,C=(t[4]&1)!==0,v=t[t.length-1];return v instanceof Uint8Array?et(new n(e,i,d,C,v)):D("payload must be bytes")}toBytes(){let A=Number(this.isEndOfSpurt),t=[1,this.mediaIds,this.sequenceNumber>>>0,this.timeStamp>>>0,A,this.payload];return new Uint8Array(pr(t,{forceFloat32:!0,ignoreUndefined:!0}))}};var OA=class{constructor(A,t){this.sampleRate=A;this.wasm=t;this.sequenceNumber=Math.random()*Math.pow(2,32)>>0;this.timestamp=Math.random()*Math.pow(2,32)>>0;this.connections=[];this.monitoring=!1;this.active=!1;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0};this.encoder=new t.Encoder(A,15,!0,J.VadPreload),this.encoder.complexity=navigator.hardwareConcurrency>=4?6:4,this.information=ct(this.wasm),this.outBuffer=T(this.wasm,"u8",1270),Zj(this.information,1)}setVad(A){this.encoder.set_volume_gate(A.volumeGate!==void 0,A.volumeGate?.attackThreshold??0,A.volumeGate?.releaseThreshold??0),this.encoder.set_speech_detection(A.voiceActivity!==void 0,A.voiceActivity?.attackThreshold??0,A.voiceActivity?.releaseThreshold??0)}setMedias(A){this.connections=A.filter(({mediaIds:t})=>t.length>0)}close(){dt(this.wasm,this.information),tA(this.wasm,this.outBuffer),this.encoder.delete()}encode(A){for(this.encoder.push(A.byteOffset,this.information.values.byteOffset);;){let t=this.encoder.pop(this.connections.length===0?0:this.outBuffer.byteOffset,this.outBuffer.length);if(t===0)break;if(t<0){ot(\`failed encoding packet: \${t}\`);return}if(this.timestamp=this.timestamp+1800>>0,t===1)continue;this.sequenceNumber=this.sequenceNumber+1>>0;let e=this.active&&!this.encoder.active;this.active=this.encoder.active,this.monitoring=this.connections.some(i=>i.id===0);for(let i of this.connections){if(this.monitoring&&i.id!==0)continue;let d=new fA(i.mediaIds,this.sequenceNumber,this.timestamp,e,this.outBuffer.subarray(0,t));aA(globalThis,["sendPacket",{connectionId:i.id,packet:d.toBytes()}])}}}onMessage(A){let[t,e]=A;switch(t){case"captureSetVad":this?.setVad(e);break;case"captureSetMedias":this?.setMedias(e.connections);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){return{sequenceNumber:this.sequenceNumber,timestamp:this.timestamp,connections:this.connections.map(A=>\`\${A.id} => \${A.mediaIds.join(",")}\`),active:this.active,monitoring:this.monitoring,information:{active:Wj(this.information),speechProbability:Qj(this.information),rmsDBFS:zj(this.information),volume:Xj(this.information)},encoder:{sample_rate:this.encoder.sample_rate,fec_packet_loss:this.encoder.fec_packet_loss,voip:this.encoder.voip,vad_preload:this.encoder.vad_preload,complexity:this.encoder.complexity,speech_probability:this.encoder.speech_probability,rms_dbfs:this.encoder.rms_dbfs,active:this.encoder.active,speech_detection_enabled:this.encoder.speech_detection_enabled,speech_detection_going_active:this.encoder.speech_detection_going_active,speech_detection_going_inactive:this.encoder.speech_detection_going_inactive,volume_gate_enabled:this.encoder.volume_gate_enabled,volume_gate_going_active:this.encoder.volume_gate_going_active,volume_gate_going_inactive:this.encoder.volume_gate_going_inactive}}}},PA=class{constructor(A){this.wasm=A;this.medias=new Map;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0,numberTicksWithAudio:0};this.largestIndex=-1;this.decoders=T(this.wasm,"u32",J.MaxNumberOfDecoders),this.information=kt(this.wasm,J.MaxNumberOfDecoders),Oj(this.information,[1,1])}close(){ut(this.wasm,this.information);for(let{decoder:A}of this.medias.values())A.delete()}receivePacket(A,t){this.stats.numberPackets++;let e=fA.parse(t);if(e.type==="Failure"){this.stats.numberPacketError++;let i=Array.from(t).map(d=>d.toString(16).padStart(2,"0")).join("");console.error(\`failed decoding audio packet; reason: \${e.reason}, connection: \${A}, dump: \${i}\`);return}for(let i of e.value.mediaIds){let d=this.medias.get(xA({connectionId:A,mediaId:i}));if(d===void 0){this.stats.numberPacketsMediaNotFound++;continue}d.lastPacket=t;let q=T(this.wasm,"u8",e.value.payload.length);q.set(e.value.payload),d.decoder.push(e.value.sequenceNumber,e.value.timeStamp,e.value.isEndOfSpurt,q.byteOffset,q.length)}}insertMedia(A,t,e,i=[1,1]){let d=xA({connectionId:t,mediaId:e}),q=new this.wasm.Decoder;this.medias.set(d,{index:A,decoder:q,lastPacket:void 0}),this.decoders[A]=q.$$.ptr,this.largestIndex=Math.max(this.largestIndex,A),Tj(this.information,A,i),Rj(this.information,A,0),Sj(this.information,A,0)}removeMedia(A,t,e){let i=xA({connectionId:t,mediaId:e}),d=this.medias.get(i);if(!(d===void 0||d.index!==A)&&(this.medias.delete(i),wj(this.information,A,0),this.decoders[A]=0,d.decoder.delete(),A===this.largestIndex)){for(A=A-1;A>=0&&this.decoders[A]===0;A--);this.largestIndex=A}}decode(A){return{hasAudio:this.wasm.pop_many(this.decoders.byteOffset,this.information.values.byteOffset,this.largestIndex+1,A.byteOffset)}}onMessage(A){let[t,e]=A;switch(t){case"playbackReceivePacket":this.receivePacket(e.connectionId,e.packet);break;case"playbackUpdateMedias":for(let{index:i,connectionId:d,mediaId:q}of e.removed)this.removeMedia(i,d,q);for(let{index:i,connectionId:d,mediaId:q,volume:C}of e.added)this.insertMedia(i,d,q,C);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){let A=[];for(let[t,e]of this.medias){let i=at(t);A.push({index:e.index,connectionId:i.connectionId,mediaId:i.mediaId,rmsDBFS:Pj(this.information,e.index),volume:Mj(this.information,e.index),voicedBlocks:Vj(this.information,e.index),silentBlocks:Uj(this.information,e.index),time:e.decoder.time,consecutive_silence:e.decoder.consecutive_silence,last_voiced_time_point:e.decoder.last_voiced_time_point,sequence_number:e.decoder.sequence_number,packetsSeen:e.decoder.packets_seen,packetsInvalid:e.decoder.packets_invalid,packetsTooLate:e.decoder.packets_too_late,packetsTooEarly:e.decoder.packets_too_early,packetsRepeated:e.decoder.packets_repeated,packetsProcessed:e.decoder.packets_processed,packetsLost:e.decoder.packets_lost,rewinds:e.decoder.rewinds,cacheLength:e.decoder.cache_length,lastPacket:Yj(e.lastPacket)})}return{largestIndex:this.largestIndex,globalVolume:Kj(this.information),decoders:A}}};var Lt=Fn($t()),Ft=(0,Lt.default)(),vt,gt;globalThis.addEventListener("message",$r);async function $r(n){let A=n.data,[t,e]=A;switch(t){case"captureInit":e.workletPort.onmessage=$r,vt=new Fr(e.sampleRate,await Ft);break;case"playbackInit":e.workletPort.onmessage=$r,gt=new vr(await Ft);break;case"close":globalThis.close();break}vt?.onMessage(A),gt?.onMessage(A)}var Fr=class extends OA{constructor(t,e){super(t,e);this.id=-1;this.samples=fr(this.wasm,t,2+J.VadPreload+J.AdditionalCaptureBlocks,!1),aA(globalThis,["captureReady",{sampleBuffer:this.samples,informationBuffer:this.information}])}close(){super.close(),Cr(this.wasm,this.samples)}onMessage(t){super.onMessage(t);let[e,i]=t;e==="captureTick"&&this.tick(i.id)}tick(t){for(;this.id<t;this.id+=1)this.encode(kr(this.samples,this.id%this.samples.length))}dump(){return{type:"shared capture worker",id:this.id,sampleRate:this.samples.sampleRate,stereo:this.samples.stereo,length:this.samples.length,...super.dump()}}},vr=class extends PA{constructor(A){super(A);let t=2+J.AdditionalPlaybackBlocks;this.sampleBuffer=fr(A,48e3,t,!0),this.sampleBuffer.samples.fill(0),this.prefill=t-2;for(let e=0;e<this.prefill;e++)ur(this.sampleBuffer,e,{id:e});this.id=this.prefill,aA(globalThis,["playbackReady",{sampleBuffer:this.sampleBuffer,informationBuffer:this.information}])}close(){super.close(),Cr(this.wasm,this.sampleBuffer)}onMessage(A){super.onMessage(A);let[t,e]=A;t==="playbackTick"&&this.tick(e.id)}tick(A){for(this.stats.numberTicks++;this.id<A+this.prefill;this.id++){let t=this.id%this.sampleBuffer.length,{hasAudio:e}=this.decode(kr(this.sampleBuffer,t));e&&(this.stats.numberTicksWithAudio++,ur(this.sampleBuffer,t,{id:this.id}))}}dump(){return{type:"shared playback worker",id:this.id,prefill:this.prefill,sampleRate:this.sampleBuffer.sampleRate,stereo:this.sampleBuffer.stereo,...super.dump()}}};})();
|
|
3236
|
-
`});var t0,N0=d(()=>{t0='"use strict";(()=>{var R=Object.defineProperty;var F=(e,t)=>{for(var r in t)R(e,r,{get:t[r],enumerable:!0})};var l={};F(l,{AdditionalCaptureBlocks:()=>D,AdditionalPlaybackBlocks:()=>C,ClockJumpCheckInterval:()=>j,ClockJumpThreshold:()=>$,ConnectInterval:()=>Y,ConnectTimeout:()=>Z,DefaultRefreshRate:()=>V,DefaultVideoCodec:()=>K,HealthCheckTimeout:()=>W,MainConnectionPingInterval:()=>H,MaxNumberOfDecoders:()=>_,MinDBFs:()=>k,MinTokenLifetime:()=>q,MinTokenRefreshInterval:()=>Q,PlaybackPreload:()=>L,RenderQuantumSize:()=>N,VadPreload:()=>O,WebRtcIceTimeout:()=>z,WebRtcStatsSnapshotInterval:()=>J,WebRtcTimeout:()=>G});var C=3,D=3,L=3,V=250,O=3,_=512,N=128,k=-758.596,W=1e4,j=1e3,$=1e4,H=3e3,J=1e3,z=3e3,G=1e4,Z=5e3,q=6e4,Q=5e3,Y=[0,100,200,200,500],K="H264";function p(e,t,r){return e.postMessage(t,r)}function X(e){return e.sampleRate*.02*(e.stereo?2:1)}function f(e,t){let r=X(e),n=r*t,s=n+r;return e.samples.subarray(n,s)}function S(e,t){return{id:e.headers[t]}}function I(e,t,r){e.headers[t]=r.id}var ee;(e=>{let t;(r=>(r[r.InvalidPassword=-1]="InvalidPassword",r[r.Unknown=0]="Unknown",r[r.Unencrypted=1]="Unencrypted",r[r.Encrypted=2]="Encrypted"))(t=e.PeerCipherStatus||={})})(ee||={});var{Deno:U}=globalThis,te=typeof U?.noColor=="boolean"?U.noColor:!1,re=!te;function h(e,t){return{open:`\\x1B[${e.join(";")}m`,close:`\\x1B[${t}m`,regexp:new RegExp(`\\\\x1b\\\\[${t}m`,"g")}}function b(e,t){return re?`${t.open}${e.replace(t.regexp,t.open)}${t.close}`:e}function m(e){return b(e,h([0],0))}function T(e){return b(e,h([1],22))}function ne(e){return b(e,h([2],22))}var Te=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),se=new Date,d=(e=>(e[e.CRITICAL=0]="CRITICAL",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG",e))(d||{}),P={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},oe={4:ne,3:m,2:m,1:T,0:T};function ae({message:e}){return String(e)}function B(e){return JSON.stringify({timestamp:e.date.toISOString(),level:d[e.level],message:e.message,extra:e.extra})}function w(e){function t(c,i){return[Math.floor(c/i),c%i]}function r(){let c,i=e.date.valueOf()-se.valueOf();[i,c]=t(i,1e3);let[M,E]=t(i,60);return`${M.toString().padStart(4,"0")}:${E.toString().padStart(2,"0")}.${c.toString().padStart(3,"0")}`}function n(){return e.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(e.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(e.extra)}let s=P[e.level],a=e.logger.name!==void 0?`@${e.logger.name}`:"";return`${m(r())}${a} ${s} ${oe[e.level](String(e.message))}${n()}`}function ie(e){let t=`[${e.date.toISOString()}]`,r=`[${d[e.level]}]`,n=e.logger.name!==void 0?`[${e.logger.name}] `:"",s=P[e.level];return`${t} ${s} ${r.padEnd(7," ")} ${n}${e.message}`}function ce(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var A=class{static sparse=ae;static json=B;static pretty=w;static structured=ie;static default=ce()?w:B;constructor(){}};var le=class{formatter;consoleObject;filter;constructor(e=A.default,t=4,r=console){this.filter=t,this.formatter=e,this.consoleObject=r}handle(e){let t=this.formatter(e);switch(e.level){case 0:case 1:this.consoleObject.error(t);break;case 2:this.consoleObject.warn(t);break;case 3:this.consoleObject.info(t);break;case 4:this.consoleObject.debug(t);break}}};var o=class{#e;sinks;filter;parent;get name(){return this.#e}constructor(e,t=void 0,r=[],n=void 0){this.#e=t,this.sinks=r,this.filter=e,this.parent=n}log(e,t,r=void 0){let n={date:new Date,level:e,logger:this,message:t,extra:r};this.filter<e||this.insert(n)}insert(e){if(!(this.filter<e.level)){for(let t of this.sinks)t.filter>=e.level&&t.handle(e);this.parent!==void 0&&this.parent.insert(e)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},u=globalThis[Symbol.for("odin-global-logger")]??=new o(3,void 0,[new le]),ue=o.prototype.log.bind(u,1),fe=o.prototype.log.bind(u,2),de=o.prototype.log.bind(u,3),pe=o.prototype.log.bind(u,4),Be=o.prototype.log.bind(u);var y=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.blocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"init":this.state=new g(s.sampleBuffer,s.workerPort,sampleRate*.02);break;case"close":this.alive=!1;break;case"dump":s.result.postMessage(this.dump());break}}process(r,n,s){if(this.state===void 0||r.length<1||r[0].length<1)return this.alive;let a=this.state.fill(0,r[0][0]);return this.state.offset===this.state.length&&(this.blocks+=1,this.state.flush(),this.state.fill(a,r[0][0])),this.alive}dump(){return{type:"shared capture worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,blocks:this.blocks}}},x=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.silenceBlocks=0;this.voiceBlocks=0;this.totalBlocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"close":this.alive=!1;break;case"init":this.state=new v(s.workerPort,s.sampleBuffer,sampleRate*.02);break;case"dump":s.result.postMessage(this.dump());break}n==="close"&&(this.alive=!1)}process(r,n,s){if(this.state===void 0||n.length<1||n[0].length<2)return this.alive;let a=this.state.fill(0,n[0][0],n[0][1]);return a<l.RenderQuantumSize&&(this.totalBlocks+=1,this.state.next(),this.state.hasVoice?this.voiceBlocks+=1:this.silenceBlocks+=1,this.state.fill(a,n[0][0],n[0][1])),this.alive}dump(){return{type:"shared playback worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,hasVoice:this.state?.hasVoice??!1,silenceBlocks:this.silenceBlocks,voiceBlocks:this.voiceBlocks,totalBlocks:this.totalBlocks}}},g=class{constructor(t,r,n){this.samples=t;this.port=r;this.length=n;this.id=0,this.offset=0,this.entry=f(this.samples,0)}fill(t,r){let n=Math.min(r.length-t,this.length-this.offset);return this.entry.set(r.subarray(t,t+n),this.offset),this.offset+=n,t+n}flush(){this.id+=1,p(this.port,["captureTick",{id:this.id}]);let t=this.id%this.samples.length;this.entry=f(this.samples,t),I(this.samples,t,{id:this.id}),this.offset=0}},v=class{constructor(t,r,n){this.port=t;this.samples=r;this.length=n;this.id=-1,this.offset=0,this.entry=void 0,this.next()}get hasVoice(){return this.entry!==void 0}fill(t,r,n){let s=Math.min(l.RenderQuantumSize-t,this.length-this.offset);return this.entry!==void 0&&(r.set(this.entry.subarray(this.offset,this.offset+s),t),n.set(this.entry.subarray(this.offset+this.length,this.offset+this.length+s),t)),this.offset+=s,t+s}next(){this.id+=1;let t=this.id%this.samples.length,{id:r}=S(this.samples,t);this.entry=this.id===r?f(this.samples,t):void 0,this.offset=0,p(this.port,["playbackTick",{id:this.id}])}};registerProcessor("OdinCaptureProcessor",y);registerProcessor("OdinPlaybackProcessor",x);})();\n'});var P0={};kx(P0,{createCaptureWorker:()=>ZA,createPlaybackWorker:()=>YA});function ZA(D,x,A,F,r=C.DefaultRefreshRate){return XA.enqueue(async()=>{let[t,j]=await jx(D0,t0,D,"OdinCaptureProcessor",{channelCount:1,numberOfInputs:1,numberOfOutputs:0});return e0.create(D,x,A,t,j,F)})}async function YA(D,x=C.DefaultRefreshRate){if(D.sampleRate!==48e3)throw new Error("playback sample rate must be 48kHz ");let[A,F]=await jx(D0,t0,D,"OdinPlaybackProcessor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2]});return j0.create(D,A,F)}var w0,XA,j0,e0,K0=d(()=>{"use strict";w0=require("@4players/odin-common");b();qx();H0();N0();XA=new w0.Strand;j0=class D extends rx{constructor(A,F,r,t){super(A,F,r);this.information=t}static async create(A,F,r){let{port1:t,port2:j}=new MessageChannel;o(F,["playbackInit",{workletPort:t}],[t]);let{informationBuffer:e,sampleBuffer:v}=await xx(F,"playbackReady");return F0(e,[1,1]),o(r.port,["init",{sampleBuffer:v,workerPort:j}],[j]),new D(A,r,F,e)}getActivity(A){let F=this.medias.get(p(A));if(F===void 0)return;let r=l0(this.information,F.index);return r===0?$:{isSilent:!1,rmsDBFS:r}}getJitterStats(A){}setGlobalVolume(A){F0(this.information,A)}setVolume(A,F){let r=this.medias.get(p(A));r!==void 0&&u0(this.information,r.index,F)}_GetFreeIndex(){let A=super._GetFreeIndex();if(A!==void 0)return A;if(this.information.length>this.medias.size)return this.medias.size}},e0=class D extends Dx{constructor(A,F,r,t,j,e){super(A,F,r,t,e);this.information=j}static async create(A,F,r,t,j,e){let{port1:v,port2:f}=new MessageChannel;o(t,["captureInit",{sampleRate:A.sampleRate,workletPort:v}],[v]);let{sampleBuffer:u,informationBuffer:k}=await xx(t,"captureReady");return o(j.port,["init",{workerPort:f,sampleBuffer:u}],[f]),new D(j,t,F,r,k,e)}get activity(){return{isSilent:!k0(this.information),rmsDBFS:d0(this.information)}}get speechProbability(){return c0(this.information)}setVolume(A){p0(this.information,A)}}});var B0,J0=d(()=>{B0=`"use strict";(()=>{var oe=Object.create;var WA=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var ke=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var de=(n,A)=>()=>(A||n((A={exports:{}}).exports,A),A.exports),qe=(n,A)=>{for(var t in A)WA(n,t,{get:A[t],enumerable:!0})},fe=(n,A,t,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let l of ke(A))!ce.call(n,l)&&l!==t&&WA(n,l,{get:()=>A[l],enumerable:!(e=ae(A,l))||e.enumerable});return n};var Ce=(n,A,t)=>(t=n!=null?oe(ue(n)):{},fe(A||!n||!n.__esModule?WA(t,"default",{value:n,enumerable:!0}):t,n));var Hj=de((Lj,JA)=>{"use strict";var er=(()=>{var n=globalThis.document?.currentScript?.src;return async function(A={}){var t,e=A,l=!!globalThis.window,d=!!globalThis.WorkerGlobalScope,q=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",p=[],F="./this.program";d&&(n=self.location.href);var x="",KA,O;if(l||d){try{x=new URL(".",n).href}catch{}d&&(O=j=>{var r=new XMLHttpRequest;return r.open("GET",j,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),KA=async j=>{var r=await fetch(j,{credentials:"same-origin"});if(r.ok)return r.arrayBuffer();throw new Error(r.status+" : "+r.url)}}var ir=console.log.bind(console),oA=console.error.bind(console),or,ar=!1;function Nj(j){for(var r=0,s=j.length,i=new Uint8Array(s),o;r<s;++r)o=j.charCodeAt(r),i[r]=~o>>8&o;return i}var kr,ur,cr=!1;function Bj(){var j=Ur.buffer;U=new Int8Array(j),aA=new Int16Array(j),e.HEAPU8=_=new Uint8Array(j),Z=new Uint16Array(j),e.HEAP32=kA=new Int32Array(j),e.HEAPU32=m=new Uint32Array(j),e.HEAPF32=fr=new Float32Array(j),Cr=new Float64Array(j),qr=new BigInt64Array(j),Gr=new BigUint64Array(j)}function bj(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Sj(e.preRun.shift());pr(hr)}function Jj(){cr=!0,rA.v()}function Kj(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)Vj(e.postRun.shift());pr(Ir)}function OA(j){e.onAbort?.(j),j="Aborted("+j+")",oA(j),ar=!0,j+=". Build with -sASSERTIONS for more info.";var r=new WebAssembly.RuntimeError(j);throw ur?.(r),r}var dr;function Oj(){return Nj(\`\\0asm\\0\\0\\0\\x8D9\\\`\\x7F\\x7F\\\`\\x7F\\0\\\`\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\0\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`||\\\`\\x7F}\\\`}}\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F~\\\`\\x7F\\x7F}\\\`\\x7F}}\\\`\\x7F\\x7F}}\\0\\\`
|
|
3235
|
+
\`,new Function(I,f)}function rr(r,j,s,l,o,k){var a=j.length;a<2&&p("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var u=j[1]!==null&&s!==null,c=ij(j),f=!j[0].isVoid,G=j[0],I=j[1],$=[r,p,l,o,sj,G.fromWireType.bind(G),I?.toWireType.bind(I)],m=2;m<a;++m){var F=j[m];$.push(F.toWireType.bind(F))}if(!c)for(var m=u?1:2;m<j.length;++m)j[m].destructorFunction!==null&&$.push(j[m].destructorFunction);var P=Ie(j,u,f,k)(...$);return Aj(r,P)}var me=(r,j,s,l,o,k)=>{var a=Ar(j,s);o=K(l,o),M([],[r],u=>{u=u[0];var c=\`constructor \${u.name}\`;if(u.registeredClass.constructor_body===void 0&&(u.registeredClass.constructor_body=[]),u.registeredClass.constructor_body[j-1]!==void 0)throw new iA(\`Cannot register multiple constructors with identical number of parameters (\${j-1}) for class '\${u.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!\`);return u.registeredClass.constructor_body[j-1]=()=>{AA(\`Cannot construct \${u.name} due to unbound types\`,a)},M([],a,f=>(f.splice(1,0,null),u.registeredClass.constructor_body[j-1]=rr(c,f,null,o,k),[])),[]})},lj=r=>{r=r.trim();let j=r.indexOf("(");return j===-1?r:r.slice(0,j)},Ee=(r,j,s,l,o,k,a,u,c,f)=>{var G=Ar(s,l);j=g(j),j=lj(j),k=K(o,k,c),M([],[r],I=>{I=I[0];var $=\`\${I.name}.\${j}\`;j.startsWith("@@")&&(j=Symbol[j.substring(2)]),u&&I.registeredClass.pureVirtualFunctions.push(j);function m(){AA(\`Cannot call \${$} due to unbound types\`,G)}var F=I.registeredClass.instancePrototype,_=F[j];return _===void 0||_.overloadTable===void 0&&_.className!==I.name&&_.argCount===s-2?(m.argCount=s-2,m.className=I.name,F[j]=m):(jj(F,j,$),F[j].overloadTable[s-2]=m),M([],G,P=>{var y=rr($,P,I,k,a,c);return F[j].overloadTable===void 0?(y.argCount=s-2,F[j]=y):F[j].overloadTable[s-2]=y,[]}),[]})},oj=(r,j,s)=>(r instanceof Object||p(\`\${s} with invalid "this": \${r}\`),r instanceof j.registeredClass.constructor||p(\`\${s} incompatible with "this" of type \${r.constructor.name}\`),r.$$.ptr||p(\`cannot call emscripten binding method \${s} on deleted object\`),$A(r.$$.ptr,r.$$.ptrType.registeredClass,j.registeredClass)),$e=(r,j,s,l,o,k,a,u,c,f)=>{j=g(j),o=K(l,o),M([],[r],G=>{G=G[0];var I=\`\${G.name}.\${j}\`,$={get(){AA(\`Cannot access \${I} due to unbound types\`,[s,a])},enumerable:!0,configurable:!0};return c?$.set=()=>AA(\`Cannot access \${I} due to unbound types\`,[s,a]):$.set=m=>p(I+" is a read-only property"),Object.defineProperty(G.registeredClass.instancePrototype,j,$),M([],c?[s,a]:[s],m=>{var F=m[0],_={get(){var y=oj(this,G,I+" getter");return F.fromWireType(o(k,y))},enumerable:!0};if(c){c=K(u,c);var P=m[1];_.set=function(y){var oA=oj(this,G,I+" setter"),H=[];c(f,oA,P.toWireType(H,y)),sj(H)}}return Object.defineProperty(G.registeredClass.instancePrototype,j,_),[]}),[]})},aj=[],rA=[0,1,,1,null,1,!0,1,!1,1],Fe=r=>{r>9&&--rA[r+1]===0&&(rA[r]=void 0,aj.push(r))},jr={toValue:r=>(r||p(\`Cannot use deleted val. handle = \${r}\`),rA[r]),toHandle:r=>{switch(r){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let j=aj.pop()||rA.length;return rA[j]=r,rA[j+1]=1,j}}}},ve={name:"emscripten::val",fromWireType:r=>{var j=jr.toValue(r);return Fe(r),j},toWireType:(r,j)=>jr.toHandle(j),readValueFromPointer:FA,destructorFunction:null},ge=r=>b(r,ve),Le=(r,j)=>{switch(j){case 4:return function(s){return this.fromWireType(Jr[s>>2])};case 8:return function(s){return this.fromWireType(hA[s>>3])};default:throw new TypeError(\`invalid float width (\${j}): \${r}\`)}},He=(r,j,s)=>{j=g(j),b(r,{name:j,fromWireType:l=>l,toWireType:(l,o)=>o,readValueFromPointer:Le(j,s),destructorFunction:null})},_e=(r,j,s,l,o,k,a,u)=>{var c=Ar(j,s);r=g(r),r=lj(r),o=K(l,o,a),tj(r,function(){AA(\`Cannot call \${r} due to unbound types\`,c)},j-1),M([],c,f=>{var G=[f[0],null].concat(f.slice(1));return nj(r,rr(r,G,null,o,k,a),j-1),[]})},ye=(r,j,s,l,o)=>{j=g(j);let k=l===0,a=c=>c;if(k){var u=32-8*s;a=c=>c<<u>>>u,o=a(o)}b(r,{name:j,fromWireType:a,toWireType:(c,f)=>f,readValueFromPointer:zr(j,s,l!==0),destructorFunction:null})},xe=(r,j,s)=>{var l=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],o=l[j];function k(a){var u=E[a>>2],c=E[a+4>>2];return new o(V.buffer,c,u)}s=g(s),b(r,{name:s,fromWireType:k,readValueFromPointer:k},{ignoreDuplicateRegistrations:!0})},De=(r,j,s,l)=>{if(!(l>0))return 0;for(var o=s,k=s+l-1,a=0;a<r.length;++a){var u=r.codePointAt(a);if(u<=127){if(s>=k)break;j[s++]=u}else if(u<=2047){if(s+1>=k)break;j[s++]=192|u>>6,j[s++]=128|u&63}else if(u<=65535){if(s+2>=k)break;j[s++]=224|u>>12,j[s++]=128|u>>6&63,j[s++]=128|u&63}else{if(s+3>=k)break;j[s++]=240|u>>18,j[s++]=128|u>>12&63,j[s++]=128|u>>6&63,j[s++]=128|u&63,a++}}return j[s]=0,s-o},Be=(r,j,s)=>De(r,x,j,s),Ne=r=>{for(var j=0,s=0;s<r.length;++s){var l=r.charCodeAt(s);l<=127?j++:l<=2047?j+=2:l>=55296&&l<=57343?(j+=4,++s):j+=3}return j},kj=globalThis.TextDecoder&&new TextDecoder,uj=(r,j,s,l)=>{var o=j+s;if(l)return o;for(;r[j]&&!(j>=o);)++j;return j},cj=(r,j=0,s,l)=>{var o=uj(r,j,s,l);if(o-j>16&&r.buffer&&kj)return kj.decode(r.buffer instanceof ArrayBuffer?r.subarray(j,o):r.slice(j,o));for(var k="";j<o;){var a=r[j++];if(!(a&128)){k+=String.fromCharCode(a);continue}var u=r[j++]&63;if((a&224)==192){k+=String.fromCharCode((a&31)<<6|u);continue}var c=r[j++]&63;if((a&240)==224?a=(a&15)<<12|u<<6|c:a=(a&7)<<18|u<<12|c<<6|r[j++]&63,a<65536)k+=String.fromCharCode(a);else{var f=a-65536;k+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return k},be=(r,j,s)=>r?cj(x,r,j,s):"",Je=(r,j)=>{j=g(j);var s=!0;b(r,{name:j,fromWireType(l){var o=E[l>>2],k=l+4,a;if(s)a=be(k,o,!0);else{a="";for(var u=0;u<o;++u)a+=String.fromCharCode(x[k+u])}return O(l),a},toWireType(l,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var k,a=typeof o=="string";a||ArrayBuffer.isView(o)&&o.BYTES_PER_ELEMENT==1||p("Cannot pass non-string to std::string"),s&&a?k=Ne(o):k=o.length;var u=nr(4+k+1),c=u+4;if(E[u>>2]=k,a)if(s)Be(o,c,k+1);else for(var f=0;f<k;++f){var G=o.charCodeAt(f);G>255&&(O(u),p("String has UTF-16 code units that do not fit in 8 bits")),x[c+f]=G}else x.set(o,c);return l!==null&&l.push(O,u),u},readValueFromPointer:FA,destructorFunction(l){O(l)}})},dj=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ke=(r,j,s)=>{var l=r>>1,o=uj(nA,l,j/2,s);if(o-l>16&&dj)return dj.decode(nA.slice(l,o));for(var k="",a=l;a<o;++a){var u=nA[a];k+=String.fromCharCode(u)}return k},Oe=(r,j,s)=>{if(s??=2147483647,s<2)return 0;s-=2;for(var l=j,o=s<r.length*2?s/2:r.length,k=0;k<o;++k){var a=r.charCodeAt(k);pA[j>>1]=a,j+=2}return pA[j>>1]=0,j-l},Pe=r=>r.length*2,we=(r,j,s)=>{for(var l="",o=r>>2,k=0;!(k>=j/4);k++){var a=E[o+k];if(!a&&!s)break;l+=String.fromCodePoint(a)}return l},Me=(r,j,s)=>{if(s??=2147483647,s<4)return 0;for(var l=j,o=l+s-4,k=0;k<r.length;++k){var a=r.codePointAt(k);if(a>65535&&k++,z[j>>2]=a,j+=4,j+4>o)break}return z[j>>2]=0,j-l},Te=r=>{for(var j=0,s=0;s<r.length;++s){var l=r.codePointAt(s);l>65535&&s++,j+=4}return j},Ue=(r,j,s)=>{s=g(s);var l,o,k;j===2?(l=Ke,o=Oe,k=Pe):(l=we,o=Me,k=Te),b(r,{name:s,fromWireType:a=>{var u=E[a>>2],c=l(a+4,u*j,!0);return O(a),c},toWireType:(a,u)=>{typeof u!="string"&&p(\`Cannot pass non-string to C++ string type \${s}\`);var c=k(u),f=nr(4+c+j);return E[f>>2]=c/j,o(u,f+4,c+j),a!==null&&a.push(O,f),f},readValueFromPointer:FA,destructorFunction(a){O(a)}})},Se=(r,j)=>{j=g(j),b(r,{isVoid:!0,name:j,fromWireType:()=>{},toWireType:(s,l)=>{}})},Ve=r=>{sr(r,!d,1,!i,65536,!1),h.threadInitTLS()},qj=r=>{if(r instanceof br||r=="unwind")return Q;CA(1,r)},Re=()=>{if(!WA())try{if(C){_A()&&ir(Q);return}QA(Q)}catch(r){qj(r)}},fj=r=>{if(!GA)try{return r()}catch(j){qj(j)}finally{Re()}},We=!Atomics.waitAsync||globalThis.navigator?.userAgent&&Number((navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./)||[])[2])<91,tr=r=>{if(!We){var j=Atomics.waitAsync(z,r>>2,r);j.value.then(HA);var s=r+120;Atomics.store(z,s>>2,1)}},HA=()=>fj(()=>{var r=_A();r&&(tr(r),vj())}),Qe=(r,j)=>{if(r==j)setTimeout(HA);else if(C)postMessage({targetThread:r,cmd:"checkMailbox"});else{var s=h.pthreads[r];if(!s)return;s.postMessage({cmd:"checkMailbox"})}},er=[],ze=(r,j,s,l,o,k,a)=>{er.length=0;for(var u=o>>3,c=o+l>>3;u<c;){var f;S[u++]?f=S[u++]:f=hA[u++],er.push(f)}var G=kn[r];h.currentProxiedOperationCallerThread=s;var I=G(...er);if(h.currentProxiedOperationCallerThread=0,k){I.then($=>Ej(k,a,$));return}return I},Xe=r=>{C?postMessage({cmd:"cleanupThread",thread:r}):Pr(r)},Ze=r=>{},Ye=()=>performance.timeOrigin+performance.now(),An=9007199254740992,rn=-9007199254740992,jn=r=>r<rn||r>An?NaN:Number(r),tn=()=>{},en=()=>{RA+=1},nn=()=>{throw en(),"unwind"},sn=r=>{VA("OOM")},ln=r=>{var j=x.length;r>>>=0,sn(r)};function Cj(r){return C?sA(2,0,1,r):52}function Gj(r,j,s,l){return C?sA(3,0,1,r,j,s,l):(j=jn(j),70)}var on=[null,[],[]],an=(r,j)=>{var s=on[r];j===0||j===10?((r===1?TA:N)(cj(s)),s.length=0):s.push(j)};function pj(r,j,s,l){if(C)return sA(4,0,1,r,j,s,l);for(var o=0,k=0;k<s;k++){var a=E[j>>2],u=E[j+4>>2];j+=8;for(var c=0;c<u;c++)an(r,x[a+c]);o+=u}return E[l>>2]=o,0}if(h.init(),ee(),Ce(),xt(),e.noExitRuntime&&(zA=e.noExitRuntime),e.print&&(TA=e.print),e.printErr&&(N=e.printErr),e.wasmBinary&&(gr=e.wasmBinary),e.arguments&&(v=e.arguments),e.thisProgram&&(B=e.thisProgram),e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()();var kn=[Ur,Sr,Cj,Gj,pj],hj,Ij,_A,nr,O,un,sr,mj,Ej,$j,Fj,ir,vj,gj,Lj,Hj,_j,cn,yj;function dn(r){hj=r.G,Ij=r.H,_A=r.J,nr=e._malloc=r.K,O=e._free=r.L,un=r.M,sr=r.N,mj=r.O,Ej=r.P,$j=r.Q,Fj=r.R,ir=r.S,vj=r.T,gj=r.U,Lj=r.V,Hj=r.W,_j=r.X,cn=yj=r.I}var xj;function qn(){xj={i:zt,C:Xt,h:Yt,o:Ae,n:he,m:me,e:Ee,b:$e,D:ge,l:He,q:_e,d:ye,c:xe,E:Je,g:Ue,p:Se,z:Ve,u:Qe,k:ze,s:Xe,y:tr,B:Ze,x:tn,A:nn,f:Ye,t:ln,r:QA,w:Cj,v:Gj,j:pj,a:X}}function Dj(){if(C){UA?.(e),xr();return}Dt();function r(){e.calledRun=!0,!GA&&(xr(),UA?.(e),e.onRuntimeInitialized?.(),Bt())}e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1),r()},1)):r()}var jA;return C||(jA=await Nr(),Dj()),_r?t=e:t=new Promise((r,j)=>{UA=r,Lr=j}),t}})();typeof Et=="object"&&typeof MA=="object"?(MA.exports=wA,MA.exports.default=wA):typeof define=="function"&&define.amd&&define([],()=>wA);var ys=globalThis.name=="em-pthread";ys&&wA()});var J={};En(J,{AdditionalCaptureBlocks:()=>gn,AdditionalPlaybackBlocks:()=>vn,ClockJumpCheckInterval:()=>Bn,ClockJumpThreshold:()=>Nn,ConnectInterval:()=>Sn,ConnectTimeout:()=>Mn,DefaultRefreshRate:()=>Hn,DefaultVideoCodec:()=>Vn,HealthCheckTimeout:()=>Dn,MainConnectionPingInterval:()=>bn,MaxNumberOfDecoders:()=>yn,MinDBFs:()=>Jj,MinTokenLifetime:()=>Tn,MinTokenRefreshInterval:()=>Un,PlaybackPreload:()=>Ln,RenderQuantumSize:()=>xn,VadPreload:()=>_n,WebRtcAnswerTimeout:()=>Pn,WebRtcIceTimeout:()=>Kn,WebRtcMaxNegotiationAttempts:()=>wn,WebRtcStatsSnapshotInterval:()=>Jn,WebRtcTimeout:()=>On});var vn=3,gn=3,Ln=3,Hn=250,_n=3,yn=512,xn=128,Jj=-758.596,Dn=1e4,Bn=1e3,Nn=1e4,bn=3e3,Jn=1e3,Kn=3e3,On=1e4,Pn=1e4,wn=3,Mn=5e3,Tn=6e4,Un=5e3,Sn=[0,100,200,200,500],Vn="H264";function aA(n,A,t){return n.postMessage(A,t)}function ar(n){return n.sampleRate*.02*(n.stereo?2:1)}function kr(n,A){let t=ar(n),e=t*A,i=e+t;return n.samples.subarray(e,i)}function ur(n,A,t){n.headers[A]=t.id}function Kj(n){return[n.values[0],n.values[1]]}function Oj(n,A){n.values[0]=A[0],n.values[1]=A[1]}function Pj(n,A){return n.values[2+A*5]}function wj(n,A,t){n.values[2+A*5]=t}function Mj(n,A){let t=2+A*5+1;return[n.values[t+0],n.values[t+1]]}function Tj(n,A,t){let e=2+A*5+1;n.values[e+0]=t[0],n.values[e+1]=t[1]}function Uj(n,A){return n.values[2+A*5+3]}function Sj(n,A,t){n.values[2+A*5+3]=t}function Vj(n,A){return n.values[2+A*5+4]}function Rj(n,A,t){n.values[2+A*5+4]=t}function Wj(n){return n.values[0]!==0}function Qj(n){return n.values[1]}function zj(n){return n.values[2]}function Xj(n){return n.values[3]}function Zj(n,A){return n.values[3]=A}function Yj(n){return n?Array.from(n).map(A=>A.toString(16).padStart(2,"0")).join(""):null}var Rn;(n=>{let A;(t=>(t[t.InvalidPassword=-1]="InvalidPassword",t[t.Unknown=0]="Unknown",t[t.Unencrypted=1]="Unencrypted",t[t.Encrypted=2]="Encrypted"))(A=n.PeerCipherStatus||={})})(Rn||={});function et(n){return{type:"Success",value:n}}function D(n){return{type:"Failure",reason:n}}var{Deno:At}=globalThis,Wn=typeof At?.noColor=="boolean"?At.noColor:!1,Qn=!Wn;function dr(n,A){return{open:\`\\x1B[\${n.join(";")}m\`,close:\`\\x1B[\${A}m\`,regexp:new RegExp(\`\\\\x1b\\\\[\${A}m\`,"g")}}function qr(n,A){return Qn?\`\${A.open}\${n.replace(A.regexp,A.open)}\${A.close}\`:n}function cr(n){return qr(n,dr([0],0))}function rt(n){return qr(n,dr([1],22))}function zn(n){return qr(n,dr([2],22))}var Ss=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),Xn=new Date,yA=(n=>(n[n.CRITICAL=0]="CRITICAL",n[n.ERROR=1]="ERROR",n[n.WARN=2]="WARN",n[n.INFO=3]="INFO",n[n.DEBUG=4]="DEBUG",n))(yA||{}),nt={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},Zn={4:zn,3:cr,2:cr,1:rt,0:rt};function Yn({message:n}){return String(n)}function jt(n){return JSON.stringify({timestamp:n.date.toISOString(),level:yA[n.level],message:n.message,extra:n.extra})}function tt(n){function A(q,C){return[Math.floor(q/C),q%C]}function t(){let q,C=n.date.valueOf()-Xn.valueOf();[C,q]=A(C,1e3);let[v,B]=A(C,60);return\`\${v.toString().padStart(4,"0")}:\${B.toString().padStart(2,"0")}.\${q.toString().padStart(3,"0")}\`}function e(){return n.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(n.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(n.extra)}let i=nt[n.level],d=n.logger.name!==void 0?\`@\${n.logger.name}\`:"";return\`\${cr(t())}\${d} \${i} \${Zn[n.level](String(n.message))}\${e()}\`}function As(n){let A=\`[\${n.date.toISOString()}]\`,t=\`[\${yA[n.level]}]\`,e=n.logger.name!==void 0?\`[\${n.logger.name}] \`:"",i=nt[n.level];return\`\${A} \${i} \${t.padEnd(7," ")} \${e}\${n.message}\`}function rs(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var st=class{static sparse=Yn;static json=jt;static pretty=tt;static structured=As;static default=rs()?tt:jt;constructor(){}};var js=class{formatter;consoleObject;filter;constructor(n=st.default,A=4,t=console){this.filter=A,this.formatter=n,this.consoleObject=t}handle(n){let A=this.formatter(n);switch(n.level){case 0:case 1:this.consoleObject.error(A);break;case 2:this.consoleObject.warn(A);break;case 3:this.consoleObject.info(A);break;case 4:this.consoleObject.debug(A);break}}};var R=class{#A;sinks;filter;parent;get name(){return this.#A}constructor(n,A=void 0,t=[],e=void 0){this.#A=A,this.sinks=t,this.filter=n,this.parent=e}log(n,A,t=void 0){let e={date:new Date,level:n,logger:this,message:A,extra:t};this.filter<n||this.insert(e)}insert(n){if(!(this.filter<n.level)){for(let A of this.sinks)A.filter>=n.level&&A.handle(n);this.parent!==void 0&&this.parent.insert(n)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},kA=globalThis[Symbol.for("odin-global-logger")]??=new R(3,void 0,[new js]),ts=R.prototype.log.bind(kA,1),es=R.prototype.log.bind(kA,2),it=R.prototype.log.bind(kA,3),ns=R.prototype.log.bind(kA,4),Vs=R.prototype.log.bind(kA);var lt;function ot(n,...A){let t=ss(A);lt?lt?.info(n,t):it(n,t)}function ss(...n){if(n.length===1&&typeof n[0]=="object"&&n[0]!==null)return{...n[0]};if(n.length>0)return{args:n}}function xA(n){return n.connectionId*4294967296+n.mediaId}function at(n){return{mediaId:n%4294967296,connectionId:Math.floor(n/4294967296)}}function T(n,A,t){let e;switch(A){case"f32":e=n.HEAPF32;break;case"u32":e=n.HEAPU32;break;case"i32":e=n.HEAP32;break;case"u8":e=n.HEAPU8;break;default:throw new Error(\`allocating \${A} is not supported\`)}let i=n._malloc(t*e.BYTES_PER_ELEMENT);if(i===0||i%e.BYTES_PER_ELEMENT!==0)throw new Error(\`failed allocating a \${t} \${A} array\`);let d=i/e.BYTES_PER_ELEMENT;return e.subarray(d,d+t)}function tA(n,A){n._free(A.byteOffset)}function fr(n,A,t,e){return{headers:T(n,"i32",t),samples:T(n,"f32",t*ar({sampleRate:A,stereo:e})),length:t,sampleRate:A,stereo:e}}function Cr(n,A){tA(n,A.headers),tA(n,A.samples)}function kt(n,A){return{values:T(n,"f32",2+A*5),length:A}}function ut(n,A){tA(n,A.values)}function ct(n){return{values:T(n,"f32",4)}}function dt(n,A){tA(n,A.values)}function qt(n){let A=n.length,t=0,e=0;for(;e<A;){let i=n.charCodeAt(e++);if((i&4294967168)===0){t++;continue}else if((i&4294965248)===0)t+=2;else{if(i>=55296&&i<=56319&&e<A){let d=n.charCodeAt(e);(d&64512)===56320&&(++e,i=((i&1023)<<10)+(d&1023)+65536)}(i&4294901760)===0?t+=3:t+=4}}return t}function is(n,A,t){let e=n.length,i=t,d=0;for(;d<e;){let q=n.charCodeAt(d++);if((q&4294967168)===0){A[i++]=q;continue}else if((q&4294965248)===0)A[i++]=q>>6&31|192;else{if(q>=55296&&q<=56319&&d<e){let C=n.charCodeAt(d);(C&64512)===56320&&(++d,q=((q&1023)<<10)+(C&1023)+65536)}(q&4294901760)===0?(A[i++]=q>>12&15|224,A[i++]=q>>6&63|128):(A[i++]=q>>18&7|240,A[i++]=q>>12&63|128,A[i++]=q>>6&63|128)}A[i++]=q&63|128}}var ls=new TextEncoder,os=50;function as(n,A,t){ls.encodeInto(n,A.subarray(t))}function ft(n,A,t){n.length>os?as(n,A,t):is(n,A,t)}var ks=4096;function Gr(n,A,t){let e=A,i=e+t,d=[],q="";for(;e<i;){let C=n[e++];if((C&128)===0)d.push(C);else if((C&224)===192){let v=n[e++]&63;d.push((C&31)<<6|v)}else if((C&240)===224){let v=n[e++]&63,B=n[e++]&63;d.push((C&31)<<12|v<<6|B)}else if((C&248)===240){let v=n[e++]&63,B=n[e++]&63,CA=n[e++]&63,w=(C&7)<<18|v<<12|B<<6|CA;w>65535&&(w-=65536,d.push(w>>>10&1023|55296),w=56320|w&1023),d.push(w)}else d.push(C);d.length>=ks&&(q+=String.fromCharCode(...d),d.length=0)}return d.length>0&&(q+=String.fromCharCode(...d)),q}var us=new TextDecoder,cs=200;function ds(n,A,t){let e=n.subarray(A,A+t);return us.decode(e)}function Ct(n,A,t){return t>cs?ds(n,A,t):Gr(n,A,t)}var W=class{constructor(A,t){this.type=A,this.data=t}};var L=class n extends Error{constructor(A){super(A);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};function Gt(n,A,t){let e=t/4294967296,i=t;n.setUint32(A,e),n.setUint32(A+4,i)}function DA(n,A,t){let e=Math.floor(t/4294967296),i=t;n.setUint32(A,e),n.setUint32(A+4,i)}function BA(n,A){let t=n.getInt32(A),e=n.getUint32(A+4);return t*4294967296+e}function pt(n,A){let t=n.getUint32(A),e=n.getUint32(A+4);return t*4294967296+e}var qs=-1,fs=4294967296-1,Cs=17179869184-1;function Gs({sec:n,nsec:A}){if(n>=0&&A>=0&&n<=Cs)if(A===0&&n<=fs){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,e=n&4294967295,i=new Uint8Array(8),d=new DataView(i.buffer);return d.setUint32(0,A<<2|t&3),d.setUint32(4,e),i}else{let t=new Uint8Array(12),e=new DataView(t.buffer);return e.setUint32(0,A),DA(e,4,n),t}}function ps(n){let A=n.getTime(),t=Math.floor(A/1e3),e=(A-t*1e3)*1e6,i=Math.floor(e/1e9);return{sec:t+i,nsec:e-i*1e9}}function hs(n){if(n instanceof Date){let A=ps(n);return Gs(A)}else return null}function Is(n){let A=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:A.getUint32(0),nsec:0};case 8:{let t=A.getUint32(0),e=A.getUint32(4),i=(t&3)*4294967296+e,d=t>>>2;return{sec:i,nsec:d}}case 12:{let t=BA(A,4),e=A.getUint32(0);return{sec:t,nsec:e}}default:throw new L(\`Unrecognized data size for timestamp (expected 4, 8, or 12): \${n.length}\`)}}function ms(n){let A=Is(n);return new Date(A.sec*1e3+A.nsec/1e6)}var ht={type:qs,encode:hs,decode:ms};var U=class{constructor(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(ht)}register({type:A,encode:t,decode:e}){if(A>=0)this.encoders[A]=t,this.decoders[A]=e;else{let i=-1-A;this.builtInEncoders[i]=t,this.builtInDecoders[i]=e}}tryToEncode(A,t){for(let e=0;e<this.builtInEncoders.length;e++){let i=this.builtInEncoders[e];if(i!=null){let d=i(A,t);if(d!=null){let q=-1-e;return new W(q,d)}}}for(let e=0;e<this.encoders.length;e++){let i=this.encoders[e];if(i!=null){let d=i(A,t);if(d!=null){let q=e;return new W(q,d)}}}return A instanceof W?A:null}decode(A,t,e){let i=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return i?i(A,t,e):new W(t,A)}};U.defaultCodec=new U;function Es(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function uA(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):Es(n)?new Uint8Array(n):Uint8Array.from(n)}var $s=100,Fs=2048,NA=class n{constructor(A){this.entered=!1,this.extensionCodec=A?.extensionCodec??U.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.maxDepth=A?.maxDepth??$s,this.initialBufferSize=A?.initialBufferSize??Fs,this.sortKeys=A?.sortKeys??!1,this.forceFloat32=A?.forceFloat32??!1,this.ignoreUndefined=A?.ignoreUndefined??!1,this.forceIntegerToFloat=A?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(A){if(this.entered)return this.clone().encodeSharedRef(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(A){if(this.entered)return this.clone().encode(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(A,t){if(t>this.maxDepth)throw new Error(\`Too deep objects in depth \${t}\`);A==null?this.encodeNil():typeof A=="boolean"?this.encodeBoolean(A):typeof A=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(A):this.encodeNumber(A):typeof A=="string"?this.encodeString(A):this.useBigInt64&&typeof A=="bigint"?this.encodeBigInt64(A):this.encodeObject(A,t)}ensureBufferSizeToWrite(A){let t=this.pos+A;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(A){let t=new ArrayBuffer(A),e=new Uint8Array(t),i=new DataView(t);e.set(this.bytes),this.view=i,this.bytes=e}encodeNil(){this.writeU8(192)}encodeBoolean(A){A===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(A){!this.forceIntegerToFloat&&Number.isSafeInteger(A)?A>=0?A<128?this.writeU8(A):A<256?(this.writeU8(204),this.writeU8(A)):A<65536?(this.writeU8(205),this.writeU16(A)):A<4294967296?(this.writeU8(206),this.writeU32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(207),this.writeU64(A)):A>=-32?this.writeU8(224|A+32):A>=-128?(this.writeU8(208),this.writeI8(A)):A>=-32768?(this.writeU8(209),this.writeI16(A)):A>=-2147483648?(this.writeU8(210),this.writeI32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(211),this.writeI64(A)):this.encodeNumberAsFloat(A)}encodeNumberAsFloat(A){this.forceFloat32?(this.writeU8(202),this.writeF32(A)):(this.writeU8(203),this.writeF64(A))}encodeBigInt64(A){A>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(A)):(this.writeU8(211),this.writeBigInt64(A))}writeStringHeader(A){if(A<32)this.writeU8(160+A);else if(A<256)this.writeU8(217),this.writeU8(A);else if(A<65536)this.writeU8(218),this.writeU16(A);else if(A<4294967296)this.writeU8(219),this.writeU32(A);else throw new Error(\`Too long string: \${A} bytes in UTF-8\`)}encodeString(A){let e=qt(A);this.ensureBufferSizeToWrite(5+e),this.writeStringHeader(e),ft(A,this.bytes,this.pos),this.pos+=e}encodeObject(A,t){let e=this.extensionCodec.tryToEncode(A,this.context);if(e!=null)this.encodeExtension(e);else if(Array.isArray(A))this.encodeArray(A,t);else if(ArrayBuffer.isView(A))this.encodeBinary(A);else if(typeof A=="object")this.encodeMap(A,t);else throw new Error(\`Unrecognized object: \${Object.prototype.toString.apply(A)}\`)}encodeBinary(A){let t=A.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(\`Too large binary: \${t}\`);let e=uA(A);this.writeU8a(e)}encodeArray(A,t){let e=A.length;if(e<16)this.writeU8(144+e);else if(e<65536)this.writeU8(220),this.writeU16(e);else if(e<4294967296)this.writeU8(221),this.writeU32(e);else throw new Error(\`Too large array: \${e}\`);for(let i of A)this.doEncode(i,t+1)}countWithoutUndefined(A,t){let e=0;for(let i of t)A[i]!==void 0&&e++;return e}encodeMap(A,t){let e=Object.keys(A);this.sortKeys&&e.sort();let i=this.ignoreUndefined?this.countWithoutUndefined(A,e):e.length;if(i<16)this.writeU8(128+i);else if(i<65536)this.writeU8(222),this.writeU16(i);else if(i<4294967296)this.writeU8(223),this.writeU32(i);else throw new Error(\`Too large map object: \${i}\`);for(let d of e){let q=A[d];this.ignoreUndefined&&q===void 0||(this.encodeString(d),this.doEncode(q,t+1))}}encodeExtension(A){if(typeof A.data=="function"){let e=A.data(this.pos+6),i=e.length;if(i>=4294967296)throw new Error(\`Too large extension object: \${i}\`);this.writeU8(201),this.writeU32(i),this.writeI8(A.type),this.writeU8a(e);return}let t=A.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(\`Too large extension object: \${t}\`);this.writeI8(A.type),this.writeU8a(A.data)}writeU8(A){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,A),this.pos++}writeU8a(A){let t=A.length;this.ensureBufferSizeToWrite(t),this.bytes.set(A,this.pos),this.pos+=t}writeI8(A){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,A),this.pos++}writeU16(A){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,A),this.pos+=2}writeI16(A){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,A),this.pos+=2}writeU32(A){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,A),this.pos+=4}writeI32(A){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,A),this.pos+=4}writeF32(A){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,A),this.pos+=4}writeF64(A){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,A),this.pos+=8}writeU64(A){this.ensureBufferSizeToWrite(8),Gt(this.view,this.pos,A),this.pos+=8}writeI64(A){this.ensureBufferSizeToWrite(8),DA(this.view,this.pos,A),this.pos+=8}writeBigUint64(A){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,A),this.pos+=8}writeBigInt64(A){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,A),this.pos+=8}};function pr(n,A){return new NA(A).encodeSharedRef(n)}function bA(n){return\`\${n<0?"-":""}0x\${Math.abs(n).toString(16).padStart(2,"0")}\`}var vs=16,gs=16,JA=class{constructor(A=vs,t=gs){this.hit=0,this.miss=0,this.maxKeyLength=A,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(A){return A>0&&A<=this.maxKeyLength}find(A,t,e){let i=this.caches[e-1];A:for(let d of i){let q=d.bytes;for(let C=0;C<e;C++)if(q[C]!==A[t+C])continue A;return d.str}return null}store(A,t){let e=this.caches[A.length-1],i={bytes:A,str:t};e.length>=this.maxLengthPerKey?e[Math.random()*e.length|0]=i:e.push(i)}decode(A,t,e){let i=this.find(A,t,e);if(i!=null)return this.hit++,i;this.miss++;let d=Gr(A,t,e),q=Uint8Array.prototype.slice.call(A,t,t+e);return this.store(q,d),d}};var hr="array",qA="map_key",mt="map_value",Ls=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new L("The type of key must be string or number but "+typeof n)},Ir=class{constructor(){this.stack=[],this.stackHeadPosition=-1}get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(A){let t=this.getUninitializedStateFromPool();t.type=hr,t.position=0,t.size=A,t.array=new Array(A)}pushMapState(A){let t=this.getUninitializedStateFromPool();t.type=qA,t.readCount=0,t.size=A,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let A={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(A)}return this.stack[this.stackHeadPosition]}release(A){if(this.stack[this.stackHeadPosition]!==A)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(A.type===hr){let e=A;e.size=0,e.array=void 0,e.position=0,e.type=void 0}if(A.type===qA||A.type===mt){let e=A;e.size=0,e.map=void 0,e.readCount=0,e.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},dA=-1,mr=new DataView(new ArrayBuffer(0)),Hs=new Uint8Array(mr.buffer);try{mr.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var It=new RangeError("Insufficient data"),_s=new JA,KA=class n{constructor(A){this.totalPos=0,this.pos=0,this.view=mr,this.bytes=Hs,this.headByte=dA,this.stack=new Ir,this.entered=!1,this.extensionCodec=A?.extensionCodec??U.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.rawStrings=A?.rawStrings??!1,this.maxStrLength=A?.maxStrLength??4294967295,this.maxBinLength=A?.maxBinLength??4294967295,this.maxArrayLength=A?.maxArrayLength??4294967295,this.maxMapLength=A?.maxMapLength??4294967295,this.maxExtLength=A?.maxExtLength??4294967295,this.keyDecoder=A?.keyDecoder!==void 0?A.keyDecoder:_s,this.mapKeyConverter=A?.mapKeyConverter??Ls}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=dA,this.stack.reset()}setBuffer(A){let t=uA(A);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(A){if(this.headByte===dA&&!this.hasRemaining(1))this.setBuffer(A);else{let t=this.bytes.subarray(this.pos),e=uA(A),i=new Uint8Array(t.length+e.length);i.set(t),i.set(e,t.length),this.setBuffer(i)}}hasRemaining(A){return this.view.byteLength-this.pos>=A}createExtraByteError(A){let{view:t,pos:e}=this;return new RangeError(\`Extra \${t.byteLength-e} of \${t.byteLength} byte(s) found at buffer[\${A}]\`)}decode(A){if(this.entered)return this.clone().decode(A);try{this.entered=!0,this.reinitializeState(),this.setBuffer(A);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(A){if(this.entered){yield*this.clone().decodeMulti(A);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(A);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(A){if(this.entered)return this.clone().decodeAsync(A);try{this.entered=!0;let t=!1,e;for await(let C of A){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(C);try{e=this.doDecodeSync(),t=!0}catch(v){if(!(v instanceof RangeError))throw v}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return e}let{headByte:i,pos:d,totalPos:q}=this;throw new RangeError(\`Insufficient data in parsing \${bA(i)} at \${q} (\${d} in the current buffer)\`)}finally{this.entered=!1}}decodeArrayStream(A){return this.decodeMultiAsync(A,!0)}decodeStream(A){return this.decodeMultiAsync(A,!1)}async*decodeMultiAsync(A,t){if(this.entered){yield*this.clone().decodeMultiAsync(A,t);return}try{this.entered=!0;let e=t,i=-1;for await(let d of A){if(t&&i===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(d),e&&(i=this.readArraySize(),e=!1,this.complete());try{for(;yield this.doDecodeSync(),--i!==0;);}catch(q){if(!(q instanceof RangeError))throw q}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){A:for(;;){let A=this.readHeadByte(),t;if(A>=224)t=A-256;else if(A<192)if(A<128)t=A;else if(A<144){let i=A-128;if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A<160){let i=A-144;if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else{let i=A-160;t=this.decodeString(i,0)}else if(A===192)t=null;else if(A===194)t=!1;else if(A===195)t=!0;else if(A===202)t=this.readF32();else if(A===203)t=this.readF64();else if(A===204)t=this.readU8();else if(A===205)t=this.readU16();else if(A===206)t=this.readU32();else if(A===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(A===208)t=this.readI8();else if(A===209)t=this.readI16();else if(A===210)t=this.readI32();else if(A===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(A===217){let i=this.lookU8();t=this.decodeString(i,1)}else if(A===218){let i=this.lookU16();t=this.decodeString(i,2)}else if(A===219){let i=this.lookU32();t=this.decodeString(i,4)}else if(A===220){let i=this.readU16();if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else if(A===221){let i=this.readU32();if(i!==0){this.pushArrayState(i),this.complete();continue A}else t=[]}else if(A===222){let i=this.readU16();if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A===223){let i=this.readU32();if(i!==0){this.pushMapState(i),this.complete();continue A}else t={}}else if(A===196){let i=this.lookU8();t=this.decodeBinary(i,1)}else if(A===197){let i=this.lookU16();t=this.decodeBinary(i,2)}else if(A===198){let i=this.lookU32();t=this.decodeBinary(i,4)}else if(A===212)t=this.decodeExtension(1,0);else if(A===213)t=this.decodeExtension(2,0);else if(A===214)t=this.decodeExtension(4,0);else if(A===215)t=this.decodeExtension(8,0);else if(A===216)t=this.decodeExtension(16,0);else if(A===199){let i=this.lookU8();t=this.decodeExtension(i,1)}else if(A===200){let i=this.lookU16();t=this.decodeExtension(i,2)}else if(A===201){let i=this.lookU32();t=this.decodeExtension(i,4)}else throw new L(\`Unrecognized type byte: \${bA(A)}\`);this.complete();let e=this.stack;for(;e.length>0;){let i=e.top();if(i.type===hr)if(i.array[i.position]=t,i.position++,i.position===i.size)t=i.array,e.release(i);else continue A;else if(i.type===qA){if(t==="__proto__")throw new L("The key __proto__ is not allowed");i.key=this.mapKeyConverter(t),i.type=mt;continue A}else if(i.map[i.key]=t,i.readCount++,i.readCount===i.size)t=i.map,e.release(i);else{i.key=null,i.type=qA;continue A}}return t}}readHeadByte(){return this.headByte===dA&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=dA}readArraySize(){let A=this.readHeadByte();switch(A){case 220:return this.readU16();case 221:return this.readU32();default:{if(A<160)return A-144;throw new L(\`Unrecognized array type byte: \${bA(A)}\`)}}}pushMapState(A){if(A>this.maxMapLength)throw new L(\`Max length exceeded: map length (\${A}) > maxMapLengthLength (\${this.maxMapLength})\`);this.stack.pushMapState(A)}pushArrayState(A){if(A>this.maxArrayLength)throw new L(\`Max length exceeded: array length (\${A}) > maxArrayLength (\${this.maxArrayLength})\`);this.stack.pushArrayState(A)}decodeString(A,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(A,t):this.decodeBinary(A,t)}decodeUtf8String(A,t){if(A>this.maxStrLength)throw new L(\`Max length exceeded: UTF-8 byte length (\${A}) > maxStrLength (\${this.maxStrLength})\`);if(this.bytes.byteLength<this.pos+t+A)throw It;let e=this.pos+t,i;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(A)?i=this.keyDecoder.decode(this.bytes,e,A):i=Ct(this.bytes,e,A),this.pos+=t+A,i}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===qA:!1}decodeBinary(A,t){if(A>this.maxBinLength)throw new L(\`Max length exceeded: bin length (\${A}) > maxBinLength (\${this.maxBinLength})\`);if(!this.hasRemaining(A+t))throw It;let e=this.pos+t,i=this.bytes.subarray(e,e+A);return this.pos+=t+A,i}decodeExtension(A,t){if(A>this.maxExtLength)throw new L(\`Max length exceeded: ext length (\${A}) > maxExtLength (\${this.maxExtLength})\`);let e=this.view.getInt8(this.pos+t),i=this.decodeBinary(A,t+1);return this.extensionCodec.decode(i,e,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let A=this.view.getUint8(this.pos);return this.pos++,A}readI8(){let A=this.view.getInt8(this.pos);return this.pos++,A}readU16(){let A=this.view.getUint16(this.pos);return this.pos+=2,A}readI16(){let A=this.view.getInt16(this.pos);return this.pos+=2,A}readU32(){let A=this.view.getUint32(this.pos);return this.pos+=4,A}readI32(){let A=this.view.getInt32(this.pos);return this.pos+=4,A}readU64(){let A=pt(this.view,this.pos);return this.pos+=8,A}readI64(){let A=BA(this.view,this.pos);return this.pos+=8,A}readU64AsBigInt(){let A=this.view.getBigUint64(this.pos);return this.pos+=8,A}readI64AsBigInt(){let A=this.view.getBigInt64(this.pos);return this.pos+=8,A}readF32(){let A=this.view.getFloat32(this.pos);return this.pos+=4,A}readF64(){let A=this.view.getFloat64(this.pos);return this.pos+=8,A}};function Er(n,A){return new KA(A).decode(n)}var fA=class n{constructor(A,t,e,i,d){this.mediaIds=A;this.sequenceNumber=t;this.timeStamp=e;this.isEndOfSpurt=i;this.payload=d}static parse(A){let t;try{t=Er(A)}catch{return D("not valid msgpack")}if(!Array.isArray(t))return D("container must be an array");if(t.length<6)return D("missing fields");if(t[0]!==1)return D("unknown type");if(!Array.isArray(t[1]))return D("media ids must be an array");if(!t[1].every(B=>typeof B=="number"))return D("media ids must be numbers");if(typeof t[2]!="number")return D("sequence number must be a number");if(typeof t[3]!="number")return D("timestamp must be a number");if(typeof t[4]!="number")return D("flags must be a number");let e=t[1],i=t[2]>>>0,d=t[3]>>>0,C=(t[4]&1)!==0,v=t[t.length-1];return v instanceof Uint8Array?et(new n(e,i,d,C,v)):D("payload must be bytes")}toBytes(){let A=Number(this.isEndOfSpurt),t=[1,this.mediaIds,this.sequenceNumber>>>0,this.timeStamp>>>0,A,this.payload];return new Uint8Array(pr(t,{forceFloat32:!0,ignoreUndefined:!0}))}};var OA=class{constructor(A,t){this.sampleRate=A;this.wasm=t;this.sequenceNumber=Math.random()*Math.pow(2,32)>>0;this.timestamp=Math.random()*Math.pow(2,32)>>0;this.connections=[];this.monitoring=!1;this.active=!1;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0};this.encoder=new t.Encoder(A,15,!0,J.VadPreload),this.encoder.complexity=navigator.hardwareConcurrency>=4?6:4,this.information=ct(this.wasm),this.outBuffer=T(this.wasm,"u8",1270),Zj(this.information,1)}setVad(A){this.encoder.set_volume_gate(A.volumeGate!==void 0,A.volumeGate?.attackThreshold??0,A.volumeGate?.releaseThreshold??0),this.encoder.set_speech_detection(A.voiceActivity!==void 0,A.voiceActivity?.attackThreshold??0,A.voiceActivity?.releaseThreshold??0)}setMedias(A){this.connections=A.filter(({mediaIds:t})=>t.length>0)}close(){dt(this.wasm,this.information),tA(this.wasm,this.outBuffer),this.encoder.delete()}encode(A){for(this.encoder.push(A.byteOffset,this.information.values.byteOffset);;){let t=this.encoder.pop(this.connections.length===0?0:this.outBuffer.byteOffset,this.outBuffer.length);if(t===0)break;if(t<0){ot(\`failed encoding packet: \${t}\`);return}if(this.timestamp=this.timestamp+1800>>0,t===1)continue;this.sequenceNumber=this.sequenceNumber+1>>0;let e=this.active&&!this.encoder.active;this.active=this.encoder.active,this.monitoring=this.connections.some(i=>i.id===0);for(let i of this.connections){if(this.monitoring&&i.id!==0)continue;let d=new fA(i.mediaIds,this.sequenceNumber,this.timestamp,e,this.outBuffer.subarray(0,t));aA(globalThis,["sendPacket",{connectionId:i.id,packet:d.toBytes()}])}}}onMessage(A){let[t,e]=A;switch(t){case"captureSetVad":this?.setVad(e);break;case"captureSetMedias":this?.setMedias(e.connections);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){return{sequenceNumber:this.sequenceNumber,timestamp:this.timestamp,connections:this.connections.map(A=>\`\${A.id} => \${A.mediaIds.join(",")}\`),active:this.active,monitoring:this.monitoring,information:{active:Wj(this.information),speechProbability:Qj(this.information),rmsDBFS:zj(this.information),volume:Xj(this.information)},encoder:{sample_rate:this.encoder.sample_rate,fec_packet_loss:this.encoder.fec_packet_loss,voip:this.encoder.voip,vad_preload:this.encoder.vad_preload,complexity:this.encoder.complexity,speech_probability:this.encoder.speech_probability,rms_dbfs:this.encoder.rms_dbfs,active:this.encoder.active,speech_detection_enabled:this.encoder.speech_detection_enabled,speech_detection_going_active:this.encoder.speech_detection_going_active,speech_detection_going_inactive:this.encoder.speech_detection_going_inactive,volume_gate_enabled:this.encoder.volume_gate_enabled,volume_gate_going_active:this.encoder.volume_gate_going_active,volume_gate_going_inactive:this.encoder.volume_gate_going_inactive}}}},PA=class{constructor(A){this.wasm=A;this.medias=new Map;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0,numberTicksWithAudio:0};this.largestIndex=-1;this.decoders=T(this.wasm,"u32",J.MaxNumberOfDecoders),this.information=kt(this.wasm,J.MaxNumberOfDecoders),Oj(this.information,[1,1])}close(){ut(this.wasm,this.information);for(let{decoder:A}of this.medias.values())A.delete()}receivePacket(A,t){this.stats.numberPackets++;let e=fA.parse(t);if(e.type==="Failure"){this.stats.numberPacketError++;let i=Array.from(t).map(d=>d.toString(16).padStart(2,"0")).join("");console.error(\`failed decoding audio packet; reason: \${e.reason}, connection: \${A}, dump: \${i}\`);return}for(let i of e.value.mediaIds){let d=this.medias.get(xA({connectionId:A,mediaId:i}));if(d===void 0){this.stats.numberPacketsMediaNotFound++;continue}d.lastPacket=t;let q=T(this.wasm,"u8",e.value.payload.length);q.set(e.value.payload),d.decoder.push(e.value.sequenceNumber,e.value.timeStamp,e.value.isEndOfSpurt,q.byteOffset,q.length)}}insertMedia(A,t,e,i=[1,1]){let d=xA({connectionId:t,mediaId:e}),q=new this.wasm.Decoder;this.medias.set(d,{index:A,decoder:q,lastPacket:void 0}),this.decoders[A]=q.$$.ptr,this.largestIndex=Math.max(this.largestIndex,A),Tj(this.information,A,i),Rj(this.information,A,0),Sj(this.information,A,0)}removeMedia(A,t,e){let i=xA({connectionId:t,mediaId:e}),d=this.medias.get(i);if(!(d===void 0||d.index!==A)&&(this.medias.delete(i),wj(this.information,A,0),this.decoders[A]=0,d.decoder.delete(),A===this.largestIndex)){for(A=A-1;A>=0&&this.decoders[A]===0;A--);this.largestIndex=A}}decode(A){return{hasAudio:this.wasm.pop_many(this.decoders.byteOffset,this.information.values.byteOffset,this.largestIndex+1,A.byteOffset)}}onMessage(A){let[t,e]=A;switch(t){case"playbackReceivePacket":this.receivePacket(e.connectionId,e.packet);break;case"playbackUpdateMedias":for(let{index:i,connectionId:d,mediaId:q}of e.removed)this.removeMedia(i,d,q);for(let{index:i,connectionId:d,mediaId:q,volume:C}of e.added)this.insertMedia(i,d,q,C);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){let A=[];for(let[t,e]of this.medias){let i=at(t);A.push({index:e.index,connectionId:i.connectionId,mediaId:i.mediaId,rmsDBFS:Pj(this.information,e.index),volume:Mj(this.information,e.index),voicedBlocks:Vj(this.information,e.index),silentBlocks:Uj(this.information,e.index),time:e.decoder.time,consecutive_silence:e.decoder.consecutive_silence,last_voiced_time_point:e.decoder.last_voiced_time_point,sequence_number:e.decoder.sequence_number,packetsSeen:e.decoder.packets_seen,packetsInvalid:e.decoder.packets_invalid,packetsTooLate:e.decoder.packets_too_late,packetsTooEarly:e.decoder.packets_too_early,packetsRepeated:e.decoder.packets_repeated,packetsProcessed:e.decoder.packets_processed,packetsLost:e.decoder.packets_lost,rewinds:e.decoder.rewinds,cacheLength:e.decoder.cache_length,lastPacket:Yj(e.lastPacket)})}return{largestIndex:this.largestIndex,globalVolume:Kj(this.information),decoders:A}}};var Lt=Fn($t()),Ft=(0,Lt.default)(),vt,gt;globalThis.addEventListener("message",$r);async function $r(n){let A=n.data,[t,e]=A;switch(t){case"captureInit":e.workletPort.onmessage=$r,vt=new Fr(e.sampleRate,await Ft);break;case"playbackInit":e.workletPort.onmessage=$r,gt=new vr(await Ft);break;case"close":globalThis.close();break}vt?.onMessage(A),gt?.onMessage(A)}var Fr=class extends OA{constructor(t,e){super(t,e);this.id=-1;this.samples=fr(this.wasm,t,2+J.VadPreload+J.AdditionalCaptureBlocks,!1),aA(globalThis,["captureReady",{sampleBuffer:this.samples,informationBuffer:this.information}])}close(){super.close(),Cr(this.wasm,this.samples)}onMessage(t){super.onMessage(t);let[e,i]=t;e==="captureTick"&&this.tick(i.id)}tick(t){for(;this.id<t;this.id+=1)this.encode(kr(this.samples,this.id%this.samples.length))}dump(){return{type:"shared capture worker",id:this.id,sampleRate:this.samples.sampleRate,stereo:this.samples.stereo,length:this.samples.length,...super.dump()}}},vr=class extends PA{constructor(A){super(A);let t=2+J.AdditionalPlaybackBlocks;this.sampleBuffer=fr(A,48e3,t,!0),this.sampleBuffer.samples.fill(0),this.prefill=t-2;for(let e=0;e<this.prefill;e++)ur(this.sampleBuffer,e,{id:e});this.id=this.prefill,aA(globalThis,["playbackReady",{sampleBuffer:this.sampleBuffer,informationBuffer:this.information}])}close(){super.close(),Cr(this.wasm,this.sampleBuffer)}onMessage(A){super.onMessage(A);let[t,e]=A;t==="playbackTick"&&this.tick(e.id)}tick(A){for(this.stats.numberTicks++;this.id<A+this.prefill;this.id++){let t=this.id%this.sampleBuffer.length,{hasAudio:e}=this.decode(kr(this.sampleBuffer,t));e&&(this.stats.numberTicksWithAudio++,ur(this.sampleBuffer,t,{id:this.id}))}}dump(){return{type:"shared playback worker",id:this.id,prefill:this.prefill,sampleRate:this.sampleBuffer.sampleRate,stereo:this.sampleBuffer.stereo,...super.dump()}}};})();
|
|
3236
|
+
`});var B0,K0=p(()=>{B0='"use strict";(()=>{var E=Object.defineProperty;var F=(e,t)=>{for(var r in t)E(e,r,{get:t[r],enumerable:!0})};var l={};F(l,{AdditionalCaptureBlocks:()=>D,AdditionalPlaybackBlocks:()=>C,ClockJumpCheckInterval:()=>j,ClockJumpThreshold:()=>$,ConnectInterval:()=>X,ConnectTimeout:()=>Q,DefaultRefreshRate:()=>V,DefaultVideoCodec:()=>ee,HealthCheckTimeout:()=>W,MainConnectionPingInterval:()=>H,MaxNumberOfDecoders:()=>_,MinDBFs:()=>k,MinTokenLifetime:()=>Y,MinTokenRefreshInterval:()=>K,PlaybackPreload:()=>L,RenderQuantumSize:()=>N,VadPreload:()=>O,WebRtcAnswerTimeout:()=>Z,WebRtcIceTimeout:()=>z,WebRtcMaxNegotiationAttempts:()=>q,WebRtcStatsSnapshotInterval:()=>J,WebRtcTimeout:()=>G});var C=3,D=3,L=3,V=250,O=3,_=512,N=128,k=-758.596,W=1e4,j=1e3,$=1e4,H=3e3,J=1e3,z=3e3,G=1e4,Z=1e4,q=3,Q=5e3,Y=6e4,K=5e3,X=[0,100,200,200,500],ee="H264";function p(e,t,r){return e.postMessage(t,r)}function te(e){return e.sampleRate*.02*(e.stereo?2:1)}function f(e,t){let r=te(e),n=r*t,s=n+r;return e.samples.subarray(n,s)}function S(e,t){return{id:e.headers[t]}}function I(e,t,r){e.headers[t]=r.id}var re;(e=>{let t;(r=>(r[r.InvalidPassword=-1]="InvalidPassword",r[r.Unknown=0]="Unknown",r[r.Unencrypted=1]="Unencrypted",r[r.Encrypted=2]="Encrypted"))(t=e.PeerCipherStatus||={})})(re||={});var{Deno:U}=globalThis,ne=typeof U?.noColor=="boolean"?U.noColor:!1,se=!ne;function h(e,t){return{open:`\\x1B[${e.join(";")}m`,close:`\\x1B[${t}m`,regexp:new RegExp(`\\\\x1b\\\\[${t}m`,"g")}}function b(e,t){return se?`${t.open}${e.replace(t.regexp,t.open)}${t.close}`:e}function m(e){return b(e,h([0],0))}function T(e){return b(e,h([1],22))}function oe(e){return b(e,h([2],22))}var we=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),ae=new Date,d=(e=>(e[e.CRITICAL=0]="CRITICAL",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG",e))(d||{}),P={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},ie={4:oe,3:m,2:m,1:T,0:T};function ce({message:e}){return String(e)}function B(e){return JSON.stringify({timestamp:e.date.toISOString(),level:d[e.level],message:e.message,extra:e.extra})}function w(e){function t(c,i){return[Math.floor(c/i),c%i]}function r(){let c,i=e.date.valueOf()-ae.valueOf();[i,c]=t(i,1e3);let[M,R]=t(i,60);return`${M.toString().padStart(4,"0")}:${R.toString().padStart(2,"0")}.${c.toString().padStart(3,"0")}`}function n(){return e.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(e.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(e.extra)}let s=P[e.level],a=e.logger.name!==void 0?`@${e.logger.name}`:"";return`${m(r())}${a} ${s} ${ie[e.level](String(e.message))}${n()}`}function le(e){let t=`[${e.date.toISOString()}]`,r=`[${d[e.level]}]`,n=e.logger.name!==void 0?`[${e.logger.name}] `:"",s=P[e.level];return`${t} ${s} ${r.padEnd(7," ")} ${n}${e.message}`}function ue(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var A=class{static sparse=ce;static json=B;static pretty=w;static structured=le;static default=ue()?w:B;constructor(){}};var fe=class{formatter;consoleObject;filter;constructor(e=A.default,t=4,r=console){this.filter=t,this.formatter=e,this.consoleObject=r}handle(e){let t=this.formatter(e);switch(e.level){case 0:case 1:this.consoleObject.error(t);break;case 2:this.consoleObject.warn(t);break;case 3:this.consoleObject.info(t);break;case 4:this.consoleObject.debug(t);break}}};var o=class{#e;sinks;filter;parent;get name(){return this.#e}constructor(e,t=void 0,r=[],n=void 0){this.#e=t,this.sinks=r,this.filter=e,this.parent=n}log(e,t,r=void 0){let n={date:new Date,level:e,logger:this,message:t,extra:r};this.filter<e||this.insert(n)}insert(e){if(!(this.filter<e.level)){for(let t of this.sinks)t.filter>=e.level&&t.handle(e);this.parent!==void 0&&this.parent.insert(e)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},u=globalThis[Symbol.for("odin-global-logger")]??=new o(3,void 0,[new fe]),de=o.prototype.log.bind(u,1),pe=o.prototype.log.bind(u,2),me=o.prototype.log.bind(u,3),he=o.prototype.log.bind(u,4),Pe=o.prototype.log.bind(u);var x=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.blocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"init":this.state=new g(s.sampleBuffer,s.workerPort,sampleRate*.02);break;case"close":this.alive=!1;break;case"dump":s.result.postMessage(this.dump());break}}process(r,n,s){if(this.state===void 0||r.length<1||r[0].length<1)return this.alive;let a=this.state.fill(0,r[0][0]);return this.state.offset===this.state.length&&(this.blocks+=1,this.state.flush(),this.state.fill(a,r[0][0])),this.alive}dump(){return{type:"shared capture worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,blocks:this.blocks}}},y=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.silenceBlocks=0;this.voiceBlocks=0;this.totalBlocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"close":this.alive=!1;break;case"init":this.state=new v(s.workerPort,s.sampleBuffer,sampleRate*.02);break;case"dump":s.result.postMessage(this.dump());break}n==="close"&&(this.alive=!1)}process(r,n,s){if(this.state===void 0||n.length<1||n[0].length<2)return this.alive;let a=this.state.fill(0,n[0][0],n[0][1]);return a<l.RenderQuantumSize&&(this.totalBlocks+=1,this.state.next(),this.state.hasVoice?this.voiceBlocks+=1:this.silenceBlocks+=1,this.state.fill(a,n[0][0],n[0][1])),this.alive}dump(){return{type:"shared playback worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,hasVoice:this.state?.hasVoice??!1,silenceBlocks:this.silenceBlocks,voiceBlocks:this.voiceBlocks,totalBlocks:this.totalBlocks}}},g=class{constructor(t,r,n){this.samples=t;this.port=r;this.length=n;this.id=0,this.offset=0,this.entry=f(this.samples,0)}fill(t,r){let n=Math.min(r.length-t,this.length-this.offset);return this.entry.set(r.subarray(t,t+n),this.offset),this.offset+=n,t+n}flush(){this.id+=1,p(this.port,["captureTick",{id:this.id}]);let t=this.id%this.samples.length;this.entry=f(this.samples,t),I(this.samples,t,{id:this.id}),this.offset=0}},v=class{constructor(t,r,n){this.port=t;this.samples=r;this.length=n;this.id=-1,this.offset=0,this.entry=void 0,this.next()}get hasVoice(){return this.entry!==void 0}fill(t,r,n){let s=Math.min(l.RenderQuantumSize-t,this.length-this.offset);return this.entry!==void 0&&(r.set(this.entry.subarray(this.offset,this.offset+s),t),n.set(this.entry.subarray(this.offset+this.length,this.offset+this.length+s),t)),this.offset+=s,t+s}next(){this.id+=1;let t=this.id%this.samples.length,{id:r}=S(this.samples,t);this.entry=this.id===r?f(this.samples,t):void 0,this.offset=0,p(this.port,["playbackTick",{id:this.id}])}};registerProcessor("OdinCaptureProcessor",x);registerProcessor("OdinPlaybackProcessor",y);})();\n'});var O0={};cx(O0,{createCaptureWorker:()=>tF,createPlaybackWorker:()=>DF});function tF(t,x,A,F,r=C.DefaultRefreshRate){return rF.enqueue(async()=>{let[D,e]=await jx(j0,B0,t,"OdinCaptureProcessor",{channelCount:1,numberOfInputs:1,numberOfOutputs:0});return C0.create(t,x,A,D,e,F)})}async function DF(t,x=C.DefaultRefreshRate){if(t.sampleRate!==48e3)throw new Error("playback sample rate must be 48kHz ");let[A,F]=await jx(j0,B0,t,"OdinPlaybackProcessor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2]});return v0.create(t,A,F)}var J0,rF,v0,C0,M0=p(()=>{"use strict";J0=require("@4players/odin-common");o();mx();P0();K0();rF=new J0.Strand;v0=class t extends tx{constructor(A,F,r,D){super(A,F,r);this.information=D}static async create(A,F,r){let{port1:D,port2:e}=new MessageChannel;l(F,["playbackInit",{workletPort:D}],[D]);let{informationBuffer:j,sampleBuffer:v}=await Ax(F,"playbackReady");return D0(j,[1,1]),l(r.port,["init",{sampleBuffer:v,workerPort:e}],[e]),new t(A,r,F,j)}getActivity(A){let F=this.medias.get(h(A));if(F===void 0)return;let r=c0(this.information,F.index);return r===0?y:{isSilent:!1,rmsDBFS:r}}getJitterStats(A){}setGlobalVolume(A){D0(this.information,A)}setVolume(A,F){let r=this.medias.get(h(A));r!==void 0&&d0(this.information,r.index,F)}_GetFreeIndex(){let A=super._GetFreeIndex();if(A!==void 0)return A;if(this.information.length>this.medias.size)return this.medias.size}},C0=class t extends Dx{constructor(A,F,r,D,e,j){super(A,F,r,D,j);this.information=e}static async create(A,F,r,D,e,j){let{port1:v,port2:E}=new MessageChannel;l(D,["captureInit",{sampleRate:A.sampleRate,workletPort:v}],[v]);let{sampleBuffer:u,informationBuffer:c}=await Ax(D,"captureReady");return l(e.port,["init",{workerPort:E,sampleBuffer:u}],[E]),new t(e,D,F,r,c,j)}get activity(){return{isSilent:!p0(this.information),rmsDBFS:q0(this.information)}}get speechProbability(){return h0(this.information)}setVolume(A){m0(this.information,A)}}});var E0,T0=p(()=>{E0=`"use strict";(()=>{var oe=Object.create;var WA=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var ke=Object.getOwnPropertyNames;var ue=Object.getPrototypeOf,ce=Object.prototype.hasOwnProperty;var de=(n,A)=>()=>(A||n((A={exports:{}}).exports,A),A.exports),qe=(n,A)=>{for(var t in A)WA(n,t,{get:A[t],enumerable:!0})},fe=(n,A,t,e)=>{if(A&&typeof A=="object"||typeof A=="function")for(let l of ke(A))!ce.call(n,l)&&l!==t&&WA(n,l,{get:()=>A[l],enumerable:!(e=ae(A,l))||e.enumerable});return n};var Ce=(n,A,t)=>(t=n!=null?oe(ue(n)):{},fe(A||!n||!n.__esModule?WA(t,"default",{value:n,enumerable:!0}):t,n));var Hj=de((Lj,JA)=>{"use strict";var er=(()=>{var n=globalThis.document?.currentScript?.src;return async function(A={}){var t,e=A,l=!!globalThis.window,d=!!globalThis.WorkerGlobalScope,q=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer",p=[],F="./this.program";d&&(n=self.location.href);var D="",KA,O;if(l||d){try{D=new URL(".",n).href}catch{}d&&(O=j=>{var r=new XMLHttpRequest;return r.open("GET",j,!1),r.responseType="arraybuffer",r.send(null),new Uint8Array(r.response)}),KA=async j=>{var r=await fetch(j,{credentials:"same-origin"});if(r.ok)return r.arrayBuffer();throw new Error(r.status+" : "+r.url)}}var ir=console.log.bind(console),oA=console.error.bind(console),or,ar=!1;function Nj(j){for(var r=0,s=j.length,i=new Uint8Array(s),o;r<s;++r)o=j.charCodeAt(r),i[r]=~o>>8&o;return i}var kr,ur,cr=!1;function Bj(){var j=Ur.buffer;U=new Int8Array(j),aA=new Int16Array(j),e.HEAPU8=_=new Uint8Array(j),Z=new Uint16Array(j),e.HEAP32=kA=new Int32Array(j),e.HEAPU32=m=new Uint32Array(j),e.HEAPF32=fr=new Float32Array(j),Cr=new Float64Array(j),qr=new BigInt64Array(j),Gr=new BigUint64Array(j)}function bj(){if(e.preRun)for(typeof e.preRun=="function"&&(e.preRun=[e.preRun]);e.preRun.length;)Sj(e.preRun.shift());pr(hr)}function Jj(){cr=!0,rA.v()}function Kj(){if(e.postRun)for(typeof e.postRun=="function"&&(e.postRun=[e.postRun]);e.postRun.length;)Vj(e.postRun.shift());pr(Ir)}function OA(j){e.onAbort?.(j),j="Aborted("+j+")",oA(j),ar=!0,j+=". Build with -sASSERTIONS for more info.";var r=new WebAssembly.RuntimeError(j);throw ur?.(r),r}var dr;function Oj(){return Nj(\`\\0asm\\0\\0\\0\\x8D9\\\`\\x7F\\x7F\\\`\\x7F\\0\\\`\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\0\\0\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`||\\\`\\x7F}\\\`}}\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F~\\\`\\x7F\\x7F}\\\`\\x7F}}\\\`\\x7F\\x7F}}\\0\\\`
|
|
3237
3237
|
\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`|}\\\`|\\x7F|\\\`\\x7F\\x7F}\\0\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\` \\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\f\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\b\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F|\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F|}\\\`\\0\\x7F\\\`\\x7F\\x7F\\x7F~~\\0\\\`\\r\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F~\\x7F\\x7F\\x7F\\\`\\x7F\\x7F|\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\x7F\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F}}\\x7F\\x7F\\x7F\\x7F\\0\\\`~\\x7F\\x7F\\\` \\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\\`||\\x7F|\\\`|||\\\`\\x7F\\x7F\\x7F|\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\v\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x07\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\\`\\f\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`}\\x7F\\x7F\\\`|\\x7F\\x7F\\\`\\x7F\\x7F\\x7F}\\\`\\x7F}\\x7F\\0\\\`\\x7F\\x7F}\\x7F\\x7F\\x7F}\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F}\\x7F\\x7F\\\`\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\x7F\\0\\\`\\x7F\\x7F\\x7F}}\\0yaa\\0ab\\0ac\\0ad\\0ae\\0af\\0!ag\\0ah\\0 ai\\0aj\\0\\bak\\0"al\\0am\\0an\\0ao\\0\\0ap\\0#aq\\0\\0ar\\0
|
|
3238
3238
|
as\\0at\\0\\xBB\\xB9\\0\\0\\f$\\f\\x07\\0\\f\\x07\\f\\x07\\0%& \\0
|
|
3239
3239
|
\\0\\x07\\v\\0'\\0\\0(\\0\\f\\0)*+\\x07\\v\\x07\\0
|
|
@@ -6422,7 +6422,7 @@ K\\xE08\\xDF\\0}\\xBC\\x8A\\x1B\\f\\xE5\\xFF\\xCF\\xE8?\\x9F\\xFFFq\\0\\x88\\xB
|
|
|
6422
6422
|
|
|
6423
6423
|
|
|
6424
6424
|
\\x07\\0\\0 \\v\\0\\0 \\v\\0\\0\\v\\0\\0\\0\\0\\0A\\xC1\\x9D\\v!\\0\\0\\0\\0\\0\\0\\0\\0\\0\\v\\r\\0\\r\\0\\0\\0 \\0\\0\\0 \\0\\0\\0\\0A\\xFB\\x9D\\v\\f\\0A\\x87\\x9E\\v\\0\\0\\0\\0\\0\\0\\0\\0 \\f\\0\\0\\0\\0\\0\\f\\0\\0\\f\\0A\\xB5\\x9E\\v\\0A\\xC1\\x9E\\v\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0A\\xEF\\x9E\\v\\0A\\xFB\\x9E\\v\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0A\\xB2\\x9F\\v\\0\\0\\0\\0\\0\\0\\0\\0\\0 \\0A\\xE3\\x9F\\v\\0A\\xEF\\x9F\\v\\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0A\\x9D\\xA0\\v\\0A\\xA9\\xA0\\v\\xB3 \\0\\0\\0\\0\\0\\0\\0\\0 \\0\\0\\0\\0\\0\\0\\0\\0\\x000123456789ABCDEF\\0\\0X\\0NSt3__214__shared_countE\\0\\0\\0\\0\\x84\\0\\x8C\\0\\0\\0\\0\\0\\0\\0\\0P\\0\\0\\0\\0\\0NSt3__219__shared_weak_countE\\0\\0\\0(\\0\\xB8\\0\\xC8\\0N10__cxxabiv116__shim_type_infoE\\0\\0\\0\\0(\\0\\xE8\\0\\xAC\\0N10__cxxabiv117__class_type_infoE\\0\\0\\0(\\0\\0\\xAC\\0N10__cxxabiv117__pbase_type_infoE\\0\\0\\0(\\0H\\0\\f\\0N10__cxxabiv119__pointer_type_infoE\\0(\\0x\\0\\xAC\\0N10__cxxabiv120__function_type_infoE\\0\\0\\0\\0(\\0\\xAC\\0\\f\\0N10__cxxabiv129__pointer_to_member_type_infoE\\0\\0\\0\\0\\0\\0\\0\\xF8\\0\\\`\\0\\0\\0a\\0\\0\\0b\\0\\0\\0c\\0\\0\\0d\\0\\0\\0(\\0\\0\\xAC\\0N10__cxxabiv123__fundamental_type_infoE\\0\\xE4\\x004\\0v\\0Dn\\0\\0\\0\\0\\xE4\\0D\\0b\\0\\0\\0\\xE4\\0P\\0c\\0\\0\\0\\xE4\\0\\\\\\0h\\0\\0\\0\\xE4\\0h\\0a\\0\\0\\0\\xE4\\0t\\0s\\0\\0\\0\\xE4\\0\\x80\\0t\\0\\0\\0\\xE4\\0\\x8C\\0i\\0\\0\\0\\xE4\\0\\x98\\0j\\0\\0\\0\\xE4\\0\\xA4\\0l\\0\\0\\0\\xE4\\0\\xB0\\0m\\0\\0\\0\\xE4\\0\\xBC\\0x\\0\\0\\0\\xE4\\0\\xC8\\0y\\0\\0\\0\\xE4\\0\\xD4\\0f\\0\\0\\0\\xE0\\0\\xE8\\0\\0\\0\\0\\0\\xCC\\0Pf\\0\\0\\xE4\\0\\xF4\\0d\\0\\0\\0\\0\\0\\0\\0\\xDC\\0\\\`\\0\\0\\0e\\0\\0\\0b\\0\\0\\0c\\0\\0\\0f\\0\\0\\0g\\0\\0\\0h\\0\\0\\0i\\0\\0\\0\\0\\0\\0\\0H\\0\\\`\\0\\0\\0j\\0\\0\\0b\\0\\0\\0c\\0\\0\\0f\\0\\0\\0k\\0\\0\\0l\\0\\0\\0m\\0\\0\\0(\\0T\\0\\xDC\\0N10__cxxabiv120__si_class_type_infoE\\0\\0\\0\\0\\0\\0\\0\\0\\xA4\\0\\\`\\0\\0\\0n\\0\\0\\0b\\0\\0\\0c\\0\\0\\0f\\0\\0\\0o\\0\\0\\0p\\0\\0\\0q\\0\\0\\0(\\0\\xB0\\0\\xDC\\0N10__cxxabiv121__vmi_class_type_infoE\\0\\0\\0\\0\\0\\0\\0<\\0\\\`\\0\\0\\0r\\0\\0\\0b\\0\\0\\0c\\0\\0\\0s\\0\\0\\0\\0\\0\\0\\0<\\0F\\0\\0\\0t\\0\\0\\0u\\0\\0\\0\\0\\0\\0St9exception\\0\\0\\0\\0(\\0,\\0\\b\\0St9bad_alloc\\0\\0\\0\\0(\\0H\\0 \\0St20bad_array_new_length\\0\\0\\0\\0\\0\\0\\0\\0x\\0H\\0\\0\\0v\\0\\0\\0w\\0\\0\\0(\\0\\x84\\0\\b\\0St11logic_error\\0\\0\\0\\0\\0\\xA8\\0H\\0\\0\\0x\\0\\0\\0w\\0\\0\\0(\\0\\xB4\\0x\\0St12length_error\\0\\0\\0\\0\\0\\0\\xD0\\0St9type_info\\0A\\xE0\\xA9\\v\\0A\\xEC\\xA9\\vX\\0A\\x84\\xAA\\v\\vY\\0\\0\\0Z\\0\\0\\0H\\0A\\x9C\\xAA\\v\\0A\\xAC\\xAA\\v\\b\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\0A\\xF0\\xAA\\v \\xE0\\0\\0\\0\\0\\0\\0A\\x84\\xAB\\v[\\0A\\x9C\\xAB\\vY\\0\\0\\0\\\\\\0\\0\\0X\\0\\0\\0A\\xB4\\xAB\\v\\0A\\xC4\\xAB\\v\\xFF\\xFF\\xFF\\xFF
|
|
6425
|
-
\\0A\\x88\\xAC\\v\\vx\\0x\\0\\x90\`)}function mn(j){return j}async function Pj(j){return j}async function wj(j,r){try{var s=await Pj(j),i=await WebAssembly.instantiate(s,r);return i}catch(o){oA(\`failed to asynchronously prepare wasm: \${o}\`),OA(o)}}async function Mj(j,r,s){return wj(r,s)}function Tj(){var j={a:se};return j}async function Uj(){function j(a,k){return rA=a.exports,ne(rA),Bj(),rA}function r(a){return j(a.instance)}var s=Tj();if(e.instantiateWasm)return new Promise((a,k)=>{e.instantiateWasm(s,(u,c)=>{a(j(u,c))})});dr??=Oj();var i=await Mj(or,dr,s),o=r(i);return o}class En{name="ExitStatus";constructor(r){this.message=\`Program terminated with exit(\${r})\`,this.status=r}}var aA,kA,qr,U,fr,Cr,Z,m,Gr,_,pr=j=>{for(;j.length>0;)j.shift()(e)},Ir=[],Vj=j=>Ir.push(j),hr=[],Sj=j=>hr.push(j),Rj=!0;class Wj{constructor(r){this.excPtr=r,this.ptr=r-24}set_type(r){m[this.ptr+4>>2]=r}get_type(){return m[this.ptr+4>>2]}set_destructor(r){m[this.ptr+8>>2]=r}get_destructor(){return m[this.ptr+8>>2]}set_caught(r){r=r?1:0,U[this.ptr+12]=r}get_caught(){return U[this.ptr+12]!=0}set_rethrown(r){r=r?1:0,U[this.ptr+13]=r}get_rethrown(){return U[this.ptr+13]!=0}init(r,s){this.set_adjusted_ptr(0),this.set_type(r),this.set_destructor(s)}set_adjusted_ptr(r){m[this.ptr+16>>2]=r}get_adjusted_ptr(){return m[this.ptr+16>>2]}}var mr=0,Qj=0,zj=(j,r,s)=>{var i=new Wj(j);throw i.init(r,s),mr=j,Qj++,mr},Xj=()=>OA(""),v=j=>{for(var r="";;){var s=_[j++];if(!s)return r;r+=String.fromCharCode(s)}},W={},Q={},uA={},Y=class extends Error{constructor(r){super(r),this.name="BindingError"}},G=j=>{throw new Y(j)};function Zj(j,r,s={}){var i=r.name;if(j||G(\`type "\${i}" must have a positive integer typeid pointer\`),Q.hasOwnProperty(j)){if(s.ignoreDuplicateRegistrations)return;G(\`Cannot register type '\${i}' twice\`)}if(Q[j]=r,delete uA[j],W.hasOwnProperty(j)){var o=W[j];delete W[j],o.forEach(a=>a())}}function N(j,r,s={}){return Zj(j,r,s)}var Er=(j,r,s)=>{switch(r){case 1:return s?i=>U[i]:i=>_[i];case 2:return s?i=>aA[i>>1]:i=>Z[i>>1];case 4:return s?i=>kA[i>>2]:i=>m[i>>2];case 8:return s?i=>qr[i>>3]:i=>Gr[i>>3];default:throw new TypeError(\`invalid integer width (\${r}): \${j}\`)}},Yj=(j,r,s,i,o)=>{r=v(r);let a=i===0n,k=u=>u;if(a){let u=s*8;k=c=>BigInt.asUintN(u,c),o=k(o)}N(j,{name:r,fromWireType:k,toWireType:(u,c)=>(typeof c=="number"&&(c=BigInt(c)),c),readValueFromPointer:Er(r,s,!a),destructorFunction:null})},At=(j,r,s,i)=>{r=v(r),N(j,{name:r,fromWireType:function(o){return!!o},toWireType:function(o,a){return a?s:i},readValueFromPointer:function(o){return this.fromWireType(_[o])},destructorFunction:null})},rt=j=>({count:j.count,deleteScheduled:j.deleteScheduled,preservePointerOnDelete:j.preservePointerOnDelete,ptr:j.ptr,ptrType:j.ptrType,smartPtr:j.smartPtr,smartPtrType:j.smartPtrType}),PA=j=>{function r(s){return s.$$.ptrType.registeredClass.name}G(r(j)+" instance already deleted")},wA=!1,$r=j=>{},jt=j=>{j.smartPtr?j.smartPtrType.rawDestructor(j.smartPtr):j.ptrType.registeredClass.rawDestructor(j.ptr)},Fr=j=>{j.count.value-=1;var r=j.count.value===0;r&&jt(j)},AA=j=>globalThis.FinalizationRegistry?(wA=new FinalizationRegistry(r=>{Fr(r.$$)}),AA=r=>{var s=r.$$,i=!!s.smartPtr;if(i){var o={$$:s};wA.register(r,o,r)}return r},$r=r=>wA.unregister(r),AA(j)):(AA=r=>r,j),cA=[],tt=()=>{for(;cA.length;){var j=cA.pop();j.$$.deleteScheduled=!1,j.delete()}},vr,et=()=>{let j=dA.prototype;Object.assign(j,{isAliasOf(s){if(!(this instanceof dA)||!(s instanceof dA))return!1;var i=this.$$.ptrType.registeredClass,o=this.$$.ptr;s.$$=s.$$;for(var a=s.$$.ptrType.registeredClass,k=s.$$.ptr;i.baseClass;)o=i.upcast(o),i=i.baseClass;for(;a.baseClass;)k=a.upcast(k),a=a.baseClass;return i===a&&o===k},clone(){if(this.$$.ptr||PA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var s=AA(Object.create(Object.getPrototypeOf(this),{$$:{value:rt(this.$$)}}));return s.$$.count.value+=1,s.$$.deleteScheduled=!1,s},delete(){this.$$.ptr||PA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&G("Object already scheduled for deletion"),$r(this),Fr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||PA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&G("Object already scheduled for deletion"),cA.push(this),cA.length===1&&vr&&vr(tt),this.$$.deleteScheduled=!0,this}});let r=Symbol.dispose;r&&(j[r]=j.delete)};function dA(){}var gr=(j,r)=>Object.defineProperty(r,"name",{value:j}),Lr={},Hr=(j,r,s)=>{if(j[r].overloadTable===void 0){var i=j[r];j[r]=function(...o){return j[r].overloadTable.hasOwnProperty(o.length)||G(\`Function '\${s}' called with an invalid number of arguments (\${o.length}) - expects one of (\${j[r].overloadTable})!\`),j[r].overloadTable[o.length].apply(this,o)},j[r].overloadTable=[],j[r].overloadTable[i.argCount]=i}},yr=(j,r,s)=>{e.hasOwnProperty(j)?((s===void 0||e[j].overloadTable!==void 0&&e[j].overloadTable[s]!==void 0)&&G(\`Cannot register public name '\${j}' twice\`),Hr(e,j,j),e[j].overloadTable.hasOwnProperty(s)&&G(\`Cannot register multiple overloads of a function with the same number of arguments (\${s})!\`),e[j].overloadTable[s]=r):(e[j]=r,e[j].argCount=s)},nt=48,st=57,lt=j=>{j=j.replace(/[^a-zA-Z0-9_]/g,"$");var r=j.charCodeAt(0);return r>=nt&&r<=st?\`_\${j}\`:j};function it(j,r,s,i,o,a,k,u){this.name=j,this.constructor=r,this.instancePrototype=s,this.rawDestructor=i,this.baseClass=o,this.getActualType=a,this.upcast=k,this.downcast=u,this.pureVirtualFunctions=[]}var qA=(j,r,s)=>{for(;r!==s;)r.upcast||G(\`Expected null or instance of \${s.name}, got an instance of \${r.name}\`),j=r.upcast(j),r=r.baseClass;return j},MA=j=>{if(j===null)return"null";var r=typeof j;return r==="object"||r==="array"||r==="function"?j.toString():""+j};function ot(j,r){if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),0;r.$$||G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`);var s=r.$$.ptrType.registeredClass,i=qA(r.$$.ptr,s,this.registeredClass);return i}function at(j,r){var s;if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),this.isSmartPointer?(s=this.rawConstructor(),j!==null&&j.push(this.rawDestructor,s),s):0;(!r||!r.$$)&&G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`),!this.isConst&&r.$$.ptrType.isConst&&G(\`Cannot convert argument of type \${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type \${this.name}\`);var i=r.$$.ptrType.registeredClass;if(s=qA(r.$$.ptr,i,this.registeredClass),this.isSmartPointer)switch(r.$$.smartPtr===void 0&&G("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?s=r.$$.smartPtr:G(\`Cannot convert argument of type \${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type \${this.name}\`);break;case 1:s=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)s=r.$$.smartPtr;else{var o=r.clone();s=this.rawShare(s,VA.toHandle(()=>o.delete())),j!==null&&j.push(this.rawDestructor,s)}break;default:G("Unsupported sharing policy")}return s}function kt(j,r){if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),0;r.$$||G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`),r.$$.ptrType.isConst&&G(\`Cannot convert argument of type \${r.$$.ptrType.name} to parameter type \${this.name}\`);var s=r.$$.ptrType.registeredClass,i=qA(r.$$.ptr,s,this.registeredClass);return i}function fA(j){return this.fromWireType(m[j>>2])}var _r=(j,r,s)=>{if(r===s)return j;if(s.baseClass===void 0)return null;var i=_r(j,r,s.baseClass);return i===null?null:s.downcast(i)},ut={},ct=(j,r)=>{for(r===void 0&&G("ptr should not be undefined");j.baseClass;)r=j.upcast(r),j=j.baseClass;return r},dt=(j,r)=>(r=ct(j,r),ut[r]),qt=class extends Error{constructor(r){super(r),this.name="InternalError"}},CA=j=>{throw new qt(j)},GA=(j,r)=>{(!r.ptrType||!r.ptr)&&CA("makeClassHandle requires ptr and ptrType");var s=!!r.smartPtrType,i=!!r.smartPtr;return s!==i&&CA("Both smartPtrType and smartPtr must be specified"),r.count={value:1},AA(Object.create(j,{$$:{value:r,writable:!0}}))};function ft(j){var r=this.getPointee(j);if(!r)return this.destructor(j),null;var s=dt(this.registeredClass,r);if(s!==void 0){if(s.$$.count.value===0)return s.$$.ptr=r,s.$$.smartPtr=j,s.clone();var i=s.clone();return this.destructor(j),i}function o(){return this.isSmartPointer?GA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:j}):GA(this.registeredClass.instancePrototype,{ptrType:this,ptr:j})}var a=this.registeredClass.getActualType(r),k=Lr[a];if(!k)return o.call(this);var u;this.isConst?u=k.constPointerType:u=k.pointerType;var c=_r(r,this.registeredClass,u.registeredClass);return c===null?o.call(this):this.isSmartPointer?GA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c,smartPtrType:this,smartPtr:j}):GA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c})}var Ct=()=>{Object.assign(pA.prototype,{getPointee(j){return this.rawGetPointee&&(j=this.rawGetPointee(j)),j},destructor(j){this.rawDestructor?.(j)},readValueFromPointer:fA,fromWireType:ft})};function pA(j,r,s,i,o,a,k,u,c,f,C){this.name=j,this.registeredClass=r,this.isReference=s,this.isConst=i,this.isSmartPointer=o,this.pointeeType=a,this.sharingPolicy=k,this.rawGetPointee=u,this.rawConstructor=c,this.rawShare=f,this.rawDestructor=C,!o&&r.baseClass===void 0?i?(this.toWireType=ot,this.destructorFunction=null):(this.toWireType=kt,this.destructorFunction=null):this.toWireType=at}var Dr=(j,r,s)=>{e.hasOwnProperty(j)||CA("Replacing nonexistent public symbol"),e[j].overloadTable!==void 0&&s!==void 0?e[j].overloadTable[s]=r:(e[j]=r,e[j].argCount=s)},xr=[],Gt=j=>{var r=xr[j];return r||(xr[j]=r=Vr.get(j)),r},B=(j,r,s=!1)=>{j=v(j);function i(){var a=Gt(r);return a}var o=i();return typeof o!="function"&&G(\`unknown function pointer with signature \${j}: \${r}\`),o};class pt extends Error{}var It=j=>{var r=Tr(j),s=v(r);return b(r),s},z=(j,r)=>{var s=[],i={};function o(a){if(!i[a]&&!Q[a]){if(uA[a]){uA[a].forEach(o);return}s.push(a),i[a]=!0}}throw r.forEach(o),new pt(\`\${j}: \`+s.map(It).join([", "]))},P=(j,r,s)=>{j.forEach(u=>uA[u]=r);function i(u){var c=s(u);c.length!==j.length&&CA("Mismatched type converter count");for(var f=0;f<j.length;++f)N(j[f],c[f])}var o=new Array(r.length),a=[],k=0;for(let[u,c]of r.entries())Q.hasOwnProperty(c)?o[u]=Q[c]:(a.push(c),W.hasOwnProperty(c)||(W[c]=[]),W[c].push(()=>{o[u]=Q[c],++k,k===a.length&&i(o)}));a.length===0&&i(o)},ht=(j,r,s,i,o,a,k,u,c,f,C,h,E)=>{C=v(C),a=B(o,a),u&&=B(k,u),f&&=B(c,f),E=B(h,E);var I=lt(C);yr(I,function(){z(\`Cannot construct \${C} due to unbound types\`,[i])}),P([j,r,s],i?[i]:[],$=>{$=$[0];var H,J;i?(H=$.registeredClass,J=H.instancePrototype):J=dA.prototype;var y=gr(C,function(...RA){if(Object.getPrototypeOf(this)!==jA)throw new Y(\`Use 'new' to construct \${C}\`);if(L.constructor_body===void 0)throw new Y(\`\${C} has no accessible constructor\`);var Wr=L.constructor_body[RA.length];if(Wr===void 0)throw new Y(\`Tried to invoke ctor of \${C} with invalid number of parameters (\${RA.length}) - expected (\${Object.keys(L.constructor_body).toString()}) parameters instead!\`);return Wr.apply(this,RA)}),jA=Object.create(J,{constructor:{value:y}});y.prototype=jA;var L=new it(C,y,jA,E,H,a,u,f);L.baseClass&&(L.baseClass.__derivedClasses??=[],L.baseClass.__derivedClasses.push(L));var ie=new pA(C,L,!0,!1,!1),Sr=new pA(C+"*",L,!1,!1,!1),Rr=new pA(C+" const*",L,!1,!0,!1);return Lr[j]={pointerType:Sr,constPointerType:Rr},Dr(I,y),[ie,Sr,Rr]})},TA=(j,r)=>{for(var s=[],i=0;i<j;i++)s.push(m[r+i*4>>2]);return s},Nr=j=>{for(;j.length;){var r=j.pop(),s=j.pop();s(r)}};function Br(j){for(var r=1;r<j.length;++r)if(j[r]!==null&&j[r].destructorFunction===void 0)return!0;return!1}function mt(j,r,s,i){var o=Br(j),a=j.length-2,k=[],u=["fn"];r&&u.push("thisWired");for(var c=0;c<a;++c)k.push(\`arg\${c}\`),u.push(\`arg\${c}Wired\`);k=k.join(","),u=u.join(",");var f=\`return function (\${k}) {
|
|
6425
|
+
\\0A\\x88\\xAC\\v\\vx\\0x\\0\\x90\`)}function $n(j){return j}async function Pj(j){return j}async function wj(j,r){try{var s=await Pj(j),i=await WebAssembly.instantiate(s,r);return i}catch(o){oA(\`failed to asynchronously prepare wasm: \${o}\`),OA(o)}}async function Mj(j,r,s){return wj(r,s)}function Tj(){var j={a:se};return j}async function Uj(){function j(a,k){return rA=a.exports,ne(rA),Bj(),rA}function r(a){return j(a.instance)}var s=Tj();if(e.instantiateWasm)return new Promise((a,k)=>{e.instantiateWasm(s,(u,c)=>{a(j(u,c))})});dr??=Oj();var i=await Mj(or,dr,s),o=r(i);return o}class Fn{name="ExitStatus";constructor(r){this.message=\`Program terminated with exit(\${r})\`,this.status=r}}var aA,kA,qr,U,fr,Cr,Z,m,Gr,_,pr=j=>{for(;j.length>0;)j.shift()(e)},Ir=[],Vj=j=>Ir.push(j),hr=[],Sj=j=>hr.push(j),Rj=!0;class Wj{constructor(r){this.excPtr=r,this.ptr=r-24}set_type(r){m[this.ptr+4>>2]=r}get_type(){return m[this.ptr+4>>2]}set_destructor(r){m[this.ptr+8>>2]=r}get_destructor(){return m[this.ptr+8>>2]}set_caught(r){r=r?1:0,U[this.ptr+12]=r}get_caught(){return U[this.ptr+12]!=0}set_rethrown(r){r=r?1:0,U[this.ptr+13]=r}get_rethrown(){return U[this.ptr+13]!=0}init(r,s){this.set_adjusted_ptr(0),this.set_type(r),this.set_destructor(s)}set_adjusted_ptr(r){m[this.ptr+16>>2]=r}get_adjusted_ptr(){return m[this.ptr+16>>2]}}var mr=0,Qj=0,zj=(j,r,s)=>{var i=new Wj(j);throw i.init(r,s),mr=j,Qj++,mr},Xj=()=>OA(""),v=j=>{for(var r="";;){var s=_[j++];if(!s)return r;r+=String.fromCharCode(s)}},W={},Q={},uA={},Y=class extends Error{constructor(r){super(r),this.name="BindingError"}},G=j=>{throw new Y(j)};function Zj(j,r,s={}){var i=r.name;if(j||G(\`type "\${i}" must have a positive integer typeid pointer\`),Q.hasOwnProperty(j)){if(s.ignoreDuplicateRegistrations)return;G(\`Cannot register type '\${i}' twice\`)}if(Q[j]=r,delete uA[j],W.hasOwnProperty(j)){var o=W[j];delete W[j],o.forEach(a=>a())}}function N(j,r,s={}){return Zj(j,r,s)}var Er=(j,r,s)=>{switch(r){case 1:return s?i=>U[i]:i=>_[i];case 2:return s?i=>aA[i>>1]:i=>Z[i>>1];case 4:return s?i=>kA[i>>2]:i=>m[i>>2];case 8:return s?i=>qr[i>>3]:i=>Gr[i>>3];default:throw new TypeError(\`invalid integer width (\${r}): \${j}\`)}},Yj=(j,r,s,i,o)=>{r=v(r);let a=i===0n,k=u=>u;if(a){let u=s*8;k=c=>BigInt.asUintN(u,c),o=k(o)}N(j,{name:r,fromWireType:k,toWireType:(u,c)=>(typeof c=="number"&&(c=BigInt(c)),c),readValueFromPointer:Er(r,s,!a),destructorFunction:null})},At=(j,r,s,i)=>{r=v(r),N(j,{name:r,fromWireType:function(o){return!!o},toWireType:function(o,a){return a?s:i},readValueFromPointer:function(o){return this.fromWireType(_[o])},destructorFunction:null})},rt=j=>({count:j.count,deleteScheduled:j.deleteScheduled,preservePointerOnDelete:j.preservePointerOnDelete,ptr:j.ptr,ptrType:j.ptrType,smartPtr:j.smartPtr,smartPtrType:j.smartPtrType}),PA=j=>{function r(s){return s.$$.ptrType.registeredClass.name}G(r(j)+" instance already deleted")},wA=!1,$r=j=>{},jt=j=>{j.smartPtr?j.smartPtrType.rawDestructor(j.smartPtr):j.ptrType.registeredClass.rawDestructor(j.ptr)},Fr=j=>{j.count.value-=1;var r=j.count.value===0;r&&jt(j)},AA=j=>globalThis.FinalizationRegistry?(wA=new FinalizationRegistry(r=>{Fr(r.$$)}),AA=r=>{var s=r.$$,i=!!s.smartPtr;if(i){var o={$$:s};wA.register(r,o,r)}return r},$r=r=>wA.unregister(r),AA(j)):(AA=r=>r,j),cA=[],tt=()=>{for(;cA.length;){var j=cA.pop();j.$$.deleteScheduled=!1,j.delete()}},vr,et=()=>{let j=dA.prototype;Object.assign(j,{isAliasOf(s){if(!(this instanceof dA)||!(s instanceof dA))return!1;var i=this.$$.ptrType.registeredClass,o=this.$$.ptr;s.$$=s.$$;for(var a=s.$$.ptrType.registeredClass,k=s.$$.ptr;i.baseClass;)o=i.upcast(o),i=i.baseClass;for(;a.baseClass;)k=a.upcast(k),a=a.baseClass;return i===a&&o===k},clone(){if(this.$$.ptr||PA(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var s=AA(Object.create(Object.getPrototypeOf(this),{$$:{value:rt(this.$$)}}));return s.$$.count.value+=1,s.$$.deleteScheduled=!1,s},delete(){this.$$.ptr||PA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&G("Object already scheduled for deletion"),$r(this),Fr(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||PA(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&G("Object already scheduled for deletion"),cA.push(this),cA.length===1&&vr&&vr(tt),this.$$.deleteScheduled=!0,this}});let r=Symbol.dispose;r&&(j[r]=j.delete)};function dA(){}var gr=(j,r)=>Object.defineProperty(r,"name",{value:j}),Lr={},Hr=(j,r,s)=>{if(j[r].overloadTable===void 0){var i=j[r];j[r]=function(...o){return j[r].overloadTable.hasOwnProperty(o.length)||G(\`Function '\${s}' called with an invalid number of arguments (\${o.length}) - expects one of (\${j[r].overloadTable})!\`),j[r].overloadTable[o.length].apply(this,o)},j[r].overloadTable=[],j[r].overloadTable[i.argCount]=i}},yr=(j,r,s)=>{e.hasOwnProperty(j)?((s===void 0||e[j].overloadTable!==void 0&&e[j].overloadTable[s]!==void 0)&&G(\`Cannot register public name '\${j}' twice\`),Hr(e,j,j),e[j].overloadTable.hasOwnProperty(s)&&G(\`Cannot register multiple overloads of a function with the same number of arguments (\${s})!\`),e[j].overloadTable[s]=r):(e[j]=r,e[j].argCount=s)},nt=48,st=57,lt=j=>{j=j.replace(/[^a-zA-Z0-9_]/g,"$");var r=j.charCodeAt(0);return r>=nt&&r<=st?\`_\${j}\`:j};function it(j,r,s,i,o,a,k,u){this.name=j,this.constructor=r,this.instancePrototype=s,this.rawDestructor=i,this.baseClass=o,this.getActualType=a,this.upcast=k,this.downcast=u,this.pureVirtualFunctions=[]}var qA=(j,r,s)=>{for(;r!==s;)r.upcast||G(\`Expected null or instance of \${s.name}, got an instance of \${r.name}\`),j=r.upcast(j),r=r.baseClass;return j},MA=j=>{if(j===null)return"null";var r=typeof j;return r==="object"||r==="array"||r==="function"?j.toString():""+j};function ot(j,r){if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),0;r.$$||G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`);var s=r.$$.ptrType.registeredClass,i=qA(r.$$.ptr,s,this.registeredClass);return i}function at(j,r){var s;if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),this.isSmartPointer?(s=this.rawConstructor(),j!==null&&j.push(this.rawDestructor,s),s):0;(!r||!r.$$)&&G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`),!this.isConst&&r.$$.ptrType.isConst&&G(\`Cannot convert argument of type \${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type \${this.name}\`);var i=r.$$.ptrType.registeredClass;if(s=qA(r.$$.ptr,i,this.registeredClass),this.isSmartPointer)switch(r.$$.smartPtr===void 0&&G("Passing raw pointer to smart pointer is illegal"),this.sharingPolicy){case 0:r.$$.smartPtrType===this?s=r.$$.smartPtr:G(\`Cannot convert argument of type \${r.$$.smartPtrType?r.$$.smartPtrType.name:r.$$.ptrType.name} to parameter type \${this.name}\`);break;case 1:s=r.$$.smartPtr;break;case 2:if(r.$$.smartPtrType===this)s=r.$$.smartPtr;else{var o=r.clone();s=this.rawShare(s,VA.toHandle(()=>o.delete())),j!==null&&j.push(this.rawDestructor,s)}break;default:G("Unsupported sharing policy")}return s}function kt(j,r){if(r===null)return this.isReference&&G(\`null is not a valid \${this.name}\`),0;r.$$||G(\`Cannot pass "\${MA(r)}" as a \${this.name}\`),r.$$.ptr||G(\`Cannot pass deleted object as a pointer of type \${this.name}\`),r.$$.ptrType.isConst&&G(\`Cannot convert argument of type \${r.$$.ptrType.name} to parameter type \${this.name}\`);var s=r.$$.ptrType.registeredClass,i=qA(r.$$.ptr,s,this.registeredClass);return i}function fA(j){return this.fromWireType(m[j>>2])}var _r=(j,r,s)=>{if(r===s)return j;if(s.baseClass===void 0)return null;var i=_r(j,r,s.baseClass);return i===null?null:s.downcast(i)},ut={},ct=(j,r)=>{for(r===void 0&&G("ptr should not be undefined");j.baseClass;)r=j.upcast(r),j=j.baseClass;return r},dt=(j,r)=>(r=ct(j,r),ut[r]),qt=class extends Error{constructor(r){super(r),this.name="InternalError"}},CA=j=>{throw new qt(j)},GA=(j,r)=>{(!r.ptrType||!r.ptr)&&CA("makeClassHandle requires ptr and ptrType");var s=!!r.smartPtrType,i=!!r.smartPtr;return s!==i&&CA("Both smartPtrType and smartPtr must be specified"),r.count={value:1},AA(Object.create(j,{$$:{value:r,writable:!0}}))};function ft(j){var r=this.getPointee(j);if(!r)return this.destructor(j),null;var s=dt(this.registeredClass,r);if(s!==void 0){if(s.$$.count.value===0)return s.$$.ptr=r,s.$$.smartPtr=j,s.clone();var i=s.clone();return this.destructor(j),i}function o(){return this.isSmartPointer?GA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:r,smartPtrType:this,smartPtr:j}):GA(this.registeredClass.instancePrototype,{ptrType:this,ptr:j})}var a=this.registeredClass.getActualType(r),k=Lr[a];if(!k)return o.call(this);var u;this.isConst?u=k.constPointerType:u=k.pointerType;var c=_r(r,this.registeredClass,u.registeredClass);return c===null?o.call(this):this.isSmartPointer?GA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c,smartPtrType:this,smartPtr:j}):GA(u.registeredClass.instancePrototype,{ptrType:u,ptr:c})}var Ct=()=>{Object.assign(pA.prototype,{getPointee(j){return this.rawGetPointee&&(j=this.rawGetPointee(j)),j},destructor(j){this.rawDestructor?.(j)},readValueFromPointer:fA,fromWireType:ft})};function pA(j,r,s,i,o,a,k,u,c,f,C){this.name=j,this.registeredClass=r,this.isReference=s,this.isConst=i,this.isSmartPointer=o,this.pointeeType=a,this.sharingPolicy=k,this.rawGetPointee=u,this.rawConstructor=c,this.rawShare=f,this.rawDestructor=C,!o&&r.baseClass===void 0?i?(this.toWireType=ot,this.destructorFunction=null):(this.toWireType=kt,this.destructorFunction=null):this.toWireType=at}var xr=(j,r,s)=>{e.hasOwnProperty(j)||CA("Replacing nonexistent public symbol"),e[j].overloadTable!==void 0&&s!==void 0?e[j].overloadTable[s]=r:(e[j]=r,e[j].argCount=s)},Dr=[],Gt=j=>{var r=Dr[j];return r||(Dr[j]=r=Vr.get(j)),r},B=(j,r,s=!1)=>{j=v(j);function i(){var a=Gt(r);return a}var o=i();return typeof o!="function"&&G(\`unknown function pointer with signature \${j}: \${r}\`),o};class pt extends Error{}var It=j=>{var r=Tr(j),s=v(r);return b(r),s},z=(j,r)=>{var s=[],i={};function o(a){if(!i[a]&&!Q[a]){if(uA[a]){uA[a].forEach(o);return}s.push(a),i[a]=!0}}throw r.forEach(o),new pt(\`\${j}: \`+s.map(It).join([", "]))},P=(j,r,s)=>{j.forEach(u=>uA[u]=r);function i(u){var c=s(u);c.length!==j.length&&CA("Mismatched type converter count");for(var f=0;f<j.length;++f)N(j[f],c[f])}var o=new Array(r.length),a=[],k=0;for(let[u,c]of r.entries())Q.hasOwnProperty(c)?o[u]=Q[c]:(a.push(c),W.hasOwnProperty(c)||(W[c]=[]),W[c].push(()=>{o[u]=Q[c],++k,k===a.length&&i(o)}));a.length===0&&i(o)},ht=(j,r,s,i,o,a,k,u,c,f,C,h,E)=>{C=v(C),a=B(o,a),u&&=B(k,u),f&&=B(c,f),E=B(h,E);var I=lt(C);yr(I,function(){z(\`Cannot construct \${C} due to unbound types\`,[i])}),P([j,r,s],i?[i]:[],$=>{$=$[0];var H,J;i?(H=$.registeredClass,J=H.instancePrototype):J=dA.prototype;var y=gr(C,function(...RA){if(Object.getPrototypeOf(this)!==jA)throw new Y(\`Use 'new' to construct \${C}\`);if(L.constructor_body===void 0)throw new Y(\`\${C} has no accessible constructor\`);var Wr=L.constructor_body[RA.length];if(Wr===void 0)throw new Y(\`Tried to invoke ctor of \${C} with invalid number of parameters (\${RA.length}) - expected (\${Object.keys(L.constructor_body).toString()}) parameters instead!\`);return Wr.apply(this,RA)}),jA=Object.create(J,{constructor:{value:y}});y.prototype=jA;var L=new it(C,y,jA,E,H,a,u,f);L.baseClass&&(L.baseClass.__derivedClasses??=[],L.baseClass.__derivedClasses.push(L));var ie=new pA(C,L,!0,!1,!1),Sr=new pA(C+"*",L,!1,!1,!1),Rr=new pA(C+" const*",L,!1,!0,!1);return Lr[j]={pointerType:Sr,constPointerType:Rr},xr(I,y),[ie,Sr,Rr]})},TA=(j,r)=>{for(var s=[],i=0;i<j;i++)s.push(m[r+i*4>>2]);return s},Nr=j=>{for(;j.length;){var r=j.pop(),s=j.pop();s(r)}};function Br(j){for(var r=1;r<j.length;++r)if(j[r]!==null&&j[r].destructorFunction===void 0)return!0;return!1}function mt(j,r,s,i){var o=Br(j),a=j.length-2,k=[],u=["fn"];r&&u.push("thisWired");for(var c=0;c<a;++c)k.push(\`arg\${c}\`),u.push(\`arg\${c}Wired\`);k=k.join(","),u=u.join(",");var f=\`return function (\${k}) {
|
|
6426
6426
|
\`;o&&(f+=\`var destructors = [];
|
|
6427
6427
|
\`);var C=o?"destructors":"null",h=["humanName","throwBindingError","invoker","fn","runDestructors","fromRetWire","toClassParamWire"];r&&(f+=\`var thisWired = toClassParamWire(\${C}, this);
|
|
6428
6428
|
\`);for(var c=0;c<a;++c){var E=\`toArg\${c}Wire\`;f+=\`var arg\${c}Wired = \${E}(\${C}, arg\${c});
|
|
@@ -6432,5 +6432,5 @@ K\\xE08\\xDF\\0}\\xBC\\x8A\\x1B\\f\\xE5\\xFF\\xCF\\xE8?\\x9F\\xFFFq\\0\\x88\\xB
|
|
|
6432
6432
|
\`,h.push(\`\${I}_dtor\`))}return s&&(f+=\`var ret = fromRetWire(rv);
|
|
6433
6433
|
return ret;
|
|
6434
6434
|
\`),f+=\`}
|
|
6435
|
-
\`,new Function(h,f)}function UA(j,r,s,i,o,a){var k=r.length;k<2&&G("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var u=r[1]!==null&&s!==null,c=Br(r),f=!r[0].isVoid,C=r[0],h=r[1],E=[j,G,i,o,Nr,C.fromWireType.bind(C),h?.toWireType.bind(h)],I=2;I<k;++I){var $=r[I];E.push($.toWireType.bind($))}if(!c)for(var I=u?1:2;I<r.length;++I)r[I].destructorFunction!==null&&E.push(r[I].destructorFunction);var J=mt(r,u,f,a)(...E);return gr(j,J)}var Et=(j,r,s,i,o,a)=>{var k=TA(r,s);o=B(i,o),P([],[j],u=>{u=u[0];var c=\`constructor \${u.name}\`;if(u.registeredClass.constructor_body===void 0&&(u.registeredClass.constructor_body=[]),u.registeredClass.constructor_body[r-1]!==void 0)throw new Y(\`Cannot register multiple constructors with identical number of parameters (\${r-1}) for class '\${u.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!\`);return u.registeredClass.constructor_body[r-1]=()=>{z(\`Cannot construct \${u.name} due to unbound types\`,k)},P([],k,f=>(f.splice(1,0,null),u.registeredClass.constructor_body[r-1]=UA(c,f,null,o,a),[])),[]})},br=j=>{j=j.trim();let r=j.indexOf("(");return r===-1?j:j.slice(0,r)},$t=(j,r,s,i,o,a,k,u,c,f)=>{var C=TA(s,i);r=v(r),r=br(r),a=B(o,a,c),P([],[j],h=>{h=h[0];var E=\`\${h.name}.\${r}\`;r.startsWith("@@")&&(r=Symbol[r.substring(2)]),u&&h.registeredClass.pureVirtualFunctions.push(r);function I(){z(\`Cannot call \${E} due to unbound types\`,C)}var $=h.registeredClass.instancePrototype,H=$[r];return H===void 0||H.overloadTable===void 0&&H.className!==h.name&&H.argCount===s-2?(I.argCount=s-2,I.className=h.name,$[r]=I):(Hr($,r,E),$[r].overloadTable[s-2]=I),P([],C,J=>{var y=UA(E,J,h,a,k,c);return $[r].overloadTable===void 0?(y.argCount=s-2,$[r]=y):$[r].overloadTable[s-2]=y,[]}),[]})},Jr=(j,r,s)=>(j instanceof Object||G(\`\${s} with invalid "this": \${j}\`),j instanceof r.registeredClass.constructor||G(\`\${s} incompatible with "this" of type \${j.constructor.name}\`),j.$$.ptr||G(\`cannot call emscripten binding method \${s} on deleted object\`),qA(j.$$.ptr,j.$$.ptrType.registeredClass,r.registeredClass)),Ft=(j,r,s,i,o,a,k,u,c,f)=>{r=v(r),o=B(i,o),P([],[j],C=>{C=C[0];var h=\`\${C.name}.\${r}\`,E={get(){z(\`Cannot access \${h} due to unbound types\`,[s,k])},enumerable:!0,configurable:!0};return c?E.set=()=>z(\`Cannot access \${h} due to unbound types\`,[s,k]):E.set=I=>G(h+" is a read-only property"),Object.defineProperty(C.registeredClass.instancePrototype,r,E),P([],c?[s,k]:[s],I=>{var $=I[0],H={get(){var y=Jr(this,C,h+" getter");return $.fromWireType(o(a,y))},enumerable:!0};if(c){c=B(u,c);var J=I[1];H.set=function(y){var jA=Jr(this,C,h+" setter"),L=[];c(f,jA,J.toWireType(L,y)),Nr(L)}}return Object.defineProperty(C.registeredClass.instancePrototype,r,H),[]}),[]})},Kr=[],X=[0,1,,1,null,1,!0,1,!1,1],vt=j=>{j>9&&--X[j+1]===0&&(X[j]=void 0,Kr.push(j))},VA={toValue:j=>(j||G(\`Cannot use deleted val. handle = \${j}\`),X[j]),toHandle:j=>{switch(j){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let r=Kr.pop()||X.length;return X[r]=j,X[r+1]=1,r}}}},gt={name:"emscripten::val",fromWireType:j=>{var r=VA.toValue(j);return vt(j),r},toWireType:(j,r)=>VA.toHandle(r),readValueFromPointer:fA,destructorFunction:null},Lt=j=>N(j,gt),Ht=(j,r)=>{switch(r){case 4:return function(s){return this.fromWireType(fr[s>>2])};case 8:return function(s){return this.fromWireType(Cr[s>>3])};default:throw new TypeError(\`invalid float width (\${r}): \${j}\`)}},yt=(j,r,s)=>{r=v(r),N(j,{name:r,fromWireType:i=>i,toWireType:(i,o)=>o,readValueFromPointer:Ht(r,s),destructorFunction:null})},_t=(j,r,s,i,o,a,k,u)=>{var c=TA(r,s);j=v(j),j=br(j),o=B(i,o,k),yr(j,function(){z(\`Cannot call \${j} due to unbound types\`,c)},r-1),P([],c,f=>{var C=[f[0],null].concat(f.slice(1));return Dr(j,UA(j,C,null,o,a,k),r-1),[]})},Dt=(j,r,s,i,o)=>{r=v(r);let a=i===0,k=c=>c;if(a){var u=32-8*s;k=c=>c<<u>>>u,o=k(o)}N(j,{name:r,fromWireType:k,toWireType:(c,f)=>f,readValueFromPointer:Er(r,s,i!==0),destructorFunction:null})},xt=(j,r,s)=>{var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],o=i[r];function a(k){var u=m[k>>2],c=m[k+4>>2];return new o(U.buffer,c,u)}s=v(s),N(j,{name:s,fromWireType:a,readValueFromPointer:a},{ignoreDuplicateRegistrations:!0})},Nt=(j,r,s,i)=>{if(!(i>0))return 0;for(var o=s,a=s+i-1,k=0;k<j.length;++k){var u=j.codePointAt(k);if(u<=127){if(s>=a)break;r[s++]=u}else if(u<=2047){if(s+1>=a)break;r[s++]=192|u>>6,r[s++]=128|u&63}else if(u<=65535){if(s+2>=a)break;r[s++]=224|u>>12,r[s++]=128|u>>6&63,r[s++]=128|u&63}else{if(s+3>=a)break;r[s++]=240|u>>18,r[s++]=128|u>>12&63,r[s++]=128|u>>6&63,r[s++]=128|u&63,k++}}return r[s]=0,s-o},Bt=(j,r,s)=>Nt(j,_,r,s),bt=j=>{for(var r=0,s=0;s<j.length;++s){var i=j.charCodeAt(s);i<=127?r++:i<=2047?r+=2:i>=55296&&i<=57343?(r+=4,++s):r+=3}return r},Or=globalThis.TextDecoder&&new TextDecoder,Pr=(j,r,s,i)=>{var o=r+s;if(i)return o;for(;j[r]&&!(r>=o);)++r;return r},wr=(j,r=0,s,i)=>{var o=Pr(j,r,s,i);if(o-r>16&&j.buffer&&Or)return Or.decode(j.subarray(r,o));for(var a="";r<o;){var k=j[r++];if(!(k&128)){a+=String.fromCharCode(k);continue}var u=j[r++]&63;if((k&224)==192){a+=String.fromCharCode((k&31)<<6|u);continue}var c=j[r++]&63;if((k&240)==224?k=(k&15)<<12|u<<6|c:k=(k&7)<<18|u<<12|c<<6|j[r++]&63,k<65536)a+=String.fromCharCode(k);else{var f=k-65536;a+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return a},Jt=(j,r,s)=>j?wr(_,j,r,s):"",Kt=(j,r)=>{r=v(r);var s=!0;N(j,{name:r,fromWireType(i){var o=m[i>>2],a=i+4,k;if(s)k=Jt(a,o,!0);else{k="";for(var u=0;u<o;++u)k+=String.fromCharCode(_[a+u])}return b(i),k},toWireType(i,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var a,k=typeof o=="string";k||ArrayBuffer.isView(o)&&o.BYTES_PER_ELEMENT==1||G("Cannot pass non-string to std::string"),s&&k?a=bt(o):a=o.length;var u=SA(4+a+1),c=u+4;if(m[u>>2]=a,k)if(s)Bt(o,c,a+1);else for(var f=0;f<a;++f){var C=o.charCodeAt(f);C>255&&(b(u),G("String has UTF-16 code units that do not fit in 8 bits")),_[c+f]=C}else _.set(o,c);return i!==null&&i.push(b,u),u},readValueFromPointer:fA,destructorFunction(i){b(i)}})},Mr=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ot=(j,r,s)=>{var i=j>>1,o=Pr(Z,i,r/2,s);if(o-i>16&&Mr)return Mr.decode(Z.subarray(i,o));for(var a="",k=i;k<o;++k){var u=Z[k];a+=String.fromCharCode(u)}return a},Pt=(j,r,s)=>{if(s??=2147483647,s<2)return 0;s-=2;for(var i=r,o=s<j.length*2?s/2:j.length,a=0;a<o;++a){var k=j.charCodeAt(a);aA[r>>1]=k,r+=2}return aA[r>>1]=0,r-i},wt=j=>j.length*2,Mt=(j,r,s)=>{for(var i="",o=j>>2,a=0;!(a>=r/4);a++){var k=m[o+a];if(!k&&!s)break;i+=String.fromCodePoint(k)}return i},Tt=(j,r,s)=>{if(s??=2147483647,s<4)return 0;for(var i=r,o=i+s-4,a=0;a<j.length;++a){var k=j.codePointAt(a);if(k>65535&&a++,kA[r>>2]=k,r+=4,r+4>o)break}return kA[r>>2]=0,r-i},Ut=j=>{for(var r=0,s=0;s<j.length;++s){var i=j.codePointAt(s);i>65535&&s++,r+=4}return r},Vt=(j,r,s)=>{s=v(s);var i,o,a;r===2?(i=Ot,o=Pt,a=wt):(i=Mt,o=Tt,a=Ut),N(j,{name:s,fromWireType:k=>{var u=m[k>>2],c=i(k+4,u*r,!0);return b(k),c},toWireType:(k,u)=>{typeof u!="string"&&G(\`Cannot pass non-string to C++ string type \${s}\`);var c=a(u),f=SA(4+c+r);return m[f>>2]=c/r,o(u,f+4,c+r),k!==null&&k.push(b,f),f},readValueFromPointer:fA,destructorFunction(k){b(k)}})},St=(j,r)=>{r=v(r),N(j,{isVoid:!0,name:r,fromWireType:()=>{},toWireType:(s,i)=>{}})},Rt=j=>{OA("OOM")},Wt=j=>{var r=_.length;j>>>=0,Rt(j)},Qt=j=>52,zt=9007199254740992,Xt=-9007199254740992,Zt=j=>j<Xt||j>zt?NaN:Number(j);function Yt(j,r,s,i){return r=Zt(r),70}var Ae=[null,[],[]],re=(j,r)=>{var s=Ae[j];r===0||r===10?((j===1?ir:oA)(wr(s)),s.length=0):s.push(r)},je=(j,r,s,i)=>{for(var o=0,a=0;a<s;a++){var k=m[r>>2],u=m[r+4>>2];r+=8;for(var c=0;c<u;c++)re(j,_[k+c]);o+=u}return m[i>>2]=o,0};if(et(),Ct(),e.noExitRuntime&&(Rj=e.noExitRuntime),e.print&&(ir=e.print),e.printErr&&(oA=e.printErr),e.wasmBinary&&(or=e.wasmBinary),e.arguments&&(p=e.arguments),e.thisProgram&&(F=e.thisProgram),e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()();var Tr,SA,b,te,ee,Ur,Vr;function ne(j){Tr=j.w,SA=e._malloc=j.y,b=e._free=j.z,te=Ur=j.u,ee=Vr=j.x}var se={g:zj,r:Xj,f:Yj,l:At,k:ht,j:Et,d:$t,a:Ft,s:Lt,i:yt,n:_t,c:Dt,b:xt,t:Kt,e:Vt,m:St,o:Wt,q:Qt,p:Yt,h:je};function le(){bj();function j(){e.calledRun=!0,!ar&&(Jj(),kr?.(e),e.onRuntimeInitialized?.(),Kj())}e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1),j()},1)):j()}var rA;return rA=await Uj(),le(),cr?t=e:t=new Promise((j,r)=>{kr=j,ur=r}),t}})();typeof Lj=="object"&&typeof JA=="object"?(JA.exports=er,JA.exports.default=er):typeof define=="function"&&define.amd&&define([],()=>er)});var w={};qe(w,{AdditionalCaptureBlocks:()=>pe,AdditionalPlaybackBlocks:()=>Ge,ClockJumpCheckInterval:()=>ve,ClockJumpThreshold:()=>ge,ConnectInterval:()=>Be,ConnectTimeout:()=>De,DefaultRefreshRate:()=>he,DefaultVideoCodec:()=>be,HealthCheckTimeout:()=>Fe,MainConnectionPingInterval:()=>Le,MaxNumberOfDecoders:()=>Ee,MinDBFs:()=>Qr,MinTokenLifetime:()=>xe,MinTokenRefreshInterval:()=>Ne,PlaybackPreload:()=>Ie,RenderQuantumSize:()=>$e,VadPreload:()=>me,WebRtcIceTimeout:()=>ye,WebRtcStatsSnapshotInterval:()=>He,WebRtcTimeout:()=>_e});var Ge=3,pe=3,Ie=3,he=250,me=3,Ee=512,$e=128,Qr=-758.596,Fe=1e4,ve=1e3,ge=1e4,Le=3e3,He=1e3,ye=3e3,_e=1e4,De=5e3,xe=6e4,Ne=5e3,Be=[0,100,200,200,500],be="H264";function M(n,A,t){return n.postMessage(A,t)}function zr(n){return[n.values[0],n.values[1]]}function IA(n,A){n.values[0]=A[0],n.values[1]=A[1]}function hA(n,A){return n.values[2+A*5]}function Xr(n,A,t){n.values[2+A*5]=t}function Zr(n,A){let t=2+A*5+1;return[n.values[t+0],n.values[t+1]]}function mA(n,A,t){let e=2+A*5+1;n.values[e+0]=t[0],n.values[e+1]=t[1]}function Yr(n,A){return n.values[2+A*5+3]}function Aj(n,A,t){n.values[2+A*5+3]=t}function rj(n,A){return n.values[2+A*5+4]}function jj(n,A,t){n.values[2+A*5+4]=t}function EA(n){return n.values[0]!==0}function $A(n){return n.values[1]}function FA(n){return n.values[2]}function tj(n){return n.values[3]}function vA(n,A){return n.values[3]=A}function ej(n){return n?Array.from(n).map(A=>A.toString(16).padStart(2,"0")).join(""):null}var Je;(n=>{let A;(t=>(t[t.InvalidPassword=-1]="InvalidPassword",t[t.Unknown=0]="Unknown",t[t.Unencrypted=1]="Unencrypted",t[t.Encrypted=2]="Encrypted"))(A=n.PeerCipherStatus||={})})(Je||={});function oj(n){return{type:"Success",value:n}}function D(n){return{type:"Failure",reason:n}}var{Deno:nj}=globalThis,Ke=typeof nj?.noColor=="boolean"?nj.noColor:!1,Oe=!Ke;function zA(n,A){return{open:\`\\x1B[\${n.join(";")}m\`,close:\`\\x1B[\${A}m\`,regexp:new RegExp(\`\\\\x1b\\\\[\${A}m\`,"g")}}function XA(n,A){return Oe?\`\${A.open}\${n.replace(A.regexp,A.open)}\${A.close}\`:n}function QA(n){return XA(n,zA([0],0))}function sj(n){return XA(n,zA([1],22))}function Pe(n){return XA(n,zA([2],22))}var Bn=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),we=new Date,gA=(n=>(n[n.CRITICAL=0]="CRITICAL",n[n.ERROR=1]="ERROR",n[n.WARN=2]="WARN",n[n.INFO=3]="INFO",n[n.DEBUG=4]="DEBUG",n))(gA||{}),aj={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},Me={4:Pe,3:QA,2:QA,1:sj,0:sj};function Te({message:n}){return String(n)}function lj(n){return JSON.stringify({timestamp:n.date.toISOString(),level:gA[n.level],message:n.message,extra:n.extra})}function ij(n){function A(q,p){return[Math.floor(q/p),q%p]}function t(){let q,p=n.date.valueOf()-we.valueOf();[p,q]=A(p,1e3);let[F,x]=A(p,60);return\`\${F.toString().padStart(4,"0")}:\${x.toString().padStart(2,"0")}.\${q.toString().padStart(3,"0")}\`}function e(){return n.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(n.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(n.extra)}let l=aj[n.level],d=n.logger.name!==void 0?\`@\${n.logger.name}\`:"";return\`\${QA(t())}\${d} \${l} \${Me[n.level](String(n.message))}\${e()}\`}function Ue(n){let A=\`[\${n.date.toISOString()}]\`,t=\`[\${gA[n.level]}]\`,e=n.logger.name!==void 0?\`[\${n.logger.name}] \`:"",l=aj[n.level];return\`\${A} \${l} \${t.padEnd(7," ")} \${e}\${n.message}\`}function Ve(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var kj=class{static sparse=Te;static json=lj;static pretty=ij;static structured=Ue;static default=Ve()?ij:lj;constructor(){}};var Se=class{formatter;consoleObject;filter;constructor(n=kj.default,A=4,t=console){this.filter=A,this.formatter=n,this.consoleObject=t}handle(n){let A=this.formatter(n);switch(n.level){case 0:case 1:this.consoleObject.error(A);break;case 2:this.consoleObject.warn(A);break;case 3:this.consoleObject.info(A);break;case 4:this.consoleObject.debug(A);break}}};var V=class{#A;sinks;filter;parent;get name(){return this.#A}constructor(n,A=void 0,t=[],e=void 0){this.#A=A,this.sinks=t,this.filter=n,this.parent=e}log(n,A,t=void 0){let e={date:new Date,level:n,logger:this,message:A,extra:t};this.filter<n||this.insert(e)}insert(n){if(!(this.filter<n.level)){for(let A of this.sinks)A.filter>=n.level&&A.handle(n);this.parent!==void 0&&this.parent.insert(n)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},tA=globalThis[Symbol.for("odin-global-logger")]??=new V(3,void 0,[new Se]),Re=V.prototype.log.bind(tA,1),We=V.prototype.log.bind(tA,2),uj=V.prototype.log.bind(tA,3),Qe=V.prototype.log.bind(tA,4),bn=V.prototype.log.bind(tA);var cj;function dj(n,...A){let t=ze(A);cj?cj?.info(n,t):uj(n,t)}function ze(...n){if(n.length===1&&typeof n[0]=="object"&&n[0]!==null)return{...n[0]};if(n.length>0)return{args:n}}function LA(n){return n.connectionId*4294967296+n.mediaId}function qj(n){return{mediaId:n%4294967296,connectionId:Math.floor(n/4294967296)}}function K(n,A,t){let e;switch(A){case"f32":e=n.HEAPF32;break;case"u32":e=n.HEAPU32;break;case"i32":e=n.HEAP32;break;case"u8":e=n.HEAPU8;break;default:throw new Error(\`allocating \${A} is not supported\`)}let l=n._malloc(t*e.BYTES_PER_ELEMENT);if(l===0||l%e.BYTES_PER_ELEMENT!==0)throw new Error(\`failed allocating a \${t} \${A} array\`);let d=l/e.BYTES_PER_ELEMENT;return e.subarray(d,d+t)}function S(n,A){n._free(A.byteOffset)}function fj(n,A){return{values:K(n,"f32",2+A*5),length:A}}function Cj(n,A){S(n,A.values)}function Gj(n){return{values:K(n,"f32",4)}}function pj(n,A){S(n,A.values)}function Ij(n){let A=n.length,t=0,e=0;for(;e<A;){let l=n.charCodeAt(e++);if((l&4294967168)===0){t++;continue}else if((l&4294965248)===0)t+=2;else{if(l>=55296&&l<=56319&&e<A){let d=n.charCodeAt(e);(d&64512)===56320&&(++e,l=((l&1023)<<10)+(d&1023)+65536)}(l&4294901760)===0?t+=3:t+=4}}return t}function Xe(n,A,t){let e=n.length,l=t,d=0;for(;d<e;){let q=n.charCodeAt(d++);if((q&4294967168)===0){A[l++]=q;continue}else if((q&4294965248)===0)A[l++]=q>>6&31|192;else{if(q>=55296&&q<=56319&&d<e){let p=n.charCodeAt(d);(p&64512)===56320&&(++d,q=((q&1023)<<10)+(p&1023)+65536)}(q&4294901760)===0?(A[l++]=q>>12&15|224,A[l++]=q>>6&63|128):(A[l++]=q>>18&7|240,A[l++]=q>>12&63|128,A[l++]=q>>6&63|128)}A[l++]=q&63|128}}var Ze=new TextEncoder,Ye=50;function An(n,A,t){Ze.encodeInto(n,A.subarray(t))}function hj(n,A,t){n.length>Ye?An(n,A,t):Xe(n,A,t)}var rn=4096;function ZA(n,A,t){let e=A,l=e+t,d=[],q="";for(;e<l;){let p=n[e++];if((p&128)===0)d.push(p);else if((p&224)===192){let F=n[e++]&63;d.push((p&31)<<6|F)}else if((p&240)===224){let F=n[e++]&63,x=n[e++]&63;d.push((p&31)<<12|F<<6|x)}else if((p&248)===240){let F=n[e++]&63,x=n[e++]&63,KA=n[e++]&63,O=(p&7)<<18|F<<12|x<<6|KA;O>65535&&(O-=65536,d.push(O>>>10&1023|55296),O=56320|O&1023),d.push(O)}else d.push(p);d.length>=rn&&(q+=String.fromCharCode(...d),d.length=0)}return d.length>0&&(q+=String.fromCharCode(...d)),q}var jn=new TextDecoder,tn=200;function en(n,A,t){let e=n.subarray(A,A+t);return jn.decode(e)}function mj(n,A,t){return t>tn?en(n,A,t):ZA(n,A,t)}var R=class{constructor(A,t){this.type=A,this.data=t}};var g=class n extends Error{constructor(A){super(A);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};function Ej(n,A,t){let e=t/4294967296,l=t;n.setUint32(A,e),n.setUint32(A+4,l)}function HA(n,A,t){let e=Math.floor(t/4294967296),l=t;n.setUint32(A,e),n.setUint32(A+4,l)}function yA(n,A){let t=n.getInt32(A),e=n.getUint32(A+4);return t*4294967296+e}function $j(n,A){let t=n.getUint32(A),e=n.getUint32(A+4);return t*4294967296+e}var nn=-1,sn=4294967296-1,ln=17179869184-1;function on({sec:n,nsec:A}){if(n>=0&&A>=0&&n<=ln)if(A===0&&n<=sn){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,e=n&4294967295,l=new Uint8Array(8),d=new DataView(l.buffer);return d.setUint32(0,A<<2|t&3),d.setUint32(4,e),l}else{let t=new Uint8Array(12),e=new DataView(t.buffer);return e.setUint32(0,A),HA(e,4,n),t}}function an(n){let A=n.getTime(),t=Math.floor(A/1e3),e=(A-t*1e3)*1e6,l=Math.floor(e/1e9);return{sec:t+l,nsec:e-l*1e9}}function kn(n){if(n instanceof Date){let A=an(n);return on(A)}else return null}function un(n){let A=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:A.getUint32(0),nsec:0};case 8:{let t=A.getUint32(0),e=A.getUint32(4),l=(t&3)*4294967296+e,d=t>>>2;return{sec:l,nsec:d}}case 12:{let t=yA(A,4),e=A.getUint32(0);return{sec:t,nsec:e}}default:throw new g(\`Unrecognized data size for timestamp (expected 4, 8, or 12): \${n.length}\`)}}function cn(n){let A=un(n);return new Date(A.sec*1e3+A.nsec/1e6)}var Fj={type:nn,encode:kn,decode:cn};var T=class{constructor(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(Fj)}register({type:A,encode:t,decode:e}){if(A>=0)this.encoders[A]=t,this.decoders[A]=e;else{let l=-1-A;this.builtInEncoders[l]=t,this.builtInDecoders[l]=e}}tryToEncode(A,t){for(let e=0;e<this.builtInEncoders.length;e++){let l=this.builtInEncoders[e];if(l!=null){let d=l(A,t);if(d!=null){let q=-1-e;return new R(q,d)}}}for(let e=0;e<this.encoders.length;e++){let l=this.encoders[e];if(l!=null){let d=l(A,t);if(d!=null){let q=e;return new R(q,d)}}}return A instanceof R?A:null}decode(A,t,e){let l=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return l?l(A,t,e):new R(t,A)}};T.defaultCodec=new T;function dn(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function eA(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):dn(n)?new Uint8Array(n):Uint8Array.from(n)}var qn=100,fn=2048,_A=class n{constructor(A){this.entered=!1,this.extensionCodec=A?.extensionCodec??T.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.maxDepth=A?.maxDepth??qn,this.initialBufferSize=A?.initialBufferSize??fn,this.sortKeys=A?.sortKeys??!1,this.forceFloat32=A?.forceFloat32??!1,this.ignoreUndefined=A?.ignoreUndefined??!1,this.forceIntegerToFloat=A?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(A){if(this.entered)return this.clone().encodeSharedRef(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(A){if(this.entered)return this.clone().encode(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(A,t){if(t>this.maxDepth)throw new Error(\`Too deep objects in depth \${t}\`);A==null?this.encodeNil():typeof A=="boolean"?this.encodeBoolean(A):typeof A=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(A):this.encodeNumber(A):typeof A=="string"?this.encodeString(A):this.useBigInt64&&typeof A=="bigint"?this.encodeBigInt64(A):this.encodeObject(A,t)}ensureBufferSizeToWrite(A){let t=this.pos+A;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(A){let t=new ArrayBuffer(A),e=new Uint8Array(t),l=new DataView(t);e.set(this.bytes),this.view=l,this.bytes=e}encodeNil(){this.writeU8(192)}encodeBoolean(A){A===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(A){!this.forceIntegerToFloat&&Number.isSafeInteger(A)?A>=0?A<128?this.writeU8(A):A<256?(this.writeU8(204),this.writeU8(A)):A<65536?(this.writeU8(205),this.writeU16(A)):A<4294967296?(this.writeU8(206),this.writeU32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(207),this.writeU64(A)):A>=-32?this.writeU8(224|A+32):A>=-128?(this.writeU8(208),this.writeI8(A)):A>=-32768?(this.writeU8(209),this.writeI16(A)):A>=-2147483648?(this.writeU8(210),this.writeI32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(211),this.writeI64(A)):this.encodeNumberAsFloat(A)}encodeNumberAsFloat(A){this.forceFloat32?(this.writeU8(202),this.writeF32(A)):(this.writeU8(203),this.writeF64(A))}encodeBigInt64(A){A>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(A)):(this.writeU8(211),this.writeBigInt64(A))}writeStringHeader(A){if(A<32)this.writeU8(160+A);else if(A<256)this.writeU8(217),this.writeU8(A);else if(A<65536)this.writeU8(218),this.writeU16(A);else if(A<4294967296)this.writeU8(219),this.writeU32(A);else throw new Error(\`Too long string: \${A} bytes in UTF-8\`)}encodeString(A){let e=Ij(A);this.ensureBufferSizeToWrite(5+e),this.writeStringHeader(e),hj(A,this.bytes,this.pos),this.pos+=e}encodeObject(A,t){let e=this.extensionCodec.tryToEncode(A,this.context);if(e!=null)this.encodeExtension(e);else if(Array.isArray(A))this.encodeArray(A,t);else if(ArrayBuffer.isView(A))this.encodeBinary(A);else if(typeof A=="object")this.encodeMap(A,t);else throw new Error(\`Unrecognized object: \${Object.prototype.toString.apply(A)}\`)}encodeBinary(A){let t=A.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(\`Too large binary: \${t}\`);let e=eA(A);this.writeU8a(e)}encodeArray(A,t){let e=A.length;if(e<16)this.writeU8(144+e);else if(e<65536)this.writeU8(220),this.writeU16(e);else if(e<4294967296)this.writeU8(221),this.writeU32(e);else throw new Error(\`Too large array: \${e}\`);for(let l of A)this.doEncode(l,t+1)}countWithoutUndefined(A,t){let e=0;for(let l of t)A[l]!==void 0&&e++;return e}encodeMap(A,t){let e=Object.keys(A);this.sortKeys&&e.sort();let l=this.ignoreUndefined?this.countWithoutUndefined(A,e):e.length;if(l<16)this.writeU8(128+l);else if(l<65536)this.writeU8(222),this.writeU16(l);else if(l<4294967296)this.writeU8(223),this.writeU32(l);else throw new Error(\`Too large map object: \${l}\`);for(let d of e){let q=A[d];this.ignoreUndefined&&q===void 0||(this.encodeString(d),this.doEncode(q,t+1))}}encodeExtension(A){if(typeof A.data=="function"){let e=A.data(this.pos+6),l=e.length;if(l>=4294967296)throw new Error(\`Too large extension object: \${l}\`);this.writeU8(201),this.writeU32(l),this.writeI8(A.type),this.writeU8a(e);return}let t=A.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(\`Too large extension object: \${t}\`);this.writeI8(A.type),this.writeU8a(A.data)}writeU8(A){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,A),this.pos++}writeU8a(A){let t=A.length;this.ensureBufferSizeToWrite(t),this.bytes.set(A,this.pos),this.pos+=t}writeI8(A){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,A),this.pos++}writeU16(A){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,A),this.pos+=2}writeI16(A){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,A),this.pos+=2}writeU32(A){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,A),this.pos+=4}writeI32(A){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,A),this.pos+=4}writeF32(A){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,A),this.pos+=4}writeF64(A){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,A),this.pos+=8}writeU64(A){this.ensureBufferSizeToWrite(8),Ej(this.view,this.pos,A),this.pos+=8}writeI64(A){this.ensureBufferSizeToWrite(8),HA(this.view,this.pos,A),this.pos+=8}writeBigUint64(A){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,A),this.pos+=8}writeBigInt64(A){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,A),this.pos+=8}};function YA(n,A){return new _A(A).encodeSharedRef(n)}function DA(n){return\`\${n<0?"-":""}0x\${Math.abs(n).toString(16).padStart(2,"0")}\`}var Cn=16,Gn=16,xA=class{constructor(A=Cn,t=Gn){this.hit=0,this.miss=0,this.maxKeyLength=A,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(A){return A>0&&A<=this.maxKeyLength}find(A,t,e){let l=this.caches[e-1];A:for(let d of l){let q=d.bytes;for(let p=0;p<e;p++)if(q[p]!==A[t+p])continue A;return d.str}return null}store(A,t){let e=this.caches[A.length-1],l={bytes:A,str:t};e.length>=this.maxLengthPerKey?e[Math.random()*e.length|0]=l:e.push(l)}decode(A,t,e){let l=this.find(A,t,e);if(l!=null)return this.hit++,l;this.miss++;let d=ZA(A,t,e),q=Uint8Array.prototype.slice.call(A,t,t+e);return this.store(q,d),d}};var Ar="array",lA="map_key",gj="map_value",pn=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new g("The type of key must be string or number but "+typeof n)},rr=class{constructor(){this.stack=[],this.stackHeadPosition=-1}get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(A){let t=this.getUninitializedStateFromPool();t.type=Ar,t.position=0,t.size=A,t.array=new Array(A)}pushMapState(A){let t=this.getUninitializedStateFromPool();t.type=lA,t.readCount=0,t.size=A,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let A={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(A)}return this.stack[this.stackHeadPosition]}release(A){if(this.stack[this.stackHeadPosition]!==A)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(A.type===Ar){let e=A;e.size=0,e.array=void 0,e.position=0,e.type=void 0}if(A.type===lA||A.type===gj){let e=A;e.size=0,e.map=void 0,e.readCount=0,e.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},sA=-1,jr=new DataView(new ArrayBuffer(0)),In=new Uint8Array(jr.buffer);try{jr.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var vj=new RangeError("Insufficient data"),hn=new xA,NA=class n{constructor(A){this.totalPos=0,this.pos=0,this.view=jr,this.bytes=In,this.headByte=sA,this.stack=new rr,this.entered=!1,this.extensionCodec=A?.extensionCodec??T.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.rawStrings=A?.rawStrings??!1,this.maxStrLength=A?.maxStrLength??4294967295,this.maxBinLength=A?.maxBinLength??4294967295,this.maxArrayLength=A?.maxArrayLength??4294967295,this.maxMapLength=A?.maxMapLength??4294967295,this.maxExtLength=A?.maxExtLength??4294967295,this.keyDecoder=A?.keyDecoder!==void 0?A.keyDecoder:hn,this.mapKeyConverter=A?.mapKeyConverter??pn}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=sA,this.stack.reset()}setBuffer(A){let t=eA(A);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(A){if(this.headByte===sA&&!this.hasRemaining(1))this.setBuffer(A);else{let t=this.bytes.subarray(this.pos),e=eA(A),l=new Uint8Array(t.length+e.length);l.set(t),l.set(e,t.length),this.setBuffer(l)}}hasRemaining(A){return this.view.byteLength-this.pos>=A}createExtraByteError(A){let{view:t,pos:e}=this;return new RangeError(\`Extra \${t.byteLength-e} of \${t.byteLength} byte(s) found at buffer[\${A}]\`)}decode(A){if(this.entered)return this.clone().decode(A);try{this.entered=!0,this.reinitializeState(),this.setBuffer(A);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(A){if(this.entered){yield*this.clone().decodeMulti(A);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(A);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(A){if(this.entered)return this.clone().decodeAsync(A);try{this.entered=!0;let t=!1,e;for await(let p of A){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(p);try{e=this.doDecodeSync(),t=!0}catch(F){if(!(F instanceof RangeError))throw F}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return e}let{headByte:l,pos:d,totalPos:q}=this;throw new RangeError(\`Insufficient data in parsing \${DA(l)} at \${q} (\${d} in the current buffer)\`)}finally{this.entered=!1}}decodeArrayStream(A){return this.decodeMultiAsync(A,!0)}decodeStream(A){return this.decodeMultiAsync(A,!1)}async*decodeMultiAsync(A,t){if(this.entered){yield*this.clone().decodeMultiAsync(A,t);return}try{this.entered=!0;let e=t,l=-1;for await(let d of A){if(t&&l===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(d),e&&(l=this.readArraySize(),e=!1,this.complete());try{for(;yield this.doDecodeSync(),--l!==0;);}catch(q){if(!(q instanceof RangeError))throw q}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){A:for(;;){let A=this.readHeadByte(),t;if(A>=224)t=A-256;else if(A<192)if(A<128)t=A;else if(A<144){let l=A-128;if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A<160){let l=A-144;if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else{let l=A-160;t=this.decodeString(l,0)}else if(A===192)t=null;else if(A===194)t=!1;else if(A===195)t=!0;else if(A===202)t=this.readF32();else if(A===203)t=this.readF64();else if(A===204)t=this.readU8();else if(A===205)t=this.readU16();else if(A===206)t=this.readU32();else if(A===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(A===208)t=this.readI8();else if(A===209)t=this.readI16();else if(A===210)t=this.readI32();else if(A===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(A===217){let l=this.lookU8();t=this.decodeString(l,1)}else if(A===218){let l=this.lookU16();t=this.decodeString(l,2)}else if(A===219){let l=this.lookU32();t=this.decodeString(l,4)}else if(A===220){let l=this.readU16();if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else if(A===221){let l=this.readU32();if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else if(A===222){let l=this.readU16();if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A===223){let l=this.readU32();if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A===196){let l=this.lookU8();t=this.decodeBinary(l,1)}else if(A===197){let l=this.lookU16();t=this.decodeBinary(l,2)}else if(A===198){let l=this.lookU32();t=this.decodeBinary(l,4)}else if(A===212)t=this.decodeExtension(1,0);else if(A===213)t=this.decodeExtension(2,0);else if(A===214)t=this.decodeExtension(4,0);else if(A===215)t=this.decodeExtension(8,0);else if(A===216)t=this.decodeExtension(16,0);else if(A===199){let l=this.lookU8();t=this.decodeExtension(l,1)}else if(A===200){let l=this.lookU16();t=this.decodeExtension(l,2)}else if(A===201){let l=this.lookU32();t=this.decodeExtension(l,4)}else throw new g(\`Unrecognized type byte: \${DA(A)}\`);this.complete();let e=this.stack;for(;e.length>0;){let l=e.top();if(l.type===Ar)if(l.array[l.position]=t,l.position++,l.position===l.size)t=l.array,e.release(l);else continue A;else if(l.type===lA){if(t==="__proto__")throw new g("The key __proto__ is not allowed");l.key=this.mapKeyConverter(t),l.type=gj;continue A}else if(l.map[l.key]=t,l.readCount++,l.readCount===l.size)t=l.map,e.release(l);else{l.key=null,l.type=lA;continue A}}return t}}readHeadByte(){return this.headByte===sA&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=sA}readArraySize(){let A=this.readHeadByte();switch(A){case 220:return this.readU16();case 221:return this.readU32();default:{if(A<160)return A-144;throw new g(\`Unrecognized array type byte: \${DA(A)}\`)}}}pushMapState(A){if(A>this.maxMapLength)throw new g(\`Max length exceeded: map length (\${A}) > maxMapLengthLength (\${this.maxMapLength})\`);this.stack.pushMapState(A)}pushArrayState(A){if(A>this.maxArrayLength)throw new g(\`Max length exceeded: array length (\${A}) > maxArrayLength (\${this.maxArrayLength})\`);this.stack.pushArrayState(A)}decodeString(A,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(A,t):this.decodeBinary(A,t)}decodeUtf8String(A,t){if(A>this.maxStrLength)throw new g(\`Max length exceeded: UTF-8 byte length (\${A}) > maxStrLength (\${this.maxStrLength})\`);if(this.bytes.byteLength<this.pos+t+A)throw vj;let e=this.pos+t,l;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(A)?l=this.keyDecoder.decode(this.bytes,e,A):l=mj(this.bytes,e,A),this.pos+=t+A,l}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===lA:!1}decodeBinary(A,t){if(A>this.maxBinLength)throw new g(\`Max length exceeded: bin length (\${A}) > maxBinLength (\${this.maxBinLength})\`);if(!this.hasRemaining(A+t))throw vj;let e=this.pos+t,l=this.bytes.subarray(e,e+A);return this.pos+=t+A,l}decodeExtension(A,t){if(A>this.maxExtLength)throw new g(\`Max length exceeded: ext length (\${A}) > maxExtLength (\${this.maxExtLength})\`);let e=this.view.getInt8(this.pos+t),l=this.decodeBinary(A,t+1);return this.extensionCodec.decode(l,e,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let A=this.view.getUint8(this.pos);return this.pos++,A}readI8(){let A=this.view.getInt8(this.pos);return this.pos++,A}readU16(){let A=this.view.getUint16(this.pos);return this.pos+=2,A}readI16(){let A=this.view.getInt16(this.pos);return this.pos+=2,A}readU32(){let A=this.view.getUint32(this.pos);return this.pos+=4,A}readI32(){let A=this.view.getInt32(this.pos);return this.pos+=4,A}readU64(){let A=$j(this.view,this.pos);return this.pos+=8,A}readI64(){let A=yA(this.view,this.pos);return this.pos+=8,A}readU64AsBigInt(){let A=this.view.getBigUint64(this.pos);return this.pos+=8,A}readI64AsBigInt(){let A=this.view.getBigInt64(this.pos);return this.pos+=8,A}readF32(){let A=this.view.getFloat32(this.pos);return this.pos+=4,A}readF64(){let A=this.view.getFloat64(this.pos);return this.pos+=8,A}};function tr(n,A){return new NA(A).decode(n)}var iA=class n{constructor(A,t,e,l,d){this.mediaIds=A;this.sequenceNumber=t;this.timeStamp=e;this.isEndOfSpurt=l;this.payload=d}static parse(A){let t;try{t=tr(A)}catch{return D("not valid msgpack")}if(!Array.isArray(t))return D("container must be an array");if(t.length<6)return D("missing fields");if(t[0]!==1)return D("unknown type");if(!Array.isArray(t[1]))return D("media ids must be an array");if(!t[1].every(x=>typeof x=="number"))return D("media ids must be numbers");if(typeof t[2]!="number")return D("sequence number must be a number");if(typeof t[3]!="number")return D("timestamp must be a number");if(typeof t[4]!="number")return D("flags must be a number");let e=t[1],l=t[2]>>>0,d=t[3]>>>0,p=(t[4]&1)!==0,F=t[t.length-1];return F instanceof Uint8Array?oj(new n(e,l,d,p,F)):D("payload must be bytes")}toBytes(){let A=Number(this.isEndOfSpurt),t=[1,this.mediaIds,this.sequenceNumber>>>0,this.timeStamp>>>0,A,this.payload];return new Uint8Array(YA(t,{forceFloat32:!0,ignoreUndefined:!0}))}};var BA=class{constructor(A,t){this.sampleRate=A;this.wasm=t;this.sequenceNumber=Math.random()*Math.pow(2,32)>>0;this.timestamp=Math.random()*Math.pow(2,32)>>0;this.connections=[];this.monitoring=!1;this.active=!1;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0};this.encoder=new t.Encoder(A,15,!0,w.VadPreload),this.encoder.complexity=navigator.hardwareConcurrency>=4?6:4,this.information=Gj(this.wasm),this.outBuffer=K(this.wasm,"u8",1270),vA(this.information,1)}setVad(A){this.encoder.set_volume_gate(A.volumeGate!==void 0,A.volumeGate?.attackThreshold??0,A.volumeGate?.releaseThreshold??0),this.encoder.set_speech_detection(A.voiceActivity!==void 0,A.voiceActivity?.attackThreshold??0,A.voiceActivity?.releaseThreshold??0)}setMedias(A){this.connections=A.filter(({mediaIds:t})=>t.length>0)}close(){pj(this.wasm,this.information),S(this.wasm,this.outBuffer),this.encoder.delete()}encode(A){for(this.encoder.push(A.byteOffset,this.information.values.byteOffset);;){let t=this.encoder.pop(this.connections.length===0?0:this.outBuffer.byteOffset,this.outBuffer.length);if(t===0)break;if(t<0){dj(\`failed encoding packet: \${t}\`);return}if(this.timestamp=this.timestamp+1800>>0,t===1)continue;this.sequenceNumber=this.sequenceNumber+1>>0;let e=this.active&&!this.encoder.active;this.active=this.encoder.active,this.monitoring=this.connections.some(l=>l.id===0);for(let l of this.connections){if(this.monitoring&&l.id!==0)continue;let d=new iA(l.mediaIds,this.sequenceNumber,this.timestamp,e,this.outBuffer.subarray(0,t));M(globalThis,["sendPacket",{connectionId:l.id,packet:d.toBytes()}])}}}onMessage(A){let[t,e]=A;switch(t){case"captureSetVad":this?.setVad(e);break;case"captureSetMedias":this?.setMedias(e.connections);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){return{sequenceNumber:this.sequenceNumber,timestamp:this.timestamp,connections:this.connections.map(A=>\`\${A.id} => \${A.mediaIds.join(",")}\`),active:this.active,monitoring:this.monitoring,information:{active:EA(this.information),speechProbability:$A(this.information),rmsDBFS:FA(this.information),volume:tj(this.information)},encoder:{sample_rate:this.encoder.sample_rate,fec_packet_loss:this.encoder.fec_packet_loss,voip:this.encoder.voip,vad_preload:this.encoder.vad_preload,complexity:this.encoder.complexity,speech_probability:this.encoder.speech_probability,rms_dbfs:this.encoder.rms_dbfs,active:this.encoder.active,speech_detection_enabled:this.encoder.speech_detection_enabled,speech_detection_going_active:this.encoder.speech_detection_going_active,speech_detection_going_inactive:this.encoder.speech_detection_going_inactive,volume_gate_enabled:this.encoder.volume_gate_enabled,volume_gate_going_active:this.encoder.volume_gate_going_active,volume_gate_going_inactive:this.encoder.volume_gate_going_inactive}}}},bA=class{constructor(A){this.wasm=A;this.medias=new Map;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0,numberTicksWithAudio:0};this.largestIndex=-1;this.decoders=K(this.wasm,"u32",w.MaxNumberOfDecoders),this.information=fj(this.wasm,w.MaxNumberOfDecoders),IA(this.information,[1,1])}close(){Cj(this.wasm,this.information);for(let{decoder:A}of this.medias.values())A.delete()}receivePacket(A,t){this.stats.numberPackets++;let e=iA.parse(t);if(e.type==="Failure"){this.stats.numberPacketError++;let l=Array.from(t).map(d=>d.toString(16).padStart(2,"0")).join("");console.error(\`failed decoding audio packet; reason: \${e.reason}, connection: \${A}, dump: \${l}\`);return}for(let l of e.value.mediaIds){let d=this.medias.get(LA({connectionId:A,mediaId:l}));if(d===void 0){this.stats.numberPacketsMediaNotFound++;continue}d.lastPacket=t;let q=K(this.wasm,"u8",e.value.payload.length);q.set(e.value.payload),d.decoder.push(e.value.sequenceNumber,e.value.timeStamp,e.value.isEndOfSpurt,q.byteOffset,q.length)}}insertMedia(A,t,e,l=[1,1]){let d=LA({connectionId:t,mediaId:e}),q=new this.wasm.Decoder;this.medias.set(d,{index:A,decoder:q,lastPacket:void 0}),this.decoders[A]=q.$$.ptr,this.largestIndex=Math.max(this.largestIndex,A),mA(this.information,A,l),jj(this.information,A,0),Aj(this.information,A,0)}removeMedia(A,t,e){let l=LA({connectionId:t,mediaId:e}),d=this.medias.get(l);if(!(d===void 0||d.index!==A)&&(this.medias.delete(l),Xr(this.information,A,0),this.decoders[A]=0,d.decoder.delete(),A===this.largestIndex)){for(A=A-1;A>=0&&this.decoders[A]===0;A--);this.largestIndex=A}}decode(A){return{hasAudio:this.wasm.pop_many(this.decoders.byteOffset,this.information.values.byteOffset,this.largestIndex+1,A.byteOffset)}}onMessage(A){let[t,e]=A;switch(t){case"playbackReceivePacket":this.receivePacket(e.connectionId,e.packet);break;case"playbackUpdateMedias":for(let{index:l,connectionId:d,mediaId:q}of e.removed)this.removeMedia(l,d,q);for(let{index:l,connectionId:d,mediaId:q,volume:p}of e.added)this.insertMedia(l,d,q,p);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){let A=[];for(let[t,e]of this.medias){let l=qj(t);A.push({index:e.index,connectionId:l.connectionId,mediaId:l.mediaId,rmsDBFS:hA(this.information,e.index),volume:Zr(this.information,e.index),voicedBlocks:rj(this.information,e.index),silentBlocks:Yr(this.information,e.index),time:e.decoder.time,consecutive_silence:e.decoder.consecutive_silence,last_voiced_time_point:e.decoder.last_voiced_time_point,sequence_number:e.decoder.sequence_number,packetsSeen:e.decoder.packets_seen,packetsInvalid:e.decoder.packets_invalid,packetsTooLate:e.decoder.packets_too_late,packetsTooEarly:e.decoder.packets_too_early,packetsRepeated:e.decoder.packets_repeated,packetsProcessed:e.decoder.packets_processed,packetsLost:e.decoder.packets_lost,rewinds:e.decoder.rewinds,cacheLength:e.decoder.cache_length,lastPacket:ej(e.lastPacket)})}return{largestIndex:this.largestIndex,globalVolume:zr(this.information),decoders:A}}};var xj=Ce(Hj()),yj=(0,xj.default)(),_j,Dj;globalThis.addEventListener("message",nr);async function nr(n){let A=n.data,[t,e]=A;switch(t){case"captureInit":e.workletPort.onmessage=nr,_j=new sr(e.sampleRate,await yj,e.refreshRate);break;case"playbackInit":e.workletPort.onmessage=nr,Dj=new lr(await yj,e.workletPort,e.refreshRate);break;case"close":globalThis.close();break}_j?.onMessage(A),Dj?.onMessage(A)}var sr=class extends BA{constructor(t,e,l){super(t,e);this.sampleRate=t;this.inBuffer=K(this.wasm,"f32",t*.02),this.updateHandle=setInterval(()=>this.update(),l),M(globalThis,["captureReady",{}])}close(){super.close(),S(this.wasm,this.inBuffer),clearInterval(this.updateHandle)}onMessage(t){super.onMessage(t);let[e,l]=t;switch(e){case"captureSetVolume":this.setVolume(l.value);break;case"captureTick":this.tick(l.buffer);break}}setVolume(t){vA(this.information,t)}tick(t){this.inBuffer.set(t,0),this.encode(this.inBuffer)}update(){M(globalThis,["captureUpdate",{active:EA(this.information),rmsDBFs:FA(this.information),speechProbability:$A(this.information)}])}dump(){return{type:"unshared capture worker",sampleRate:this.sampleRate,...super.dump()}}},lr=class extends bA{constructor(t,e,l){super(t);this.workletPort=e;this.id=w.PlaybackPreload,this.outBuffer=K(this.wasm,"f32",48e3*.02*2),this.updateHandle=setInterval(()=>this.update(),l),M(globalThis,["playbackReady",{}])}close(){super.close(),S(this.wasm,this.outBuffer),clearInterval(this.updateHandle)}onMessage(t){super.onMessage(t);let[e,l]=t;switch(e){case"playbackSetVolume":this.setVolume(l.index,l.value);break;case"playbackTick":this.tick();break}}setVolume(t,e){t==="global"?IA(this.information,e):mA(this.information,t,e)}tick(){this.stats.numberTicks++,this.id+=1;let{hasAudio:t}=this.decode(this.outBuffer);if(t){let e=this.outBuffer.slice();M(this.workletPort,["samples",{id:this.id,buffer:e}],[e.buffer])}}update(){let t=new Float32Array(this.information.length*2);for(let l=0;l<=this.largestIndex;l++)t[l]=hA(this.information,l);let e=[];for(let[l,d]of this.medias)e[d.index]={packetsBuffered:d.decoder.cache_length,packetsSeen:d.decoder.packets_seen,packetsProcessed:d.decoder.packets_processed,packetsTooEarly:d.decoder.packets_too_early,packetsTooLate:d.decoder.packets_too_late,packetsDropped:0,packetsInvalid:d.decoder.packets_invalid,packetsRepeated:d.decoder.packets_repeated,packetsLost:d.decoder.packets_lost};M(globalThis,["playbackUpdate",{activities:t,jitterStats:e}],[t.buffer])}dump(){return{type:"unshared playback worker",id:this.id,...super.dump()}}};})();
|
|
6436
|
-
`});var v0,O0=d(()=>{v0='"use strict";(()=>{var P=Object.defineProperty;var M=(e,t)=>{for(var r in t)P(e,r,{get:t[r],enumerable:!0})};var u={};M(u,{AdditionalCaptureBlocks:()=>R,AdditionalPlaybackBlocks:()=>E,ClockJumpCheckInterval:()=>_,ClockJumpThreshold:()=>N,ConnectInterval:()=>Z,ConnectTimeout:()=>J,DefaultRefreshRate:()=>C,DefaultVideoCodec:()=>q,HealthCheckTimeout:()=>O,MainConnectionPingInterval:()=>W,MaxNumberOfDecoders:()=>L,MinDBFs:()=>v,MinTokenLifetime:()=>z,MinTokenRefreshInterval:()=>G,PlaybackPreload:()=>F,RenderQuantumSize:()=>V,VadPreload:()=>D,WebRtcIceTimeout:()=>$,WebRtcStatsSnapshotInterval:()=>j,WebRtcTimeout:()=>H});var E=3,R=3,F=3,C=250,D=3,L=512,V=128,v=-758.596,O=1e4,_=1e3,N=1e4,W=3e3,j=1e3,$=3e3,H=1e4,J=5e3,z=6e4,G=5e3,Z=[0,100,200,200,500],q="H264";function d(e,t,r){return e.postMessage(t,r)}var Q;(e=>{let t;(r=>(r[r.InvalidPassword=-1]="InvalidPassword",r[r.Unknown=0]="Unknown",r[r.Unencrypted=1]="Unencrypted",r[r.Encrypted=2]="Encrypted"))(t=e.PeerCipherStatus||={})})(Q||={});var{Deno:k}=globalThis,Y=typeof k?.noColor=="boolean"?k.noColor:!1,K=!Y;function m(e,t){return{open:`\\x1B[${e.join(";")}m`,close:`\\x1B[${t}m`,regexp:new RegExp(`\\\\x1b\\\\[${t}m`,"g")}}function h(e,t){return K?`${t.open}${e.replace(t.regexp,t.open)}${t.close}`:e}function p(e){return h(e,m([0],0))}function U(e){return h(e,m([1],22))}function X(e){return h(e,m([2],22))}var ke=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),ee=new Date,f=(e=>(e[e.CRITICAL=0]="CRITICAL",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG",e))(f||{}),T={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},te={4:X,3:p,2:p,1:U,0:U};function re({message:e}){return String(e)}function S(e){return JSON.stringify({timestamp:e.date.toISOString(),level:f[e.level],message:e.message,extra:e.extra})}function I(e){function t(c,i){return[Math.floor(c/i),c%i]}function r(){let c,i=e.date.valueOf()-ee.valueOf();[i,c]=t(i,1e3);let[B,A]=t(i,60);return`${B.toString().padStart(4,"0")}:${A.toString().padStart(2,"0")}.${c.toString().padStart(3,"0")}`}function n(){return e.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(e.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(e.extra)}let s=T[e.level],a=e.logger.name!==void 0?`@${e.logger.name}`:"";return`${p(r())}${a} ${s} ${te[e.level](String(e.message))}${n()}`}function ne(e){let t=`[${e.date.toISOString()}]`,r=`[${f[e.level]}]`,n=e.logger.name!==void 0?`[${e.logger.name}] `:"",s=T[e.level];return`${t} ${s} ${r.padEnd(7," ")} ${n}${e.message}`}function se(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var w=class{static sparse=re;static json=S;static pretty=I;static structured=ne;static default=se()?I:S;constructor(){}};var oe=class{formatter;consoleObject;filter;constructor(e=w.default,t=4,r=console){this.filter=t,this.formatter=e,this.consoleObject=r}handle(e){let t=this.formatter(e);switch(e.level){case 0:case 1:this.consoleObject.error(t);break;case 2:this.consoleObject.warn(t);break;case 3:this.consoleObject.info(t);break;case 4:this.consoleObject.debug(t);break}}};var o=class{#e;sinks;filter;parent;get name(){return this.#e}constructor(e,t=void 0,r=[],n=void 0){this.#e=t,this.sinks=r,this.filter=e,this.parent=n}log(e,t,r=void 0){let n={date:new Date,level:e,logger:this,message:t,extra:r};this.filter<e||this.insert(n)}insert(e){if(!(this.filter<e.level)){for(let t of this.sinks)t.filter>=e.level&&t.handle(e);this.parent!==void 0&&this.parent.insert(e)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},l=globalThis[Symbol.for("odin-global-logger")]??=new o(3,void 0,[new oe]),ae=o.prototype.log.bind(l,1),ie=o.prototype.log.bind(l,2),ce=o.prototype.log.bind(l,3),ue=o.prototype.log.bind(l,4),Ue=o.prototype.log.bind(l);var b=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.blocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"init":this.state=new y(s.workerPort,sampleRate*.02);break;case"close":this.alive=!1;break;case"dump":s.result.postMessage(this.dump());break}}process(r,n,s){if(this.state===void 0||r.length<1||r[0].length<1)return this.alive;let a=this.state.fill(0,r[0][0]);return this.state.offset===this.state.length&&(this.state.flush(),this.state.fill(a,r[0][0])),this.alive}dump(){return{type:"unshared capture worklet",alive:this.alive,sampleRate,offset:this.state?.offset||null,length:this.state?.length||null,blocks:this.blocks}}},x=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.silenceBlocks=0;this.voiceBlocks=0;this.totalBlocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"close":this.alive=!1;break;case"init":this.state=new g(s.workerPort,sampleRate*.02),s.workerPort.onmessage=this.onMessage.bind(this);break;case"samples":this.state?.add(s.id,s.buffer);break;case"dump":s.result.postMessage(this.dump());break}n==="close"&&(this.alive=!1)}process(r,n,s){if(this.state===void 0||n.length<1||n[0].length<2)return this.alive;let a=this.state.fill(0,n[0][0],n[0][1]);return a<u.RenderQuantumSize&&(this.totalBlocks+=1,this.state.next(),this.state.hasVoice?this.voiceBlocks+=1:this.silenceBlocks+=1,this.state.fill(a,n[0][0],n[0][1])),this.alive}dump(){return{type:"unshared playback worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,hasVoice:this.state?.hasVoice??!1,silenceBlocks:this.silenceBlocks,voiceBlocks:this.voiceBlocks,totalBlocks:this.totalBlocks}}},y=class{constructor(t,r){this.port=t;this.length=r;this.offset=0,this.buffer=new Float32Array(r)}fill(t,r){let n=Math.min(r.length-t,this.length-this.offset);return this.buffer.set(r.subarray(t,t+n),this.offset),this.offset+=n,t+n}flush(){d(this.port,["captureTick",{buffer:this.buffer}],[this.buffer.buffer]),this.offset=0,this.buffer=new Float32Array(this.length)}},g=class{constructor(t,r){this.port=t;this.length=r;this.cache=[];this.id=-1,this.offset=0,this.buffer=void 0,this.next()}get hasVoice(){return this.buffer!==void 0}fill(t,r,n){let s=Math.min(u.RenderQuantumSize-t,this.length-this.offset);return this.buffer!==void 0&&(r.set(this.buffer.subarray(this.offset,this.offset+s),t),n.set(this.buffer.subarray(this.offset+this.length,this.offset+this.length+s),t)),this.offset+=s,t+s}add(t,r){this.cache.push({id:t,buffer:r})}next(){for(this.id+=1;this.cache[0]?.id<this.id;)this.cache.shift();this.cache[0]?.id===this.id?(this.buffer=this.cache[0].buffer,this.cache.shift()):this.buffer=void 0,this.offset=0,d(this.port,["playbackTick",{}])}};registerProcessor("OdinCaptureProcessor",b);registerProcessor("OdinPlaybackProcessor",x);})();\n'});var T0={};kx(T0,{UnsharedCaptureWorker:()=>mx,UnsharedPlaybackWorker:()=>Gx,createCaptureWorker:()=>rF,createPlaybackWorker:()=>DF});function rF(D,x,A,F,r=C.DefaultRefreshRate){return FF.enqueue(async()=>{let[t,j]=await jx(B0,v0,D,"OdinCaptureProcessor",{channelCount:1,numberOfInputs:1,numberOfOutputs:0});return console.warn("SharedArrayBuffer is not available; creating ODIN CaptureWorker in fallback mode"),mx.create(D,x,A,r,t,j,F)})}async function DF(D,x=C.DefaultRefreshRate){if(D.sampleRate!==48e3)throw new Error("playback sample rate must be 48kHz ");let[A,F]=await jx(B0,v0,D,"OdinPlaybackProcessor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2]});return Gx.create(D,x,A,F)}var M0,FF,mx,Gx,S0=d(()=>{"use strict";M0=require("@4players/odin-common");b();qx();J0();O0();FF=new M0.Strand;mx=class D extends Dx{constructor(A,F,r,t,j){super(A,F,r,t,j);this._Activity=$;this._SpeechProbability=0;F.addEventListener("message",this._OnMessages.bind(this))}static async create(A,F,r,t,j,e,v){let{port1:f,port2:u}=new MessageChannel;return o(j,["captureInit",{sampleRate:A.sampleRate,refreshRate:t,workletPort:f}],[f]),await xx(j,"captureReady"),o(e.port,["init",{workerPort:u}],[u]),new D(e,j,F,r,v)}get activity(){return this._Activity}get speechProbability(){return this._SpeechProbability}setVolume(A){o(this.worker,["captureSetVolume",{value:A}])}_OnMessages(A){super._OnMessages(A);let[F,r]=A.data;F==="captureUpdate"&&(this._Activity={isSilent:!r.active,rmsDBFS:r.rmsDBFs},this._SpeechProbability=r.speechProbability)}},Gx=class D extends rx{constructor(A,F,r){super(A,F,r);this.activities=new Float32Array;this.jitterStats=[]}static async create(A,F,r,t){let{port1:j,port2:e}=new MessageChannel;return o(r,["playbackInit",{workletPort:j,refreshRate:F}],[j]),await xx(r,"playbackReady"),o(t.port,["init",{workerPort:e}],[e]),new D(A,t,r)}getActivity(A){let F=this.medias.get(p(A));if(F===void 0)return;let r=this.activities.at(F.index);if(r!==void 0)return r===0?$:{isSilent:!1,rmsDBFS:r}}getJitterStats(A){let F=this.medias.get(p(A));if(F===void 0)return;let r=this.jitterStats.at(F.index);if(r!==void 0)return r}setGlobalVolume(A){o(this.worker,["playbackSetVolume",{index:"global",value:A}])}setVolume(A,F){let r=this.medias.get(p(A));r!==void 0&&o(this.worker,["playbackSetVolume",{index:r.index,value:F}])}_GetFreeIndex(){let A=super._GetFreeIndex();if(A!==void 0)return A;if(this.medias.size<C.MaxNumberOfDecoders)return this.medias.size}_OnMessages(A){super._OnMessages(A);let[F,r]=A.data;F==="playbackUpdate"&&(this.activities=r.activities,this.jitterStats=r.jitterStats)}}});var qF={};kx(qF,{SESSION_ID:()=>bx,createPlugin:()=>pF});module.exports=hA(qF);var dF=require("@4players/odin-common");b();var Bx=require("@4players/odin-common");b();var ex=require("@4players/odin-common");b();var N=require("@4players/odin-common");async function y0(D,x,A){let F;if(x.device?.device.kind==="track"&&x.device?.device.audioTrack)F=new MediaStream([x.device.device.audioTrack]);else{let j=x.device?{exact:x.device.device.deviceId==="default"?void 0:x.device.device.deviceId}:void 0;try{let e=await Promise.race([navigator.mediaDevices.getUserMedia({audio:{echoCancellation:A.echoCanceller,noiseSuppression:A.noiseSuppression!=="None",autoGainControl:A.gainController,echoCancellationType:"system",deviceId:j}}),(0,N.sleep)(3e4,"timeout")]);if(e==="timeout")return(0,N.failure)("getUserMedia; timeout");F=e}catch(e){return(0,N.failure)(`getUserMedia; ${e}`)}}let r=F.getAudioTracks()[0].getSettings().sampleRate,t=await D.audioContexts.acquire(r);return(0,N.success)(t.createMediaStreamSource(F))}function Ax(D){D.getTracks().forEach(x=>{x.stop(),D.removeTrack(x)})}async function _0(D){return new y({deviceId:D.id,kind:"track",name:D.label??"MediaStreamTrack",audioTrack:D},!1)}async function hx(){if((0,N.isFirefoxBrowser)()){let r=await RA("microphone");(r==="granted"||r===!1)&&await VA("audio")}let D=(await navigator.mediaDevices.enumerateDevices()).filter(r=>!!r.label),x=[],A=new y({deviceId:"default",name:"Default",kind:"audioinput"},!0),F=new y({deviceId:"default",name:"Default",kind:"audiooutput"},!0);x.push(A),x.push(F);for(let r of D){if(r.deviceId==="default"){r.kind==="audioinput"&&(A=new y({deviceId:"default",name:r.label,kind:"audioinput"},!0),x[0]=A),r.kind==="audiooutput"&&(F=new y({deviceId:"default",name:r.label,kind:"audiooutput"},!0),x[1]=F);continue}r.kind==="audioinput"&&x.push(new y({deviceId:r.deviceId,name:r.label,kind:"audioinput"},!1)),r.kind==="audiooutput"&&x.push(new y({deviceId:r.deviceId,name:r.label,kind:"audiooutput"},!1))}return x}async function RA(D){try{return(await navigator.permissions.query({name:D})).state}catch{return!1}}async function VA(D){try{let x=await navigator.mediaDevices.getUserMedia({[D]:!0});return x?.getTracks().forEach(A=>{A.stop(),x.removeTrack(A)}),!0}catch{return!1}}var Ix=require("@4players/odin-common");b();var R0=(0,Ix.isSharedArrayBufferCapable)()&&!(0,Ix.isSafariBrowser)()?Promise.resolve().then(()=>(K0(),P0)):Promise.resolve().then(()=>(S0(),T0));async function V0(D,x,A,F){return R0.then(r=>r.createCaptureWorker(D,x,A,F,C.DefaultRefreshRate))}async function U0(D){return R0.then(x=>x.createPlaybackWorker(D,C.DefaultRefreshRate))}var w=class{constructor(x,A){this.controller=x;this._Medias=new Map;this._Vad={...ex.VAD_DEFAULTS};this._Apm={...ex.APM_DEFAULTS};this._Volume=1;this._Queue=Promise.resolve();this._DeviceCb=()=>{this._enqueue(async()=>{!this._DeviceParameters?.device||(await hx()).some(r=>r.device.deviceId===this._DeviceParameters?.device?.device.deviceId)||this._Capture?.source.mediaStream?.getAudioTracks()[0]?.readyState==="live"||(this._DeviceParameters?.onStatusChanged?.("stopped"),navigator.mediaDevices.removeEventListener("devicechange",this._DeviceCb),this._DeviceParameters=void 0,await this._closeImpl())}).catch(x=>l("device-change handler failed",x))};A.apm&&this.setApm(A.apm).catch(console.error),A.vad&&this.setVad(A.vad),typeof A.volume<"u"&&this.setVolume(A.volume).catch(console.error),this.uid=(0,ex.generateUUID)(),this.#x=A.customType,this.#A=A.ref}#x;#A;_enqueue(x){let A=this._Queue.then(x,x);return this._Queue=A.catch(()=>{}),A}get vad(){return this._Vad}get apm(){return this._Apm}get volume(){return this._Volume}get activity(){return this._Capture?.worker.activity??$}get speechProbability(){return this._Capture?.worker.speechProbability??0}get deviceId(){return this._DeviceParameters?.device?.device.deviceId}async start(x,A){let F=this._Medias.get(A.connectionId);F===void 0&&this._Medias.set(A.connectionId,F=new Set),E(`starting audio capture media ${A.mediaId} on connection ${A.connectionId}`),!F.has(A.mediaId)&&(F.add(A.mediaId),x.mainConnection?.id===A.connectionId&&await x.request("StartMedia",{media_id:A.mediaId,properties:{kind:"audio",uid:this.uid,ref:this.#A,customType:this.#x}}).catch(r=>a(`StartMedia got rejected; ${r}`)),this._UpdateMedias())}async stop(x,A){let F=this._Medias.get(A.connectionId);E(`stopping audio capture media ${A.mediaId} on connection ${A.connectionId}`),F?.delete(A.mediaId)&&(x.mainConnection?.id===A.connectionId&&await x.request("StopMedia",{media_id:A.mediaId}).catch(r=>a(`StopMedia got rejected; ${r}`)),this._UpdateMedias())}setVad(x){n("updating vad config",x),this._Vad=x,this._Capture&&this._Capture.worker.setVad(x)}async setApm(x){await this._enqueue(()=>this._setApmImpl(x))}async _setApmImpl(x){n("updating apm config",x),this._Apm=x,this._DeviceParameters&&await this._setDeviceImpl(this._DeviceParameters)}async setDevice(x){await this._enqueue(()=>this._setDeviceImpl(x))}async _setDeviceImpl(x){n("updating capture device parameters",x);let A=this._DeviceParameters;if(this._DeviceParameters=x,this._Volume!=="muted")try{let F=await y0(this.controller,x,{...this._Apm,echoCanceller:this._Monitor?!1:this._Apm.echoCanceller});if(F.type!=="Success"){a(`unable to open capture device; ${F.reason}`),this._DeviceParameters=A;return}if(this._DeviceParameters.onStatusChanged&&navigator.mediaDevices.addEventListener("devicechange",this._DeviceCb),this._Capture!==void 0){Ax(this._Capture.source.mediaStream);try{this._Capture.source.disconnect(this._Capture.worker.worklet)}catch(r){l("failed to disconnect previous capture source",r)}}this._Capture===void 0||this._Capture.worker.worklet.context!==F.value.context?(this._Capture?.worker.close(),this._Capture={worker:await V0(F.value.context,this.controller.sink,this.controller.receiveMonitoredPacket.bind(this.controller),new WeakRef(this)),source:F.value},await this._UpdateMedias(),this._Capture.worker.setVolume(this._Volume),this.setVad(this.vad)):this._Capture.source=F.value,this._Capture.source.connect(this._Capture.worker.worklet)}catch(F){throw new Error(`Error in setDevice(); ${F}`)}}async setVolume(x){await this._enqueue(()=>this._setVolumeImpl(x))}async _setVolumeImpl(x){n(`updating capture volume to ${x}`),this._Volume=x,x==="muted"?await this._closeImpl():(!this._Capture&&this._DeviceParameters&&await this._setDeviceImpl(this._DeviceParameters),this._Capture?.worker.setVolume(x))}async close(){await this._enqueue(()=>this._closeImpl())}async _closeImpl(){if(n("closing audio capture"),this._Capture!==void 0){this._Capture.worker.close(),Ax(this._Capture.source.mediaStream);try{this._Capture.source.disconnect(this._Capture.worker.worklet)}catch(x){l("failed to disconnect audio node",x)}await this.controller.audioContexts.release(this._Capture.source.context)}navigator.mediaDevices.removeEventListener("devicechange",this._DeviceCb),this._Capture=void 0}async dump(){let x=[];for(let[A,F]of this._Medias)x.push(`${A} => ${Array.from(F.values()).join(",")}`);return{uid:this.uid,ref:this.#A??null,customType:this.#x??null,worker:await this._Capture?.worker.dump()??null,vad:this._Vad,apm:this._Apm,volume:this._Volume,medias:x}}async _UpdateMedias(){if(this._Capture!==void 0){let x=Array.from(this._Medias).map(([A,F])=>({id:A,mediaIds:Array.from(F)}));this._Capture.worker.setMedias(x)}}async startLoopback(){this._Monitor===void 0&&(n("starting audio capture loopback"),this.setApm(this._Apm),this._Monitor=await this.controller.createAudioPlayback({uid:"loopback"}),this._Monitor.start({connectionId:0,mediaId:0}),this._Medias.set(0,new Set([0])),await this._UpdateMedias())}async stopLoopback(){this._Monitor!==void 0&&(n("stopping audio capture loopback"),this._Monitor.close(),this._Monitor=void 0,this.setApm(this._Apm),this._Medias.delete(0),await this._UpdateMedias())}};var ix=require("@4players/odin-common");b();var I=class{constructor(x,A){this.controller=x;this.parameters=A;this.uid=(0,ix.generateUUID)()}#x;#A=new Map;#F;get customType(){return this.parameters?.customType}get mediaStream(){return this.#x}get audioCapture(){return this.#F}get volume(){return(0,ix.assert)(this.audioCapture,"getting the volume failed, this video has no Audio"),this.audioCapture.volume}async setVolume(x){(0,ix.assert)(this.audioCapture,"setVolume() failed, this video has no Audio"),await this.audioCapture.setVolume(x)}get vad(){return(0,ix.assert)(this.audioCapture,"getting the vad config failed, this video has no Audio"),this.audioCapture.vad}setVad(x){(0,ix.assert)(this.audioCapture,"setVad() failed, this video has no Audio"),this.audioCapture.setVad(x)}async setDevice(x,A={voiceActivity:void 0,volumeGate:void 0}){if(this.#x)throw new Error("This VideoCapture already has a MediaStream.");if(!x.getVideoTracks()[0])throw new Error("Error when calling setDevice(), MediaStream does not contain a VideoStreamTrack!");if(this.#x=x,x.getAudioTracks()[0]){let r={device:await _0(x.getAudioTracks()[0]),vad:A,ref:this.uid};this.#F=await this.controller.createAudioCapture(r)}}async start(x,A){let F=this.#A.get(A.connectionId);if(F===void 0&&this.#A.set(A.connectionId,F=new Set),!F.has(A.mediaId)&&(F.add(A.mediaId),x.mainConnection?.id===A.connectionId)){let r={kind:"video",codec:this.parameters?.codec??C.DefaultVideoCodec,ref:this.#F?.uid,uid:this.uid};this.parameters?.customType&&(r.customType=this.parameters.customType),await x.request("StartMedia",{media_id:A.mediaId,properties:r}).catch(t=>a(`StartMedia got rejected; ${t}`))}}async stop(x,A){this.#x&&Ax(this.#x),this.#A.get(A.connectionId)?.delete(A.mediaId)&&x.mainConnection?.id===A.connectionId&&await x.request("StopMedia",{media_id:A.mediaId}).catch(r=>a(`StopMedia got rejected; ${r}`))}async dump(){let x=[];for(let[A,F]of this.#A)x.push(`${A} => ${Array.from(F.values()).join(",")}`);return{uid:this.uid,ref:this.#F?.uid??null,customType:this.customType??null,tracks:this.#x?.getVideoTracks().map(A=>({id:A.id,kind:A.kind,label:A.label,ready:A.readyState,muted:A.muted,settings:{...A.getSettings()}}))??[],volume:this.#F?.volume??0,medias:x}}close(){this.#x&&Ax(this.#x),this.audioCapture?.close(),this.#F=void 0}};var Pr=require("@4players/odin-common");b();var _=class{constructor(x,A,F){this.controller=x;this.uid=A;this.customType=F}get volume(){return this.controller.playbackGetVolume(this.uid)}get activity(){return this.controller.playbackGetActivity(this.uid)}get jitterStats(){return this.controller.playbackGetJitterStats(this.uid)}start(x){E(`starting audio playback media ${x.mediaId} on connection ${x.connectionId}`),this.controller.playbackStart(this.uid,x)}stop(x){E(`stopping audio playback media ${x.mediaId} on connection ${x.connectionId}`),this.controller.playbackStop(this.uid,x)}setVolume(x){n(`updating audio playback media '${this.uid}' volume to ${x}`),this.controller.playbackSetVolume(this.uid,x)}close(){n(`closing audio playback media '${this.uid}'`),this.controller.closePlayback(this.uid)}};function tF(D,x){let A=D.audioContext;if(typeof A.setSinkId=="function"){D.connectOutput(A.destination);let F,r=()=>{if(A.state==="running"&&F!==void 0){let t=F;F=void 0,A.setSinkId(t).catch(j=>l("failed to apply deferred sinkId",j))}};return A.addEventListener("statechange",r),{async setSinkId(t){if(A.state!=="running"){F=t;return}await A.setSinkId(t)},dispose(){A.removeEventListener("statechange",r)}}}if(x&&typeof document<"u"&&typeof HTMLAudioElement<"u"&&typeof HTMLAudioElement.prototype.setSinkId=="function"){let F=A.createMediaStreamDestination();D.connectOutput(F);let r=new Audio;r.srcObject=F.stream,r.muted=!1,r.volume=1;let t=!1,j=!1,e={once:!0,passive:!0,capture:!0},v=()=>{j=!1,k()},f=()=>{j||t||(j=!0,document.addEventListener("pointerdown",v,e),document.addEventListener("keydown",v,e))},u=()=>{j&&(j=!1,document.removeEventListener("pointerdown",v,!0),document.removeEventListener("keydown",v,!0))},k=()=>{t||r.play().catch(sx=>{t||(sx instanceof DOMException&&sx.name==="NotAllowedError"?f():l("failed to start playback audio element",sx))})},ux=()=>{A.state==="running"&&r.paused&&k()};return A.addEventListener("statechange",ux),k(),{async setSinkId(sx){await r.setSinkId(sx)},dispose(){t=!0,u(),A.removeEventListener("statechange",ux),r.pause(),r.srcObject=null,r.removeAttribute("src");try{r.load()}catch{}F.disconnect()}}}return D.connectOutput(A.destination),{async setSinkId(){},dispose(){}}}var gx=class{constructor(x){this.audioContextFactory=x;this.entries=[]}async acquire(x){for(let F of this.entries){if(F.sampleRate===x)return F.references+=1,F.audioContext;if(F.sampleRate===void 0&&F.audioContext.sampleRate===x)return F.references+=1,F.audioContext}let A={sampleRate:x,audioContext:await this.audioContextFactory(x),references:1};return this.entries.push(A),A.audioContext}async release(x){let A=this.entries.findIndex(F=>F.audioContext===x);if(!(A<0)&&(this.entries[A].references-=1,this.entries[A].references<=0)){let F=this.entries[A].audioContext;this.entries.splice(A,1),await F.close()}}close(){for(let x of this.entries)x.audioContext.close()}},$x=class D{constructor(x,A,F=!1){this.audioContexts=x;this.sink=A;this.enableHTMLAudioElementFallback=F;this.audioCaptures=[];this.videoCaptures=[];this.globalVolume=[1,1];this.playbacks=new Map;this.setPlaybackStrand=new Bx.Strand}async create(x,A){return new D(x,A)}receivePacket(x,A){this.playbackWorker?.receivePacket(x,A)}receiveMonitoredPacket(x,A){let F=A.slice();this.receivePacket(x,F)}async createAudioPlayback(x){let A=this.playbacks.get(x.uid),F=x.volume;if(A===void 0){F=F??[1,1];let r=new _(this,x.uid,x.customType);A={id:void 0,volume:F,playback:r},this.playbacks.set(x.uid,A)}return F!==void 0&&A.playback.setVolume(F),A.playback}async createAudioCapture(x){let A=new w(this,x);return await A.setDevice(x),this.audioCaptures.push(new WeakRef(A)),A}async createVideoCapture(x,A){let F=new I(this,A);return await F.setDevice(x),this.videoCaptures.push(new WeakRef(F)),F}playbackSetDevice(x){return this.setPlaybackStrand.enqueue(async()=>{let A=x?.device.deviceId??"";if(A==="default"&&(A=""),this.playbackWorker===void 0){let F=await this.audioContexts.acquire(48e3);this.playbackWorker=await U0(F),this.playbackSink=tF(this.playbackWorker,this.enableHTMLAudioElementFallback),this.playbackWorker.setGlobalVolume(this.globalVolume);for(let[,r]of this.playbacks)r.id!==void 0&&this.playbackWorker.addMedias(r.id.connectionId,[r.id.mediaId],r.volume)}if(x&&this.playbackSink!==void 0)try{await this.playbackSink.setSinkId(A)}catch(F){l("failed to set playback sink",F)}})}playbackSetGlobalVolume(x){this.globalVolume=x,this.playbackWorker?.setGlobalVolume(this.globalVolume)}playbackStart(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.id!==void 0&&this.playbackStop(x,F.id),F.id=A,this.playbackWorker?.addMedias(A.connectionId,[A.mediaId],F.volume))}playbackStop(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.id!==A&&l(`playback media ${A.mediaId} on connection ${A.connectionId} is out of sync`,F.id,A),F.id=void 0,this.playbackWorker?.removeMedias(A.connectionId,[A.mediaId]))}playbackGetActivity(x){let A=this.playbacks.get(x);return A?.id===void 0?$:this.playbackWorker?.getActivity(A.id)??$}playbackGetJitterStats(x){let A=this.playbacks.get(x);return A?.id===void 0?Bx.JITTER_STATS_INITIAL:this.playbackWorker?.getJitterStats(A.id)??Bx.JITTER_STATS_INITIAL}playbackSetVolume(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.volume=A,F.id!==void 0&&this.playbackWorker?.setVolume(F.id,F.volume))}playbackGetVolume(x){return this.playbacks.get(x)?.volume??[1,1]}closePlayback(x){let A=this.playbacks.get(x);A!==void 0&&(A.id!==void 0&&this.playbackStop(x,A.id),this.playbacks.delete(x))}close(){this.playbackSink?.dispose(),this.playbackSink=void 0,this.playbackWorker?.close(),this.audioContexts.close()}async dump(){let x=[];for(let r of this.audioCaptures){let t=r.deref();t!==void 0&&x.push(await t.dump())}let A=[];for(let r of this.videoCaptures){let t=r.deref();t!==void 0&&A.push(await t.dump())}let F=[];for(let[r,t]of this.playbacks)F.push({uid:r,id:t.id||null,volume:t.volume});return{globalVolume:this.globalVolume,playbackWorker:await this.playbackWorker?.dump()||null,audioCaptures:x,videoCaptures:A,playbacks:F}}},y=class{constructor(x,A=!1){this.device=x;this.isDefault=A}get type(){switch(this.device.kind){case"audioinput":return"AudioCapture";case"audiooutput":return"AudioPlayback";default:(0,Bx.assert)(!1,"not supported device")}}get id(){return this.device.deviceId}get name(){return this.device.name}};var ax=require("@4players/odin-common"),AA=require("@msgpack/msgpack");b();var QD=require("@4players/odin-common");b();var K=require("@4players/odin-common"),W=require("@4players/odin-common/api");b();var U=require("@4players/odin-common"),Z=require("@4players/odin-common/api"),yx=require("@msgpack/msgpack");b();var V=class{constructor(x){this.stream=x;this._SendQueue=[];this._RecvQueue=[];this._EventQueue=[];this._Requests=new Map;this._Close=new AbortController;this._NextId=1;x instanceof WebSocket?(x.addEventListener("open",this._OnWebSocketOpen.bind(this)),x.addEventListener("close",this.close.bind(this)),x.addEventListener("message",A=>this._OnRpcMessage(A.data)),x.binaryType="arraybuffer"):(eF(x.readable.getReader(),this._OnRpcMessage.bind(this)).finally(this.close.bind(this)),this._Writer=x.writable.getWriter()),this._Close.signal.addEventListener("abort",this._Cleanup.bind(this),{once:!0})}get closed(){return this._Close.signal.aborted}get closeSignal(){return this._Close.signal}async request(x,A,F){if(this.closed)return Promise.resolve("closed");let r=this._NextId,t=F===void 0?void 0:setTimeout(()=>this._TimeoutRequest(r),F);return this._Send([0,r,x,A]),new Promise(j=>{this._Requests.set(r,{accept:j,timeoutId:t}),this._NextId+=1})}notify(x,A){this.closed||this._Send([2,x,A])}recv(){if(this.closed)return Promise.resolve("closed");let x=this._EventQueue.shift();return x!==void 0?Promise.resolve(x):new Promise(A=>this._RecvQueue.push(A))}close(){this._Close.abort()}_TimeoutRequest(x){let A=this._Requests.get(x);A!==void 0&&(this._Requests.delete(x),clearTimeout(A.timeoutId),A.accept("timeout"))}_Send(x){let A;x instanceof Uint8Array?A=x:A=new Uint8Array((0,yx.encode)(x,{ignoreUndefined:!0,forceFloat32:!0})),this.stream instanceof WebSocket?this.stream.send(A):this._Writer.write(A)}_OnWebSocketOpen(x){for(let A of this._SendQueue)this._Send(A);this._SendQueue.length=0}_OnRpcMessage(x){let A=jF(x);if(A.type!=="Success"){this.close();return}switch(A.value[0]){case 0:this._Send([1,A.value[1],"not supported",null]);break;case 1:this._OnResponse(A.value[1],A.value[2],A.value[3]);break;case 2:this._OnEvent(A.value[1],A.value[2]);break}}_OnResponse(x,A,F){let r=this._Requests.get(x);r!==void 0&&(clearTimeout(r.timeoutId),r.accept(A===null?(0,U.success)(F):(0,U.failure)(A)))}_OnEvent(x,A){let F=this._RecvQueue.shift();F!==void 0?F({name:x,properties:A}):this._EventQueue.push({name:x,properties:A})}_Cleanup(){for(let x of this._Requests.values())clearTimeout(x.timeoutId),x.accept("closed");this._Requests.clear();for(let x of this._RecvQueue)x("closed");this._RecvQueue.length=0,this._SendQueue.length=0,this.stream instanceof WebSocket?this.stream.close():this._Writer?.close().catch(()=>{})}},Y=class{constructor(x,A,F){this.rpc=x;this._Commands=A;this._Events=F}get closed(){return this.rpc.closed}get closeSignal(){return this.rpc.closeSignal}async request(x,A,F){A=(0,Z.parseRequest)(x,A,this._Commands);let r=await this.rpc.request(x,A,F);if(r==="closed"||r==="timeout"||r.type==="Failure")return r;let t=(0,Z.parseResponse)(x,r.value,this._Commands);return t!==void 0?(0,U.success)(t):(0,U.failure)("response schema failed validation")}notify(x,A){A=(0,Z.parseRequest)(x,A,this._Commands),this.rpc.notify(x,A)}async recv(){let x=await this.rpc.recv();if(x==="closed")return x;let A=C0(this._Events,x);return A!==void 0?A:(W0(this._Events,x.name)?(a(`schema validation for ${x.name} failed; closing connection`),this.rpc.close()):l(`dropping unknown event ${x.name}`),"closed")}close(){this.rpc.close()}};function jF(D){try{return(0,U.success)(Z.MessagePackRpcSchema.parse((0,yx.decode)(new Uint8Array(D))))}catch(x){return(0,U.failure)(String(x))}}function C0(D,x){if(!W0(D,x.name))return;let A=D[x.name].safeParse(x.properties);if(A.success)return{name:x.name,properties:A.data}}function W0(D,x){return x in D}async function eF(D,x){let A=new Uint8Array;for(;;){let F=q0(A,0);if(F===B){D.cancel("protocol violation");break}if(F!==m&&F<=A.length){x(A.subarray(0,F)),A=A.subarray(F);continue}let r;try{r=await D.read()}catch{break}if(r.done)break;A=BF(A,r.value)}A.length>0&&l("unprocessed bytes left in rpc stream",A)}function BF(D,x){if(D.length===0)return x;if(x.length===0)return D;let A=new Uint8Array(D.length+x.length);return A.set(D,0),A.set(x,D.length),A}var P=require("@4players/odin-common"),Q0=require("@4players/odin-common/api");b();var g=class D{constructor(x,A){this.text=x;this.claims=A;if(A.ups!==void 0){let F=D.parse(A.ups);F.type==="Success"?this._Upstream=F.value:a(`upstream in token can not be parsed; ${F.reason}`)}}static parse(x){let A=x.split(".");if(A.length!==3)return(0,P.failure)("expected three segments");let F=(0,P.fromBase64Url)(A[1]);if(F.type==="Failure")return(0,P.failure)(`invalid token; ${F.reason}`);let r;try{r=JSON.parse(F.value)}catch(j){return(0,P.failure)(`invalid token; ${j}`)}let t=Q0.TokenClaimsSchema.safeParse(r);return t.success===!1?(0,P.failure)(`invalid token; ${t.error}`):(0,P.success)(new D(x,t.data))}get timeLeft(){return this.claims.exp===void 0?1/0:this.claims.exp*1e3-Date.now()}get upstream(){return this._Upstream}get defaultRoomId(){return Array.isArray(this.claims.rid)?this.claims.rid.length===1?this.claims.rid[0]:void 0:this.claims.rid}hasAudience(x){return this.claims.aud===void 0&&x==="gateway"?!0:Array.isArray(this.claims.aud)?this.claims.aud.includes(x):this.claims.aud===x}toString(){return this.text}};var vx=require("@4players/odin-common");b();function z0(D){typeof globalThis.rtcDataChannels>"u"&&(globalThis.rtcDataChannels=[]),Array.isArray(globalThis.rtcDataChannels)&&globalThis.rtcDataChannels.length<=100&&globalThis.rtcDataChannels.push(D)}function X0(D){let x=globalThis.rtcDataChannels?.indexOf(D);x!==void 0&&x>=0&&globalThis.rtcDataChannels.splice(x,1),D.readyState!=="closed"&&D.close()}function _x(D){typeof globalThis.rtcPeerConnections>"u"&&(globalThis.rtcPeerConnections=[]),Array.isArray(globalThis.rtcPeerConnections)&&globalThis.rtcPeerConnections.length<=100&&globalThis.rtcPeerConnections.push(D)}function Z0(D){let x=globalThis.rtcPeerConnections?.indexOf(D);x!==void 0&&x>=0&&globalThis.rtcPeerConnections.splice(x,1),D.connectionState!=="closed"&&D.close()}var Cx=class{constructor(x,A){this._localVideos=new Map;this._remoteVideos=new Map;this._freeLocalVideoTransceivers=[];this._negotiation={requested:!1,running:!1,waitForAnswer:!1};this._WebRtcStatsSnapshot=null;this._peerConnection=x,this._signaling=A,this._peerConnection.ontrack=this._onTrack.bind(this),this._peerConnection.onconnectionstatechange=()=>this._onStatusChanged(),this._peerConnection.onicecandidate=async F=>{F.candidate?await this._signaling.sendIceCandidate(F.candidate):await this._signaling.sendIceComplete()},this._WebRtcStatsInterval=setInterval(()=>{this._snapshotStats()},C.WebRtcStatsSnapshotInterval)}requestNegotiation(x){this._negotiation.requested=!0,x&&(this._negotiation.waitForAnswer=!0),!this._negotiation.running&&(this._negotiation.running=!0,setTimeout(async()=>{let A=this._negotiation.waitForAnswer;this._negotiation.requested=!1,this._negotiation.waitForAnswer=!1;try{let F;A&&(F=new Promise(r=>{this._resolveOffer=r})),await this._sendOffer(),F&&await F}catch(F){a("negotiation failed during sdp offer/answer exchange",F)}finally{this._resolveOffer=void 0,this._negotiation.running=!1,this._negotiation.requested&&this.requestNegotiation(this._negotiation.waitForAnswer)}}))}async startLocalVideo(x,A,F){if(this._localVideos.has(x))return;E(`starting local video for media ${x}`);let r=this._freeLocalVideoTransceivers.pop();if(r?(await r.sender.replaceTrack(A),r.direction="sendrecv"):r=this._peerConnection.addTransceiver(A),F){let e=r.sender.getParameters(),{maxBitrate:v,maxFramerate:f,scaleResolutionDownBy:u}=F,k={...v!==void 0&&{maxBitrate:v},...f!==void 0&&{maxFramerate:f},...u!==void 0&&{scaleResolutionDownBy:u}};if(e.encodings.length===0)e.encodings.push(k);else for(let ux of e.encodings)Object.assign(ux,k);F.degradationPreference&&(e.degradationPreference=F.degradationPreference),await r.sender.setParameters(e)}let j=new vx.VideoCodec(F?.codec??C.DefaultVideoCodec).isSupported();j&&r.setCodecPreferences([j]),this._localVideos.set(x,{transceiver:r}),this.requestNegotiation(!0)}stopLocalVideo(x){let A=this._localVideos.get(x);A&&(E(`stopping local video for media ${x}`),this._localVideos.delete(x),A.transceiver.sender.track&&(A.transceiver.sender.track.enabled=!1),A.transceiver.direction="inactive",A.transceiver.sender.replaceTrack(null).catch(()=>{}),this._freeLocalVideoTransceivers.push(A.transceiver),this.requestNegotiation(!1))}startRemoteVideo(x){E(`starting remote video for media ${x}`);let A=this._peerConnection.addTransceiver("video",{direction:"recvonly"}),F=new Promise((r,t)=>{this._remoteVideos.set(x,{state:"Requested",transceiver:A,promise:{resolve:r,reject:t}})});return this.requestNegotiation(!0),F}stopRemoteVideo(x){let A=this._remoteVideos.get(x);A&&(E(`stopping remote video for media ${x}`),this._remoteVideos.delete(x),A.state!=="Active"&&A.promise.reject(new Error("video stopped")),this.requestNegotiation(!1))}async handleWebRtcUpdate(x){switch(x.kind){case"Sdp":await this._updateRemoteSdp(x.type==="Answer"?"answer":"offer",x.sdp,x.media_map);break;case"Trickle":this._addIceCandidate({candidate:x.candidate,sdpMid:x.spd_mid??void 0,sdpMLineIndex:x.spd_mline_index??void 0,usernameFragment:x.username_fragment??void 0});break;case"TrickleFinished":this._addIceCandidate(void 0);break}}async startup(){if(this._peerConnection.connectionState==="new")try{let x=await this._peerConnection.createOffer();(0,vx.assert)(x.type==="offer"&&x.sdp,"generated broken webrtc offer"),await this._peerConnection.setLocalDescription(x),await this._signaling.sendOffer(x.sdp,[])}catch{a("failed to create initial sdp offer")}}cleanup(){for(let[,x]of this._remoteVideos)x.state!=="Active"&&x.promise.reject(new Error("connection closed"));clearTimeout(this._WebRtcIceTimeout),clearTimeout(this._WebRtcTimeout),clearInterval(this._WebRtcStatsInterval),this._localVideos.clear(),this._remoteVideos.clear(),this._freeLocalVideoTransceivers.length=0}get stats(){return this._WebRtcStatsSnapshot}get peerConnection(){return this._peerConnection}get localVideos(){return this._localVideos}get remoteVideos(){return this._remoteVideos}get isConnected(){return this._peerConnection.connectionState==="connected"}get isNegotiating(){return this._negotiation.running}async _snapshotStats(){try{let x=await this._peerConnection.getStats(),A={},F={bytesSent:0,bytesReceived:0,packetsSent:0,packetsReceived:0,rtt:0};x.forEach(r=>{let{type:t,...j}=r;t!=="certificate"&&(t==="candidate-pair"&&r.nominated&&(F.bytesSent+=r.bytesSent??0,F.bytesReceived+=r.bytesReceived??0,F.packetsSent+=r.packetsSent??0,F.packetsReceived+=r.packetsReceived??0,F.rtt=r.currentRoundTripTime??0),A[t]||(A[t]=[]),A[t].push(j))}),this._WebRtcStatsSnapshot={timestamp:Date.now(),status:this._peerConnection.connectionState,stats:F,report:A}}catch{}}_addIceCandidate(x){x&&(x.sdpMid===void 0&&x.sdpMLineIndex===void 0&&(x={...x,sdpMid:"0"}),n(`adding new ice ${x.candidate}`,x)),this._peerConnection.addIceCandidate(x)}async _sendOffer(){try{let x=await this._peerConnection.createOffer();(0,vx.assert)(x.type==="offer"&&x.sdp,"generated broken payload"),await this._peerConnection.setLocalDescription(x);let A=[];for(let[F,{transceiver:r}]of this._localVideos)r.mid&&A.push([F,r.mid]);for(let[F,r]of this._remoteVideos)r.state!=="Active"&&r.transceiver.mid&&A.push([F,r.transceiver.mid]);await this._signaling.sendOffer(x.sdp,A)}catch(x){throw a("failed to send sdp offer",x),x}}async _updateRemoteSdp(x,A,F){for(let[r,t]of F){let j=this._remoteVideos.get(r);j?.state==="Requested"&&(this._remoteVideos.set(r,{state:"Mapped",transceiver:j.transceiver,mid:t,promise:j.promise}),n(`updated remote video list with media ${r}`,j,this._remoteVideos))}await this._peerConnection.setRemoteDescription({type:x,sdp:A}),this._resolveOffer?.(!0)}async _onStatusChanged(){switch(n(`peer connection state changed to ${this._peerConnection.connectionState}`),this._peerConnection.connectionState){case"closed":break;case"connected":clearTimeout(this._WebRtcIceTimeout),this._WebRtcIceTimeout=void 0,clearTimeout(this._WebRtcTimeout),this._WebRtcTimeout=void 0;break;case"failed":this._peerConnection.restartIce(),this.requestNegotiation(!0);case"disconnected":C.MainConnectionPingInterval!==void 0&&await this._signaling.checkConnection();default:this._WebRtcIceTimeout===void 0&&(this._WebRtcIceTimeout=setTimeout(()=>{n("ice connection timeout was reached"),this._peerConnection.restartIce(),this._WebRtcIceTimeout=void 0},C.WebRtcIceTimeout)),this._WebRtcTimeout===void 0&&(this._WebRtcTimeout=setTimeout(async()=>{n("peer connection timeout was reached"),await this._signaling.closeConnection()},C.WebRtcTimeout));break}}_onTrack(x){let A=Array.from(this._remoteVideos).find(([,t])=>t.state==="Mapped"&&t.mid===x.transceiver.mid);if(!A){l(`unexpected track with mid: ${x.transceiver.mid}`);return}let[F,r]=A;(0,vx.assert)(r.state==="Mapped","expected video state to be Mapped"),this._remoteVideos.set(F,{state:"Active",transceiver:x.transceiver}),n(`updated local video list with media ${F}`,A,x.transceiver,this._localVideos),x.track.onended=()=>{n(`video track with mid ${x.transceiver.mid} ended`,A)},r.promise.resolve(x.track)}};var Lx=class D{constructor(x,A,F,r,t,j,e){this.id=x;this.address=A;this.connection=r;this.datagramWritable=t;this.rpc=j;this.closeController=e;this._ConnectionStats={...K.CONNECTION_STATS_INITIAL};this._WebRtcSessionFlight=new z;this._PingFlight=new z;this.status=0;this._ClosePromise=(async()=>{try{await this.connection.closed}catch{}return"closed"})(),C.MainConnectionPingInterval!==void 0&&(this._PingIntervalId=setInterval(async()=>{this.connectionStats.rtt=await this.ping(C.HealthCheckTimeout)},C.MainConnectionPingInterval)),e.signal.addEventListener("abort",()=>this._CleanUp(),{once:!0}),this.datagramWriter=t.getWriter(),this.connection.closed.then(()=>{this.status=2}).catch(()=>{}),this.connection.ready.then(()=>{this.status=1}).catch(()=>{}),this.readDatagrams(this.connection,this.id,(v,f)=>{this._ConnectionStats.packetsReceived+=1,F(v,f)})}static async create(x,A,F,r){try{let t=new URL(`https://${A}?version=${G0}&uid=${bx}`),j=new AbortController;r.addEventListener("abort",()=>j.abort(),{once:!0});let e=new WebTransport(t);j.signal.addEventListener("abort",()=>{try{e.close()}catch{}},{once:!0}),await e.ready;let v=e.datagrams,f=v?.createWritable?.()??v?.writable;if(!f)return j.abort(),(0,K.failure)(`connecting to ${A} failed because WebTransport datagrams are not supported by this browser`);let u=await e.createBidirectionalStream(),k=new Y(new V(u),W.MainCommandsRpc,W.MainNotificationsRpc);return j.signal.addEventListener("abort",()=>k.close(),{once:!0}),k.notify("Hello",{stream:"main"}),(0,K.success)(new D(x,A,F,e,f,k,j))}catch(t){return(0,K.failure)(`connecting to ${A} failed with ${t}`)}}get connectionStats(){return this._ConnectionStats}get transport(){return"H3"}get closePromise(){return this._ClosePromise}get closeSignal(){return this.closeController.signal}get closed(){return this.closeSignal.aborted}waitForConnected(){return Promise.race([this.connection.ready,this.connection.closed.then(()=>{throw new Error("connection closed")})])}close(){E(`closing connection to '${this.address}' with id ${this.id}`),this.closeController.abort("request")}async joinRoom(x,A,F,r){try{if(this.closed)return"closed";let t=await this.connection.createBidirectionalStream().catch(()=>"closed");if(t==="closed")return"closed";let j=new Y(new V(t),W.RoomCommandsRpc,W.RoomNotificationsRpc),e=await j.request("Hello",{stream:"room",token:String(x),room_id:A,user_data:F,position:r});return e==="closed"||e.type==="Failure"?e:(0,K.success)(j.rpc)}catch(t){return(0,K.failure)(`JoinRoom failed; ${t}`)}}async getReconnectToken(x){let A=await this._Request("RequestReconnectToken",{peer_id:x});return A.type==="Failure"?A:g.parse(A.value)}async healthCheck(){let x=await this._RequestPing(C.HealthCheckTimeout);return x||this.close(),x}async ping(x=3e4){let A=Date.now();return await this._RequestPing(x)?Date.now()-A:0}sendDatagram(x){try{this.datagramWriter.write(x),this._ConnectionStats.packetsSent+=1;let A=x.byteLength;this.connectionStats.bytesSent+=A}catch{}}async readDatagrams(x,A,F){try{let r=x.datagrams.readable.getReader();for(;;){let t=await r.read();if(t.done)break;let j=t.value.byteLength;this.connectionStats.bytesReceived+=j,F(A,t.value)}}catch{}}_CleanUp(){n(`performing cleanup for connection ${this.id}`),clearInterval(this._PingIntervalId)}async _EnsureWebRtcSession(){return this._WebRtcSession?this._WebRtcSession:this._WebRtcSessionFlight.run(async()=>(this._PeerConnection=new RTCPeerConnection,_x(this._PeerConnection),this._WebRtcSession=new Cx(this._PeerConnection,{sendOffer:async(x,A)=>{await this._Request("WebRtcUpdate",{kind:"Sdp",type:"Offer",sdp:x,media_map:A})},sendIceCandidate:async x=>{await this._Request("WebRtcUpdate",{kind:"Trickle",candidate:x.candidate,spd_mid:x.sdpMid??void 0,spd_mline_index:x.sdpMLineIndex??void 0,username_fragment:x.usernameFragment??void 0})},sendIceComplete:async()=>{await this._Request("WebRtcUpdate",{kind:"TrickleFinished"})},closeConnection:async()=>{this._PeerConnection?.restartIce(),this._WebRtcSession?.requestNegotiation(!0)},checkConnection:async()=>{}}),this._HandleWebRtcUpdates(),this._WebRtcSession))}async _HandleWebRtcUpdates(){for(;;){let x=await this.rpc.recv();if(x==="closed")break;x.name==="WebRtcUpdate"&&this._WebRtcSession?.handleWebRtcUpdate(x.properties)}this.close()}async _Request(x,A,F){let r=Date.now(),t=await(F===void 0?this.rpc.request(x,A):this.rpc.request(x,A,F)),j=(Date.now()-r)/1e3;return x!=="Ping"&&n(`sent main rpc '${x}'; took: ${j}s`,{properties:A,timeout:F,result:t}),t==="closed"?(0,K.failure)("connection lost"):t}_RequestPing(x=3e4){return this._PingFlight.run(async()=>{let A=await this._Request("Ping",{},x);return A!=="timeout"&&A.type==="Success"})}async startLocalVideo(x,A,F){await(await this._EnsureWebRtcSession()).startLocalVideo(x,A,F)}stopLocalVideo(x){this._WebRtcSession?.stopLocalVideo(x)}async startRemoteVideo(x){return(await this._EnsureWebRtcSession()).startRemoteVideo(x)}stopRemoteVideo(x){this._WebRtcSession?.stopRemoteVideo(x)}async dump(){return{type:"H3",id:this.id,address:this.address,closed:this.closed,status:this.status,datagrams:{sent:this._ConnectionStats.packetsSent,received:this._ConnectionStats.packetsReceived},webRtc:{signalingState:this._PeerConnection?.signalingState??null,connectionState:this._PeerConnection?.connectionState??null,iceGatheringState:this._PeerConnection?.iceGatheringState??null,iceConnectionState:this._PeerConnection?.iceConnectionState??null,connectionStats:this._WebRtcSession?.stats??null}}}};var h=require("@4players/odin-common"),Nx=require("@4players/odin-common/api");b();var L=require("@4players/odin-common");b();async function E0(D,x){let A=performance.now(),F=(0,L.failure)("no connection was attempted");for(let r=0;r<C.ConnectInterval.length&&!x.aborted;r++){let t=A+CF(r);if(await(0,L.abortableSleep)(t-performance.now(),x)==="aborted")return(0,L.failure)("aborted");if(F=await vF(D,x),F.type==="Success")return F}return F}async function vF(D,x){let A;try{A=new WebSocket(D)}catch(v){return(0,L.failure)(`unable to create websocket; ${v}`)}let F=new AbortController,r=new Promise(v=>A.addEventListener("open",()=>v((0,L.success)(A)),{signal:F.signal})),t=new Promise(v=>A.addEventListener("close",f=>v((0,L.failure)(f.reason!==""?f.reason:"unable to establish websocket connection")),{signal:F.signal})),j=new Promise(v=>x.addEventListener("abort",()=>v((0,L.failure)("aborted")),{signal:F.signal})),e=await Promise.race([r,t,j]);return F.abort(),e}function CF(D){let x=C.ConnectInterval.slice(0,D).reduce((F,r)=>F+r,0),A=C.ConnectInterval[D]*Math.random();return x+A}var Hx=class D{constructor(x,A,F,r,t,j){this.id=x;this.address=A;this.url=F;this.onDatagram=r;this.connection=t;this.webRtc=j;this._PeerIdMap=new WeakMap;this._ConnectionStats={...h.CONNECTION_STATS_INITIAL};this._PingFlight=new z;E(`creating new webrtc connection to '${this.address}' with id ${this.id}`),this.closeSignal.addEventListener("abort",()=>this._CleanUp(),{once:!0}),this._ClosePromise=new Promise(e=>{this.closeSignal.addEventListener("abort",()=>{e("closed")},{once:!0})}),_x(j),this._AudioChannel=this.webRtc.createDataChannel("audio",{id:2,negotiated:!0,ordered:!1,maxRetransmits:0}),this._AudioChannel.binaryType="arraybuffer",this._AudioChannel.onmessage=e=>{this._ConnectionStats.packetsReceived++;let v=new Uint8Array(e.data);this._ConnectionStats.bytesReceived+=v.byteLength,this.onDatagram(this.id,v)},this._AudioChannel.onerror=e=>l(`webrtc audio data channel for connection with id ${x} raised an error`,e),this._AudioChannel.onclosing=e=>E(`webrtc audio data channel for connection with id ${x} begins shutting down`,e),this._AudioChannel.onclose=e=>E(`webrtc audio data channel for connection with id ${x} has closed`,e),z0(this._AudioChannel),this._WebRtcSession=new Cx(this.webRtc,{sendOffer:async(e,v)=>{await this._Request("WebRtcUpdate",{kind:"Sdp",type:"Offer",sdp:e,media_map:v})},sendIceCandidate:async e=>{await this._Request("WebRtcUpdate",{kind:"Trickle",candidate:e.candidate,spd_mid:e.sdpMid??void 0,spd_mline_index:e.sdpMLineIndex??void 0,username_fragment:e.usernameFragment??void 0})},sendIceComplete:async()=>{await this._Request("WebRtcUpdate",{kind:"TrickleFinished"})},closeConnection:async()=>{this.close()},checkConnection:async()=>{this.healthCheck().then()}}),this._WebRtcSession.startup(),C.MainConnectionPingInterval!==void 0&&(this._PingIntervalId=setInterval(async()=>{this.connectionStats.rtt=await this.ping(C.HealthCheckTimeout)},C.MainConnectionPingInterval)),this._HandleWebRtcUpdates()}static async create(x,A,F,r){if(r.aborted)return(0,h.failure)("aborted");let t;try{t=new URL(`wss://${A}`)}catch(f){return(0,h.fail)(`address in token(${A}) can not be parsed; ${f}`)}let j=(0,h.extendUrl)(t,`main?uid=${bx}`);if(j.type!=="Success")return j;let e=await E0(j.value,r);if(e.type!=="Success")return e;let v=new Y(new V(e.value),Nx.MainCommandsRpc,Nx.MainNotificationsRpc);try{return(0,h.success)(new D(x,A,t,F,v,new RTCPeerConnection))}catch(f){return v.close(),(0,h.failure)(`unable to create webrtc connection; ${f}`)}}get status(){switch(this.webRtc.connectionState){case"connected":return 1;case"failed":case"closed":return 2;default:return 0}}get connectionStats(){return this._ConnectionStats}get transport(){return"WebRTC"}get closePromise(){return this._ClosePromise}get closeSignal(){return this.connection.closeSignal}get closed(){return this.connection.closed}async waitForConnected(){return new Promise((x,A)=>{let F=()=>{let r=this.status;r!==0&&(this.webRtc.removeEventListener("connectionstatechange",F),r===1?x():A(new Error("connection closed")))};this.webRtc.addEventListener("connectionstatechange",F),F(),this.closePromise.then(()=>{A(new Error("connection closed"))})})}close(){E(`closing ${this.transport} connection to '${this.address}' with id ${this.id}`),this.connection.close()}async joinRoom(x,A,F,r){let t=await this.connection.request("JoinRoom",{token:String(x),room_id:A,user_data:F,position:r});if(t==="closed"||t.type==="Failure")return t;let j=t.value;if(!("token"in j))return(0,h.failure)("JoinRoom responded without token");let e=(0,h.extendUrl)(this.url,`room?token=${j.token}`);if(e.type==="Failure")return e;let v=await E0(e.value,this.closeSignal);return v.type==="Success"?(this._PeerIdMap.set(v.value,j.peer_id),(0,h.success)(new V(v.value))):v}async getReconnectToken(x){let A=await this._Request("RequestReconnectToken",{peer_id:x});return A.type==="Failure"?A:g.parse(A.value)}async healthCheck(){let x=await this._RequestPing(C.HealthCheckTimeout);return x||this.close(),x}async ping(x=3e4){let A=Date.now();return await this._RequestPing(x)?Date.now()-A:0}sendDatagram(x){if(this._AudioChannel.readyState==="open"){let A=x.byteLength;this._AudioChannel.send(x),this._ConnectionStats.packetsSent+=1,this._ConnectionStats.bytesSent+=A}}_CleanUp(){n(`performing cleanup for connection ${this.id}`),clearInterval(this._PingIntervalId),X0(this._AudioChannel),Z0(this.webRtc),this._WebRtcSession.cleanup(),this.connection.close()}async _HandleWebRtcUpdates(){for(;;){let x=await this.connection.recv();if(x==="closed")break;x.name==="WebRtcUpdate"&&this._WebRtcSession.handleWebRtcUpdate(x.properties)}this.close()}async _Request(x,A,F){let r=Date.now(),t=await(F===void 0?this.connection.request(x,A):this.connection.request(x,A,F)),j=(Date.now()-r)/1e3;return x!=="Ping"&&n(`sent main rpc '${x}'; took: ${j}s`,{properties:A,timeout:F,result:t}),t==="closed"?(0,h.failure)("connection lost"):t}_RequestPing(x=3e4){return this._PingFlight.run(async()=>{let A=await this._Request("Ping",{},x);return A!=="timeout"&&A.type==="Success"})}async startLocalVideo(x,A,F){await this._WebRtcSession.startLocalVideo(x,A,F)}stopLocalVideo(x){this._WebRtcSession.stopLocalVideo(x)}async startRemoteVideo(x){return this._WebRtcSession.startRemoteVideo(x)}stopRemoteVideo(x){this._WebRtcSession.stopRemoteVideo(x)}async dump(){return{type:"WebRtc",id:this.id,address:this.address,url:this.url.toString(),closed:this.closed,audioChannel:{readyState:this._AudioChannel.readyState,bufferedAmount:this._AudioChannel.bufferedAmount},datagrams:{sent:this.connectionStats.packetsSent,received:this.connectionStats.packetsReceived},webRtc:{signalingState:this.webRtc.signalingState,connectionState:this.webRtc.connectionState,iceGatheringState:this.webRtc.iceGatheringState,iceConnectionState:this.webRtc.iceConnectionState,connectionStats:this._WebRtcSession.stats}}}};function xA(D,x,A,F,r){switch(E(`creating ${x} main connection to '${A}'`),x){case"H3":return Lx.create(D,A,F,r);case"WebRTC":return Hx.create(D,A,F,r);default:throw new Error(`transport ${x} is not supported`)}}var ox=require("@4players/odin-common"),H=require("@4players/odin-common/api");b();var wx=class{constructor(x,A,F,r){this.id=x;this.connection=A;this.cipher=F;this.mediaMap=r;this._DatagramReceived=0;this._DatagramSent=0;this._DatagramReceivedInvalid=0;this._DatagramSentInvalid=0;A.closeSignal.addEventListener("abort",()=>this.close())}get connectionStats(){return this.connection.connectionStats}get transport(){return this.connection.transport}get address(){return this.connection.address}get status(){return this.closed?2:this.connection.status}get closePromise(){return this.connection.closePromise}get closeSignal(){return this.connection.closeSignal}get closed(){return this.connection.closed}waitForConnected(){return this.connection.waitForConnected()}close(){this.connection.close()}async joinRoom(x,A,F,r){this.cipher.reset();let t=await this.cipher.encryptUserData(F);if(t===B)return(0,ox.failure)("unable to encrypt initial user-data");let j=await this.connection.joinRoom(x,A,t,r);return j==="closed"||j.type==="Failure"?j:(0,ox.success)(new f0(j.value,this.cipher,this))}getReconnectToken(x){return this.connection.getReconnectToken(x)}healthCheck(){return this.connection.healthCheck()}async sendDatagram(x){let A=await this.cipher.encryptDatagram(x);A!==B?(this._DatagramSent+=1,this.connection.sendDatagram(A)):this._DatagramSentInvalid+=1}async decryptDatagram(x,A){let F=await this.cipher.decryptDatagram(x,A);return F!==B?this._DatagramReceived+=1:this._DatagramReceivedInvalid+=1,F}startLocalVideo(x,A,F){return this.connection.startLocalVideo(x,A,F)}stopLocalVideo(x){return this.connection.stopLocalVideo(x)}startRemoteVideo(x){return this.connection.startRemoteVideo(x)}stopRemoteVideo(x){return this.connection.stopRemoteVideo(x)}async dump(){return{type:"Encrypted",id:this.id,address:this.address,connectionId:this.connection.id,closed:this.closed,transport:this.transport,datagrams:{sent:this._DatagramSent,received:this._DatagramReceived,sentInvalid:this._DatagramSentInvalid,receivedInvalid:this._DatagramReceivedInvalid},cipher:await this.cipher.dump()}}},Px=class{constructor(x){this.room=x}resendUserData(){this.room.roomConnection?.notify("UpdatePeer",{user_data:this.room.roomConnection.userData})}setUserData(x,A){let F={kind:"UserDataChanged",peer_id:x,user_data:A};this.room.onEvent("PeerUpdated",F)}},f0=class{constructor(x,A,F){this.rpc=x;this.cipher=A;this.connection=F;this.peers=new Map;this.closeSignal.addEventListener("abort",this.cleanup.bind(this),{once:!0})}get closed(){return this.rpc.closed}get closeSignal(){return this.rpc.closeSignal}async request(x,A,F){let r=await this.outgoing(x,A);return r===B?(0,ox.failure)("can not be encrypted"):await this.rpc.request(x,r,F)}async notify(x,A){let F=await this.outgoing(x,A);if(F!==B)return this.rpc.notify(x,F)}async recv(){for(;;){let x=await this.rpc.recv();if(x==="closed")return x;let A=await this.incoming(x.name,x.properties);if(A!==B)return{name:x.name,properties:A}}}close(){return this.rpc.close()}async outgoing(x,A){if(!(x in H.RoomCommandsRpc))return A;let F=(0,H.parseCommand)(x,A,H.RoomCommandsRpc);if(F===void 0)return B;switch(F.name){case"UpdatePeer":{let r=await this.cipher.encryptUserData(F.request.user_data);if(r===B)return B;F.request.user_data=r}break;case"SendMessage":{let r=await this.cipher.encryptMessage(F.request.message);if(r===B)return B;F.request.message=r}break}return F.request}async incoming(x,A){if(!(x in H.RoomNotificationsRpc))return A;let F=(0,H.parseNotification)(x,A,H.RoomNotificationsRpc);if(F===void 0)return B;switch(F.name){case"RoomUpdated":for(let r=0;r<F.properties.updates.length;r++){let t=await this.roomUpdate(F.properties.updates[r]);if(t===B)return B;F.properties.updates[r]=t}break;case"PeerUpdated":{let r=await this.peerUpdate(F.properties);if(r===B)return B;F.properties=r}break;case"MessageReceived":{let r=await this.cipher.decryptMessage(F.properties.sender_peer_id,F.properties.message);if(r===B)return B;F.properties.message=r}break}return F.properties}async peerUpdate(x){switch(x.kind){case"UserDataChanged":{let A=await this.cipher.decryptUserData(x.peer_id,x.user_data);if(A===B)return B;x.user_data=A}break;case"MediaStarted":this.mediaStarted(x.peer_id,x.media.id);break;case"MediaStopped":this.mediaStopped(x.peer_id,x.media_id);break}return x}async roomUpdate(x){switch(x.kind){case"Joined":for(let A of x.room.peers){for(let r of A.medias)this.mediaStarted(A.id,r.id);let F=await this.cipher.decryptUserData(A.id,A.user_data);F!==B?A.user_data=F:A.user_data=new Uint8Array}break;case"PeerJoined":{for(let F of x.peer.medias)this.mediaStarted(x.peer.id,F.id);let A=await this.cipher.decryptUserData(x.peer.id,x.peer.user_data);A!==B?x.peer.user_data=A:x.peer.user_data=new Uint8Array}break;case"PeerLeft":{let A=this.peers.get(x.peer_id);this.peers.delete(x.peer_id),this.cipher.deletePeerKey(x.peer_id);for(let F of A??[])this.mediaStopped(x.peer_id,F)}break}return x}mediaStarted(x,A){let F=this.peers.get(x);F===void 0&&(F=new Set,this.peers.set(x,F)),F.add(A);let r=p({connectionId:this.connection.connection.id,mediaId:A});this.connection.mediaMap.set(r,{peerId:x,connection:this.connection})}mediaStopped(x,A){this.peers.get(x)?.delete(A);let r=p({connectionId:this.connection.connection.id,mediaId:A});this.connection.mediaMap.delete(r)}cleanup(){for(let[x,A]of this.peers)for(let F of A)this.mediaStopped(x,F)}};var Kx=class{constructor(x){this.onDatagram=x;this._LastConnectionId=0;this._Connections=new Map;this._Close=new AbortController;this._MediaMap=new Map;let A=Date.now(),F=setInterval(()=>{Math.abs(Date.now()-A)>C.ClockJumpThreshold&&this.checkHealth(),A=Date.now()},C.ClockJumpCheckInterval);addEventListener("offline",()=>this.checkHealth(),{signal:this._Close.signal}),this._Close.signal.addEventListener("abort",()=>{clearInterval(F);for(let r of this._Connections.values())r.type==="establishing"?r.abort.abort():r.connection.close();this._Connections.clear()},{once:!0})}get closed(){return this._Close.signal.aborted}sendDatagram(x,A){let F=this._Connections.get(x);(F?.type==="established"||F?.type==="virtual")&&F.connection.sendDatagram(A)}async recvDatagram(x,A){let F=EF(A);if(F===void 0||F.length===0)return;let r=this._MediaMap.get(p({connectionId:x,mediaId:F[0]}));if(r===void 0)this.onDatagram(x,A);else{let t=await r.connection.decryptDatagram(r.peerId,A);if(t===B)return;this.onDatagram(r.connection.id,t)}}async acquireConnection(x,A,F,r){if(await(0,ax.nextTick)(),this.closed)return"closed";let t=this.findConnection(x,A),j;switch(t?.type){case"established":n(`reusing existing connection ${t.id}`),j=t;break;case"establishing":{n(`waiting for connecting to '${A}' finish`);let f=await t.finished;if(f.type!=="Success")return f;j=f.value}break;case void 0:{n(`connecting to '${A}'`);let f=await this.createConnection(x,A,r);if(f.type!=="Success")return f;j=f.value}break}let e=j.id,v=new n0(j.connection,()=>this.releaseConnection(e));return j.references+=1,F&&(v=new wx(++this._LastConnectionId,v,F,this._MediaMap),this.addConnection({type:"virtual",id:v.id,connection:v,createdAt:Date.now()})),(0,ax.success)(v)}async createConnection(x,A,F){let r=++this._LastConnectionId,t=Date.now(),j=new AbortController;F.addEventListener("abort",()=>j.abort(),{once:!0}),n(`creating new connection ${r}`);let e=xA(r,x,A,this.recvDatagram.bind(this),F),{promise:v,resolve:f}=Promise.withResolvers();this.addConnection({type:"establishing",id:r,address:A,transport:x,finished:v,createdAt:Date.now(),abort:j});let u=await e;if(this._Connections.delete(r),u.type!=="Success")return f(u),u;let k={type:"established",id:r,address:A,transport:x,createdAt:t,references:0,connection:u.value};return this.addConnection(k),(0,ax.success)(k)}addConnection(x){(x.type==="established"||x.type==="virtual")&&x.connection.closeSignal.addEventListener("abort",()=>{E(`connection ${x.id} has been closed`),this._Connections.delete(x.id)},{once:!0}),this._Connections.set(x.id,x)}releaseConnection(x){let A=this._Connections.get(x);A?.type==="established"&&(A.references-=1,A.references<=0&&A.connection.close())}checkHealth(){for(let x of this._Connections.values())x.type==="established"&&x.connection.healthCheck()}close(){this._Close.abort()}async dump(){let x=[];for(let F of this._Connections.values()){let r;switch(F.type){case"established":r={transport:F.transport,address:F.address,connection:await F.connection.dump(),references:F.references};break;case"establishing":r={transport:F.transport,address:F.address,aborted:F.abort.signal.aborted};break;case"virtual":r={connection:await F.connection.dump()};break}x.push({type:F.type,id:F.id,createdAt:F.createdAt,...r})}let A=[];for(let[F,r]of this._MediaMap)A.push(`${F} -> ${r.peerId} @${r.connection.id} `);return{lastConnectionId:this._LastConnectionId,connections:x,mediaMap:A,closed:this.closed}}findConnection(x,A){for(let F of this._Connections.values())if(F.type!=="virtual"&&F.transport===x&&F.address===A)return F}},n0=class{constructor(x,A){this.connection=x;this.release=A;this.closeController=new AbortController;this.closePromise=new Promise(x=>this.closeController.signal.addEventListener("abort",()=>x("closed"),{once:!0}));x.closeSignal.addEventListener("abort",()=>this.close(),{once:!0})}get closeSignal(){return this.closeController.signal}get closed(){return this.closeSignal.aborted}close(){this.release(),this.closeController.abort("closed")}get connectionStats(){return this.connection.connectionStats}get id(){return this.connection.id}get transport(){return this.connection.transport}get address(){return this.connection.address}get status(){return this.connection.status}waitForConnected(){return this.connection.waitForConnected()}joinRoom(x,A,F,r){return this.connection.joinRoom(x,A,F,r)}getReconnectToken(x){return this.connection.getReconnectToken(x)}healthCheck(){return this.connection.healthCheck()}sendDatagram(x){return this.connection.sendDatagram(x)}startLocalVideo(x,A,F){return this.connection.startLocalVideo(x,A,F)}stopLocalVideo(x){return this.connection.stopLocalVideo(x)}startRemoteVideo(x){return this.connection.startRemoteVideo(x)}stopRemoteVideo(x){return this.connection.stopRemoteVideo(x)}async dump(){let x=await this.connection.dump();return typeof x=="object"&&(x={...x,isShared:!0,referenceClosed:this.closed}),x}};function EF(D){let x;try{x=(0,AA.decode)(D)}catch{return}if(!Array.isArray(x)||x.length<2)return;let A=x[1];if(Array.isArray(A))return A.map(Number)}var Jx=require("@4players/odin-common"),J=class{constructor(x,A){this.uid=x;this.customType=A}#x;#A;get mediaStream(){return this.#x}get audioPlayback(){return(0,Jx.assert)(this.#A,"getting the audioPlayback failed, this video has no Audio"),this.#A}get volume(){return(0,Jx.assert)(this.audioPlayback,"getting the volume failed, this video has no Audio"),this.audioPlayback.volume}setVolume(x){(0,Jx.assert)(this.#A,"Can not set the volume, this video has no Audio"),this.#A.setVolume(x)}setMediaStream(x){this.mediaStream||(this.#x=x)}close(){this.#x?.getVideoTracks().forEach(x=>{x.stop(),this.#x?.removeTrack(x)}),this.#x=void 0}};var T=require("@4players/odin-common"),aA=require("@4players/odin-common/api");var i=require("@4players/odin-common"),O=require("@4players/odin-common/api");b();var Ox=class{constructor(x,A,F,r,t,j,e,v,f,u){this.connectionPool=x;this.transport=A;this.onEvent=F;this.gateway=r;this.roomId=j;this.cipher=f;this.disableAutoReconnect=u;this._Close=new AbortController;this._TokenUsed=!1;this._WasConnected=!1;this._FailedConnections=0;this._LastTokenRenew=performance.now();this._LastReconnectStartedAt=0;this._Closed=new Promise(x=>this._Close.signal.addEventListener("abort",()=>x(this._Close.signal.reason?"disconnected":"closed"),{once:!0}));this._Token=t,this._UserData=e,this._Position=v,this._Main().then(({reason:k})=>n(`_Main() resolved; ${k}`))}get token(){return this._Token}get userData(){return this._UserData}get position(){return this._Position}get closed(){return this._Close.signal.aborted}get mainConnection(){return this._MainConnection}async requestUnsafe(x,A){if(this._RoomConnection===void 0)return(0,i.failure)("currently not connected");let F=await this._RoomConnection.request(x,A,void 0);return(0,i.assert)(F!=="timeout","request should not timeout"),F!=="closed"&&F.type==="Success"&&this._HandleRequests(x,A,F.value),F}async request(x,A){let F=Date.now(),r=O.RoomCommandsRpc[x],t=await this.requestUnsafe(x,A),j=(Date.now()-F)/1e3;if(n(`sent room rpc '${x}'; took: ${j}s`,{properties:A,result:t}),t==="closed"||t.type==="Failure")return t;let e=(0,O.parseResponse)(x,t.value,O.RoomCommandsRpc);return e!==void 0?(0,i.success)(e):(0,i.failure)(`received invalid response from ${x}`)}notify(x,A){this._RoomConnection!==void 0&&this._RoomConnection.notify(x,A)}close(){this._Close.abort(!0)}get renewTokenIn(){let x=this._LastTokenRenew-performance.now()+C.MinTokenRefreshInterval,A=this._Token.timeLeft-C.MinTokenLifetime;return Math.max(x,A)}async _Main(){let x="unable to establish connection";for(let A=0;;this._FailedConnections++){if(await(0,i.sleep)(Math.max(A-performance.now(),0)),this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}if(A=performance.now()+1e3,this._TokenUsed=!0,this._Token.hasAudience("sfu")){let F=await this._ConnectToServer();if(F.type==="Success"&&F.value==="shutdown"){n("connection closed by user request; shutting down"),x="user requested";break}if(this.disableAutoReconnect&&this._WasConnected){x=F.type==="Failure"?F.reason:"connection lost";break}if(this._LastReconnectStartedAt===0&&(this._LastReconnectStartedAt=performance.now()),F.type==="Failure"&&!this._WasConnected&&this._FailedConnections>=3){x=F.reason;break}if(F.type==="Failure"&&!nF(this._LastReconnectStartedAt))continue}if(this.reset(),this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}if(this.gateway!==void 0&&this._Token.hasAudience("gateway")){this._ChangeStatus("Joining",`requesting new token from ${this.gateway}`);let F=await fF(this.gateway,this._Token,this._Close.signal);if(F.type==="Success")if(F.value instanceof g)A=0,this._Token=F.value,this._TokenUsed=!1;else{x=`gateway error; ${F.value}`;break}else if(!this._WasConnected&&this._FailedConnections>=3){x="unable to contact the gateway";break}}if(this._TokenUsed&&this._Token.timeLeft<=0){x="token has expired";break}if(this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}}return this._ChangeStatus("Closed",x),this.close(),(0,i.failure)(x)}async _ConnectToServer(){let x=this._Token;for(;x.upstream!==void 0;)x=x.upstream;let A=x.claims.adr??this.gateway?.toString();if(!A)return(0,i.success)("continue");if(this._ChangeStatus("Joining",`connecting to ${x.claims.adr}`),this._MainConnection===void 0||this._MainConnection.closed||this._MainConnection.address!==x.claims.adr){this._MainConnection?.close();let t=await this.connectionPool.acquireConnection(this.transport,A,this.cipher,this._Close.signal);if(t==="closed")return(0,i.failure)("connection pool closed");if(t.type==="Failure")return this._ChangeStatus("Joining",`connection failed; ${t.reason}`),(0,i.failure)(`connection failed; ${t.reason}`);this._MainConnection=t.value,this._OwnPeerId=void 0}let F=await Promise.race([Promise.all([this._MainConnection.joinRoom(x,this.roomId,this.userData,this.position)]),(0,i.sleep)(C.ConnectTimeout,"timeout"),this._Closed]);if(F==="closed"||F==="disconnected")return(0,i.success)("continue");if(F==="timeout")return this._ChangeStatus("Joining","timed out"),(0,i.success)("continue");let[r]=F;if(r==="closed")return(0,i.success)("continue");if(r.type==="Failure")return(0,i.failure)(`unable to join room; ${r.reason}`);this._RoomConnection=r.value,this._WasConnected=!0,this._FailedConnections=0,this._ChangeStatus("Joined",`joined ${this.roomId}`);try{await this._MainConnection.waitForConnected();let t=await this._HandleConnection(this._MainConnection);return(0,i.success)(t?"shutdown":"continue")}catch(t){return(0,i.failure)(`unable to handle connection; ${t}`)}}_ChangeStatus(x,A){let F={status:x,message:A};this.onEvent("RoomStatusChanged",F)}async _HandleConnection(x){if(this._RoomConnection===void 0)return!1;let A=new i.Selector([()=>(0,i.sleep)(this.renewTokenIn,"renewToken"),()=>(0,i.sleep)(500,"tick"),async()=>await this._RoomConnection?.recv(),()=>this._Closed,()=>x.closePromise]);for(;;){let F=await A.next();switch(F){case void 0:case"closed":return this._RoomConnection?.close(),this._MainConnection?.close(),!1;case"disconnected":return this._RoomConnection?.close(),this._MainConnection?.close(),!0;case"renewToken":this._RenewToken();break;case"tick":break;default:this._HandleEvent(F);break}}}_HandleEvent(x){if(x.name==="RoomUpdated"){let A=O.RoomNotificationsRpc.RoomUpdated.safeParse(x.properties);if(!A.success)return;for(let F of A.data.updates)F.kind==="Joined"&&(this._OwnPeerId=F.own_peer_id)}this.onEvent(x.name,x.properties)}_HandleRequests(x,A,F){switch(x){case"SetPeerPosition":{let r=O.RoomCommandsRpc.SetPeerPosition.request.safeParse(A);if(r.success){let t=r.data.position;this._Position=t.length===2?[t[0],t[1],0]:t}else l("unable to process SetPeerPosition command");break}case"UpdatePeer":{let r=O.RoomCommandsRpc.UpdatePeer.request.safeParse(A);r.success?this._UserData=r.data.user_data:l("unable to process UpdatePeer command");break}}}async _RenewToken(x){if(this._LastTokenRenew=performance.now(),!x&&this.token.timeLeft>C.MinTokenLifetime)return;if(this._MainConnection===void 0||this._OwnPeerId===void 0)return(0,i.failure)("connection is not established");let A=await this._MainConnection.getReconnectToken(this._OwnPeerId);return A.type==="Success"?(this._Token=A.value,(0,i.success)()):(0,i.failure)(`${this._MainConnection.address} rejected reconnect token request; ${A.reason}`)}reset(){this._LastReconnectStartedAt=0,this._RoomConnection?.close(),this._RoomConnection=void 0,this._MainConnection?.close(),this._MainConnection=void 0,this._OwnPeerId=void 0}};async function fF(D,x,A){try{let F={jsonrpc:"2.0",id:1,method:"Connect",params:{}};E(`sending authentication request to '${D}'`,F);let t=await(await fetch(D,{body:JSON.stringify(F),method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${x}`},signal:A})).json();if(E(`received authentication response fom '${D}'`,t),"result"in t)return g.parse(t.result.token);{let j=t.error?.message??"malformed response";return a(`gateway rejected token; ${j}`),(0,i.success)(j)}}catch(F){return(0,i.failure)(String(F))}}function nF(D,x=8e3){return performance.now()-D>x}b();var bA=require("@4players/odin-common");var Q=require("@4players/odin-common");b();var EA=require("@4players/odin-common");b();var vA=require("@msgpack/msgpack");b();var FA={name:"PBKDF2",hash:"SHA-256",iterations:6e5,salt:new Uint8Array([111,100,105,110,95,99,114,121,112,116,111,95,109,97,115,116,101,114,95,107,101,121])},rA=D=>({name:"PBKDF2",hash:"SHA-256",iterations:600,salt:D}),DA=32,tA=1e6,jA=2147483648,eA=32,M=[79,68,73,78,1,75,105,109],Ex=16,fx=64,BA=16;function CA(D,x){if(D.length!==x.length)return!1;for(let A=0;A<D.length;A++)if(D[A]!==x[A])return!1;return!0}function sF(D){return isFinite(D)}function iF(D){return Array.isArray(D)}function Mx(D){return sF(D)?D:B}function lx(D){return D instanceof Uint8Array?D:B}function bF(D,...x){let A;try{A=(0,vA.decode)(D)}catch{return B}if(!iF(A))return B;let F=new Array(A.length);for(let r in x)if(F[r]=x[r](A[r]),F[r]===B)return B;return F}function Tx(D,...x){if(D.length<M.length)return q;for(let A=0;A<M.length;A++)if(D[A]!==M[A])return q;return bF(D.subarray(M.length),...x)}var nx=class{constructor(x){this.first=1;this.offset=0;this.window=Array(x)}isReplay(x){let A=x-this.first;if(A<0)return!0;if(A>=this.window.length)if(A<this.window.length*2){let t=A-this.window.length+1;A-=t;for(let j=0;j<t;j++)this.advance()}else return this.first=x+1-self.window.length,this.offset=0,this.window.fill(!1),!1;let F=(this.offset+A)%this.window.length,r=this.window[F]===!0;for(this.window[F]=!0;this.window[this.offset]===!0;)this.advance();return r}advance(){this.window[this.offset]=!1,this.first+=1,this.offset=(this.offset+1)%this.window.length}};var Sx=class D{constructor(x){this.key=x}static async create(x){typeof x=="string"&&(x=new TextEncoder().encode(x));let A=await globalThis.crypto.subtle.importKey("raw",x,"PBKDF2",!1,["deriveBits"]),F=await globalThis.crypto.subtle.deriveBits(FA,A,256),r=await globalThis.crypto.subtle.importKey("raw",F,"PBKDF2",!1,["deriveKey"]);return new D(r)}async generatePeerKey(x,A){return await globalThis.crypto.subtle.deriveKey(rA(x),this.key,{name:"AES-GCM",length:256},!1,[A])}},Rx=class D{constructor(x,A){this.seed=x;this.key=A;this.sequenceNumbers={datagram:1,message:1,userData:1};this.number_of_packets=0;this.number_of_bytes=0}static async create(x){let A=globalThis.crypto.getRandomValues(new Uint8Array(DA)),F=await x.generatePeerKey(A,"encrypt");return new D(A,F)}get limitReached(){return this.key===void 0?!1:this.number_of_bytes>=jA||this.number_of_packets>=tA}nextSequenceNumber(x){return this.sequenceNumbers[x]++}};function s0(D,x){return{kind:"encrypted",key:D,material:x,antiReplays:{datagram:new nx(eA),userData:new nx(0),message:new nx(0)}}}var Vx=class D{constructor(x,A,F,r){this.additionalData=x;this.sequenceNumber=A;this.seed=F;this.encrypted=r}static parse(x){let A=Tx(x,lx,Mx,lx);if(A===B||A===q)return A;let[F,r,t]=A,j=x.subarray(0,x.length-t.length);return new D(j,r,F,t)}isSameSeed(x){return CA(this.seed,x.seed)}async generateKey(x){return await x.generatePeerKey(this.seed,"decrypt")}};function Ux(D,x){let A=new Uint8Array(12);switch(A[0]=x&255,A[1]=x>>8&255,A[2]=x>>16&255,A[3]=x>>24&255,D){case"datagram":A[5]=1;break;case"userData":A[5]=2;break;case"message":A[5]=3;break;default:(0,EA.assert)(!1,"missing content implementation")}return A}var i0=require("@msgpack/msgpack"),nA=require("@4players/odin-common");b();var Wx=class{constructor(x){this.actions=x}changeKey(x){this.masterKey!==x&&(this.masterKey=x,this.ownKey=B,this.actions.resendUserData())}async encryptDatagram(x){let A=await this.getKey("datagram");return A===void 0?x:A===S?B:await lF(A,x)}async encryptMessage(x){let A=await this.getKey("message");return A===void 0?x:A===S?S:await fA(A,x,"message")}async encryptUserData(x){let A=await this.getKey("userData");return A===void 0?x:((0,nA.assert)(A!==S,"key unavailable for user data encryption"),await fA(A,x,"userData",A.seed))}async getKey(x){if(this.ownKey===B||this.ownKey?.limitReached)if(x==="userData")this.ownKey=this.masterKey?await Rx.create(this.masterKey):void 0;else return this.ownKey!==B&&(this.ownKey=B,this.actions.resendUserData()),S;return this.ownKey}reset(){this.ownKey=this.masterKey?B:void 0}};async function fA(D,x,A,...F){let r=D.nextSequenceNumber(A),t=x.length+Ex,j=aF(r,F,t),e=j.length-t,v=await sA(D,A,r,j.subarray(0,e),x);return j.set(new Uint8Array(v),e),j}function aF(D,x,A){let F=[];x.forEach(j=>F.push(j)),F.push(D),F.push(new Uint8Array(A));let r=(0,i0.encode)(F),t=new Uint8Array(M.length+r.length);return t.set(M,0),t.set(r,M.length),t}async function lF(D,x){let A=uF(x);if(A===B)return B;if((A.kind&fx)!==0)return B;let F=A.body.length+Ex,r=D.nextSequenceNumber("datagram"),t=(0,i0.encode)([A.kind|fx,A.mediaIds,r,new Uint8Array(F)]),j=t.length-F,e=await sA(D,"datagram",r,t.subarray(0,j),A.body);return t.set(e,j),t}async function sA(D,x,A,F,r){return new Uint8Array(await globalThis.crypto.subtle.encrypt({name:"AES-GCM",iv:Ux(x,A),additionalData:F,tagLength:Ex*8},D.key,r))}function uF(D){let x=new R(D),A=x.readArrayLength();if(s(A)||A<2)return B;let F=x.readNumber(),r=x.readArrayLength();if(s(F)||s(r))return B;if(r>BA)return B;let t=Array(r);for(let e=0;e<t.length;e++){let v=x.readNumber();if(s(v))return B;t[e]=v}let j=D.subarray(x.position);return{kind:F,mediaIds:t,body:j}}var iA=require("@msgpack/msgpack");b();var zx=class{constructor(x){this.actions=x;this.peerKeys=new Map}async changeKey(x){this.masterKey=x;for(let[A,{kind:F,material:r}]of this.peerKeys)if(x!==void 0){let t=await r.generateKey(x),j=s0(t,r),e=await Qx(j,"userData",r.additionalData,r.sequenceNumber,r.encrypted);e!==B?(this.peerKeys.set(A,j),this.actions.setUserData(A,e)):(this.peerKeys.set(A,{kind:"broken",material:r}),this.actions.setUserData(A,new Uint8Array))}else F==="encrypted"&&this.peerKeys.set(A,{kind:"broken",material:r})}async decryptDatagram(x,A){let F=kF(A);if(this.masterKey===void 0)return F===q?A:B;if(F===B||F===q)return B;let r=this.peerKeys.get(x);if(r?.kind!=="encrypted")return B;let t=await Qx(r,"datagram",F.additionalData,F.sequenceNumber,F.encrypted);return t===B?B:cF(F.kind&~fx,F.mediaIds,t)}async decryptMessage(x,A){let F=Tx(A,Mx,lx);if(this.masterKey===void 0)return F===q?A:B;if(F===B||F===q)return B;let r=this.peerKeys.get(x);if(r?.kind!=="encrypted")return B;let[t,j]=F,e=A.subarray(0,A.length-j.length);return Qx(r,"message",e,t,j)}async decryptUserData(x,A){let F=Vx.parse(A);if(F===B)return B;if(F===q)return this.peerKeys.delete(x),this.masterKey===void 0?A:B;if(this.masterKey===void 0)return this.peerKeys.set(x,{kind:"broken",material:F}),B;let r=this.peerKeys.get(x);if(r?.kind==="encrypted"&&r.material.isSameSeed(F))r.material=F;else{let j=await F.generateKey(this.masterKey);r=s0(j,F)}let t=await Qx(r,"userData",F.additionalData,F.sequenceNumber,F.encrypted);return t===B?this.peerKeys.set(x,{kind:"broken",material:F}):r!==void 0&&this.peerKeys.set(x,r),t}reset(){this.peerKeys.clear()}};function kF(D){let x=new R(D),A=x.readArrayLength();if(s(A)||A<1)return B;let F=x.readNumber();if(s(F))return B;if((F&fx)===0)return q;if(A!==4)return B;let r=x.position;x.readObjects(1);let t=D.subarray(r,x.position),j=x.readNumber(),e=x.readBytes();if(s(j)||s(e))return B;let v=D.subarray(0,D.length-e.length);return{kind:F,mediaIds:t,additionalData:v,sequenceNumber:j,encrypted:e}}async function Qx(D,x,A,F,r){let t=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:Ux(x,F),additionalData:A,tagLength:Ex*8},D.key,r).catch(()=>B);return t===B?B:D.antiReplays[x].isReplay(F)?B:new Uint8Array(t)}function cF(D,x,A){let F=2;try{let j=new R(A);for(j.position=0;j.position<A.length;)j.readObjects(1),F+=1}catch{return B}let r=(0,iA.encode)(D),t=new Uint8Array(3+r.length+x.length+A.length);return t[0]=220,t[1]=F>>8&255,t[2]=F&255,t.set(r,3),t.set(x,3+r.length),t.set(A,3+r.length+x.length),t}var Xx=class{constructor(x,A){this.active=!1;let F=new zx(A),r=new Wx(A);this.crypto=new Q.Strand({encryption:r,decryption:F}),this.peerKeys=F.peerKeys,this.configure(x)}encryptUserData(x){return this.crypto.enqueue(({encryption:A})=>A.encryptUserData(x))}async encryptMessage(x){let A;do A=await this.crypto.enqueue(({encryption:F})=>F.encryptMessage(x));while(A===S);return A}async encryptDatagram(x){return await this.crypto.enqueue(({encryption:A})=>A.encryptDatagram(x))}decryptUserData(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptUserData(x,A))}decryptMessage(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptMessage(x,A))}decryptDatagram(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptDatagram(x,A))}configure(x){return this.crypto.enqueue(async A=>{let F=x.password?await Sx.create(x.password):void 0;this.active=F!==void 0,await A.encryption.changeKey(F),await A.decryption.changeKey(F)})}getPeerStatus(x){switch(this.peerKeys.get(x)?.kind??"unencrypted"){case"broken":return Q.Backend.PeerCipherStatus.InvalidPassword;case"encrypted":return Q.Backend.PeerCipherStatus.Encrypted;case"unencrypted":return this.active?Q.Backend.PeerCipherStatus.InvalidPassword:Q.Backend.PeerCipherStatus.Unencrypted;default:return Q.Backend.PeerCipherStatus.Unknown}}deletePeerKey(x){this.peerKeys.delete(x)}reset(){return this.crypto.enqueue(async({encryption:x,decryption:A})=>{x.reset(),A.reset()})}async dump(){return this.crypto.enqueue(async()=>({active:this.active,peers:Array.from(this.peerKeys).map(([x,A])=>`${x} => ${A.kind}`)}))}};function oA(D,x){return(0,bA.assert)(D.type==="OdinCrypto","only OdinCrypto supported"),new Xx(D,x)}var Zx=class{constructor(x,A,F){this._Captures=new Map;this._Playbacks=new Map;this._Peers=new Map;this._AvailableMediaIds=[];let{url:r,onEvent:t}=A,j=(0,T.unwrap)(g.parse(A.token)),e=A.roomId??j.defaultRoomId,v=A.userData??new Uint8Array(0),f=A.position??[0,0,0];(0,T.assert)(e!==void 0,"room id required for multi-room-tokens"),this.cipher=A.cipher?oA(A.cipher,new Px(this)):void 0,this.onEvent=t,E(`creating new room '${e}' ${this.cipher?"with":"without"} cipher`,j,v,f),this._Connection=new Ox(x,A.transport??"H3",this._HandleEvent.bind(this),r?new URL(r):void 0,j,e,v,f,this.cipher,F?.disableAutoReconnect??!1)}get connectionStats(){let x={...T.CONNECTION_STATS_INITIAL};return this.mainConnection?this.mainConnection.connectionStats:x}get roomConnection(){return this._Connection}get mainConnection(){return this.roomConnection?.mainConnection}get token(){return this._Connection.token.text}request(x,A){return this._Connection.requestUnsafe(x,A)}async link(x){if(x instanceof _){let A=this._Playbacks.get(x.uid)??{media:void 0,playback:void 0};A.playback!==void 0&&this.unlink(A.playback),A.media!==void 0&&x.start(A.media),A.playback=x,E(`linking audio playback media '${x.uid}' with volume ${x.volume} to room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof w){let A=this._Captures.get(x);A&&this.unlink(x);let F=this.mainConnection!==void 0&&this._AvailableMediaIds.shift();A={media:F?{connectionId:this.mainConnection.id,mediaId:F}:void 0},E(`linking audio capture media '${x.uid}' with volume ${x.volume} to room '${this._Connection.roomId}'`),this._Captures.set(x,A),A.media!==void 0&&await x.start(this._Connection,A.media)}else if(x instanceof J){let A=this._Playbacks.get(x.uid)??{media:void 0,playback:void 0};if(A.playback!==void 0&&this.unlink(A.playback),A.media!==void 0){let F=await this.mainConnection?.startRemoteVideo(A.media.mediaId);F&&x.setMediaStream(new MediaStream([F]))}A.playback=x,E(`linking video playback media '${x.uid}' with type '${x.customType}' to room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof I){let A=this._Captures.get(x);A&&this.unlink(x);let F=x.mediaStream?.getVideoTracks()[0];if(F){let r=this.mainConnection!==void 0&&this._AvailableMediaIds.shift();A={media:r?{connectionId:this.mainConnection.id,mediaId:r}:void 0},E(`linking video capture media '${x.uid}' with type '${x.parameters?.customType}' to room '${this._Connection.roomId}'`),this._Captures.set(x,A),A.media!==void 0&&(await x.start(this._Connection,A.media),this.mainConnection?.startLocalVideo(A.media.mediaId,F,x.parameters)),x.audioCapture&&await this.link(x.audioCapture)}}else throw new Error("Linking failed, media was not supported")}unlink(x){if(x instanceof _||x instanceof J){let A=this._Playbacks.get(x.uid);if(A?.playback!==x)return;A.playback=void 0,A.media!==void 0&&(x instanceof _?x.stop(A.media):(this.mainConnection?.stopRemoteVideo(A.media.mediaId),x.setMediaStream(void 0))),E(`unlinking playback media '${x.uid}' from room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof w||x instanceof I){x instanceof I&&x.audioCapture&&this.unlink(x.audioCapture);let A=this._Captures.get(x);if(A===void 0)return;A.media!==void 0&&(x.stop(this._Connection,A.media),this._AvailableMediaIds.push(A.media.mediaId),x instanceof I&&this.mainConnection?.stopLocalVideo(A.media.mediaId)),E(`unlinking capture media '${x.uid}' from room '${this._Connection.roomId}'`),this._Captures.delete(x)}else throw new Error("invalid media")}close(){E(`closing room '${this._Connection.roomId}'`),this._Connection.close()}_HandleEvent(x,A){let F=C0(aA.RoomNotificationsRpc,{name:x,properties:A});F!==void 0&&(this._HandleKnownEvent(F),A=F.properties),this.onEvent(x,A)}_HandleKnownEvent(x){switch(n(`processing event '${x.name}'`,x.properties),x.name){case"RoomStatusChanged":x.properties.status!=="Joined"&&this._HandleConnectionLost();break;case"RoomUpdated":for(let A of x.properties.updates)this._HandleRoomUpdate(A);break;case"PeerUpdated":this._HandlePeerUpdate(x.properties);break}}_HandleConnectionLost(){for(let x of this._Peers.keys())this._HandlePeerLeft(x);for(let[x,A]of this._Captures)A.media!==void 0&&(x instanceof I,x instanceof w&&(x.stop(this._Connection,A.media),A.media=void 0));this._AvailableMediaIds.length=0}_HandleRoomUpdate(x){if(x.kind==="Joined"){(0,T.assert)(this._AvailableMediaIds.length===0,"left over media ids"),this._AvailableMediaIds.push(...x.media_ids),this._HandleRoomJoined();for(let A of x.room.peers)this._HandlePeerJoined(A)}else x.kind==="PeerJoined"?this._HandlePeerJoined(x.peer):x.kind==="PeerLeft"&&this._HandlePeerLeft(x.peer_id)}_HandleRoomJoined(){for(let[x,A]of this._Captures)this._AvailableMediaIds.length===0||this.mainConnection===void 0||(A.media={connectionId:this.mainConnection.id,mediaId:this._AvailableMediaIds.shift()},x instanceof w&&x.start(this._Connection,A.media),x instanceof I)}_HandlePeerUpdate(x){x.kind==="MediaStarted"?this._HandleMediaStart(x.peer_id,x.media):x.kind==="MediaStopped"&&this._HandleMediaStopped(x.peer_id,x.media_id)}_HandlePeerJoined(x){this._Peers.has(x.id)||this._Peers.set(x.id,{mediaIds:new Map});for(let A of x.medias)this._HandleMediaStart(x.id,A)}_HandlePeerLeft(x){let A=this._Peers.get(x);if(A!==void 0){for(let F of A.mediaIds.keys())this._HandleMediaStopped(x,F);this._Peers.delete(x)}}_HandleMediaStart(x,A){if(this.mainConnection===void 0)return;let F=this._Peers.get(x);if(F===void 0||A.properties.kind!=="audio"&&A.properties.kind!=="video")return;let r=String(A.properties.uid??(0,T.generateUUID)());A.properties.uid=r;let t=this._Playbacks.get(r)??{media:void 0,playback:void 0};this._Playbacks.set(r,t),F.mediaIds.set(A.id,r),t.media={connectionId:this.mainConnection.id,mediaId:A.id},t.playback!==void 0&&(t.playback instanceof _&&t.playback.start(t.media),t.playback instanceof J&&this.mainConnection.startRemoteVideo(t.media.mediaId).then())}_HandleMediaStopped(x,A){let F=this._Peers.get(x);if(F===void 0)return;let r=F?.mediaIds.get(A);if(r===void 0)return;let t=this._Playbacks.get(r);t!==void 0&&(t.media!==void 0&&t.media.mediaId===A&&t.playback!==void 0&&(t.playback instanceof _&&t.playback.stop(t.media),t.playback instanceof J&&this.mainConnection?.stopRemoteVideo(t.media.mediaId),t.media=void 0),F.mediaIds.delete(A))}};qx();function pF(D,x){g0(x?.logger,x?.onLogMessage);let A,F=new Kx((t,j)=>A.receivePacket(t,j)),r=new gx(D);return A=new $x(r,F.sendDatagram.bind(F),x?.enableHTMLAudioElementFallback??!1),new b0(F,A,x)}var bx=(0,dF.generateUUID)(),o0=[],lA=!1;function hF(){lA||typeof window>"u"||(window.addEventListener("beforeunload",()=>{for(let D of o0)D.deref()?.close()}),lA=!0)}var b0=class{constructor(x,A,F){this.version="9";this.supportedTransports=["H3","WebRTC"];this._PlaybackVolume=[1,1];this._CreatedAt=Date.now();this._Options=F??{},this._Options.disableBeforeUnload||hF(),this._ConnectionPool=x,this._MediaController=A,o0.push(new WeakRef(this)),E("plugin initialized")}get playbackVolume(){return this._PlaybackVolume}joinRoom(x){return new Zx(this._ConnectionPool,x,this._Options)}async createAudioPlayback(x){return this._MediaController.createAudioPlayback(x)}async createAudioCapture(x){return this._MediaController.createAudioCapture(x)}async createVideoCapture(x,A){return this._MediaController.createVideoCapture(x,A)}async createVideoPlayback(x){return new J(x.uid,x.customType)}enumerateDevices(){return hx()}setOutputVolume(x){this._MediaController.playbackSetGlobalVolume(x)}async setOutputDevice(x){await this._MediaController.playbackSetDevice(x.device)}close(){this._MediaController.close(),this._ConnectionPool.close(),E("plugin closed")}async dump(){return{createdAt:this._CreatedAt,connections:await this._ConnectionPool.dump(),medias:await this._MediaController.dump()}}};async function uA(){let D=[];for(let x of o0){let A=x.deref();A!==void 0&&D.push(await A.dump())}return JSON.stringify({timestamp:Date.now(),instances:D,background:await L0()})}globalThis.odin_debug_dump_state=uA;window!==void 0&&(window.odin_debug_dump_state=uA);0&&(module.exports={SESSION_ID,createPlugin});
|
|
6435
|
+
\`,new Function(h,f)}function UA(j,r,s,i,o,a){var k=r.length;k<2&&G("argTypes array size mismatch! Must at least get return value and 'this' types!");for(var u=r[1]!==null&&s!==null,c=Br(r),f=!r[0].isVoid,C=r[0],h=r[1],E=[j,G,i,o,Nr,C.fromWireType.bind(C),h?.toWireType.bind(h)],I=2;I<k;++I){var $=r[I];E.push($.toWireType.bind($))}if(!c)for(var I=u?1:2;I<r.length;++I)r[I].destructorFunction!==null&&E.push(r[I].destructorFunction);var J=mt(r,u,f,a)(...E);return gr(j,J)}var Et=(j,r,s,i,o,a)=>{var k=TA(r,s);o=B(i,o),P([],[j],u=>{u=u[0];var c=\`constructor \${u.name}\`;if(u.registeredClass.constructor_body===void 0&&(u.registeredClass.constructor_body=[]),u.registeredClass.constructor_body[r-1]!==void 0)throw new Y(\`Cannot register multiple constructors with identical number of parameters (\${r-1}) for class '\${u.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!\`);return u.registeredClass.constructor_body[r-1]=()=>{z(\`Cannot construct \${u.name} due to unbound types\`,k)},P([],k,f=>(f.splice(1,0,null),u.registeredClass.constructor_body[r-1]=UA(c,f,null,o,a),[])),[]})},br=j=>{j=j.trim();let r=j.indexOf("(");return r===-1?j:j.slice(0,r)},$t=(j,r,s,i,o,a,k,u,c,f)=>{var C=TA(s,i);r=v(r),r=br(r),a=B(o,a,c),P([],[j],h=>{h=h[0];var E=\`\${h.name}.\${r}\`;r.startsWith("@@")&&(r=Symbol[r.substring(2)]),u&&h.registeredClass.pureVirtualFunctions.push(r);function I(){z(\`Cannot call \${E} due to unbound types\`,C)}var $=h.registeredClass.instancePrototype,H=$[r];return H===void 0||H.overloadTable===void 0&&H.className!==h.name&&H.argCount===s-2?(I.argCount=s-2,I.className=h.name,$[r]=I):(Hr($,r,E),$[r].overloadTable[s-2]=I),P([],C,J=>{var y=UA(E,J,h,a,k,c);return $[r].overloadTable===void 0?(y.argCount=s-2,$[r]=y):$[r].overloadTable[s-2]=y,[]}),[]})},Jr=(j,r,s)=>(j instanceof Object||G(\`\${s} with invalid "this": \${j}\`),j instanceof r.registeredClass.constructor||G(\`\${s} incompatible with "this" of type \${j.constructor.name}\`),j.$$.ptr||G(\`cannot call emscripten binding method \${s} on deleted object\`),qA(j.$$.ptr,j.$$.ptrType.registeredClass,r.registeredClass)),Ft=(j,r,s,i,o,a,k,u,c,f)=>{r=v(r),o=B(i,o),P([],[j],C=>{C=C[0];var h=\`\${C.name}.\${r}\`,E={get(){z(\`Cannot access \${h} due to unbound types\`,[s,k])},enumerable:!0,configurable:!0};return c?E.set=()=>z(\`Cannot access \${h} due to unbound types\`,[s,k]):E.set=I=>G(h+" is a read-only property"),Object.defineProperty(C.registeredClass.instancePrototype,r,E),P([],c?[s,k]:[s],I=>{var $=I[0],H={get(){var y=Jr(this,C,h+" getter");return $.fromWireType(o(a,y))},enumerable:!0};if(c){c=B(u,c);var J=I[1];H.set=function(y){var jA=Jr(this,C,h+" setter"),L=[];c(f,jA,J.toWireType(L,y)),Nr(L)}}return Object.defineProperty(C.registeredClass.instancePrototype,r,H),[]}),[]})},Kr=[],X=[0,1,,1,null,1,!0,1,!1,1],vt=j=>{j>9&&--X[j+1]===0&&(X[j]=void 0,Kr.push(j))},VA={toValue:j=>(j||G(\`Cannot use deleted val. handle = \${j}\`),X[j]),toHandle:j=>{switch(j){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let r=Kr.pop()||X.length;return X[r]=j,X[r+1]=1,r}}}},gt={name:"emscripten::val",fromWireType:j=>{var r=VA.toValue(j);return vt(j),r},toWireType:(j,r)=>VA.toHandle(r),readValueFromPointer:fA,destructorFunction:null},Lt=j=>N(j,gt),Ht=(j,r)=>{switch(r){case 4:return function(s){return this.fromWireType(fr[s>>2])};case 8:return function(s){return this.fromWireType(Cr[s>>3])};default:throw new TypeError(\`invalid float width (\${r}): \${j}\`)}},yt=(j,r,s)=>{r=v(r),N(j,{name:r,fromWireType:i=>i,toWireType:(i,o)=>o,readValueFromPointer:Ht(r,s),destructorFunction:null})},_t=(j,r,s,i,o,a,k,u)=>{var c=TA(r,s);j=v(j),j=br(j),o=B(i,o,k),yr(j,function(){z(\`Cannot call \${j} due to unbound types\`,c)},r-1),P([],c,f=>{var C=[f[0],null].concat(f.slice(1));return xr(j,UA(j,C,null,o,a,k),r-1),[]})},xt=(j,r,s,i,o)=>{r=v(r);let a=i===0,k=c=>c;if(a){var u=32-8*s;k=c=>c<<u>>>u,o=k(o)}N(j,{name:r,fromWireType:k,toWireType:(c,f)=>f,readValueFromPointer:Er(r,s,i!==0),destructorFunction:null})},Dt=(j,r,s)=>{var i=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,BigInt64Array,BigUint64Array],o=i[r];function a(k){var u=m[k>>2],c=m[k+4>>2];return new o(U.buffer,c,u)}s=v(s),N(j,{name:s,fromWireType:a,readValueFromPointer:a},{ignoreDuplicateRegistrations:!0})},Nt=(j,r,s,i)=>{if(!(i>0))return 0;for(var o=s,a=s+i-1,k=0;k<j.length;++k){var u=j.codePointAt(k);if(u<=127){if(s>=a)break;r[s++]=u}else if(u<=2047){if(s+1>=a)break;r[s++]=192|u>>6,r[s++]=128|u&63}else if(u<=65535){if(s+2>=a)break;r[s++]=224|u>>12,r[s++]=128|u>>6&63,r[s++]=128|u&63}else{if(s+3>=a)break;r[s++]=240|u>>18,r[s++]=128|u>>12&63,r[s++]=128|u>>6&63,r[s++]=128|u&63,k++}}return r[s]=0,s-o},Bt=(j,r,s)=>Nt(j,_,r,s),bt=j=>{for(var r=0,s=0;s<j.length;++s){var i=j.charCodeAt(s);i<=127?r++:i<=2047?r+=2:i>=55296&&i<=57343?(r+=4,++s):r+=3}return r},Or=globalThis.TextDecoder&&new TextDecoder,Pr=(j,r,s,i)=>{var o=r+s;if(i)return o;for(;j[r]&&!(r>=o);)++r;return r},wr=(j,r=0,s,i)=>{var o=Pr(j,r,s,i);if(o-r>16&&j.buffer&&Or)return Or.decode(j.subarray(r,o));for(var a="";r<o;){var k=j[r++];if(!(k&128)){a+=String.fromCharCode(k);continue}var u=j[r++]&63;if((k&224)==192){a+=String.fromCharCode((k&31)<<6|u);continue}var c=j[r++]&63;if((k&240)==224?k=(k&15)<<12|u<<6|c:k=(k&7)<<18|u<<12|c<<6|j[r++]&63,k<65536)a+=String.fromCharCode(k);else{var f=k-65536;a+=String.fromCharCode(55296|f>>10,56320|f&1023)}}return a},Jt=(j,r,s)=>j?wr(_,j,r,s):"",Kt=(j,r)=>{r=v(r);var s=!0;N(j,{name:r,fromWireType(i){var o=m[i>>2],a=i+4,k;if(s)k=Jt(a,o,!0);else{k="";for(var u=0;u<o;++u)k+=String.fromCharCode(_[a+u])}return b(i),k},toWireType(i,o){o instanceof ArrayBuffer&&(o=new Uint8Array(o));var a,k=typeof o=="string";k||ArrayBuffer.isView(o)&&o.BYTES_PER_ELEMENT==1||G("Cannot pass non-string to std::string"),s&&k?a=bt(o):a=o.length;var u=SA(4+a+1),c=u+4;if(m[u>>2]=a,k)if(s)Bt(o,c,a+1);else for(var f=0;f<a;++f){var C=o.charCodeAt(f);C>255&&(b(u),G("String has UTF-16 code units that do not fit in 8 bits")),_[c+f]=C}else _.set(o,c);return i!==null&&i.push(b,u),u},readValueFromPointer:fA,destructorFunction(i){b(i)}})},Mr=globalThis.TextDecoder?new TextDecoder("utf-16le"):void 0,Ot=(j,r,s)=>{var i=j>>1,o=Pr(Z,i,r/2,s);if(o-i>16&&Mr)return Mr.decode(Z.subarray(i,o));for(var a="",k=i;k<o;++k){var u=Z[k];a+=String.fromCharCode(u)}return a},Pt=(j,r,s)=>{if(s??=2147483647,s<2)return 0;s-=2;for(var i=r,o=s<j.length*2?s/2:j.length,a=0;a<o;++a){var k=j.charCodeAt(a);aA[r>>1]=k,r+=2}return aA[r>>1]=0,r-i},wt=j=>j.length*2,Mt=(j,r,s)=>{for(var i="",o=j>>2,a=0;!(a>=r/4);a++){var k=m[o+a];if(!k&&!s)break;i+=String.fromCodePoint(k)}return i},Tt=(j,r,s)=>{if(s??=2147483647,s<4)return 0;for(var i=r,o=i+s-4,a=0;a<j.length;++a){var k=j.codePointAt(a);if(k>65535&&a++,kA[r>>2]=k,r+=4,r+4>o)break}return kA[r>>2]=0,r-i},Ut=j=>{for(var r=0,s=0;s<j.length;++s){var i=j.codePointAt(s);i>65535&&s++,r+=4}return r},Vt=(j,r,s)=>{s=v(s);var i,o,a;r===2?(i=Ot,o=Pt,a=wt):(i=Mt,o=Tt,a=Ut),N(j,{name:s,fromWireType:k=>{var u=m[k>>2],c=i(k+4,u*r,!0);return b(k),c},toWireType:(k,u)=>{typeof u!="string"&&G(\`Cannot pass non-string to C++ string type \${s}\`);var c=a(u),f=SA(4+c+r);return m[f>>2]=c/r,o(u,f+4,c+r),k!==null&&k.push(b,f),f},readValueFromPointer:fA,destructorFunction(k){b(k)}})},St=(j,r)=>{r=v(r),N(j,{isVoid:!0,name:r,fromWireType:()=>{},toWireType:(s,i)=>{}})},Rt=j=>{OA("OOM")},Wt=j=>{var r=_.length;j>>>=0,Rt(j)},Qt=j=>52,zt=9007199254740992,Xt=-9007199254740992,Zt=j=>j<Xt||j>zt?NaN:Number(j);function Yt(j,r,s,i){return r=Zt(r),70}var Ae=[null,[],[]],re=(j,r)=>{var s=Ae[j];r===0||r===10?((j===1?ir:oA)(wr(s)),s.length=0):s.push(r)},je=(j,r,s,i)=>{for(var o=0,a=0;a<s;a++){var k=m[r>>2],u=m[r+4>>2];r+=8;for(var c=0;c<u;c++)re(j,_[k+c]);o+=u}return m[i>>2]=o,0};if(et(),Ct(),e.noExitRuntime&&(Rj=e.noExitRuntime),e.print&&(ir=e.print),e.printErr&&(oA=e.printErr),e.wasmBinary&&(or=e.wasmBinary),e.arguments&&(p=e.arguments),e.thisProgram&&(F=e.thisProgram),e.preInit)for(typeof e.preInit=="function"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.shift()();var Tr,SA,b,te,ee,Ur,Vr;function ne(j){Tr=j.w,SA=e._malloc=j.y,b=e._free=j.z,te=Ur=j.u,ee=Vr=j.x}var se={g:zj,r:Xj,f:Yj,l:At,k:ht,j:Et,d:$t,a:Ft,s:Lt,i:yt,n:_t,c:xt,b:Dt,t:Kt,e:Vt,m:St,o:Wt,q:Qt,p:Yt,h:je};function le(){bj();function j(){e.calledRun=!0,!ar&&(Jj(),kr?.(e),e.onRuntimeInitialized?.(),Kj())}e.setStatus?(e.setStatus("Running..."),setTimeout(()=>{setTimeout(()=>e.setStatus(""),1),j()},1)):j()}var rA;return rA=await Uj(),le(),cr?t=e:t=new Promise((j,r)=>{kr=j,ur=r}),t}})();typeof Lj=="object"&&typeof JA=="object"?(JA.exports=er,JA.exports.default=er):typeof define=="function"&&define.amd&&define([],()=>er)});var w={};qe(w,{AdditionalCaptureBlocks:()=>pe,AdditionalPlaybackBlocks:()=>Ge,ClockJumpCheckInterval:()=>ve,ClockJumpThreshold:()=>ge,ConnectInterval:()=>Je,ConnectTimeout:()=>Ne,DefaultRefreshRate:()=>he,DefaultVideoCodec:()=>Ke,HealthCheckTimeout:()=>Fe,MainConnectionPingInterval:()=>Le,MaxNumberOfDecoders:()=>Ee,MinDBFs:()=>Qr,MinTokenLifetime:()=>Be,MinTokenRefreshInterval:()=>be,PlaybackPreload:()=>Ie,RenderQuantumSize:()=>$e,VadPreload:()=>me,WebRtcAnswerTimeout:()=>xe,WebRtcIceTimeout:()=>ye,WebRtcMaxNegotiationAttempts:()=>De,WebRtcStatsSnapshotInterval:()=>He,WebRtcTimeout:()=>_e});var Ge=3,pe=3,Ie=3,he=250,me=3,Ee=512,$e=128,Qr=-758.596,Fe=1e4,ve=1e3,ge=1e4,Le=3e3,He=1e3,ye=3e3,_e=1e4,xe=1e4,De=3,Ne=5e3,Be=6e4,be=5e3,Je=[0,100,200,200,500],Ke="H264";function M(n,A,t){return n.postMessage(A,t)}function zr(n){return[n.values[0],n.values[1]]}function IA(n,A){n.values[0]=A[0],n.values[1]=A[1]}function hA(n,A){return n.values[2+A*5]}function Xr(n,A,t){n.values[2+A*5]=t}function Zr(n,A){let t=2+A*5+1;return[n.values[t+0],n.values[t+1]]}function mA(n,A,t){let e=2+A*5+1;n.values[e+0]=t[0],n.values[e+1]=t[1]}function Yr(n,A){return n.values[2+A*5+3]}function Aj(n,A,t){n.values[2+A*5+3]=t}function rj(n,A){return n.values[2+A*5+4]}function jj(n,A,t){n.values[2+A*5+4]=t}function EA(n){return n.values[0]!==0}function $A(n){return n.values[1]}function FA(n){return n.values[2]}function tj(n){return n.values[3]}function vA(n,A){return n.values[3]=A}function ej(n){return n?Array.from(n).map(A=>A.toString(16).padStart(2,"0")).join(""):null}var Oe;(n=>{let A;(t=>(t[t.InvalidPassword=-1]="InvalidPassword",t[t.Unknown=0]="Unknown",t[t.Unencrypted=1]="Unencrypted",t[t.Encrypted=2]="Encrypted"))(A=n.PeerCipherStatus||={})})(Oe||={});function oj(n){return{type:"Success",value:n}}function x(n){return{type:"Failure",reason:n}}var{Deno:nj}=globalThis,Pe=typeof nj?.noColor=="boolean"?nj.noColor:!1,we=!Pe;function zA(n,A){return{open:\`\\x1B[\${n.join(";")}m\`,close:\`\\x1B[\${A}m\`,regexp:new RegExp(\`\\\\x1b\\\\[\${A}m\`,"g")}}function XA(n,A){return we?\`\${A.open}\${n.replace(A.regexp,A.open)}\${A.close}\`:n}function QA(n){return XA(n,zA([0],0))}function sj(n){return XA(n,zA([1],22))}function Me(n){return XA(n,zA([2],22))}var Jn=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),Te=new Date,gA=(n=>(n[n.CRITICAL=0]="CRITICAL",n[n.ERROR=1]="ERROR",n[n.WARN=2]="WARN",n[n.INFO=3]="INFO",n[n.DEBUG=4]="DEBUG",n))(gA||{}),aj={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},Ue={4:Me,3:QA,2:QA,1:sj,0:sj};function Ve({message:n}){return String(n)}function lj(n){return JSON.stringify({timestamp:n.date.toISOString(),level:gA[n.level],message:n.message,extra:n.extra})}function ij(n){function A(q,p){return[Math.floor(q/p),q%p]}function t(){let q,p=n.date.valueOf()-Te.valueOf();[p,q]=A(p,1e3);let[F,D]=A(p,60);return\`\${F.toString().padStart(4,"0")}:\${D.toString().padStart(2,"0")}.\${q.toString().padStart(3,"0")}\`}function e(){return n.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(n.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(n.extra)}let l=aj[n.level],d=n.logger.name!==void 0?\`@\${n.logger.name}\`:"";return\`\${QA(t())}\${d} \${l} \${Ue[n.level](String(n.message))}\${e()}\`}function Se(n){let A=\`[\${n.date.toISOString()}]\`,t=\`[\${gA[n.level]}]\`,e=n.logger.name!==void 0?\`[\${n.logger.name}] \`:"",l=aj[n.level];return\`\${A} \${l} \${t.padEnd(7," ")} \${e}\${n.message}\`}function Re(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var kj=class{static sparse=Ve;static json=lj;static pretty=ij;static structured=Se;static default=Re()?ij:lj;constructor(){}};var We=class{formatter;consoleObject;filter;constructor(n=kj.default,A=4,t=console){this.filter=A,this.formatter=n,this.consoleObject=t}handle(n){let A=this.formatter(n);switch(n.level){case 0:case 1:this.consoleObject.error(A);break;case 2:this.consoleObject.warn(A);break;case 3:this.consoleObject.info(A);break;case 4:this.consoleObject.debug(A);break}}};var V=class{#A;sinks;filter;parent;get name(){return this.#A}constructor(n,A=void 0,t=[],e=void 0){this.#A=A,this.sinks=t,this.filter=n,this.parent=e}log(n,A,t=void 0){let e={date:new Date,level:n,logger:this,message:A,extra:t};this.filter<n||this.insert(e)}insert(n){if(!(this.filter<n.level)){for(let A of this.sinks)A.filter>=n.level&&A.handle(n);this.parent!==void 0&&this.parent.insert(n)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},tA=globalThis[Symbol.for("odin-global-logger")]??=new V(3,void 0,[new We]),Qe=V.prototype.log.bind(tA,1),ze=V.prototype.log.bind(tA,2),uj=V.prototype.log.bind(tA,3),Xe=V.prototype.log.bind(tA,4),Kn=V.prototype.log.bind(tA);var cj;function dj(n,...A){let t=Ze(A);cj?cj?.info(n,t):uj(n,t)}function Ze(...n){if(n.length===1&&typeof n[0]=="object"&&n[0]!==null)return{...n[0]};if(n.length>0)return{args:n}}function LA(n){return n.connectionId*4294967296+n.mediaId}function qj(n){return{mediaId:n%4294967296,connectionId:Math.floor(n/4294967296)}}function K(n,A,t){let e;switch(A){case"f32":e=n.HEAPF32;break;case"u32":e=n.HEAPU32;break;case"i32":e=n.HEAP32;break;case"u8":e=n.HEAPU8;break;default:throw new Error(\`allocating \${A} is not supported\`)}let l=n._malloc(t*e.BYTES_PER_ELEMENT);if(l===0||l%e.BYTES_PER_ELEMENT!==0)throw new Error(\`failed allocating a \${t} \${A} array\`);let d=l/e.BYTES_PER_ELEMENT;return e.subarray(d,d+t)}function S(n,A){n._free(A.byteOffset)}function fj(n,A){return{values:K(n,"f32",2+A*5),length:A}}function Cj(n,A){S(n,A.values)}function Gj(n){return{values:K(n,"f32",4)}}function pj(n,A){S(n,A.values)}function Ij(n){let A=n.length,t=0,e=0;for(;e<A;){let l=n.charCodeAt(e++);if((l&4294967168)===0){t++;continue}else if((l&4294965248)===0)t+=2;else{if(l>=55296&&l<=56319&&e<A){let d=n.charCodeAt(e);(d&64512)===56320&&(++e,l=((l&1023)<<10)+(d&1023)+65536)}(l&4294901760)===0?t+=3:t+=4}}return t}function Ye(n,A,t){let e=n.length,l=t,d=0;for(;d<e;){let q=n.charCodeAt(d++);if((q&4294967168)===0){A[l++]=q;continue}else if((q&4294965248)===0)A[l++]=q>>6&31|192;else{if(q>=55296&&q<=56319&&d<e){let p=n.charCodeAt(d);(p&64512)===56320&&(++d,q=((q&1023)<<10)+(p&1023)+65536)}(q&4294901760)===0?(A[l++]=q>>12&15|224,A[l++]=q>>6&63|128):(A[l++]=q>>18&7|240,A[l++]=q>>12&63|128,A[l++]=q>>6&63|128)}A[l++]=q&63|128}}var An=new TextEncoder,rn=50;function jn(n,A,t){An.encodeInto(n,A.subarray(t))}function hj(n,A,t){n.length>rn?jn(n,A,t):Ye(n,A,t)}var tn=4096;function ZA(n,A,t){let e=A,l=e+t,d=[],q="";for(;e<l;){let p=n[e++];if((p&128)===0)d.push(p);else if((p&224)===192){let F=n[e++]&63;d.push((p&31)<<6|F)}else if((p&240)===224){let F=n[e++]&63,D=n[e++]&63;d.push((p&31)<<12|F<<6|D)}else if((p&248)===240){let F=n[e++]&63,D=n[e++]&63,KA=n[e++]&63,O=(p&7)<<18|F<<12|D<<6|KA;O>65535&&(O-=65536,d.push(O>>>10&1023|55296),O=56320|O&1023),d.push(O)}else d.push(p);d.length>=tn&&(q+=String.fromCharCode(...d),d.length=0)}return d.length>0&&(q+=String.fromCharCode(...d)),q}var en=new TextDecoder,nn=200;function sn(n,A,t){let e=n.subarray(A,A+t);return en.decode(e)}function mj(n,A,t){return t>nn?sn(n,A,t):ZA(n,A,t)}var R=class{constructor(A,t){this.type=A,this.data=t}};var g=class n extends Error{constructor(A){super(A);let t=Object.create(n.prototype);Object.setPrototypeOf(this,t),Object.defineProperty(this,"name",{configurable:!0,enumerable:!1,value:n.name})}};function Ej(n,A,t){let e=t/4294967296,l=t;n.setUint32(A,e),n.setUint32(A+4,l)}function HA(n,A,t){let e=Math.floor(t/4294967296),l=t;n.setUint32(A,e),n.setUint32(A+4,l)}function yA(n,A){let t=n.getInt32(A),e=n.getUint32(A+4);return t*4294967296+e}function $j(n,A){let t=n.getUint32(A),e=n.getUint32(A+4);return t*4294967296+e}var ln=-1,on=4294967296-1,an=17179869184-1;function kn({sec:n,nsec:A}){if(n>=0&&A>=0&&n<=an)if(A===0&&n<=on){let t=new Uint8Array(4);return new DataView(t.buffer).setUint32(0,n),t}else{let t=n/4294967296,e=n&4294967295,l=new Uint8Array(8),d=new DataView(l.buffer);return d.setUint32(0,A<<2|t&3),d.setUint32(4,e),l}else{let t=new Uint8Array(12),e=new DataView(t.buffer);return e.setUint32(0,A),HA(e,4,n),t}}function un(n){let A=n.getTime(),t=Math.floor(A/1e3),e=(A-t*1e3)*1e6,l=Math.floor(e/1e9);return{sec:t+l,nsec:e-l*1e9}}function cn(n){if(n instanceof Date){let A=un(n);return kn(A)}else return null}function dn(n){let A=new DataView(n.buffer,n.byteOffset,n.byteLength);switch(n.byteLength){case 4:return{sec:A.getUint32(0),nsec:0};case 8:{let t=A.getUint32(0),e=A.getUint32(4),l=(t&3)*4294967296+e,d=t>>>2;return{sec:l,nsec:d}}case 12:{let t=yA(A,4),e=A.getUint32(0);return{sec:t,nsec:e}}default:throw new g(\`Unrecognized data size for timestamp (expected 4, 8, or 12): \${n.length}\`)}}function qn(n){let A=dn(n);return new Date(A.sec*1e3+A.nsec/1e6)}var Fj={type:ln,encode:cn,decode:qn};var T=class{constructor(){this.builtInEncoders=[],this.builtInDecoders=[],this.encoders=[],this.decoders=[],this.register(Fj)}register({type:A,encode:t,decode:e}){if(A>=0)this.encoders[A]=t,this.decoders[A]=e;else{let l=-1-A;this.builtInEncoders[l]=t,this.builtInDecoders[l]=e}}tryToEncode(A,t){for(let e=0;e<this.builtInEncoders.length;e++){let l=this.builtInEncoders[e];if(l!=null){let d=l(A,t);if(d!=null){let q=-1-e;return new R(q,d)}}}for(let e=0;e<this.encoders.length;e++){let l=this.encoders[e];if(l!=null){let d=l(A,t);if(d!=null){let q=e;return new R(q,d)}}}return A instanceof R?A:null}decode(A,t,e){let l=t<0?this.builtInDecoders[-1-t]:this.decoders[t];return l?l(A,t,e):new R(t,A)}};T.defaultCodec=new T;function fn(n){return n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer}function eA(n){return n instanceof Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):fn(n)?new Uint8Array(n):Uint8Array.from(n)}var Cn=100,Gn=2048,_A=class n{constructor(A){this.entered=!1,this.extensionCodec=A?.extensionCodec??T.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.maxDepth=A?.maxDepth??Cn,this.initialBufferSize=A?.initialBufferSize??Gn,this.sortKeys=A?.sortKeys??!1,this.forceFloat32=A?.forceFloat32??!1,this.ignoreUndefined=A?.ignoreUndefined??!1,this.forceIntegerToFloat=A?.forceIntegerToFloat??!1,this.pos=0,this.view=new DataView(new ArrayBuffer(this.initialBufferSize)),this.bytes=new Uint8Array(this.view.buffer)}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,maxDepth:this.maxDepth,initialBufferSize:this.initialBufferSize,sortKeys:this.sortKeys,forceFloat32:this.forceFloat32,ignoreUndefined:this.ignoreUndefined,forceIntegerToFloat:this.forceIntegerToFloat})}reinitializeState(){this.pos=0}encodeSharedRef(A){if(this.entered)return this.clone().encodeSharedRef(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.subarray(0,this.pos)}finally{this.entered=!1}}encode(A){if(this.entered)return this.clone().encode(A);try{return this.entered=!0,this.reinitializeState(),this.doEncode(A,1),this.bytes.slice(0,this.pos)}finally{this.entered=!1}}doEncode(A,t){if(t>this.maxDepth)throw new Error(\`Too deep objects in depth \${t}\`);A==null?this.encodeNil():typeof A=="boolean"?this.encodeBoolean(A):typeof A=="number"?this.forceIntegerToFloat?this.encodeNumberAsFloat(A):this.encodeNumber(A):typeof A=="string"?this.encodeString(A):this.useBigInt64&&typeof A=="bigint"?this.encodeBigInt64(A):this.encodeObject(A,t)}ensureBufferSizeToWrite(A){let t=this.pos+A;this.view.byteLength<t&&this.resizeBuffer(t*2)}resizeBuffer(A){let t=new ArrayBuffer(A),e=new Uint8Array(t),l=new DataView(t);e.set(this.bytes),this.view=l,this.bytes=e}encodeNil(){this.writeU8(192)}encodeBoolean(A){A===!1?this.writeU8(194):this.writeU8(195)}encodeNumber(A){!this.forceIntegerToFloat&&Number.isSafeInteger(A)?A>=0?A<128?this.writeU8(A):A<256?(this.writeU8(204),this.writeU8(A)):A<65536?(this.writeU8(205),this.writeU16(A)):A<4294967296?(this.writeU8(206),this.writeU32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(207),this.writeU64(A)):A>=-32?this.writeU8(224|A+32):A>=-128?(this.writeU8(208),this.writeI8(A)):A>=-32768?(this.writeU8(209),this.writeI16(A)):A>=-2147483648?(this.writeU8(210),this.writeI32(A)):this.useBigInt64?this.encodeNumberAsFloat(A):(this.writeU8(211),this.writeI64(A)):this.encodeNumberAsFloat(A)}encodeNumberAsFloat(A){this.forceFloat32?(this.writeU8(202),this.writeF32(A)):(this.writeU8(203),this.writeF64(A))}encodeBigInt64(A){A>=BigInt(0)?(this.writeU8(207),this.writeBigUint64(A)):(this.writeU8(211),this.writeBigInt64(A))}writeStringHeader(A){if(A<32)this.writeU8(160+A);else if(A<256)this.writeU8(217),this.writeU8(A);else if(A<65536)this.writeU8(218),this.writeU16(A);else if(A<4294967296)this.writeU8(219),this.writeU32(A);else throw new Error(\`Too long string: \${A} bytes in UTF-8\`)}encodeString(A){let e=Ij(A);this.ensureBufferSizeToWrite(5+e),this.writeStringHeader(e),hj(A,this.bytes,this.pos),this.pos+=e}encodeObject(A,t){let e=this.extensionCodec.tryToEncode(A,this.context);if(e!=null)this.encodeExtension(e);else if(Array.isArray(A))this.encodeArray(A,t);else if(ArrayBuffer.isView(A))this.encodeBinary(A);else if(typeof A=="object")this.encodeMap(A,t);else throw new Error(\`Unrecognized object: \${Object.prototype.toString.apply(A)}\`)}encodeBinary(A){let t=A.byteLength;if(t<256)this.writeU8(196),this.writeU8(t);else if(t<65536)this.writeU8(197),this.writeU16(t);else if(t<4294967296)this.writeU8(198),this.writeU32(t);else throw new Error(\`Too large binary: \${t}\`);let e=eA(A);this.writeU8a(e)}encodeArray(A,t){let e=A.length;if(e<16)this.writeU8(144+e);else if(e<65536)this.writeU8(220),this.writeU16(e);else if(e<4294967296)this.writeU8(221),this.writeU32(e);else throw new Error(\`Too large array: \${e}\`);for(let l of A)this.doEncode(l,t+1)}countWithoutUndefined(A,t){let e=0;for(let l of t)A[l]!==void 0&&e++;return e}encodeMap(A,t){let e=Object.keys(A);this.sortKeys&&e.sort();let l=this.ignoreUndefined?this.countWithoutUndefined(A,e):e.length;if(l<16)this.writeU8(128+l);else if(l<65536)this.writeU8(222),this.writeU16(l);else if(l<4294967296)this.writeU8(223),this.writeU32(l);else throw new Error(\`Too large map object: \${l}\`);for(let d of e){let q=A[d];this.ignoreUndefined&&q===void 0||(this.encodeString(d),this.doEncode(q,t+1))}}encodeExtension(A){if(typeof A.data=="function"){let e=A.data(this.pos+6),l=e.length;if(l>=4294967296)throw new Error(\`Too large extension object: \${l}\`);this.writeU8(201),this.writeU32(l),this.writeI8(A.type),this.writeU8a(e);return}let t=A.data.length;if(t===1)this.writeU8(212);else if(t===2)this.writeU8(213);else if(t===4)this.writeU8(214);else if(t===8)this.writeU8(215);else if(t===16)this.writeU8(216);else if(t<256)this.writeU8(199),this.writeU8(t);else if(t<65536)this.writeU8(200),this.writeU16(t);else if(t<4294967296)this.writeU8(201),this.writeU32(t);else throw new Error(\`Too large extension object: \${t}\`);this.writeI8(A.type),this.writeU8a(A.data)}writeU8(A){this.ensureBufferSizeToWrite(1),this.view.setUint8(this.pos,A),this.pos++}writeU8a(A){let t=A.length;this.ensureBufferSizeToWrite(t),this.bytes.set(A,this.pos),this.pos+=t}writeI8(A){this.ensureBufferSizeToWrite(1),this.view.setInt8(this.pos,A),this.pos++}writeU16(A){this.ensureBufferSizeToWrite(2),this.view.setUint16(this.pos,A),this.pos+=2}writeI16(A){this.ensureBufferSizeToWrite(2),this.view.setInt16(this.pos,A),this.pos+=2}writeU32(A){this.ensureBufferSizeToWrite(4),this.view.setUint32(this.pos,A),this.pos+=4}writeI32(A){this.ensureBufferSizeToWrite(4),this.view.setInt32(this.pos,A),this.pos+=4}writeF32(A){this.ensureBufferSizeToWrite(4),this.view.setFloat32(this.pos,A),this.pos+=4}writeF64(A){this.ensureBufferSizeToWrite(8),this.view.setFloat64(this.pos,A),this.pos+=8}writeU64(A){this.ensureBufferSizeToWrite(8),Ej(this.view,this.pos,A),this.pos+=8}writeI64(A){this.ensureBufferSizeToWrite(8),HA(this.view,this.pos,A),this.pos+=8}writeBigUint64(A){this.ensureBufferSizeToWrite(8),this.view.setBigUint64(this.pos,A),this.pos+=8}writeBigInt64(A){this.ensureBufferSizeToWrite(8),this.view.setBigInt64(this.pos,A),this.pos+=8}};function YA(n,A){return new _A(A).encodeSharedRef(n)}function xA(n){return\`\${n<0?"-":""}0x\${Math.abs(n).toString(16).padStart(2,"0")}\`}var pn=16,In=16,DA=class{constructor(A=pn,t=In){this.hit=0,this.miss=0,this.maxKeyLength=A,this.maxLengthPerKey=t,this.caches=[];for(let e=0;e<this.maxKeyLength;e++)this.caches.push([])}canBeCached(A){return A>0&&A<=this.maxKeyLength}find(A,t,e){let l=this.caches[e-1];A:for(let d of l){let q=d.bytes;for(let p=0;p<e;p++)if(q[p]!==A[t+p])continue A;return d.str}return null}store(A,t){let e=this.caches[A.length-1],l={bytes:A,str:t};e.length>=this.maxLengthPerKey?e[Math.random()*e.length|0]=l:e.push(l)}decode(A,t,e){let l=this.find(A,t,e);if(l!=null)return this.hit++,l;this.miss++;let d=ZA(A,t,e),q=Uint8Array.prototype.slice.call(A,t,t+e);return this.store(q,d),d}};var Ar="array",lA="map_key",gj="map_value",hn=n=>{if(typeof n=="string"||typeof n=="number")return n;throw new g("The type of key must be string or number but "+typeof n)},rr=class{constructor(){this.stack=[],this.stackHeadPosition=-1}get length(){return this.stackHeadPosition+1}top(){return this.stack[this.stackHeadPosition]}pushArrayState(A){let t=this.getUninitializedStateFromPool();t.type=Ar,t.position=0,t.size=A,t.array=new Array(A)}pushMapState(A){let t=this.getUninitializedStateFromPool();t.type=lA,t.readCount=0,t.size=A,t.map={}}getUninitializedStateFromPool(){if(this.stackHeadPosition++,this.stackHeadPosition===this.stack.length){let A={type:void 0,size:0,array:void 0,position:0,readCount:0,map:void 0,key:null};this.stack.push(A)}return this.stack[this.stackHeadPosition]}release(A){if(this.stack[this.stackHeadPosition]!==A)throw new Error("Invalid stack state. Released state is not on top of the stack.");if(A.type===Ar){let e=A;e.size=0,e.array=void 0,e.position=0,e.type=void 0}if(A.type===lA||A.type===gj){let e=A;e.size=0,e.map=void 0,e.readCount=0,e.type=void 0}this.stackHeadPosition--}reset(){this.stack.length=0,this.stackHeadPosition=-1}},sA=-1,jr=new DataView(new ArrayBuffer(0)),mn=new Uint8Array(jr.buffer);try{jr.getInt8(0)}catch(n){if(!(n instanceof RangeError))throw new Error("This module is not supported in the current JavaScript engine because DataView does not throw RangeError on out-of-bounds access")}var vj=new RangeError("Insufficient data"),En=new DA,NA=class n{constructor(A){this.totalPos=0,this.pos=0,this.view=jr,this.bytes=mn,this.headByte=sA,this.stack=new rr,this.entered=!1,this.extensionCodec=A?.extensionCodec??T.defaultCodec,this.context=A?.context,this.useBigInt64=A?.useBigInt64??!1,this.rawStrings=A?.rawStrings??!1,this.maxStrLength=A?.maxStrLength??4294967295,this.maxBinLength=A?.maxBinLength??4294967295,this.maxArrayLength=A?.maxArrayLength??4294967295,this.maxMapLength=A?.maxMapLength??4294967295,this.maxExtLength=A?.maxExtLength??4294967295,this.keyDecoder=A?.keyDecoder!==void 0?A.keyDecoder:En,this.mapKeyConverter=A?.mapKeyConverter??hn}clone(){return new n({extensionCodec:this.extensionCodec,context:this.context,useBigInt64:this.useBigInt64,rawStrings:this.rawStrings,maxStrLength:this.maxStrLength,maxBinLength:this.maxBinLength,maxArrayLength:this.maxArrayLength,maxMapLength:this.maxMapLength,maxExtLength:this.maxExtLength,keyDecoder:this.keyDecoder})}reinitializeState(){this.totalPos=0,this.headByte=sA,this.stack.reset()}setBuffer(A){let t=eA(A);this.bytes=t,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength),this.pos=0}appendBuffer(A){if(this.headByte===sA&&!this.hasRemaining(1))this.setBuffer(A);else{let t=this.bytes.subarray(this.pos),e=eA(A),l=new Uint8Array(t.length+e.length);l.set(t),l.set(e,t.length),this.setBuffer(l)}}hasRemaining(A){return this.view.byteLength-this.pos>=A}createExtraByteError(A){let{view:t,pos:e}=this;return new RangeError(\`Extra \${t.byteLength-e} of \${t.byteLength} byte(s) found at buffer[\${A}]\`)}decode(A){if(this.entered)return this.clone().decode(A);try{this.entered=!0,this.reinitializeState(),this.setBuffer(A);let t=this.doDecodeSync();if(this.hasRemaining(1))throw this.createExtraByteError(this.pos);return t}finally{this.entered=!1}}*decodeMulti(A){if(this.entered){yield*this.clone().decodeMulti(A);return}try{for(this.entered=!0,this.reinitializeState(),this.setBuffer(A);this.hasRemaining(1);)yield this.doDecodeSync()}finally{this.entered=!1}}async decodeAsync(A){if(this.entered)return this.clone().decodeAsync(A);try{this.entered=!0;let t=!1,e;for await(let p of A){if(t)throw this.entered=!1,this.createExtraByteError(this.totalPos);this.appendBuffer(p);try{e=this.doDecodeSync(),t=!0}catch(F){if(!(F instanceof RangeError))throw F}this.totalPos+=this.pos}if(t){if(this.hasRemaining(1))throw this.createExtraByteError(this.totalPos);return e}let{headByte:l,pos:d,totalPos:q}=this;throw new RangeError(\`Insufficient data in parsing \${xA(l)} at \${q} (\${d} in the current buffer)\`)}finally{this.entered=!1}}decodeArrayStream(A){return this.decodeMultiAsync(A,!0)}decodeStream(A){return this.decodeMultiAsync(A,!1)}async*decodeMultiAsync(A,t){if(this.entered){yield*this.clone().decodeMultiAsync(A,t);return}try{this.entered=!0;let e=t,l=-1;for await(let d of A){if(t&&l===0)throw this.createExtraByteError(this.totalPos);this.appendBuffer(d),e&&(l=this.readArraySize(),e=!1,this.complete());try{for(;yield this.doDecodeSync(),--l!==0;);}catch(q){if(!(q instanceof RangeError))throw q}this.totalPos+=this.pos}}finally{this.entered=!1}}doDecodeSync(){A:for(;;){let A=this.readHeadByte(),t;if(A>=224)t=A-256;else if(A<192)if(A<128)t=A;else if(A<144){let l=A-128;if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A<160){let l=A-144;if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else{let l=A-160;t=this.decodeString(l,0)}else if(A===192)t=null;else if(A===194)t=!1;else if(A===195)t=!0;else if(A===202)t=this.readF32();else if(A===203)t=this.readF64();else if(A===204)t=this.readU8();else if(A===205)t=this.readU16();else if(A===206)t=this.readU32();else if(A===207)this.useBigInt64?t=this.readU64AsBigInt():t=this.readU64();else if(A===208)t=this.readI8();else if(A===209)t=this.readI16();else if(A===210)t=this.readI32();else if(A===211)this.useBigInt64?t=this.readI64AsBigInt():t=this.readI64();else if(A===217){let l=this.lookU8();t=this.decodeString(l,1)}else if(A===218){let l=this.lookU16();t=this.decodeString(l,2)}else if(A===219){let l=this.lookU32();t=this.decodeString(l,4)}else if(A===220){let l=this.readU16();if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else if(A===221){let l=this.readU32();if(l!==0){this.pushArrayState(l),this.complete();continue A}else t=[]}else if(A===222){let l=this.readU16();if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A===223){let l=this.readU32();if(l!==0){this.pushMapState(l),this.complete();continue A}else t={}}else if(A===196){let l=this.lookU8();t=this.decodeBinary(l,1)}else if(A===197){let l=this.lookU16();t=this.decodeBinary(l,2)}else if(A===198){let l=this.lookU32();t=this.decodeBinary(l,4)}else if(A===212)t=this.decodeExtension(1,0);else if(A===213)t=this.decodeExtension(2,0);else if(A===214)t=this.decodeExtension(4,0);else if(A===215)t=this.decodeExtension(8,0);else if(A===216)t=this.decodeExtension(16,0);else if(A===199){let l=this.lookU8();t=this.decodeExtension(l,1)}else if(A===200){let l=this.lookU16();t=this.decodeExtension(l,2)}else if(A===201){let l=this.lookU32();t=this.decodeExtension(l,4)}else throw new g(\`Unrecognized type byte: \${xA(A)}\`);this.complete();let e=this.stack;for(;e.length>0;){let l=e.top();if(l.type===Ar)if(l.array[l.position]=t,l.position++,l.position===l.size)t=l.array,e.release(l);else continue A;else if(l.type===lA){if(t==="__proto__")throw new g("The key __proto__ is not allowed");l.key=this.mapKeyConverter(t),l.type=gj;continue A}else if(l.map[l.key]=t,l.readCount++,l.readCount===l.size)t=l.map,e.release(l);else{l.key=null,l.type=lA;continue A}}return t}}readHeadByte(){return this.headByte===sA&&(this.headByte=this.readU8()),this.headByte}complete(){this.headByte=sA}readArraySize(){let A=this.readHeadByte();switch(A){case 220:return this.readU16();case 221:return this.readU32();default:{if(A<160)return A-144;throw new g(\`Unrecognized array type byte: \${xA(A)}\`)}}}pushMapState(A){if(A>this.maxMapLength)throw new g(\`Max length exceeded: map length (\${A}) > maxMapLengthLength (\${this.maxMapLength})\`);this.stack.pushMapState(A)}pushArrayState(A){if(A>this.maxArrayLength)throw new g(\`Max length exceeded: array length (\${A}) > maxArrayLength (\${this.maxArrayLength})\`);this.stack.pushArrayState(A)}decodeString(A,t){return!this.rawStrings||this.stateIsMapKey()?this.decodeUtf8String(A,t):this.decodeBinary(A,t)}decodeUtf8String(A,t){if(A>this.maxStrLength)throw new g(\`Max length exceeded: UTF-8 byte length (\${A}) > maxStrLength (\${this.maxStrLength})\`);if(this.bytes.byteLength<this.pos+t+A)throw vj;let e=this.pos+t,l;return this.stateIsMapKey()&&this.keyDecoder?.canBeCached(A)?l=this.keyDecoder.decode(this.bytes,e,A):l=mj(this.bytes,e,A),this.pos+=t+A,l}stateIsMapKey(){return this.stack.length>0?this.stack.top().type===lA:!1}decodeBinary(A,t){if(A>this.maxBinLength)throw new g(\`Max length exceeded: bin length (\${A}) > maxBinLength (\${this.maxBinLength})\`);if(!this.hasRemaining(A+t))throw vj;let e=this.pos+t,l=this.bytes.subarray(e,e+A);return this.pos+=t+A,l}decodeExtension(A,t){if(A>this.maxExtLength)throw new g(\`Max length exceeded: ext length (\${A}) > maxExtLength (\${this.maxExtLength})\`);let e=this.view.getInt8(this.pos+t),l=this.decodeBinary(A,t+1);return this.extensionCodec.decode(l,e,this.context)}lookU8(){return this.view.getUint8(this.pos)}lookU16(){return this.view.getUint16(this.pos)}lookU32(){return this.view.getUint32(this.pos)}readU8(){let A=this.view.getUint8(this.pos);return this.pos++,A}readI8(){let A=this.view.getInt8(this.pos);return this.pos++,A}readU16(){let A=this.view.getUint16(this.pos);return this.pos+=2,A}readI16(){let A=this.view.getInt16(this.pos);return this.pos+=2,A}readU32(){let A=this.view.getUint32(this.pos);return this.pos+=4,A}readI32(){let A=this.view.getInt32(this.pos);return this.pos+=4,A}readU64(){let A=$j(this.view,this.pos);return this.pos+=8,A}readI64(){let A=yA(this.view,this.pos);return this.pos+=8,A}readU64AsBigInt(){let A=this.view.getBigUint64(this.pos);return this.pos+=8,A}readI64AsBigInt(){let A=this.view.getBigInt64(this.pos);return this.pos+=8,A}readF32(){let A=this.view.getFloat32(this.pos);return this.pos+=4,A}readF64(){let A=this.view.getFloat64(this.pos);return this.pos+=8,A}};function tr(n,A){return new NA(A).decode(n)}var iA=class n{constructor(A,t,e,l,d){this.mediaIds=A;this.sequenceNumber=t;this.timeStamp=e;this.isEndOfSpurt=l;this.payload=d}static parse(A){let t;try{t=tr(A)}catch{return x("not valid msgpack")}if(!Array.isArray(t))return x("container must be an array");if(t.length<6)return x("missing fields");if(t[0]!==1)return x("unknown type");if(!Array.isArray(t[1]))return x("media ids must be an array");if(!t[1].every(D=>typeof D=="number"))return x("media ids must be numbers");if(typeof t[2]!="number")return x("sequence number must be a number");if(typeof t[3]!="number")return x("timestamp must be a number");if(typeof t[4]!="number")return x("flags must be a number");let e=t[1],l=t[2]>>>0,d=t[3]>>>0,p=(t[4]&1)!==0,F=t[t.length-1];return F instanceof Uint8Array?oj(new n(e,l,d,p,F)):x("payload must be bytes")}toBytes(){let A=Number(this.isEndOfSpurt),t=[1,this.mediaIds,this.sequenceNumber>>>0,this.timeStamp>>>0,A,this.payload];return new Uint8Array(YA(t,{forceFloat32:!0,ignoreUndefined:!0}))}};var BA=class{constructor(A,t){this.sampleRate=A;this.wasm=t;this.sequenceNumber=Math.random()*Math.pow(2,32)>>0;this.timestamp=Math.random()*Math.pow(2,32)>>0;this.connections=[];this.monitoring=!1;this.active=!1;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0};this.encoder=new t.Encoder(A,15,!0,w.VadPreload),this.encoder.complexity=navigator.hardwareConcurrency>=4?6:4,this.information=Gj(this.wasm),this.outBuffer=K(this.wasm,"u8",1270),vA(this.information,1)}setVad(A){this.encoder.set_volume_gate(A.volumeGate!==void 0,A.volumeGate?.attackThreshold??0,A.volumeGate?.releaseThreshold??0),this.encoder.set_speech_detection(A.voiceActivity!==void 0,A.voiceActivity?.attackThreshold??0,A.voiceActivity?.releaseThreshold??0)}setMedias(A){this.connections=A.filter(({mediaIds:t})=>t.length>0)}close(){pj(this.wasm,this.information),S(this.wasm,this.outBuffer),this.encoder.delete()}encode(A){for(this.encoder.push(A.byteOffset,this.information.values.byteOffset);;){let t=this.encoder.pop(this.connections.length===0?0:this.outBuffer.byteOffset,this.outBuffer.length);if(t===0)break;if(t<0){dj(\`failed encoding packet: \${t}\`);return}if(this.timestamp=this.timestamp+1800>>0,t===1)continue;this.sequenceNumber=this.sequenceNumber+1>>0;let e=this.active&&!this.encoder.active;this.active=this.encoder.active,this.monitoring=this.connections.some(l=>l.id===0);for(let l of this.connections){if(this.monitoring&&l.id!==0)continue;let d=new iA(l.mediaIds,this.sequenceNumber,this.timestamp,e,this.outBuffer.subarray(0,t));M(globalThis,["sendPacket",{connectionId:l.id,packet:d.toBytes()}])}}}onMessage(A){let[t,e]=A;switch(t){case"captureSetVad":this?.setVad(e);break;case"captureSetMedias":this?.setMedias(e.connections);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){return{sequenceNumber:this.sequenceNumber,timestamp:this.timestamp,connections:this.connections.map(A=>\`\${A.id} => \${A.mediaIds.join(",")}\`),active:this.active,monitoring:this.monitoring,information:{active:EA(this.information),speechProbability:$A(this.information),rmsDBFS:FA(this.information),volume:tj(this.information)},encoder:{sample_rate:this.encoder.sample_rate,fec_packet_loss:this.encoder.fec_packet_loss,voip:this.encoder.voip,vad_preload:this.encoder.vad_preload,complexity:this.encoder.complexity,speech_probability:this.encoder.speech_probability,rms_dbfs:this.encoder.rms_dbfs,active:this.encoder.active,speech_detection_enabled:this.encoder.speech_detection_enabled,speech_detection_going_active:this.encoder.speech_detection_going_active,speech_detection_going_inactive:this.encoder.speech_detection_going_inactive,volume_gate_enabled:this.encoder.volume_gate_enabled,volume_gate_going_active:this.encoder.volume_gate_going_active,volume_gate_going_inactive:this.encoder.volume_gate_going_inactive}}}},bA=class{constructor(A){this.wasm=A;this.medias=new Map;this.stats={numberPackets:0,numberTicks:0,numberPacketError:0,numberPacketsMediaNotFound:0,numberTicksWithAudio:0};this.largestIndex=-1;this.decoders=K(this.wasm,"u32",w.MaxNumberOfDecoders),this.information=fj(this.wasm,w.MaxNumberOfDecoders),IA(this.information,[1,1])}close(){Cj(this.wasm,this.information);for(let{decoder:A}of this.medias.values())A.delete()}receivePacket(A,t){this.stats.numberPackets++;let e=iA.parse(t);if(e.type==="Failure"){this.stats.numberPacketError++;let l=Array.from(t).map(d=>d.toString(16).padStart(2,"0")).join("");console.error(\`failed decoding audio packet; reason: \${e.reason}, connection: \${A}, dump: \${l}\`);return}for(let l of e.value.mediaIds){let d=this.medias.get(LA({connectionId:A,mediaId:l}));if(d===void 0){this.stats.numberPacketsMediaNotFound++;continue}d.lastPacket=t;let q=K(this.wasm,"u8",e.value.payload.length);q.set(e.value.payload),d.decoder.push(e.value.sequenceNumber,e.value.timeStamp,e.value.isEndOfSpurt,q.byteOffset,q.length)}}insertMedia(A,t,e,l=[1,1]){let d=LA({connectionId:t,mediaId:e}),q=new this.wasm.Decoder;this.medias.set(d,{index:A,decoder:q,lastPacket:void 0}),this.decoders[A]=q.$$.ptr,this.largestIndex=Math.max(this.largestIndex,A),mA(this.information,A,l),jj(this.information,A,0),Aj(this.information,A,0)}removeMedia(A,t,e){let l=LA({connectionId:t,mediaId:e}),d=this.medias.get(l);if(!(d===void 0||d.index!==A)&&(this.medias.delete(l),Xr(this.information,A,0),this.decoders[A]=0,d.decoder.delete(),A===this.largestIndex)){for(A=A-1;A>=0&&this.decoders[A]===0;A--);this.largestIndex=A}}decode(A){return{hasAudio:this.wasm.pop_many(this.decoders.byteOffset,this.information.values.byteOffset,this.largestIndex+1,A.byteOffset)}}onMessage(A){let[t,e]=A;switch(t){case"playbackReceivePacket":this.receivePacket(e.connectionId,e.packet);break;case"playbackUpdateMedias":for(let{index:l,connectionId:d,mediaId:q}of e.removed)this.removeMedia(l,d,q);for(let{index:l,connectionId:d,mediaId:q,volume:p}of e.added)this.insertMedia(l,d,q,p);break;case"close":this.close();break;case"dump":e.result.postMessage(this.dump());break}}dump(){let A=[];for(let[t,e]of this.medias){let l=qj(t);A.push({index:e.index,connectionId:l.connectionId,mediaId:l.mediaId,rmsDBFS:hA(this.information,e.index),volume:Zr(this.information,e.index),voicedBlocks:rj(this.information,e.index),silentBlocks:Yr(this.information,e.index),time:e.decoder.time,consecutive_silence:e.decoder.consecutive_silence,last_voiced_time_point:e.decoder.last_voiced_time_point,sequence_number:e.decoder.sequence_number,packetsSeen:e.decoder.packets_seen,packetsInvalid:e.decoder.packets_invalid,packetsTooLate:e.decoder.packets_too_late,packetsTooEarly:e.decoder.packets_too_early,packetsRepeated:e.decoder.packets_repeated,packetsProcessed:e.decoder.packets_processed,packetsLost:e.decoder.packets_lost,rewinds:e.decoder.rewinds,cacheLength:e.decoder.cache_length,lastPacket:ej(e.lastPacket)})}return{largestIndex:this.largestIndex,globalVolume:zr(this.information),decoders:A}}};var Dj=Ce(Hj()),yj=(0,Dj.default)(),_j,xj;globalThis.addEventListener("message",nr);async function nr(n){let A=n.data,[t,e]=A;switch(t){case"captureInit":e.workletPort.onmessage=nr,_j=new sr(e.sampleRate,await yj,e.refreshRate);break;case"playbackInit":e.workletPort.onmessage=nr,xj=new lr(await yj,e.workletPort,e.refreshRate);break;case"close":globalThis.close();break}_j?.onMessage(A),xj?.onMessage(A)}var sr=class extends BA{constructor(t,e,l){super(t,e);this.sampleRate=t;this.inBuffer=K(this.wasm,"f32",t*.02),this.updateHandle=setInterval(()=>this.update(),l),M(globalThis,["captureReady",{}])}close(){super.close(),S(this.wasm,this.inBuffer),clearInterval(this.updateHandle)}onMessage(t){super.onMessage(t);let[e,l]=t;switch(e){case"captureSetVolume":this.setVolume(l.value);break;case"captureTick":this.tick(l.buffer);break}}setVolume(t){vA(this.information,t)}tick(t){this.inBuffer.set(t,0),this.encode(this.inBuffer)}update(){M(globalThis,["captureUpdate",{active:EA(this.information),rmsDBFs:FA(this.information),speechProbability:$A(this.information)}])}dump(){return{type:"unshared capture worker",sampleRate:this.sampleRate,...super.dump()}}},lr=class extends bA{constructor(t,e,l){super(t);this.workletPort=e;this.id=w.PlaybackPreload,this.outBuffer=K(this.wasm,"f32",48e3*.02*2),this.updateHandle=setInterval(()=>this.update(),l),M(globalThis,["playbackReady",{}])}close(){super.close(),S(this.wasm,this.outBuffer),clearInterval(this.updateHandle)}onMessage(t){super.onMessage(t);let[e,l]=t;switch(e){case"playbackSetVolume":this.setVolume(l.index,l.value);break;case"playbackTick":this.tick();break}}setVolume(t,e){t==="global"?IA(this.information,e):mA(this.information,t,e)}tick(){this.stats.numberTicks++,this.id+=1;let{hasAudio:t}=this.decode(this.outBuffer);if(t){let e=this.outBuffer.slice();M(this.workletPort,["samples",{id:this.id,buffer:e}],[e.buffer])}}update(){let t=new Float32Array(this.information.length*2);for(let l=0;l<=this.largestIndex;l++)t[l]=hA(this.information,l);let e=[];for(let[l,d]of this.medias)e[d.index]={packetsBuffered:d.decoder.cache_length,packetsSeen:d.decoder.packets_seen,packetsProcessed:d.decoder.packets_processed,packetsTooEarly:d.decoder.packets_too_early,packetsTooLate:d.decoder.packets_too_late,packetsDropped:0,packetsInvalid:d.decoder.packets_invalid,packetsRepeated:d.decoder.packets_repeated,packetsLost:d.decoder.packets_lost};M(globalThis,["playbackUpdate",{activities:t,jitterStats:e}],[t.buffer])}dump(){return{type:"unshared playback worker",id:this.id,...super.dump()}}};})();
|
|
6436
|
+
`});var f0,S0=p(()=>{f0='"use strict";(()=>{var P=Object.defineProperty;var M=(e,t)=>{for(var r in t)P(e,r,{get:t[r],enumerable:!0})};var u={};M(u,{AdditionalCaptureBlocks:()=>E,AdditionalPlaybackBlocks:()=>R,ClockJumpCheckInterval:()=>_,ClockJumpThreshold:()=>N,ConnectInterval:()=>Q,ConnectTimeout:()=>G,DefaultRefreshRate:()=>C,DefaultVideoCodec:()=>Y,HealthCheckTimeout:()=>O,MainConnectionPingInterval:()=>W,MaxNumberOfDecoders:()=>L,MinDBFs:()=>v,MinTokenLifetime:()=>Z,MinTokenRefreshInterval:()=>q,PlaybackPreload:()=>F,RenderQuantumSize:()=>V,VadPreload:()=>D,WebRtcAnswerTimeout:()=>J,WebRtcIceTimeout:()=>$,WebRtcMaxNegotiationAttempts:()=>z,WebRtcStatsSnapshotInterval:()=>j,WebRtcTimeout:()=>H});var R=3,E=3,F=3,C=250,D=3,L=512,V=128,v=-758.596,O=1e4,_=1e3,N=1e4,W=3e3,j=1e3,$=3e3,H=1e4,J=1e4,z=3,G=5e3,Z=6e4,q=5e3,Q=[0,100,200,200,500],Y="H264";function d(e,t,r){return e.postMessage(t,r)}var K;(e=>{let t;(r=>(r[r.InvalidPassword=-1]="InvalidPassword",r[r.Unknown=0]="Unknown",r[r.Unencrypted=1]="Unencrypted",r[r.Encrypted=2]="Encrypted"))(t=e.PeerCipherStatus||={})})(K||={});var{Deno:k}=globalThis,X=typeof k?.noColor=="boolean"?k.noColor:!1,ee=!X;function m(e,t){return{open:`\\x1B[${e.join(";")}m`,close:`\\x1B[${t}m`,regexp:new RegExp(`\\\\x1b\\\\[${t}m`,"g")}}function h(e,t){return ee?`${t.open}${e.replace(t.regexp,t.open)}${t.close}`:e}function p(e){return h(e,m([0],0))}function U(e){return h(e,m([1],22))}function te(e){return h(e,m([2],22))}var Se=new RegExp(["[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)","(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TXZcf-nq-uy=><~]))"].join("|"),"g"),re=new Date,f=(e=>(e[e.CRITICAL=0]="CRITICAL",e[e.ERROR=1]="ERROR",e[e.WARN=2]="WARN",e[e.INFO=3]="INFO",e[e.DEBUG=4]="DEBUG",e))(f||{}),T={0:"\\u{1F4A5}",1:"\\u{1F534}",2:"\\u{1F7E1}",3:"\\u{1F535}",4:"\\u{1F7E3}"},ne={4:te,3:p,2:p,1:U,0:U};function se({message:e}){return String(e)}function S(e){return JSON.stringify({timestamp:e.date.toISOString(),level:f[e.level],message:e.message,extra:e.extra})}function I(e){function t(c,i){return[Math.floor(c/i),c%i]}function r(){let c,i=e.date.valueOf()-re.valueOf();[i,c]=t(i,1e3);let[B,A]=t(i,60);return`${B.toString().padStart(4,"0")}:${A.toString().padStart(2,"0")}.${c.toString().padStart(3,"0")}`}function n(){return e.extra===void 0?"":typeof Deno=="object"?" "+Deno.inspect(e.extra,{compact:!1,colors:!0,trailingComma:!0}).trimStart():" "+JSON.stringify(e.extra)}let s=T[e.level],a=e.logger.name!==void 0?`@${e.logger.name}`:"";return`${p(r())}${a} ${s} ${ne[e.level](String(e.message))}${n()}`}function oe(e){let t=`[${e.date.toISOString()}]`,r=`[${f[e.level]}]`,n=e.logger.name!==void 0?`[${e.logger.name}] `:"",s=T[e.level];return`${t} ${s} ${r.padEnd(7," ")} ${n}${e.message}`}function ae(){return typeof Deno=="object"&&Deno.stdout.isTerminal()}var w=class{static sparse=se;static json=S;static pretty=I;static structured=oe;static default=ae()?I:S;constructor(){}};var ie=class{formatter;consoleObject;filter;constructor(e=w.default,t=4,r=console){this.filter=t,this.formatter=e,this.consoleObject=r}handle(e){let t=this.formatter(e);switch(e.level){case 0:case 1:this.consoleObject.error(t);break;case 2:this.consoleObject.warn(t);break;case 3:this.consoleObject.info(t);break;case 4:this.consoleObject.debug(t);break}}};var o=class{#e;sinks;filter;parent;get name(){return this.#e}constructor(e,t=void 0,r=[],n=void 0){this.#e=t,this.sinks=r,this.filter=e,this.parent=n}log(e,t,r=void 0){let n={date:new Date,level:e,logger:this,message:t,extra:r};this.filter<e||this.insert(n)}insert(e){if(!(this.filter<e.level)){for(let t of this.sinks)t.filter>=e.level&&t.handle(e);this.parent!==void 0&&this.parent.insert(e)}}error=this.log.bind(this,1);warn=this.log.bind(this,2);info=this.log.bind(this,3);debug=this.log.bind(this,4)},l=globalThis[Symbol.for("odin-global-logger")]??=new o(3,void 0,[new ie]),ce=o.prototype.log.bind(l,1),ue=o.prototype.log.bind(l,2),le=o.prototype.log.bind(l,3),fe=o.prototype.log.bind(l,4),Ie=o.prototype.log.bind(l);var b=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.blocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"init":this.state=new y(s.workerPort,sampleRate*.02);break;case"close":this.alive=!1;break;case"dump":s.result.postMessage(this.dump());break}}process(r,n,s){if(this.state===void 0||r.length<1||r[0].length<1)return this.alive;let a=this.state.fill(0,r[0][0]);return this.state.offset===this.state.length&&(this.state.flush(),this.state.fill(a,r[0][0])),this.alive}dump(){return{type:"unshared capture worklet",alive:this.alive,sampleRate,offset:this.state?.offset||null,length:this.state?.length||null,blocks:this.blocks}}},x=class extends AudioWorkletProcessor{constructor(){super();this.alive=!0;this.silenceBlocks=0;this.voiceBlocks=0;this.totalBlocks=0;this.port.onmessage=this.onMessage.bind(this)}async onMessage(r){let[n,s]=r.data;switch(n){case"close":this.alive=!1;break;case"init":this.state=new g(s.workerPort,sampleRate*.02),s.workerPort.onmessage=this.onMessage.bind(this);break;case"samples":this.state?.add(s.id,s.buffer);break;case"dump":s.result.postMessage(this.dump());break}n==="close"&&(this.alive=!1)}process(r,n,s){if(this.state===void 0||n.length<1||n[0].length<2)return this.alive;let a=this.state.fill(0,n[0][0],n[0][1]);return a<u.RenderQuantumSize&&(this.totalBlocks+=1,this.state.next(),this.state.hasVoice?this.voiceBlocks+=1:this.silenceBlocks+=1,this.state.fill(a,n[0][0],n[0][1])),this.alive}dump(){return{type:"unshared playback worklet",alive:this.alive,sampleRate,id:this.state?.id||null,offset:this.state?.offset||null,length:this.state?.length||null,hasVoice:this.state?.hasVoice??!1,silenceBlocks:this.silenceBlocks,voiceBlocks:this.voiceBlocks,totalBlocks:this.totalBlocks}}},y=class{constructor(t,r){this.port=t;this.length=r;this.offset=0,this.buffer=new Float32Array(r)}fill(t,r){let n=Math.min(r.length-t,this.length-this.offset);return this.buffer.set(r.subarray(t,t+n),this.offset),this.offset+=n,t+n}flush(){d(this.port,["captureTick",{buffer:this.buffer}],[this.buffer.buffer]),this.offset=0,this.buffer=new Float32Array(this.length)}},g=class{constructor(t,r){this.port=t;this.length=r;this.cache=[];this.id=-1,this.offset=0,this.buffer=void 0,this.next()}get hasVoice(){return this.buffer!==void 0}fill(t,r,n){let s=Math.min(u.RenderQuantumSize-t,this.length-this.offset);return this.buffer!==void 0&&(r.set(this.buffer.subarray(this.offset,this.offset+s),t),n.set(this.buffer.subarray(this.offset+this.length,this.offset+this.length+s),t)),this.offset+=s,t+s}add(t,r){this.cache.push({id:t,buffer:r})}next(){for(this.id+=1;this.cache[0]?.id<this.id;)this.cache.shift();this.cache[0]?.id===this.id?(this.buffer=this.cache[0].buffer,this.cache.shift()):this.buffer=void 0,this.offset=0,d(this.port,["playbackTick",{}])}};registerProcessor("OdinCaptureProcessor",b);registerProcessor("OdinPlaybackProcessor",x);})();\n'});var V0={};cx(V0,{UnsharedCaptureWorker:()=>Gx,UnsharedPlaybackWorker:()=>Ix,createCaptureWorker:()=>vF,createPlaybackWorker:()=>CF});function vF(t,x,A,F,r=C.DefaultRefreshRate){return BF.enqueue(async()=>{let[D,e]=await jx(E0,f0,t,"OdinCaptureProcessor",{channelCount:1,numberOfInputs:1,numberOfOutputs:0});return console.warn("SharedArrayBuffer is not available; creating ODIN CaptureWorker in fallback mode"),Gx.create(t,x,A,r,D,e,F)})}async function CF(t,x=C.DefaultRefreshRate){if(t.sampleRate!==48e3)throw new Error("playback sample rate must be 48kHz ");let[A,F]=await jx(E0,f0,t,"OdinPlaybackProcessor",{numberOfInputs:0,numberOfOutputs:1,outputChannelCount:[2]});return Ix.create(t,x,A,F)}var R0,BF,Gx,Ix,U0=p(()=>{"use strict";R0=require("@4players/odin-common");o();mx();T0();S0();BF=new R0.Strand;Gx=class t extends Dx{constructor(A,F,r,D,e){super(A,F,r,D,e);this._Activity=y;this._SpeechProbability=0;F.addEventListener("message",this._OnMessages.bind(this))}static async create(A,F,r,D,e,j,v){let{port1:E,port2:u}=new MessageChannel;return l(e,["captureInit",{sampleRate:A.sampleRate,refreshRate:D,workletPort:E}],[E]),await Ax(e,"captureReady"),l(j.port,["init",{workerPort:u}],[u]),new t(j,e,F,r,v)}get activity(){return this._Activity}get speechProbability(){return this._SpeechProbability}setVolume(A){l(this.worker,["captureSetVolume",{value:A}])}_OnMessages(A){super._OnMessages(A);let[F,r]=A.data;F==="captureUpdate"&&(this._Activity={isSilent:!r.active,rmsDBFS:r.rmsDBFs},this._SpeechProbability=r.speechProbability)}},Ix=class t extends tx{constructor(A,F,r){super(A,F,r);this.activities=new Float32Array;this.jitterStats=[]}static async create(A,F,r,D){let{port1:e,port2:j}=new MessageChannel;return l(r,["playbackInit",{workletPort:e,refreshRate:F}],[e]),await Ax(r,"playbackReady"),l(D.port,["init",{workerPort:j}],[j]),new t(A,D,r)}getActivity(A){let F=this.medias.get(h(A));if(F===void 0)return;let r=this.activities.at(F.index);if(r!==void 0)return r===0?y:{isSilent:!1,rmsDBFS:r}}getJitterStats(A){let F=this.medias.get(h(A));if(F===void 0)return;let r=this.jitterStats.at(F.index);if(r!==void 0)return r}setGlobalVolume(A){l(this.worker,["playbackSetVolume",{index:"global",value:A}])}setVolume(A,F){let r=this.medias.get(h(A));r!==void 0&&l(this.worker,["playbackSetVolume",{index:r.index,value:F}])}_GetFreeIndex(){let A=super._GetFreeIndex();if(A!==void 0)return A;if(this.medias.size<C.MaxNumberOfDecoders)return this.medias.size}_OnMessages(A){super._OnMessages(A);let[F,r]=A.data;F==="playbackUpdate"&&(this.activities=r.activities,this.jitterStats=r.jitterStats)}}});var _F={};cx(_F,{SESSION_ID:()=>ox,createPlugin:()=>$F});module.exports=IA(_F);var gF=require("@4players/odin-common");o();var vx=require("@4players/odin-common");o();var Bx=require("@4players/odin-common");o();var w=require("@4players/odin-common");async function H0(t,x,A){let F;if(x.device?.device.kind==="track"&&x.device?.device.audioTrack)F=new MediaStream([x.device.device.audioTrack]);else{let e=x.device?{exact:x.device.device.deviceId==="default"?void 0:x.device.device.deviceId}:void 0;try{let j=await Promise.race([navigator.mediaDevices.getUserMedia({audio:{echoCancellation:A.echoCanceller,noiseSuppression:A.noiseSuppression!=="None",autoGainControl:A.gainController,echoCancellationType:"system",deviceId:e}}),(0,w.sleep)(3e4,"timeout")]);if(j==="timeout")return(0,w.failure)("getUserMedia; timeout");F=j}catch(j){return(0,w.failure)(`getUserMedia; ${j}`)}}let r=F.getAudioTracks()[0].getSettings().sampleRate,D=await t.audioContexts.acquire(r);return(0,w.success)(D.createMediaStreamSource(F))}function Fx(t){t.getTracks().forEach(x=>{x.stop(),t.removeTrack(x)})}async function N0(t){return new _({deviceId:t.id,kind:"track",name:t.label??"MediaStreamTrack",audioTrack:t},!1)}async function qx(){if((0,w.isFirefoxBrowser)()){let r=await XA("microphone");(r==="granted"||r===!1)&&await ZA("audio")}let t=(await navigator.mediaDevices.enumerateDevices()).filter(r=>!!r.label),x=[],A=new _({deviceId:"default",name:"Default",kind:"audioinput"},!0),F=new _({deviceId:"default",name:"Default",kind:"audiooutput"},!0);x.push(A),x.push(F);for(let r of t){if(r.deviceId==="default"){r.kind==="audioinput"&&(A=new _({deviceId:"default",name:r.label,kind:"audioinput"},!0),x[0]=A),r.kind==="audiooutput"&&(F=new _({deviceId:"default",name:r.label,kind:"audiooutput"},!0),x[1]=F);continue}r.kind==="audioinput"&&x.push(new _({deviceId:r.deviceId,name:r.label,kind:"audioinput"},!1)),r.kind==="audiooutput"&&x.push(new _({deviceId:r.deviceId,name:r.label,kind:"audiooutput"},!1))}return x}async function XA(t){try{return(await navigator.permissions.query({name:t})).state}catch{return!1}}async function ZA(t){try{let x=await navigator.mediaDevices.getUserMedia({[t]:!0});return x?.getTracks().forEach(A=>{A.stop(),x.removeTrack(A)}),!0}catch{return!1}}var gx=require("@4players/odin-common");o();var W0=(0,gx.isSharedArrayBufferCapable)()&&!(0,gx.isSafariBrowser)()?Promise.resolve().then(()=>(M0(),O0)):Promise.resolve().then(()=>(U0(),V0));async function Q0(t,x,A,F){return W0.then(r=>r.createCaptureWorker(t,x,A,F,C.DefaultRefreshRate))}async function z0(t){return W0.then(x=>x.createPlaybackWorker(t,C.DefaultRefreshRate))}var P=class{constructor(x,A){this.controller=x;this._Medias=new Map;this._Vad={...Bx.VAD_DEFAULTS};this._Apm={...Bx.APM_DEFAULTS};this._Volume=1;this._Queue=Promise.resolve();this._DeviceCb=()=>{this._enqueue(async()=>{!this._DeviceParameters?.device||(await qx()).some(r=>r.device.deviceId===this._DeviceParameters?.device?.device.deviceId)||this._Capture?.source.mediaStream?.getAudioTracks()[0]?.readyState==="live"||(this._DeviceParameters?.onStatusChanged?.("stopped"),navigator.mediaDevices.removeEventListener("devicechange",this._DeviceCb),this._DeviceParameters=void 0,await this._closeImpl())}).catch(x=>a("device-change handler failed",x))};A.apm&&this.setApm(A.apm).catch(console.error),A.vad&&this.setVad(A.vad),typeof A.volume<"u"&&this.setVolume(A.volume).catch(console.error),this.uid=(0,Bx.generateUUID)(),this.#x=A.customType,this.#A=A.ref}#x;#A;_enqueue(x){let A=this._Queue.then(x,x);return this._Queue=A.catch(()=>{}),A}get vad(){return this._Vad}get apm(){return this._Apm}get volume(){return this._Volume}get activity(){return this._Capture?.worker.activity??y}get speechProbability(){return this._Capture?.worker.speechProbability??0}get deviceId(){return this._DeviceParameters?.device?.device.deviceId}async start(x,A){let F=this._Medias.get(A.connectionId);F===void 0&&this._Medias.set(A.connectionId,F=new Set),f(`starting audio capture media ${A.mediaId} on connection ${A.connectionId}`),!F.has(A.mediaId)&&(F.add(A.mediaId),x.mainConnection?.id===A.connectionId&&await x.request("StartMedia",{media_id:A.mediaId,properties:{kind:"audio",uid:this.uid,ref:this.#A,customType:this.#x}}).catch(r=>k(`StartMedia got rejected; ${r}`)),this._UpdateMedias())}async stop(x,A){let F=this._Medias.get(A.connectionId);f(`stopping audio capture media ${A.mediaId} on connection ${A.connectionId}`),F?.delete(A.mediaId)&&(x.mainConnection?.id===A.connectionId&&await x.request("StopMedia",{media_id:A.mediaId}).catch(r=>k(`StopMedia got rejected; ${r}`)),this._UpdateMedias())}setVad(x){n("updating vad config",x),this._Vad=x,this._Capture&&this._Capture.worker.setVad(x)}async setApm(x){await this._enqueue(()=>this._setApmImpl(x))}async _setApmImpl(x){n("updating apm config",x),this._Apm=x,this._DeviceParameters&&await this._setDeviceImpl(this._DeviceParameters)}async setDevice(x){await this._enqueue(()=>this._setDeviceImpl(x))}async _setDeviceImpl(x){n("updating capture device parameters",x);let A=this._DeviceParameters;if(this._DeviceParameters=x,this._Volume!=="muted")try{let F=await H0(this.controller,x,{...this._Apm,echoCanceller:this._Monitor?!1:this._Apm.echoCanceller});if(F.type!=="Success"){k(`unable to open capture device; ${F.reason}`),this._DeviceParameters=A;return}if(this._DeviceParameters.onStatusChanged&&navigator.mediaDevices.addEventListener("devicechange",this._DeviceCb),this._Capture!==void 0){Fx(this._Capture.source.mediaStream);try{this._Capture.source.disconnect(this._Capture.worker.worklet)}catch(r){a("failed to disconnect previous capture source",r)}}this._Capture===void 0||this._Capture.worker.worklet.context!==F.value.context?(this._Capture?.worker.close(),this._Capture={worker:await Q0(F.value.context,this.controller.sink,this.controller.receiveMonitoredPacket.bind(this.controller),new WeakRef(this)),source:F.value},await this._UpdateMedias(),this._Capture.worker.setVolume(this._Volume),this.setVad(this.vad)):this._Capture.source=F.value,this._Capture.source.connect(this._Capture.worker.worklet)}catch(F){throw new Error(`Error in setDevice(); ${F}`)}}async setVolume(x){await this._enqueue(()=>this._setVolumeImpl(x))}async _setVolumeImpl(x){n(`updating capture volume to ${x}`),this._Volume=x,x==="muted"?await this._closeImpl():(!this._Capture&&this._DeviceParameters&&await this._setDeviceImpl(this._DeviceParameters),this._Capture?.worker.setVolume(x))}async close(){await this._enqueue(()=>this._closeImpl())}async _closeImpl(){if(n("closing audio capture"),this._Capture!==void 0){this._Capture.worker.close(),Fx(this._Capture.source.mediaStream);try{this._Capture.source.disconnect(this._Capture.worker.worklet)}catch(x){a("failed to disconnect audio node",x)}await this.controller.audioContexts.release(this._Capture.source.context)}navigator.mediaDevices.removeEventListener("devicechange",this._DeviceCb),this._Capture=void 0}async dump(){let x=[];for(let[A,F]of this._Medias)x.push(`${A} => ${Array.from(F.values()).join(",")}`);return{uid:this.uid,ref:this.#A??null,customType:this.#x??null,worker:await this._Capture?.worker.dump()??null,vad:this._Vad,apm:this._Apm,volume:this._Volume,medias:x}}async _UpdateMedias(){if(this._Capture!==void 0){let x=Array.from(this._Medias).map(([A,F])=>({id:A,mediaIds:Array.from(F)}));this._Capture.worker.setMedias(x)}}async startLoopback(){this._Monitor===void 0&&(n("starting audio capture loopback"),this.setApm(this._Apm),this._Monitor=await this.controller.createAudioPlayback({uid:"loopback"}),this._Monitor.start({connectionId:0,mediaId:0}),this._Medias.set(0,new Set([0])),await this._UpdateMedias())}async stopLoopback(){this._Monitor!==void 0&&(n("stopping audio capture loopback"),this._Monitor.close(),this._Monitor=void 0,this.setApm(this._Apm),this._Medias.delete(0),await this._UpdateMedias())}};var ix=require("@4players/odin-common");o();var g=class{constructor(x,A){this.controller=x;this.parameters=A;this.uid=(0,ix.generateUUID)()}#x;#A=new Map;#F;get customType(){return this.parameters?.customType}get mediaStream(){return this.#x}get audioCapture(){return this.#F}get volume(){return(0,ix.assert)(this.audioCapture,"getting the volume failed, this video has no Audio"),this.audioCapture.volume}async setVolume(x){(0,ix.assert)(this.audioCapture,"setVolume() failed, this video has no Audio"),await this.audioCapture.setVolume(x)}get vad(){return(0,ix.assert)(this.audioCapture,"getting the vad config failed, this video has no Audio"),this.audioCapture.vad}setVad(x){(0,ix.assert)(this.audioCapture,"setVad() failed, this video has no Audio"),this.audioCapture.setVad(x)}async setDevice(x,A={voiceActivity:void 0,volumeGate:void 0}){if(this.#x)throw new Error("This VideoCapture already has a MediaStream.");if(!x.getVideoTracks()[0])throw new Error("Error when calling setDevice(), MediaStream does not contain a VideoStreamTrack!");if(this.#x=x,x.getAudioTracks()[0]){let r={device:await N0(x.getAudioTracks()[0]),vad:A,ref:this.uid};this.#F=await this.controller.createAudioCapture(r)}}async start(x,A){let F=this.#A.get(A.connectionId);if(F===void 0&&this.#A.set(A.connectionId,F=new Set),!F.has(A.mediaId)&&(F.add(A.mediaId),x.mainConnection?.id===A.connectionId)){let r={kind:"video",codec:this.parameters?.codec??C.DefaultVideoCodec,ref:this.#F?.uid,uid:this.uid};this.parameters?.customType&&(r.customType=this.parameters.customType),await x.request("StartMedia",{media_id:A.mediaId,properties:r}).catch(D=>k(`StartMedia got rejected; ${D}`))}}async stop(x,A){this.#x&&Fx(this.#x),this.#A.get(A.connectionId)?.delete(A.mediaId)&&x.mainConnection?.id===A.connectionId&&await x.request("StopMedia",{media_id:A.mediaId}).catch(r=>k(`StopMedia got rejected; ${r}`))}async dump(){let x=[];for(let[A,F]of this.#A)x.push(`${A} => ${Array.from(F.values()).join(",")}`);return{uid:this.uid,ref:this.#F?.uid??null,customType:this.customType??null,tracks:this.#x?.getVideoTracks().map(A=>({id:A.id,kind:A.kind,label:A.label,ready:A.readyState,muted:A.muted,settings:{...A.getSettings()}}))??[],volume:this.#F?.volume??0,medias:x}}close(){this.#x&&Fx(this.#x),this.audioCapture?.close(),this.#F=void 0}};var Rr=require("@4players/odin-common");o();var L=class{constructor(x,A,F){this.controller=x;this.uid=A;this.customType=F}get volume(){return this.controller.playbackGetVolume(this.uid)}get activity(){return this.controller.playbackGetActivity(this.uid)}get jitterStats(){return this.controller.playbackGetJitterStats(this.uid)}start(x){f(`starting audio playback media ${x.mediaId} on connection ${x.connectionId}`),this.controller.playbackStart(this.uid,x)}stop(x){f(`stopping audio playback media ${x.mediaId} on connection ${x.connectionId}`),this.controller.playbackStop(this.uid,x)}setVolume(x){n(`updating audio playback media '${this.uid}' volume to ${x}`),this.controller.playbackSetVolume(this.uid,x)}close(){n(`closing audio playback media '${this.uid}'`),this.controller.closePlayback(this.uid)}};function EF(t,x){let A=t.audioContext;if(typeof A.setSinkId=="function"){t.connectOutput(A.destination);let F,r=()=>{if(A.state==="running"&&F!==void 0){let D=F;F=void 0,A.setSinkId(D).catch(e=>a("failed to apply deferred sinkId",e))}};return A.addEventListener("statechange",r),{async setSinkId(D){if(A.state!=="running"){F=D;return}await A.setSinkId(D)},dispose(){A.removeEventListener("statechange",r)}}}if(x&&typeof document<"u"&&typeof HTMLAudioElement<"u"&&typeof HTMLAudioElement.prototype.setSinkId=="function"){let F=A.createMediaStreamDestination();t.connectOutput(F);let r=new Audio;r.srcObject=F.stream,r.muted=!1,r.volume=1;let D=!1,e=!1,j={once:!0,passive:!0,capture:!0},v=()=>{e=!1,c()},E=()=>{e||D||(e=!0,document.addEventListener("pointerdown",v,j),document.addEventListener("keydown",v,j))},u=()=>{e&&(e=!1,document.removeEventListener("pointerdown",v,!0),document.removeEventListener("keydown",v,!0))},c=()=>{D||r.play().catch(sx=>{D||(sx instanceof DOMException&&sx.name==="NotAllowedError"?E():a("failed to start playback audio element",sx))})},kx=()=>{A.state==="running"&&r.paused&&c()};return A.addEventListener("statechange",kx),c(),{async setSinkId(sx){await r.setSinkId(sx)},dispose(){D=!0,u(),A.removeEventListener("statechange",kx),r.pause(),r.srcObject=null,r.removeAttribute("src");try{r.load()}catch{}F.disconnect()}}}return t.connectOutput(A.destination),{async setSinkId(){},dispose(){}}}var $x=class{constructor(x){this.audioContextFactory=x;this.entries=[]}async acquire(x){for(let F of this.entries){if(F.sampleRate===x)return F.references+=1,F.audioContext;if(F.sampleRate===void 0&&F.audioContext.sampleRate===x)return F.references+=1,F.audioContext}let A={sampleRate:x,audioContext:await this.audioContextFactory(x),references:1};return this.entries.push(A),A.audioContext}async release(x){let A=this.entries.findIndex(F=>F.audioContext===x);if(!(A<0)&&(this.entries[A].references-=1,this.entries[A].references<=0)){let F=this.entries[A].audioContext;this.entries.splice(A,1),await F.close()}}close(){for(let x of this.entries)x.audioContext.close()}},yx=class t{constructor(x,A,F=!1){this.audioContexts=x;this.sink=A;this.enableHTMLAudioElementFallback=F;this.audioCaptures=[];this.videoCaptures=[];this.globalVolume=[1,1];this.playbacks=new Map;this.setPlaybackStrand=new vx.Strand}async create(x,A){return new t(x,A)}receivePacket(x,A){this.playbackWorker?.receivePacket(x,A)}receiveMonitoredPacket(x,A){let F=A.slice();this.receivePacket(x,F)}async createAudioPlayback(x){let A=this.playbacks.get(x.uid),F=x.volume;if(A===void 0){F=F??[1,1];let r=new L(this,x.uid,x.customType);A={id:void 0,volume:F,playback:r},this.playbacks.set(x.uid,A)}return F!==void 0&&A.playback.setVolume(F),A.playback}async createAudioCapture(x){let A=new P(this,x);return await A.setDevice(x),this.audioCaptures.push(new WeakRef(A)),A}async createVideoCapture(x,A){let F=new g(this,A);return await F.setDevice(x),this.videoCaptures.push(new WeakRef(F)),F}playbackSetDevice(x){return this.setPlaybackStrand.enqueue(async()=>{let A=x?.device.deviceId??"";if(A==="default"&&(A=""),this.playbackWorker===void 0){let F=await this.audioContexts.acquire(48e3);this.playbackWorker=await z0(F),this.playbackSink=EF(this.playbackWorker,this.enableHTMLAudioElementFallback),this.playbackWorker.setGlobalVolume(this.globalVolume);for(let[,r]of this.playbacks)r.id!==void 0&&this.playbackWorker.addMedias(r.id.connectionId,[r.id.mediaId],r.volume)}if(x&&this.playbackSink!==void 0)try{await this.playbackSink.setSinkId(A)}catch(F){a("failed to set playback sink",F)}})}playbackSetGlobalVolume(x){this.globalVolume=x,this.playbackWorker?.setGlobalVolume(this.globalVolume)}playbackStart(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.id!==void 0&&this.playbackStop(x,F.id),F.id=A,this.playbackWorker?.addMedias(A.connectionId,[A.mediaId],F.volume))}playbackStop(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.id!==A&&a(`playback media ${A.mediaId} on connection ${A.connectionId} is out of sync`,F.id,A),F.id=void 0,this.playbackWorker?.removeMedias(A.connectionId,[A.mediaId]))}playbackGetActivity(x){let A=this.playbacks.get(x);return A?.id===void 0?y:this.playbackWorker?.getActivity(A.id)??y}playbackGetJitterStats(x){let A=this.playbacks.get(x);return A?.id===void 0?vx.JITTER_STATS_INITIAL:this.playbackWorker?.getJitterStats(A.id)??vx.JITTER_STATS_INITIAL}playbackSetVolume(x,A){let F=this.playbacks.get(x);F!==void 0&&(F.volume=A,F.id!==void 0&&this.playbackWorker?.setVolume(F.id,F.volume))}playbackGetVolume(x){return this.playbacks.get(x)?.volume??[1,1]}closePlayback(x){let A=this.playbacks.get(x);A!==void 0&&(A.id!==void 0&&this.playbackStop(x,A.id),this.playbacks.delete(x))}close(){this.playbackSink?.dispose(),this.playbackSink=void 0,this.playbackWorker?.close(),this.audioContexts.close()}async dump(){let x=[];for(let r of this.audioCaptures){let D=r.deref();D!==void 0&&x.push(await D.dump())}let A=[];for(let r of this.videoCaptures){let D=r.deref();D!==void 0&&A.push(await D.dump())}let F=[];for(let[r,D]of this.playbacks)F.push({uid:r,id:D.id||null,volume:D.volume});return{globalVolume:this.globalVolume,playbackWorker:await this.playbackWorker?.dump()||null,audioCaptures:x,videoCaptures:A,playbacks:F}}},_=class{constructor(x,A=!1){this.device=x;this.isDefault=A}get type(){switch(this.device.kind){case"audioinput":return"AudioCapture";case"audiooutput":return"AudioPlayback";default:(0,vx.assert)(!1,"not supported device")}}get id(){return this.device.deviceId}get name(){return this.device.name}};var lx=require("@4players/odin-common"),DA=require("@msgpack/msgpack");o();var DD=require("@4players/odin-common");o();var J=require("@4players/odin-common"),Px=require("@4players/odin-common/api");var Z=require("@4players/odin-common/api"),i=require("@4players/odin-common/zod"),X0=(0,i.discriminatedUnion)("kind",[(0,i.object)({kind:(0,i.literal)("Sdp"),type:(0,i.enum)(["Answer","Offer"]),sdp:(0,i.string)(),media_map:(0,i.array)((0,i.tuple)([Z.MediaIdSchema,(0,i.string)()])),negotiation_id:(0,i.number)().optional()}),(0,i.object)({kind:(0,i.literal)("Trickle"),candidate:(0,i.string)(),spd_mid:(0,i.string)().optional(),spd_mline_index:(0,i.number)().optional(),username_fragment:(0,i.union)([(0,i.string)(),(0,i.null)()]).optional()}),(0,i.object)({kind:(0,i.literal)("TrickleFinished")})]),_x={...Z.MainCommandsRpc,WebRtcUpdate:{request:X0,response:Z.MainCommandsRpc.WebRtcUpdate.response}},Lx={...Z.MainNotificationsRpc,WebRtcUpdate:X0};o();var W=require("@4players/odin-common"),Y=require("@4players/odin-common/api"),Hx=require("@msgpack/msgpack");o();var U=class{constructor(x){this.stream=x;this._SendQueue=[];this._RecvQueue=[];this._EventQueue=[];this._Requests=new Map;this._Close=new AbortController;this._NextId=1;x instanceof WebSocket?(x.addEventListener("open",this._OnWebSocketOpen.bind(this)),x.addEventListener("close",this.close.bind(this)),x.addEventListener("message",A=>this._OnRpcMessage(A.data)),x.binaryType="arraybuffer"):(nF(x.readable.getReader(),this._OnRpcMessage.bind(this)).finally(this.close.bind(this)),this._Writer=x.writable.getWriter()),this._Close.signal.addEventListener("abort",this._Cleanup.bind(this),{once:!0})}get closed(){return this._Close.signal.aborted}get closeSignal(){return this._Close.signal}async request(x,A,F){if(this.closed)return Promise.resolve("closed");let r=this._NextId,D=F===void 0?void 0:setTimeout(()=>this._TimeoutRequest(r),F);return this._Send([0,r,x,A]),new Promise(e=>{this._Requests.set(r,{accept:e,timeoutId:D}),this._NextId+=1})}notify(x,A){this.closed||this._Send([2,x,A])}recv(){if(this.closed)return Promise.resolve("closed");let x=this._EventQueue.shift();return x!==void 0?Promise.resolve(x):new Promise(A=>this._RecvQueue.push(A))}close(){this._Close.abort()}_TimeoutRequest(x){let A=this._Requests.get(x);A!==void 0&&(this._Requests.delete(x),clearTimeout(A.timeoutId),A.accept("timeout"))}_Send(x){let A;x instanceof Uint8Array?A=x:A=new Uint8Array((0,Hx.encode)(x,{ignoreUndefined:!0,forceFloat32:!0})),this.stream instanceof WebSocket?this.stream.send(A):this._Writer.write(A)}_OnWebSocketOpen(x){for(let A of this._SendQueue)this._Send(A);this._SendQueue.length=0}_OnRpcMessage(x){let A=fF(x);if(A.type!=="Success"){this.close();return}switch(A.value[0]){case 0:this._Send([1,A.value[1],"not supported",null]);break;case 1:this._OnResponse(A.value[1],A.value[2],A.value[3]);break;case 2:this._OnEvent(A.value[1],A.value[2]);break}}_OnResponse(x,A,F){let r=this._Requests.get(x);r!==void 0&&(clearTimeout(r.timeoutId),r.accept(A===null?(0,W.success)(F):(0,W.failure)(A)))}_OnEvent(x,A){let F=this._RecvQueue.shift();F!==void 0?F({name:x,properties:A}):this._EventQueue.push({name:x,properties:A})}_Cleanup(){for(let x of this._Requests.values())clearTimeout(x.timeoutId),x.accept("closed");this._Requests.clear();for(let x of this._RecvQueue)x("closed");this._RecvQueue.length=0,this._SendQueue.length=0,this.stream instanceof WebSocket?this.stream.close():this._Writer?.close().catch(()=>{})}},xx=class{constructor(x,A,F){this.rpc=x;this._Commands=A;this._Events=F}get closed(){return this.rpc.closed}get closeSignal(){return this.rpc.closeSignal}async request(x,A,F){A=(0,Y.parseRequest)(x,A,this._Commands);let r=await this.rpc.request(x,A,F);if(r==="closed"||r==="timeout"||r.type==="Failure")return r;let D=(0,Y.parseResponse)(x,r.value,this._Commands);return D!==void 0?(0,W.success)(D):(0,W.failure)("response schema failed validation")}notify(x,A){A=(0,Y.parseRequest)(x,A,this._Commands),this.rpc.notify(x,A)}async recv(){let x=await this.rpc.recv();if(x==="closed")return x;let A=n0(this._Events,x);return A!==void 0?A:(Z0(this._Events,x.name)?(k(`schema validation for ${x.name} failed; closing connection`),this.rpc.close()):a(`dropping unknown event ${x.name}`),"closed")}close(){this.rpc.close()}};function fF(t){try{return(0,W.success)(Y.MessagePackRpcSchema.parse((0,Hx.decode)(new Uint8Array(t))))}catch(x){return(0,W.failure)(String(x))}}function n0(t,x){if(!Z0(t,x.name))return;let A=t[x.name].safeParse(x.properties);if(A.success)return{name:x.name,properties:A.data}}function Z0(t,x){return x in t}async function nF(t,x){let A=new Uint8Array;for(;;){let F=I0(A,0);if(F===B){t.cancel("protocol violation");break}if(F!==G&&F<=A.length){x(A.subarray(0,F)),A=A.subarray(F);continue}let r;try{r=await t.read()}catch{break}if(r.done)break;A=sF(A,r.value)}A.length>0&&a("unprocessed bytes left in rpc stream",A)}function sF(t,x){if(t.length===0)return x;if(x.length===0)return t;let A=new Uint8Array(t.length+x.length);return A.set(t,0),A.set(x,t.length),A}var K=require("@4players/odin-common"),Y0=require("@4players/odin-common/api");o();var $=class t{constructor(x,A){this.text=x;this.claims=A;if(A.ups!==void 0){let F=t.parse(A.ups);F.type==="Success"?this._Upstream=F.value:k(`upstream in token can not be parsed; ${F.reason}`)}}static parse(x){let A=x.split(".");if(A.length!==3)return(0,K.failure)("expected three segments");let F=(0,K.fromBase64Url)(A[1]);if(F.type==="Failure")return(0,K.failure)(`invalid token; ${F.reason}`);let r;try{r=JSON.parse(F.value)}catch(e){return(0,K.failure)(`invalid token; ${e}`)}let D=Y0.TokenClaimsSchema.safeParse(r);return D.success===!1?(0,K.failure)(`invalid token; ${D.error}`):(0,K.success)(new t(x,D.data))}get timeLeft(){return this.claims.exp===void 0?1/0:this.claims.exp*1e3-Date.now()}get upstream(){return this._Upstream}get defaultRoomId(){return Array.isArray(this.claims.rid)?this.claims.rid.length===1?this.claims.rid[0]:void 0:this.claims.rid}hasAudience(x){return this.claims.aud===void 0&&x==="gateway"?!0:Array.isArray(this.claims.aud)?this.claims.aud.includes(x):this.claims.aud===x}toString(){return this.text}};var bx=require("@4players/odin-common");o();function xA(t){typeof globalThis.rtcDataChannels>"u"&&(globalThis.rtcDataChannels=[]),Array.isArray(globalThis.rtcDataChannels)&&globalThis.rtcDataChannels.length<=100&&globalThis.rtcDataChannels.push(t)}function AA(t){let x=globalThis.rtcDataChannels?.indexOf(t);x!==void 0&&x>=0&&globalThis.rtcDataChannels.splice(x,1),t.readyState!=="closed"&&t.close()}function Nx(t){typeof globalThis.rtcPeerConnections>"u"&&(globalThis.rtcPeerConnections=[]),Array.isArray(globalThis.rtcPeerConnections)&&globalThis.rtcPeerConnections.length<=100&&globalThis.rtcPeerConnections.push(t)}function FA(t){let x=globalThis.rtcPeerConnections?.indexOf(t);x!==void 0&&x>=0&&globalThis.rtcPeerConnections.splice(x,1),t.connectionState!=="closed"&&t.close()}var Cx=class{constructor(x,A,F){this._localVideos=new Map;this._remoteVideos=new Map;this._freeLocalVideoTransceivers=[];this._negotiationRequested=!1;this._negotiationRunning=!1;this._negotiationCounter=0;this._pendingRemoteCandidates=[];this._WebRtcStatsSnapshot=null;this._peerConnection=x,this._signaling=A,this._answerTimeout=F?.answerTimeout??C.WebRtcAnswerTimeout,this._maxNegotiationAttempts=F?.maxNegotiationAttempts??C.WebRtcMaxNegotiationAttempts,this._peerConnection.ontrack=this._onTrack.bind(this),this._peerConnection.onconnectionstatechange=()=>this._onStatusChanged(),this._peerConnection.onicecandidate=r=>{(r.candidate?this._signaling.sendIceCandidate(r.candidate):this._signaling.sendIceComplete()).catch(e=>{a("failed to send local ice candidate",e)})},this._WebRtcStatsInterval=setInterval(()=>{this._snapshotStats()},C.WebRtcStatsSnapshotInterval)}requestNegotiation(){this._negotiationRequested=!0,!this._negotiationRunning&&(this._negotiationRunning=!0,setTimeout(async()=>{let x=0;for(;this._negotiationRequested;){this._negotiationRequested=!1;try{await this._negotiate(),x=0}catch(A){if(x+=1,k(`negotiation failed during sdp offer/answer exchange (attempt ${x})`,A),x<this._maxNegotiationAttempts)this._negotiationRequested=!0;else{this._negotiationRunning=!1,this._signaling.closeConnection().catch(()=>{});return}}}this._negotiationRunning=!1}))}async startLocalVideo(x,A,F){if(this._localVideos.has(x))return;f(`starting local video for media ${x}`);let r=this._freeLocalVideoTransceivers.pop();if(r?(await r.sender.replaceTrack(A),r.direction="sendrecv"):r=this._peerConnection.addTransceiver(A),F){let j=r.sender.getParameters(),{maxBitrate:v,maxFramerate:E,scaleResolutionDownBy:u}=F,c={...v!==void 0&&{maxBitrate:v},...E!==void 0&&{maxFramerate:E},...u!==void 0&&{scaleResolutionDownBy:u}};if(j.encodings.length===0)j.encodings.push(c);else for(let kx of j.encodings)Object.assign(kx,c);F.degradationPreference&&(j.degradationPreference=F.degradationPreference),await r.sender.setParameters(j)}let e=new bx.VideoCodec(F?.codec??C.DefaultVideoCodec).isSupported();e&&r.setCodecPreferences([e]),this._localVideos.set(x,{transceiver:r}),this.requestNegotiation()}stopLocalVideo(x){let A=this._localVideos.get(x);A&&(f(`stopping local video for media ${x}`),this._localVideos.delete(x),A.transceiver.sender.track&&(A.transceiver.sender.track.enabled=!1),A.transceiver.direction="inactive",A.transceiver.sender.replaceTrack(null).catch(()=>{}),this._freeLocalVideoTransceivers.push(A.transceiver),this.requestNegotiation())}startRemoteVideo(x){f(`starting remote video for media ${x}`);let A=this._peerConnection.addTransceiver("video",{direction:"recvonly"}),F=new Promise((r,D)=>{this._remoteVideos.set(x,{state:"Requested",transceiver:A,promise:{resolve:r,reject:D}})});return this.requestNegotiation(),F}stopRemoteVideo(x){let A=this._remoteVideos.get(x);if(A){f(`stopping remote video for media ${x}`),this._remoteVideos.delete(x),A.state!=="Active"&&A.promise.reject(new Error("video stopped"));try{A.transceiver.stop()}catch{}this.requestNegotiation()}}async handleWebRtcUpdate(x){try{switch(x.kind){case"Sdp":await this._updateRemoteSdp(x.type==="Answer"?"answer":"offer",x.sdp,x.media_map,x.negotiation_id);break;case"Trickle":this._addIceCandidate({candidate:x.candidate,sdpMid:x.spd_mid??void 0,sdpMLineIndex:x.spd_mline_index??void 0,usernameFragment:x.username_fragment??void 0});break;case"TrickleFinished":this._addIceCandidate(void 0);break}}catch(A){k("failed to handle webrtc update",A,x)}}startup(){this._peerConnection.connectionState==="new"&&this.requestNegotiation()}cleanup(){for(let[,x]of this._remoteVideos)x.state!=="Active"&&x.promise.reject(new Error("connection closed"));this._pendingAnswer?.reject(new Error("connection closed")),this._pendingRemoteCandidates.length=0,clearTimeout(this._WebRtcIceTimeout),clearTimeout(this._WebRtcTimeout),clearInterval(this._WebRtcStatsInterval),this._localVideos.clear(),this._remoteVideos.clear(),this._freeLocalVideoTransceivers.length=0}get stats(){return this._WebRtcStatsSnapshot}get peerConnection(){return this._peerConnection}get localVideos(){return this._localVideos}get remoteVideos(){return this._remoteVideos}get isConnected(){return this._peerConnection.connectionState==="connected"}get isNegotiating(){return this._negotiationRunning}async _snapshotStats(){try{let x=await this._peerConnection.getStats(),A={},F={bytesSent:0,bytesReceived:0,packetsSent:0,packetsReceived:0,rtt:0};x.forEach(r=>{let{type:D,...e}=r;D!=="certificate"&&(D==="candidate-pair"&&r.nominated&&(F.bytesSent+=r.bytesSent??0,F.bytesReceived+=r.bytesReceived??0,F.packetsSent+=r.packetsSent??0,F.packetsReceived+=r.packetsReceived??0,F.rtt=r.currentRoundTripTime??0),A[D]||(A[D]=[]),A[D].push(e))}),this._WebRtcStatsSnapshot={timestamp:Date.now(),status:this._peerConnection.connectionState,stats:F,report:A}}catch{}}_addIceCandidate(x){if(x&&(x.sdpMid===void 0&&x.sdpMLineIndex===void 0&&(x={...x,sdpMid:"0"}),n(`adding new ice ${x.candidate}`,x)),this._peerConnection.remoteDescription===null){this._pendingRemoteCandidates.push(x);return}this._applyIceCandidate(x)}_applyIceCandidate(x){this._peerConnection.addIceCandidate(x).catch(A=>{a("failed to add remote ice candidate",A,x)})}_flushPendingIceCandidates(){let x=this._pendingRemoteCandidates.splice(0);for(let A of x)this._applyIceCandidate(A)}async _negotiate(){let x=++this._negotiationCounter,A=await this._peerConnection.createOffer();(0,bx.assert)(A.type==="offer"&&A.sdp,"generated broken payload"),await this._peerConnection.setLocalDescription(A);let F=[];for(let[D,{transceiver:e}]of this._localVideos)e.mid&&F.push([D,e.mid]);for(let[D,e]of this._remoteVideos)e.state!=="Active"&&e.transceiver.mid&&F.push([D,e.transceiver.mid]);let r=new Promise((D,e)=>{this._pendingAnswer={negotiationId:x,resolve:D,reject:e}});try{await this._signaling.sendOffer(A.sdp,F,x),await iF(r,this._answerTimeout,`timed out waiting for answer to offer ${x}`)}finally{this._pendingAnswer=void 0}}async _updateRemoteSdp(x,A,F,r){if(x==="offer"){a("ignoring unexpected sdp offer from server");return}let D=this._pendingAnswer;if(D===void 0){a("ignoring sdp answer without pending negotiation");return}if(r!==void 0&&r!==D.negotiationId){a(`ignoring stale sdp answer for negotiation ${r}; current is ${D.negotiationId}`);return}if(this._peerConnection.signalingState!=="have-local-offer"){a(`ignoring sdp answer in signaling state ${this._peerConnection.signalingState}`);return}for(let[e,j]of F){let v=this._remoteVideos.get(e);v?.state==="Requested"&&(this._remoteVideos.set(e,{state:"Mapped",transceiver:v.transceiver,mid:j,promise:v.promise}),n(`updated remote video list with media ${e}`,v,this._remoteVideos))}try{await this._peerConnection.setRemoteDescription({type:x,sdp:A})}catch(e){D.reject(e);return}this._flushPendingIceCandidates(),D.resolve()}async _onStatusChanged(){switch(n(`peer connection state changed to ${this._peerConnection.connectionState}`),this._peerConnection.connectionState){case"closed":break;case"connected":clearTimeout(this._WebRtcIceTimeout),this._WebRtcIceTimeout=void 0,clearTimeout(this._WebRtcTimeout),this._WebRtcTimeout=void 0;break;case"failed":this._peerConnection.restartIce(),this.requestNegotiation();case"disconnected":C.MainConnectionPingInterval!==void 0&&await this._signaling.checkConnection();default:this._WebRtcIceTimeout===void 0&&(this._WebRtcIceTimeout=setTimeout(()=>{n("ice connection timeout was reached"),this._peerConnection.restartIce(),this._WebRtcIceTimeout=void 0},C.WebRtcIceTimeout)),this._WebRtcTimeout===void 0&&(this._WebRtcTimeout=setTimeout(async()=>{n("peer connection timeout was reached"),await this._signaling.closeConnection()},C.WebRtcTimeout));break}}_onTrack(x){let A=Array.from(this._remoteVideos).find(([,D])=>D.state==="Mapped"&&D.mid===x.transceiver.mid);if(!A){a(`unexpected track with mid: ${x.transceiver.mid}`);return}let[F,r]=A;(0,bx.assert)(r.state==="Mapped","expected video state to be Mapped"),this._remoteVideos.set(F,{state:"Active",transceiver:x.transceiver}),n(`updated local video list with media ${F}`,A,x.transceiver,this._localVideos),x.track.onended=()=>{n(`video track with mid ${x.transceiver.mid} ended`,A)},r.promise.resolve(x.track)}};function iF(t,x,A){return new Promise((F,r)=>{let D=setTimeout(()=>r(new Error(A)),x);t.then(e=>{clearTimeout(D),F(e)},e=>{clearTimeout(D),r(e)})})}var wx=class t{constructor(x,A,F,r,D,e,j){this.id=x;this.address=A;this.connection=r;this.datagramWritable=D;this.rpc=e;this.closeController=j;this._ConnectionStats={...J.CONNECTION_STATS_INITIAL};this._WebRtcSessionFlight=new z;this._PingFlight=new z;this.status=0;this._ClosePromise=(async()=>{try{await this.connection.closed}catch{}return"closed"})(),C.MainConnectionPingInterval!==void 0&&(this._PingIntervalId=setInterval(async()=>{this.connectionStats.rtt=await this.ping(C.HealthCheckTimeout)},C.MainConnectionPingInterval)),j.signal.addEventListener("abort",()=>this._CleanUp(),{once:!0}),this.datagramWriter=D.getWriter(),this.connection.closed.then(()=>{this.status=2}).catch(()=>{}),this.connection.ready.then(()=>{this.status=1}).catch(()=>{}),this.readDatagrams(this.connection,this.id,(v,E)=>{this._ConnectionStats.packetsReceived+=1,F(v,E)})}static async create(x,A,F,r){try{let D=new URL(`https://${A}?version=${$0}&uid=${ox}`),e=new AbortController;r.addEventListener("abort",()=>e.abort(),{once:!0});let j=new WebTransport(D);e.signal.addEventListener("abort",()=>{try{j.close()}catch{}},{once:!0}),await j.ready;let v=j.datagrams,E=v?.createWritable?.()??v?.writable;if(!E)return e.abort(),(0,J.failure)(`connecting to ${A} failed because WebTransport datagrams are not supported by this browser`);let u=await j.createBidirectionalStream(),c=new xx(new U(u),_x,Lx);return e.signal.addEventListener("abort",()=>c.close(),{once:!0}),c.notify("Hello",{stream:"main"}),(0,J.success)(new t(x,A,F,j,E,c,e))}catch(D){return(0,J.failure)(`connecting to ${A} failed with ${D}`)}}get connectionStats(){return this._ConnectionStats}get transport(){return"H3"}get closePromise(){return this._ClosePromise}get closeSignal(){return this.closeController.signal}get closed(){return this.closeSignal.aborted}waitForConnected(){return Promise.race([this.connection.ready,this.connection.closed.then(()=>{throw new Error("connection closed")})])}close(){f(`closing connection to '${this.address}' with id ${this.id}`),this.closeController.abort("request")}async joinRoom(x,A,F,r){try{if(this.closed)return"closed";let D=await this.connection.createBidirectionalStream().catch(()=>"closed");if(D==="closed")return"closed";let e=new xx(new U(D),Px.RoomCommandsRpc,Px.RoomNotificationsRpc),j=await e.request("Hello",{stream:"room",token:String(x),room_id:A,user_data:F,position:r});return j==="closed"||j.type==="Failure"?j:(0,J.success)(e.rpc)}catch(D){return(0,J.failure)(`JoinRoom failed; ${D}`)}}async getReconnectToken(x){let A=await this._Request("RequestReconnectToken",{peer_id:x});return A.type==="Failure"?A:$.parse(A.value)}async healthCheck(){let x=await this._RequestPing(C.HealthCheckTimeout);return x||this.close(),x}async ping(x=3e4){let A=Date.now();return await this._RequestPing(x)?Date.now()-A:0}sendDatagram(x){try{this.datagramWriter.write(x),this._ConnectionStats.packetsSent+=1;let A=x.byteLength;this.connectionStats.bytesSent+=A}catch{}}async readDatagrams(x,A,F){try{let r=x.datagrams.readable.getReader();for(;;){let D=await r.read();if(D.done)break;let e=D.value.byteLength;this.connectionStats.bytesReceived+=e,F(A,D.value)}}catch{}}_CleanUp(){n(`performing cleanup for connection ${this.id}`),clearInterval(this._PingIntervalId)}async _EnsureWebRtcSession(){return this._WebRtcSession?this._WebRtcSession:this._WebRtcSessionFlight.run(async()=>(this._PeerConnection=new RTCPeerConnection,Nx(this._PeerConnection),this._WebRtcSession=new Cx(this._PeerConnection,{sendOffer:async(x,A,F)=>{let r=await this._Request("WebRtcUpdate",{kind:"Sdp",type:"Offer",sdp:x,media_map:A,negotiation_id:F});if(r.type==="Failure")throw new Error(`failed to send sdp offer; ${r.reason}`)},sendIceCandidate:async x=>{await this._Request("WebRtcUpdate",{kind:"Trickle",candidate:x.candidate,spd_mid:x.sdpMid??void 0,spd_mline_index:x.sdpMLineIndex??void 0,username_fragment:x.usernameFragment??void 0})},sendIceComplete:async()=>{await this._Request("WebRtcUpdate",{kind:"TrickleFinished"})},closeConnection:async()=>{this._PeerConnection?.restartIce(),this._WebRtcSession?.requestNegotiation()},checkConnection:async()=>{}}),this._HandleWebRtcUpdates(),this._WebRtcSession))}async _HandleWebRtcUpdates(){for(;;){let x=await this.rpc.recv();if(x==="closed")break;x.name==="WebRtcUpdate"&&this._WebRtcSession?.handleWebRtcUpdate(x.properties)}this.close()}async _Request(x,A,F){let r=Date.now(),D=await(F===void 0?this.rpc.request(x,A):this.rpc.request(x,A,F)),e=(Date.now()-r)/1e3;return x!=="Ping"&&n(`sent main rpc '${x}'; took: ${e}s`,{properties:A,timeout:F,result:D}),D==="closed"?(0,J.failure)("connection lost"):D}_RequestPing(x=3e4){return this._PingFlight.run(async()=>{let A=await this._Request("Ping",{},x);return A!=="timeout"&&A.type==="Success"})}async startLocalVideo(x,A,F){await(await this._EnsureWebRtcSession()).startLocalVideo(x,A,F)}stopLocalVideo(x){this._WebRtcSession?.stopLocalVideo(x)}async startRemoteVideo(x){return(await this._EnsureWebRtcSession()).startRemoteVideo(x)}stopRemoteVideo(x){this._WebRtcSession?.stopRemoteVideo(x)}async dump(){return{type:"H3",id:this.id,address:this.address,closed:this.closed,status:this.status,datagrams:{sent:this._ConnectionStats.packetsSent,received:this._ConnectionStats.packetsReceived},webRtc:{signalingState:this._PeerConnection?.signalingState??null,connectionState:this._PeerConnection?.connectionState??null,iceGatheringState:this._PeerConnection?.iceGatheringState??null,iceConnectionState:this._PeerConnection?.iceConnectionState??null,connectionStats:this._WebRtcSession?.stats??null}}}};var q=require("@4players/odin-common");o();var H=require("@4players/odin-common");o();async function s0(t,x){let A=performance.now(),F=(0,H.failure)("no connection was attempted");for(let r=0;r<C.ConnectInterval.length&&!x.aborted;r++){let D=A+oF(r);if(await(0,H.abortableSleep)(D-performance.now(),x)==="aborted")return(0,H.failure)("aborted");if(F=await bF(t,x),F.type==="Success")return F}return F}async function bF(t,x){let A;try{A=new WebSocket(t)}catch(v){return(0,H.failure)(`unable to create websocket; ${v}`)}let F=new AbortController,r=new Promise(v=>A.addEventListener("open",()=>v((0,H.success)(A)),{signal:F.signal})),D=new Promise(v=>A.addEventListener("close",E=>v((0,H.failure)(E.reason!==""?E.reason:"unable to establish websocket connection")),{signal:F.signal})),e=new Promise(v=>x.addEventListener("abort",()=>v((0,H.failure)("aborted")),{signal:F.signal})),j=await Promise.race([r,D,e]);return F.abort(),j}function oF(t){let x=C.ConnectInterval.slice(0,t).reduce((F,r)=>F+r,0),A=C.ConnectInterval[t]*Math.random();return x+A}var Kx=class t{constructor(x,A,F,r,D,e){this.id=x;this.address=A;this.url=F;this.onDatagram=r;this.connection=D;this.webRtc=e;this._PeerIdMap=new WeakMap;this._ConnectionStats={...q.CONNECTION_STATS_INITIAL};this._PingFlight=new z;f(`creating new webrtc connection to '${this.address}' with id ${this.id}`),this.closeSignal.addEventListener("abort",()=>this._CleanUp(),{once:!0}),this._ClosePromise=new Promise(j=>{this.closeSignal.addEventListener("abort",()=>{j("closed")},{once:!0})}),Nx(e),this._AudioChannel=this.webRtc.createDataChannel("audio",{id:2,negotiated:!0,ordered:!1,maxRetransmits:0}),this._AudioChannel.binaryType="arraybuffer",this._AudioChannel.onmessage=j=>{this._ConnectionStats.packetsReceived++;let v=new Uint8Array(j.data);this._ConnectionStats.bytesReceived+=v.byteLength,this.onDatagram(this.id,v)},this._AudioChannel.onerror=j=>a(`webrtc audio data channel for connection with id ${x} raised an error`,j),this._AudioChannel.onclosing=j=>f(`webrtc audio data channel for connection with id ${x} begins shutting down`,j),this._AudioChannel.onclose=j=>f(`webrtc audio data channel for connection with id ${x} has closed`,j),xA(this._AudioChannel),this._WebRtcSession=new Cx(this.webRtc,{sendOffer:async(j,v,E)=>{let u=await this._Request("WebRtcUpdate",{kind:"Sdp",type:"Offer",sdp:j,media_map:v,negotiation_id:E});if(u.type==="Failure")throw new Error(`failed to send sdp offer; ${u.reason}`)},sendIceCandidate:async j=>{await this._Request("WebRtcUpdate",{kind:"Trickle",candidate:j.candidate,spd_mid:j.sdpMid??void 0,spd_mline_index:j.sdpMLineIndex??void 0,username_fragment:j.usernameFragment??void 0})},sendIceComplete:async()=>{await this._Request("WebRtcUpdate",{kind:"TrickleFinished"})},closeConnection:async()=>{this.close()},checkConnection:async()=>{this.healthCheck().then()}}),this._WebRtcSession.startup(),C.MainConnectionPingInterval!==void 0&&(this._PingIntervalId=setInterval(async()=>{this.connectionStats.rtt=await this.ping(C.HealthCheckTimeout)},C.MainConnectionPingInterval)),this._HandleWebRtcUpdates()}static async create(x,A,F,r){if(r.aborted)return(0,q.failure)("aborted");let D;try{D=new URL(`wss://${A}`)}catch(E){return(0,q.fail)(`address in token(${A}) can not be parsed; ${E}`)}let e=(0,q.extendUrl)(D,`main?uid=${ox}`);if(e.type!=="Success")return e;let j=await s0(e.value,r);if(j.type!=="Success")return j;let v=new xx(new U(j.value),_x,Lx);try{return(0,q.success)(new t(x,A,D,F,v,new RTCPeerConnection))}catch(E){return v.close(),(0,q.failure)(`unable to create webrtc connection; ${E}`)}}get status(){switch(this.webRtc.connectionState){case"connected":return 1;case"failed":case"closed":return 2;default:return 0}}get connectionStats(){return this._ConnectionStats}get transport(){return"WebRTC"}get closePromise(){return this._ClosePromise}get closeSignal(){return this.connection.closeSignal}get closed(){return this.connection.closed}async waitForConnected(){return new Promise((x,A)=>{let F=()=>{let r=this.status;r!==0&&(this.webRtc.removeEventListener("connectionstatechange",F),r===1?x():A(new Error("connection closed")))};this.webRtc.addEventListener("connectionstatechange",F),F(),this.closePromise.then(()=>{A(new Error("connection closed"))})})}close(){f(`closing ${this.transport} connection to '${this.address}' with id ${this.id}`),this.connection.close()}async joinRoom(x,A,F,r){let D=await this.connection.request("JoinRoom",{token:String(x),room_id:A,user_data:F,position:r});if(D==="closed"||D.type==="Failure")return D;let e=D.value;if(!("token"in e))return(0,q.failure)("JoinRoom responded without token");let j=(0,q.extendUrl)(this.url,`room?token=${e.token}`);if(j.type==="Failure")return j;let v=await s0(j.value,this.closeSignal);return v.type==="Success"?(this._PeerIdMap.set(v.value,e.peer_id),(0,q.success)(new U(v.value))):v}async getReconnectToken(x){let A=await this._Request("RequestReconnectToken",{peer_id:x});return A.type==="Failure"?A:$.parse(A.value)}async healthCheck(){let x=await this._RequestPing(C.HealthCheckTimeout);return x||this.close(),x}async ping(x=3e4){let A=Date.now();return await this._RequestPing(x)?Date.now()-A:0}sendDatagram(x){if(this._AudioChannel.readyState==="open"){let A=x.byteLength;this._AudioChannel.send(x),this._ConnectionStats.packetsSent+=1,this._ConnectionStats.bytesSent+=A}}_CleanUp(){n(`performing cleanup for connection ${this.id}`),clearInterval(this._PingIntervalId),AA(this._AudioChannel),FA(this.webRtc),this._WebRtcSession.cleanup(),this.connection.close()}async _HandleWebRtcUpdates(){for(;;){let x=await this.connection.recv();if(x==="closed")break;x.name==="WebRtcUpdate"&&this._WebRtcSession.handleWebRtcUpdate(x.properties)}this.close()}async _Request(x,A,F){let r=Date.now(),D=await(F===void 0?this.connection.request(x,A):this.connection.request(x,A,F)),e=(Date.now()-r)/1e3;return x!=="Ping"&&n(`sent main rpc '${x}'; took: ${e}s`,{properties:A,timeout:F,result:D}),D==="closed"?(0,q.failure)("connection lost"):D}_RequestPing(x=3e4){return this._PingFlight.run(async()=>{let A=await this._Request("Ping",{},x);return A!=="timeout"&&A.type==="Success"})}async startLocalVideo(x,A,F){await this._WebRtcSession.startLocalVideo(x,A,F)}stopLocalVideo(x){this._WebRtcSession.stopLocalVideo(x)}async startRemoteVideo(x){return this._WebRtcSession.startRemoteVideo(x)}stopRemoteVideo(x){this._WebRtcSession.stopRemoteVideo(x)}async dump(){return{type:"WebRtc",id:this.id,address:this.address,url:this.url.toString(),closed:this.closed,audioChannel:{readyState:this._AudioChannel.readyState,bufferedAmount:this._AudioChannel.bufferedAmount},datagrams:{sent:this.connectionStats.packetsSent,received:this.connectionStats.packetsReceived},webRtc:{signalingState:this.webRtc.signalingState,connectionState:this.webRtc.connectionState,iceGatheringState:this.webRtc.iceGatheringState,iceConnectionState:this.webRtc.iceConnectionState,connectionStats:this._WebRtcSession.stats}}}};function tA(t,x,A,F,r){switch(f(`creating ${x} main connection to '${A}'`),x){case"H3":return wx.create(t,A,F,r);case"WebRTC":return Kx.create(t,A,F,r);default:throw new Error(`transport ${x} is not supported`)}}var ax=require("@4players/odin-common"),N=require("@4players/odin-common/api");o();var Jx=class{constructor(x,A,F,r){this.id=x;this.connection=A;this.cipher=F;this.mediaMap=r;this._DatagramReceived=0;this._DatagramSent=0;this._DatagramReceivedInvalid=0;this._DatagramSentInvalid=0;A.closeSignal.addEventListener("abort",()=>this.close())}get connectionStats(){return this.connection.connectionStats}get transport(){return this.connection.transport}get address(){return this.connection.address}get status(){return this.closed?2:this.connection.status}get closePromise(){return this.connection.closePromise}get closeSignal(){return this.connection.closeSignal}get closed(){return this.connection.closed}waitForConnected(){return this.connection.waitForConnected()}close(){this.connection.close()}async joinRoom(x,A,F,r){this.cipher.reset();let D=await this.cipher.encryptUserData(F);if(D===B)return(0,ax.failure)("unable to encrypt initial user-data");let e=await this.connection.joinRoom(x,A,D,r);return e==="closed"||e.type==="Failure"?e:(0,ax.success)(new i0(e.value,this.cipher,this))}getReconnectToken(x){return this.connection.getReconnectToken(x)}healthCheck(){return this.connection.healthCheck()}async sendDatagram(x){let A=await this.cipher.encryptDatagram(x);A!==B?(this._DatagramSent+=1,this.connection.sendDatagram(A)):this._DatagramSentInvalid+=1}async decryptDatagram(x,A){let F=await this.cipher.decryptDatagram(x,A);return F!==B?this._DatagramReceived+=1:this._DatagramReceivedInvalid+=1,F}startLocalVideo(x,A,F){return this.connection.startLocalVideo(x,A,F)}stopLocalVideo(x){return this.connection.stopLocalVideo(x)}startRemoteVideo(x){return this.connection.startRemoteVideo(x)}stopRemoteVideo(x){return this.connection.stopRemoteVideo(x)}async dump(){return{type:"Encrypted",id:this.id,address:this.address,connectionId:this.connection.id,closed:this.closed,transport:this.transport,datagrams:{sent:this._DatagramSent,received:this._DatagramReceived,sentInvalid:this._DatagramSentInvalid,receivedInvalid:this._DatagramReceivedInvalid},cipher:await this.cipher.dump()}}},Ox=class{constructor(x){this.room=x}resendUserData(){this.room.roomConnection?.notify("UpdatePeer",{user_data:this.room.roomConnection.userData})}setUserData(x,A){let F={kind:"UserDataChanged",peer_id:x,user_data:A};this.room.onEvent("PeerUpdated",F)}},i0=class{constructor(x,A,F){this.rpc=x;this.cipher=A;this.connection=F;this.peers=new Map;this.closeSignal.addEventListener("abort",this.cleanup.bind(this),{once:!0})}get closed(){return this.rpc.closed}get closeSignal(){return this.rpc.closeSignal}async request(x,A,F){let r=await this.outgoing(x,A);return r===B?(0,ax.failure)("can not be encrypted"):await this.rpc.request(x,r,F)}async notify(x,A){let F=await this.outgoing(x,A);if(F!==B)return this.rpc.notify(x,F)}async recv(){for(;;){let x=await this.rpc.recv();if(x==="closed")return x;let A=await this.incoming(x.name,x.properties);if(A!==B)return{name:x.name,properties:A}}}close(){return this.rpc.close()}async outgoing(x,A){if(!(x in N.RoomCommandsRpc))return A;let F=(0,N.parseCommand)(x,A,N.RoomCommandsRpc);if(F===void 0)return B;switch(F.name){case"UpdatePeer":{let r=await this.cipher.encryptUserData(F.request.user_data);if(r===B)return B;F.request.user_data=r}break;case"SendMessage":{let r=await this.cipher.encryptMessage(F.request.message);if(r===B)return B;F.request.message=r}break}return F.request}async incoming(x,A){if(!(x in N.RoomNotificationsRpc))return A;let F=(0,N.parseNotification)(x,A,N.RoomNotificationsRpc);if(F===void 0)return B;switch(F.name){case"RoomUpdated":for(let r=0;r<F.properties.updates.length;r++){let D=await this.roomUpdate(F.properties.updates[r]);if(D===B)return B;F.properties.updates[r]=D}break;case"PeerUpdated":{let r=await this.peerUpdate(F.properties);if(r===B)return B;F.properties=r}break;case"MessageReceived":{let r=await this.cipher.decryptMessage(F.properties.sender_peer_id,F.properties.message);if(r===B)return B;F.properties.message=r}break}return F.properties}async peerUpdate(x){switch(x.kind){case"UserDataChanged":{let A=await this.cipher.decryptUserData(x.peer_id,x.user_data);if(A===B)return B;x.user_data=A}break;case"MediaStarted":this.mediaStarted(x.peer_id,x.media.id);break;case"MediaStopped":this.mediaStopped(x.peer_id,x.media_id);break}return x}async roomUpdate(x){switch(x.kind){case"Joined":for(let A of x.room.peers){for(let r of A.medias)this.mediaStarted(A.id,r.id);let F=await this.cipher.decryptUserData(A.id,A.user_data);F!==B?A.user_data=F:A.user_data=new Uint8Array}break;case"PeerJoined":{for(let F of x.peer.medias)this.mediaStarted(x.peer.id,F.id);let A=await this.cipher.decryptUserData(x.peer.id,x.peer.user_data);A!==B?x.peer.user_data=A:x.peer.user_data=new Uint8Array}break;case"PeerLeft":{let A=this.peers.get(x.peer_id);this.peers.delete(x.peer_id),this.cipher.deletePeerKey(x.peer_id);for(let F of A??[])this.mediaStopped(x.peer_id,F)}break}return x}mediaStarted(x,A){let F=this.peers.get(x);F===void 0&&(F=new Set,this.peers.set(x,F)),F.add(A);let r=h({connectionId:this.connection.connection.id,mediaId:A});this.connection.mediaMap.set(r,{peerId:x,connection:this.connection})}mediaStopped(x,A){this.peers.get(x)?.delete(A);let r=h({connectionId:this.connection.connection.id,mediaId:A});this.connection.mediaMap.delete(r)}cleanup(){for(let[x,A]of this.peers)for(let F of A)this.mediaStopped(x,F)}};var Mx=class{constructor(x){this.onDatagram=x;this._LastConnectionId=0;this._Connections=new Map;this._Close=new AbortController;this._MediaMap=new Map;let A=Date.now(),F=setInterval(()=>{Math.abs(Date.now()-A)>C.ClockJumpThreshold&&this.checkHealth(),A=Date.now()},C.ClockJumpCheckInterval);addEventListener("offline",()=>this.checkHealth(),{signal:this._Close.signal}),this._Close.signal.addEventListener("abort",()=>{clearInterval(F);for(let r of this._Connections.values())r.type==="establishing"?r.abort.abort():r.connection.close();this._Connections.clear()},{once:!0})}get closed(){return this._Close.signal.aborted}sendDatagram(x,A){let F=this._Connections.get(x);(F?.type==="established"||F?.type==="virtual")&&F.connection.sendDatagram(A)}async recvDatagram(x,A){let F=aF(A);if(F===void 0||F.length===0)return;let r=this._MediaMap.get(h({connectionId:x,mediaId:F[0]}));if(r===void 0)this.onDatagram(x,A);else{let D=await r.connection.decryptDatagram(r.peerId,A);if(D===B)return;this.onDatagram(r.connection.id,D)}}async acquireConnection(x,A,F,r){if(await(0,lx.nextTick)(),this.closed)return"closed";let D=this.findConnection(x,A),e;switch(D?.type){case"established":n(`reusing existing connection ${D.id}`),e=D;break;case"establishing":{n(`waiting for connecting to '${A}' finish`);let E=await D.finished;if(E.type!=="Success")return E;e=E.value}break;case void 0:{n(`connecting to '${A}'`);let E=await this.createConnection(x,A,r);if(E.type!=="Success")return E;e=E.value}break}let j=e.id,v=new b0(e.connection,()=>this.releaseConnection(j));return e.references+=1,F&&(v=new Jx(++this._LastConnectionId,v,F,this._MediaMap),this.addConnection({type:"virtual",id:v.id,connection:v,createdAt:Date.now()})),(0,lx.success)(v)}async createConnection(x,A,F){let r=++this._LastConnectionId,D=Date.now(),e=new AbortController;F.addEventListener("abort",()=>e.abort(),{once:!0}),n(`creating new connection ${r}`);let j=tA(r,x,A,this.recvDatagram.bind(this),F),{promise:v,resolve:E}=Promise.withResolvers();this.addConnection({type:"establishing",id:r,address:A,transport:x,finished:v,createdAt:Date.now(),abort:e});let u=await j;if(this._Connections.delete(r),u.type!=="Success")return E(u),u;let c={type:"established",id:r,address:A,transport:x,createdAt:D,references:0,connection:u.value};return this.addConnection(c),(0,lx.success)(c)}addConnection(x){(x.type==="established"||x.type==="virtual")&&x.connection.closeSignal.addEventListener("abort",()=>{f(`connection ${x.id} has been closed`),this._Connections.delete(x.id)},{once:!0}),this._Connections.set(x.id,x)}releaseConnection(x){let A=this._Connections.get(x);A?.type==="established"&&(A.references-=1,A.references<=0&&A.connection.close())}checkHealth(){for(let x of this._Connections.values())x.type==="established"&&x.connection.healthCheck()}close(){this._Close.abort()}async dump(){let x=[];for(let F of this._Connections.values()){let r;switch(F.type){case"established":r={transport:F.transport,address:F.address,connection:await F.connection.dump(),references:F.references};break;case"establishing":r={transport:F.transport,address:F.address,aborted:F.abort.signal.aborted};break;case"virtual":r={connection:await F.connection.dump()};break}x.push({type:F.type,id:F.id,createdAt:F.createdAt,...r})}let A=[];for(let[F,r]of this._MediaMap)A.push(`${F} -> ${r.peerId} @${r.connection.id} `);return{lastConnectionId:this._LastConnectionId,connections:x,mediaMap:A,closed:this.closed}}findConnection(x,A){for(let F of this._Connections.values())if(F.type!=="virtual"&&F.transport===x&&F.address===A)return F}},b0=class{constructor(x,A){this.connection=x;this.release=A;this.closeController=new AbortController;this.closePromise=new Promise(x=>this.closeController.signal.addEventListener("abort",()=>x("closed"),{once:!0}));x.closeSignal.addEventListener("abort",()=>this.close(),{once:!0})}get closeSignal(){return this.closeController.signal}get closed(){return this.closeSignal.aborted}close(){this.release(),this.closeController.abort("closed")}get connectionStats(){return this.connection.connectionStats}get id(){return this.connection.id}get transport(){return this.connection.transport}get address(){return this.connection.address}get status(){return this.connection.status}waitForConnected(){return this.connection.waitForConnected()}joinRoom(x,A,F,r){return this.connection.joinRoom(x,A,F,r)}getReconnectToken(x){return this.connection.getReconnectToken(x)}healthCheck(){return this.connection.healthCheck()}sendDatagram(x){return this.connection.sendDatagram(x)}startLocalVideo(x,A,F){return this.connection.startLocalVideo(x,A,F)}stopLocalVideo(x){return this.connection.stopLocalVideo(x)}startRemoteVideo(x){return this.connection.startRemoteVideo(x)}stopRemoteVideo(x){return this.connection.stopRemoteVideo(x)}async dump(){let x=await this.connection.dump();return typeof x=="object"&&(x={...x,isShared:!0,referenceClosed:this.closed}),x}};function aF(t){let x;try{x=(0,DA.decode)(t)}catch{return}if(!Array.isArray(x)||x.length<2)return;let A=x[1];if(Array.isArray(A))return A.map(Number)}var Tx=require("@4players/odin-common"),O=class{constructor(x,A){this.uid=x;this.customType=A}#x;#A;get mediaStream(){return this.#x}get audioPlayback(){return(0,Tx.assert)(this.#A,"getting the audioPlayback failed, this video has no Audio"),this.#A}get volume(){return(0,Tx.assert)(this.audioPlayback,"getting the volume failed, this video has no Audio"),this.audioPlayback.volume}setVolume(x){(0,Tx.assert)(this.#A,"Can not set the volume, this video has no Audio"),this.#A.setVolume(x)}setMediaStream(x){this.mediaStream||(this.#x=x)}close(){this.#x?.getVideoTracks().forEach(x=>{x.stop(),this.#x?.removeTrack(x)}),this.#x=void 0}};var S=require("@4players/odin-common"),cA=require("@4players/odin-common/api");var b=require("@4players/odin-common"),M=require("@4players/odin-common/api");o();var Sx=class{constructor(x,A,F,r,D,e,j,v,E,u){this.connectionPool=x;this.transport=A;this.onEvent=F;this.gateway=r;this.roomId=e;this.cipher=E;this.disableAutoReconnect=u;this._Close=new AbortController;this._TokenUsed=!1;this._WasConnected=!1;this._FailedConnections=0;this._LastTokenRenew=performance.now();this._LastReconnectStartedAt=0;this._Closed=new Promise(x=>this._Close.signal.addEventListener("abort",()=>x(this._Close.signal.reason?"disconnected":"closed"),{once:!0}));this._Token=D,this._UserData=j,this._Position=v,this._Main().then(({reason:c})=>n(`_Main() resolved; ${c}`))}get token(){return this._Token}get userData(){return this._UserData}get position(){return this._Position}get closed(){return this._Close.signal.aborted}get mainConnection(){return this._MainConnection}async requestUnsafe(x,A){if(this._RoomConnection===void 0)return(0,b.failure)("currently not connected");let F=await this._RoomConnection.request(x,A,void 0);return(0,b.assert)(F!=="timeout","request should not timeout"),F!=="closed"&&F.type==="Success"&&this._HandleRequests(x,A,F.value),F}async request(x,A){let F=Date.now(),r=M.RoomCommandsRpc[x],D=await this.requestUnsafe(x,A),e=(Date.now()-F)/1e3;if(n(`sent room rpc '${x}'; took: ${e}s`,{properties:A,result:D}),D==="closed"||D.type==="Failure")return D;let j=(0,M.parseResponse)(x,D.value,M.RoomCommandsRpc);return j!==void 0?(0,b.success)(j):(0,b.failure)(`received invalid response from ${x}`)}notify(x,A){this._RoomConnection!==void 0&&this._RoomConnection.notify(x,A)}close(){this._Close.abort(!0)}get renewTokenIn(){let x=this._LastTokenRenew-performance.now()+C.MinTokenRefreshInterval,A=this._Token.timeLeft-C.MinTokenLifetime;return Math.max(x,A)}async _Main(){let x="unable to establish connection";for(let A=0;;this._FailedConnections++){if(await(0,b.sleep)(Math.max(A-performance.now(),0)),this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}if(A=performance.now()+1e3,this._TokenUsed=!0,this._Token.hasAudience("sfu")){let F=await this._ConnectToServer();if(F.type==="Success"&&F.value==="shutdown"){n("connection closed by user request; shutting down"),x="user requested";break}if(this.disableAutoReconnect&&this._WasConnected){x=F.type==="Failure"?F.reason:"connection lost";break}if(this._LastReconnectStartedAt===0&&(this._LastReconnectStartedAt=performance.now()),F.type==="Failure"&&!this._WasConnected&&this._FailedConnections>=3){x=F.reason;break}if(F.type==="Failure"&&!uF(this._LastReconnectStartedAt))continue}if(this.reset(),this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}if(this.gateway!==void 0&&this._Token.hasAudience("gateway")){this._ChangeStatus("Joining",`requesting new token from ${this.gateway}`);let F=await lF(this.gateway,this._Token,this._Close.signal);if(F.type==="Success")if(F.value instanceof $)A=0,this._Token=F.value,this._TokenUsed=!1;else{x=`gateway error; ${F.value}`;break}else if(!this._WasConnected&&this._FailedConnections>=3){x="unable to contact the gateway";break}}if(this._TokenUsed&&this._Token.timeLeft<=0){x="token has expired";break}if(this._Close.signal.aborted||this.connectionPool.closed){x="user requested";break}}return this._ChangeStatus("Closed",x),this.close(),(0,b.failure)(x)}async _ConnectToServer(){let x=this._Token;for(;x.upstream!==void 0;)x=x.upstream;let A=x.claims.adr??this.gateway?.toString();if(!A)return(0,b.success)("continue");if(this._ChangeStatus("Joining",`connecting to ${x.claims.adr}`),this._MainConnection===void 0||this._MainConnection.closed||this._MainConnection.address!==x.claims.adr){this._MainConnection?.close();let D=await this.connectionPool.acquireConnection(this.transport,A,this.cipher,this._Close.signal);if(D==="closed")return(0,b.failure)("connection pool closed");if(D.type==="Failure")return this._ChangeStatus("Joining",`connection failed; ${D.reason}`),(0,b.failure)(`connection failed; ${D.reason}`);this._MainConnection=D.value,this._OwnPeerId=void 0}let F=await Promise.race([Promise.all([this._MainConnection.joinRoom(x,this.roomId,this.userData,this.position)]),(0,b.sleep)(C.ConnectTimeout,"timeout"),this._Closed]);if(F==="closed"||F==="disconnected")return(0,b.success)("continue");if(F==="timeout")return this._ChangeStatus("Joining","timed out"),(0,b.success)("continue");let[r]=F;if(r==="closed")return(0,b.success)("continue");if(r.type==="Failure")return(0,b.failure)(`unable to join room; ${r.reason}`);this._RoomConnection=r.value,this._WasConnected=!0,this._FailedConnections=0,this._ChangeStatus("Joined",`joined ${this.roomId}`);try{await this._MainConnection.waitForConnected();let D=await this._HandleConnection(this._MainConnection);return(0,b.success)(D?"shutdown":"continue")}catch(D){return(0,b.failure)(`unable to handle connection; ${D}`)}}_ChangeStatus(x,A){let F={status:x,message:A};this.onEvent("RoomStatusChanged",F)}async _HandleConnection(x){if(this._RoomConnection===void 0)return!1;let A=new b.Selector([()=>(0,b.sleep)(this.renewTokenIn,"renewToken"),()=>(0,b.sleep)(500,"tick"),async()=>await this._RoomConnection?.recv(),()=>this._Closed,()=>x.closePromise]);for(;;){let F=await A.next();switch(F){case void 0:case"closed":return this._RoomConnection?.close(),this._MainConnection?.close(),!1;case"disconnected":return this._RoomConnection?.close(),this._MainConnection?.close(),!0;case"renewToken":this._RenewToken();break;case"tick":break;default:this._HandleEvent(F);break}}}_HandleEvent(x){if(x.name==="RoomUpdated"){let A=M.RoomNotificationsRpc.RoomUpdated.safeParse(x.properties);if(!A.success)return;for(let F of A.data.updates)F.kind==="Joined"&&(this._OwnPeerId=F.own_peer_id)}this.onEvent(x.name,x.properties)}_HandleRequests(x,A,F){switch(x){case"SetPeerPosition":{let r=M.RoomCommandsRpc.SetPeerPosition.request.safeParse(A);if(r.success){let D=r.data.position;this._Position=D.length===2?[D[0],D[1],0]:D}else a("unable to process SetPeerPosition command");break}case"UpdatePeer":{let r=M.RoomCommandsRpc.UpdatePeer.request.safeParse(A);r.success?this._UserData=r.data.user_data:a("unable to process UpdatePeer command");break}}}async _RenewToken(x){if(this._LastTokenRenew=performance.now(),!x&&this.token.timeLeft>C.MinTokenLifetime)return;if(this._MainConnection===void 0||this._OwnPeerId===void 0)return(0,b.failure)("connection is not established");let A=await this._MainConnection.getReconnectToken(this._OwnPeerId);return A.type==="Success"?(this._Token=A.value,(0,b.success)()):(0,b.failure)(`${this._MainConnection.address} rejected reconnect token request; ${A.reason}`)}reset(){this._LastReconnectStartedAt=0,this._RoomConnection?.close(),this._RoomConnection=void 0,this._MainConnection?.close(),this._MainConnection=void 0,this._OwnPeerId=void 0}};async function lF(t,x,A){try{let F={jsonrpc:"2.0",id:1,method:"Connect",params:{}};f(`sending authentication request to '${t}'`,F);let D=await(await fetch(t,{body:JSON.stringify(F),method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${x}`},signal:A})).json();if(f(`received authentication response fom '${t}'`,D),"result"in D)return $.parse(D.result.token);{let e=D.error?.message??"malformed response";return k(`gateway rejected token; ${e}`),(0,b.success)(e)}}catch(F){return(0,b.failure)(String(F))}}function uF(t,x=8e3){return performance.now()-t>x}o();var uA=require("@4players/odin-common");var Q=require("@4players/odin-common");o();var iA=require("@4players/odin-common");o();var nA=require("@msgpack/msgpack");o();var eA={name:"PBKDF2",hash:"SHA-256",iterations:6e5,salt:new Uint8Array([111,100,105,110,95,99,114,121,112,116,111,95,109,97,115,116,101,114,95,107,101,121])},jA=t=>({name:"PBKDF2",hash:"SHA-256",iterations:600,salt:t}),BA=32,vA=1e6,CA=2147483648,EA=32,T=[79,68,73,78,1,75,105,109],Ex=16,fx=64,fA=16;function sA(t,x){if(t.length!==x.length)return!1;for(let A=0;A<t.length;A++)if(t[A]!==x[A])return!1;return!0}function kF(t){return isFinite(t)}function cF(t){return Array.isArray(t)}function Rx(t){return kF(t)?t:B}function ux(t){return t instanceof Uint8Array?t:B}function dF(t,...x){let A;try{A=(0,nA.decode)(t)}catch{return B}if(!cF(A))return B;let F=new Array(A.length);for(let r in x)if(F[r]=x[r](A[r]),F[r]===B)return B;return F}function Vx(t,...x){if(t.length<T.length)return m;for(let A=0;A<T.length;A++)if(t[A]!==T[A])return m;return dF(t.subarray(T.length),...x)}var nx=class{constructor(x){this.first=1;this.offset=0;this.window=Array(x)}isReplay(x){let A=x-this.first;if(A<0)return!0;if(A>=this.window.length)if(A<this.window.length*2){let D=A-this.window.length+1;A-=D;for(let e=0;e<D;e++)this.advance()}else return this.first=x+1-self.window.length,this.offset=0,this.window.fill(!1),!1;let F=(this.offset+A)%this.window.length,r=this.window[F]===!0;for(this.window[F]=!0;this.window[this.offset]===!0;)this.advance();return r}advance(){this.window[this.offset]=!1,this.first+=1,this.offset=(this.offset+1)%this.window.length}};var Ux=class t{constructor(x){this.key=x}static async create(x){typeof x=="string"&&(x=new TextEncoder().encode(x));let A=await globalThis.crypto.subtle.importKey("raw",x,"PBKDF2",!1,["deriveBits"]),F=await globalThis.crypto.subtle.deriveBits(eA,A,256),r=await globalThis.crypto.subtle.importKey("raw",F,"PBKDF2",!1,["deriveKey"]);return new t(r)}async generatePeerKey(x,A){return await globalThis.crypto.subtle.deriveKey(jA(x),this.key,{name:"AES-GCM",length:256},!1,[A])}},Wx=class t{constructor(x,A){this.seed=x;this.key=A;this.sequenceNumbers={datagram:1,message:1,userData:1};this.number_of_packets=0;this.number_of_bytes=0}static async create(x){let A=globalThis.crypto.getRandomValues(new Uint8Array(BA)),F=await x.generatePeerKey(A,"encrypt");return new t(A,F)}get limitReached(){return this.key===void 0?!1:this.number_of_bytes>=CA||this.number_of_packets>=vA}nextSequenceNumber(x){return this.sequenceNumbers[x]++}};function o0(t,x){return{kind:"encrypted",key:t,material:x,antiReplays:{datagram:new nx(EA),userData:new nx(0),message:new nx(0)}}}var Qx=class t{constructor(x,A,F,r){this.additionalData=x;this.sequenceNumber=A;this.seed=F;this.encrypted=r}static parse(x){let A=Vx(x,ux,Rx,ux);if(A===B||A===m)return A;let[F,r,D]=A,e=x.subarray(0,x.length-D.length);return new t(e,r,F,D)}isSameSeed(x){return sA(this.seed,x.seed)}async generateKey(x){return await x.generatePeerKey(this.seed,"decrypt")}};function zx(t,x){let A=new Uint8Array(12);switch(A[0]=x&255,A[1]=x>>8&255,A[2]=x>>16&255,A[3]=x>>24&255,t){case"datagram":A[5]=1;break;case"userData":A[5]=2;break;case"message":A[5]=3;break;default:(0,iA.assert)(!1,"missing content implementation")}return A}var a0=require("@msgpack/msgpack"),oA=require("@4players/odin-common");o();var Xx=class{constructor(x){this.actions=x}changeKey(x){this.masterKey!==x&&(this.masterKey=x,this.ownKey=B,this.actions.resendUserData())}async encryptDatagram(x){let A=await this.getKey("datagram");return A===void 0?x:A===R?B:await qF(A,x)}async encryptMessage(x){let A=await this.getKey("message");return A===void 0?x:A===R?R:await bA(A,x,"message")}async encryptUserData(x){let A=await this.getKey("userData");return A===void 0?x:((0,oA.assert)(A!==R,"key unavailable for user data encryption"),await bA(A,x,"userData",A.seed))}async getKey(x){if(this.ownKey===B||this.ownKey?.limitReached)if(x==="userData")this.ownKey=this.masterKey?await Wx.create(this.masterKey):void 0;else return this.ownKey!==B&&(this.ownKey=B,this.actions.resendUserData()),R;return this.ownKey}reset(){this.ownKey=this.masterKey?B:void 0}};async function bA(t,x,A,...F){let r=t.nextSequenceNumber(A),D=x.length+Ex,e=hF(r,F,D),j=e.length-D,v=await aA(t,A,r,e.subarray(0,j),x);return e.set(new Uint8Array(v),j),e}function hF(t,x,A){let F=[];x.forEach(e=>F.push(e)),F.push(t),F.push(new Uint8Array(A));let r=(0,a0.encode)(F),D=new Uint8Array(T.length+r.length);return D.set(T,0),D.set(r,T.length),D}async function qF(t,x){let A=mF(x);if(A===B)return B;if((A.kind&fx)!==0)return B;let F=A.body.length+Ex,r=t.nextSequenceNumber("datagram"),D=(0,a0.encode)([A.kind|fx,A.mediaIds,r,new Uint8Array(F)]),e=D.length-F,j=await aA(t,"datagram",r,D.subarray(0,e),A.body);return D.set(j,e),D}async function aA(t,x,A,F,r){return new Uint8Array(await globalThis.crypto.subtle.encrypt({name:"AES-GCM",iv:zx(x,A),additionalData:F,tagLength:Ex*8},t.key,r))}function mF(t){let x=new V(t),A=x.readArrayLength();if(s(A)||A<2)return B;let F=x.readNumber(),r=x.readArrayLength();if(s(F)||s(r))return B;if(r>fA)return B;let D=Array(r);for(let j=0;j<D.length;j++){let v=x.readNumber();if(s(v))return B;D[j]=v}let e=t.subarray(x.position);return{kind:F,mediaIds:D,body:e}}var lA=require("@msgpack/msgpack");o();var Yx=class{constructor(x){this.actions=x;this.peerKeys=new Map}async changeKey(x){this.masterKey=x;for(let[A,{kind:F,material:r}]of this.peerKeys)if(x!==void 0){let D=await r.generateKey(x),e=o0(D,r),j=await Zx(e,"userData",r.additionalData,r.sequenceNumber,r.encrypted);j!==B?(this.peerKeys.set(A,e),this.actions.setUserData(A,j)):(this.peerKeys.set(A,{kind:"broken",material:r}),this.actions.setUserData(A,new Uint8Array))}else F==="encrypted"&&this.peerKeys.set(A,{kind:"broken",material:r})}async decryptDatagram(x,A){let F=GF(A);if(this.masterKey===void 0)return F===m?A:B;if(F===B||F===m)return B;let r=this.peerKeys.get(x);if(r?.kind!=="encrypted")return B;let D=await Zx(r,"datagram",F.additionalData,F.sequenceNumber,F.encrypted);return D===B?B:IF(F.kind&~fx,F.mediaIds,D)}async decryptMessage(x,A){let F=Vx(A,Rx,ux);if(this.masterKey===void 0)return F===m?A:B;if(F===B||F===m)return B;let r=this.peerKeys.get(x);if(r?.kind!=="encrypted")return B;let[D,e]=F,j=A.subarray(0,A.length-e.length);return Zx(r,"message",j,D,e)}async decryptUserData(x,A){let F=Qx.parse(A);if(F===B)return B;if(F===m)return this.peerKeys.delete(x),this.masterKey===void 0?A:B;if(this.masterKey===void 0)return this.peerKeys.set(x,{kind:"broken",material:F}),B;let r=this.peerKeys.get(x);if(r?.kind==="encrypted"&&r.material.isSameSeed(F))r.material=F;else{let e=await F.generateKey(this.masterKey);r=o0(e,F)}let D=await Zx(r,"userData",F.additionalData,F.sequenceNumber,F.encrypted);return D===B?this.peerKeys.set(x,{kind:"broken",material:F}):r!==void 0&&this.peerKeys.set(x,r),D}reset(){this.peerKeys.clear()}};function GF(t){let x=new V(t),A=x.readArrayLength();if(s(A)||A<1)return B;let F=x.readNumber();if(s(F))return B;if((F&fx)===0)return m;if(A!==4)return B;let r=x.position;x.readObjects(1);let D=t.subarray(r,x.position),e=x.readNumber(),j=x.readBytes();if(s(e)||s(j))return B;let v=t.subarray(0,t.length-j.length);return{kind:F,mediaIds:D,additionalData:v,sequenceNumber:e,encrypted:j}}async function Zx(t,x,A,F,r){let D=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:zx(x,F),additionalData:A,tagLength:Ex*8},t.key,r).catch(()=>B);return D===B?B:t.antiReplays[x].isReplay(F)?B:new Uint8Array(D)}function IF(t,x,A){let F=2;try{let e=new V(A);for(e.position=0;e.position<A.length;)e.readObjects(1),F+=1}catch{return B}let r=(0,lA.encode)(t),D=new Uint8Array(3+r.length+x.length+A.length);return D[0]=220,D[1]=F>>8&255,D[2]=F&255,D.set(r,3),D.set(x,3+r.length),D.set(A,3+r.length+x.length),D}var x0=class{constructor(x,A){this.active=!1;let F=new Yx(A),r=new Xx(A);this.crypto=new Q.Strand({encryption:r,decryption:F}),this.peerKeys=F.peerKeys,this.configure(x)}encryptUserData(x){return this.crypto.enqueue(({encryption:A})=>A.encryptUserData(x))}async encryptMessage(x){let A;do A=await this.crypto.enqueue(({encryption:F})=>F.encryptMessage(x));while(A===R);return A}async encryptDatagram(x){return await this.crypto.enqueue(({encryption:A})=>A.encryptDatagram(x))}decryptUserData(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptUserData(x,A))}decryptMessage(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptMessage(x,A))}decryptDatagram(x,A){return this.crypto.enqueue(({decryption:F})=>F.decryptDatagram(x,A))}configure(x){return this.crypto.enqueue(async A=>{let F=x.password?await Ux.create(x.password):void 0;this.active=F!==void 0,await A.encryption.changeKey(F),await A.decryption.changeKey(F)})}getPeerStatus(x){switch(this.peerKeys.get(x)?.kind??"unencrypted"){case"broken":return Q.Backend.PeerCipherStatus.InvalidPassword;case"encrypted":return Q.Backend.PeerCipherStatus.Encrypted;case"unencrypted":return this.active?Q.Backend.PeerCipherStatus.InvalidPassword:Q.Backend.PeerCipherStatus.Unencrypted;default:return Q.Backend.PeerCipherStatus.Unknown}}deletePeerKey(x){this.peerKeys.delete(x)}reset(){return this.crypto.enqueue(async({encryption:x,decryption:A})=>{x.reset(),A.reset()})}async dump(){return this.crypto.enqueue(async()=>({active:this.active,peers:Array.from(this.peerKeys).map(([x,A])=>`${x} => ${A.kind}`)}))}};function kA(t,x){return(0,uA.assert)(t.type==="OdinCrypto","only OdinCrypto supported"),new x0(t,x)}var A0=class{constructor(x,A,F){this._Captures=new Map;this._Playbacks=new Map;this._Peers=new Map;this._AvailableMediaIds=[];let{url:r,onEvent:D}=A,e=(0,S.unwrap)($.parse(A.token)),j=A.roomId??e.defaultRoomId,v=A.userData??new Uint8Array(0),E=A.position??[0,0,0];(0,S.assert)(j!==void 0,"room id required for multi-room-tokens"),this.cipher=A.cipher?kA(A.cipher,new Ox(this)):void 0,this.onEvent=D,f(`creating new room '${j}' ${this.cipher?"with":"without"} cipher`,e,v,E),this._Connection=new Sx(x,A.transport??"H3",this._HandleEvent.bind(this),r?new URL(r):void 0,e,j,v,E,this.cipher,F?.disableAutoReconnect??!1)}get connectionStats(){let x={...S.CONNECTION_STATS_INITIAL};return this.mainConnection?this.mainConnection.connectionStats:x}get roomConnection(){return this._Connection}get mainConnection(){return this.roomConnection?.mainConnection}get token(){return this._Connection.token.text}request(x,A){return this._Connection.requestUnsafe(x,A)}async link(x){if(x instanceof L){let A=this._Playbacks.get(x.uid)??{media:void 0,playback:void 0};A.playback!==void 0&&this.unlink(A.playback),A.media!==void 0&&x.start(A.media),A.playback=x,f(`linking audio playback media '${x.uid}' with volume ${x.volume} to room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof P){let A=this._Captures.get(x);A&&this.unlink(x);let F=this.mainConnection!==void 0&&this._AvailableMediaIds.shift();A={media:F?{connectionId:this.mainConnection.id,mediaId:F}:void 0},f(`linking audio capture media '${x.uid}' with volume ${x.volume} to room '${this._Connection.roomId}'`),this._Captures.set(x,A),A.media!==void 0&&await x.start(this._Connection,A.media)}else if(x instanceof O){let A=this._Playbacks.get(x.uid)??{media:void 0,playback:void 0};if(A.playback!==void 0&&this.unlink(A.playback),A.media!==void 0){let F=await this.mainConnection?.startRemoteVideo(A.media.mediaId);F&&x.setMediaStream(new MediaStream([F]))}A.playback=x,f(`linking video playback media '${x.uid}' with type '${x.customType}' to room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof g){let A=this._Captures.get(x);A&&this.unlink(x);let F=x.mediaStream?.getVideoTracks()[0];if(F){let r=this.mainConnection!==void 0&&this._AvailableMediaIds.shift();A={media:r?{connectionId:this.mainConnection.id,mediaId:r}:void 0},f(`linking video capture media '${x.uid}' with type '${x.parameters?.customType}' to room '${this._Connection.roomId}'`),this._Captures.set(x,A),A.media!==void 0&&(await x.start(this._Connection,A.media),this.mainConnection?.startLocalVideo(A.media.mediaId,F,x.parameters)),x.audioCapture&&await this.link(x.audioCapture)}}else throw new Error("Linking failed, media was not supported")}unlink(x){if(x instanceof L||x instanceof O){let A=this._Playbacks.get(x.uid);if(A?.playback!==x)return;A.playback=void 0,A.media!==void 0&&(x instanceof L?x.stop(A.media):(this.mainConnection?.stopRemoteVideo(A.media.mediaId),x.setMediaStream(void 0))),f(`unlinking playback media '${x.uid}' from room '${this._Connection.roomId}'`),this._Playbacks.set(x.uid,A)}else if(x instanceof P||x instanceof g){x instanceof g&&x.audioCapture&&this.unlink(x.audioCapture);let A=this._Captures.get(x);if(A===void 0)return;A.media!==void 0&&(x.stop(this._Connection,A.media),this._AvailableMediaIds.push(A.media.mediaId),x instanceof g&&this.mainConnection?.stopLocalVideo(A.media.mediaId)),f(`unlinking capture media '${x.uid}' from room '${this._Connection.roomId}'`),this._Captures.delete(x)}else throw new Error("invalid media")}close(){f(`closing room '${this._Connection.roomId}'`),this._Connection.close()}_HandleEvent(x,A){let F=n0(cA.RoomNotificationsRpc,{name:x,properties:A});F!==void 0&&(this._HandleKnownEvent(F),A=F.properties),this.onEvent(x,A)}_HandleKnownEvent(x){switch(n(`processing event '${x.name}'`,x.properties),x.name){case"RoomStatusChanged":x.properties.status!=="Joined"&&this._HandleConnectionLost();break;case"RoomUpdated":for(let A of x.properties.updates)this._HandleRoomUpdate(A);break;case"PeerUpdated":this._HandlePeerUpdate(x.properties);break}}_HandleConnectionLost(){for(let x of this._Peers.keys())this._HandlePeerLeft(x);for(let[x,A]of this._Captures)A.media!==void 0&&(x instanceof g,x instanceof P&&(x.stop(this._Connection,A.media),A.media=void 0));this._AvailableMediaIds.length=0}_HandleRoomUpdate(x){if(x.kind==="Joined"){(0,S.assert)(this._AvailableMediaIds.length===0,"left over media ids"),this._AvailableMediaIds.push(...x.media_ids),this._HandleRoomJoined();for(let A of x.room.peers)this._HandlePeerJoined(A)}else x.kind==="PeerJoined"?this._HandlePeerJoined(x.peer):x.kind==="PeerLeft"&&this._HandlePeerLeft(x.peer_id)}_HandleRoomJoined(){for(let[x,A]of this._Captures)this._AvailableMediaIds.length===0||this.mainConnection===void 0||(A.media={connectionId:this.mainConnection.id,mediaId:this._AvailableMediaIds.shift()},x instanceof P&&x.start(this._Connection,A.media),x instanceof g)}_HandlePeerUpdate(x){x.kind==="MediaStarted"?this._HandleMediaStart(x.peer_id,x.media):x.kind==="MediaStopped"&&this._HandleMediaStopped(x.peer_id,x.media_id)}_HandlePeerJoined(x){this._Peers.has(x.id)||this._Peers.set(x.id,{mediaIds:new Map});for(let A of x.medias)this._HandleMediaStart(x.id,A)}_HandlePeerLeft(x){let A=this._Peers.get(x);if(A!==void 0){for(let F of A.mediaIds.keys())this._HandleMediaStopped(x,F);this._Peers.delete(x)}}_HandleMediaStart(x,A){if(this.mainConnection===void 0)return;let F=this._Peers.get(x);if(F===void 0||A.properties.kind!=="audio"&&A.properties.kind!=="video")return;let r=String(A.properties.uid??(0,S.generateUUID)());A.properties.uid=r;let D=this._Playbacks.get(r)??{media:void 0,playback:void 0};this._Playbacks.set(r,D),F.mediaIds.set(A.id,r),D.media={connectionId:this.mainConnection.id,mediaId:A.id},D.playback!==void 0&&(D.playback instanceof L&&D.playback.start(D.media),D.playback instanceof O&&this.mainConnection.startRemoteVideo(D.media.mediaId).then())}_HandleMediaStopped(x,A){let F=this._Peers.get(x);if(F===void 0)return;let r=F?.mediaIds.get(A);if(r===void 0)return;let D=this._Playbacks.get(r);D!==void 0&&(D.media!==void 0&&D.media.mediaId===A&&D.playback!==void 0&&(D.playback instanceof L&&D.playback.stop(D.media),D.playback instanceof O&&this.mainConnection?.stopRemoteVideo(D.media.mediaId),D.media=void 0),F.mediaIds.delete(A))}};mx();function $F(t,x){_0(x?.logger,x?.onLogMessage);let A,F=new Mx((D,e)=>A.receivePacket(D,e)),r=new $x(t);return A=new yx(r,F.sendDatagram.bind(F),x?.enableHTMLAudioElementFallback??!1),new l0(F,A,x)}var ox=(0,gF.generateUUID)(),u0=[],dA=!1;function yF(){dA||typeof window>"u"||(window.addEventListener("beforeunload",()=>{for(let t of u0)t.deref()?.close()}),dA=!0)}var l0=class{constructor(x,A,F){this.version="9";this.supportedTransports=["H3","WebRTC"];this._PlaybackVolume=[1,1];this._CreatedAt=Date.now();this._Options=F??{},this._Options.disableBeforeUnload||yF(),this._ConnectionPool=x,this._MediaController=A,u0.push(new WeakRef(this)),f("plugin initialized")}get playbackVolume(){return this._PlaybackVolume}joinRoom(x){return new A0(this._ConnectionPool,x,this._Options)}async createAudioPlayback(x){return this._MediaController.createAudioPlayback(x)}async createAudioCapture(x){return this._MediaController.createAudioCapture(x)}async createVideoCapture(x,A){return this._MediaController.createVideoCapture(x,A)}async createVideoPlayback(x){return new O(x.uid,x.customType)}enumerateDevices(){return qx()}setOutputVolume(x){this._MediaController.playbackSetGlobalVolume(x)}async setOutputDevice(x){await this._MediaController.playbackSetDevice(x.device)}close(){this._MediaController.close(),this._ConnectionPool.close(),f("plugin closed")}async dump(){return{createdAt:this._CreatedAt,connections:await this._ConnectionPool.dump(),medias:await this._MediaController.dump()}}};async function pA(){let t=[];for(let x of u0){let A=x.deref();A!==void 0&&t.push(await A.dump())}return JSON.stringify({timestamp:Date.now(),instances:t,background:await w0()})}globalThis.odin_debug_dump_state=pA;window!==void 0&&(window.odin_debug_dump_state=pA);0&&(module.exports={SESSION_ID,createPlugin});
|