diff --git a/resources/radio/.fxap b/resources/radio/.fxap index 048ea344d..ee4a2fe1b 100644 Binary files a/resources/radio/.fxap and b/resources/radio/.fxap differ diff --git a/resources/radio/animations.lua b/resources/radio/animations.lua index 09bb89127..048cdcd22 100644 --- a/resources/radio/animations.lua +++ b/resources/radio/animations.lua @@ -35,6 +35,17 @@ local function LoadAnimDictAsync(dict, shouldContinue, onLoaded) end) end +--- Returns true if radio animations should be suppressed (in vehicle or holding a weapon). +--- @param playerPed number Ped handle +--- @return boolean +local function ShouldSuppressAnim(playerPed) + local vehicle = GetVehiclePedIsIn(playerPed, false) + if vehicle ~= 0 and GetPedInVehicleSeat(vehicle, -1) == playerPed then return true end + local _, weaponHash = GetCurrentPedWeapon(playerPed, true) + if weaponHash ~= GetHashKey("WEAPON_UNARMED") then return true end + return false +end + --- Starts a ped animation and optionally attaches a prop. --- @param playerPed number Ped handle --- @param dict string Animation dictionary @@ -86,6 +97,7 @@ local function MakePTTHandler(dict, anim, prop) if not playerPed or playerPed == 0 then return end if isKeyDown then + if ShouldSuppressAnim(playerPed) then return end _radioAnimState.pendingStart = true LoadAnimDictAsync(dict, function() return _radioAnimState.pendingStart end, @@ -112,6 +124,7 @@ local function MakeFocusHandler(dict, anim, prop) if not playerPed or playerPed == 0 then return end if focused then + if ShouldSuppressAnim(playerPed) then return end if not _radioAnimState.isPlaying then LoadAnimDictAsync(dict, function() return true end, @@ -148,14 +161,14 @@ Config.animations = { -- [2] Shoulder mic — PTT plays a shoulder-radio gesture, focus shows handheld + prop [2] = { - name = "Shoulder", - onKeyState = MakePTTHandler("random@arrests", "generic_radio_enter", nil), + name = "Shoulder", + onKeyState = MakePTTHandler("random@arrests", "generic_radio_enter", nil), onRadioFocus = MakeFocusHandler("cellphone@", "cellphone_call_to_text", "prop_cs_hand_radio"), }, -- [3] Handheld radio — Both PTT and focus use the same handheld + prop animation [3] = { - name = "Handheld", + name = "Handheld", onKeyState = MakePTTHandler("cellphone@", "cellphone_call_to_text", "prop_cs_hand_radio"), onRadioFocus = MakeFocusHandler("cellphone@", "cellphone_call_to_text", "prop_cs_hand_radio"), }, diff --git a/resources/radio/audio.lua b/resources/radio/audio.lua deleted file mode 100644 index f773ee197..000000000 Binary files a/resources/radio/audio.lua and /dev/null differ diff --git a/resources/radio/blips.lua b/resources/radio/blips.lua deleted file mode 100644 index 4de56f584..000000000 Binary files a/resources/radio/blips.lua and /dev/null differ diff --git a/resources/radio/client/audio.lua b/resources/radio/client/audio.lua new file mode 100644 index 000000000..89598eb9d Binary files /dev/null and b/resources/radio/client/audio.lua differ diff --git a/resources/radio/client/blips.lua b/resources/radio/client/blips.lua new file mode 100644 index 000000000..5e0011417 Binary files /dev/null and b/resources/radio/client/blips.lua differ diff --git a/resources/radio/client/dist/bundle.js b/resources/radio/client/dist/bundle.js index 5a451c4f5..b045ca6fa 100644 --- a/resources/radio/client/dist/bundle.js +++ b/resources/radio/client/dist/bundle.js @@ -1,4 +1,4 @@ -(()=>{var cW=Object.create;var{getPrototypeOf:dW,defineProperty:c8,getOwnPropertyNames:Q9,getOwnPropertyDescriptor:iW}=Object,T9=Object.prototype.hasOwnProperty;function L9(J){return this[J]}var lW,nW,D9=(J,Y,W)=>{var z=J!=null&&typeof J==="object";if(z){var V=Y?lW??=new WeakMap:nW??=new WeakMap,H=V.get(J);if(H)return H}W=J!=null?cW(dW(J)):{};let E=Y||!J||!J.__esModule?c8(W,"default",{value:J,enumerable:!0}):W;for(let _ of Q9(J))if(!T9.call(E,_))c8(E,_,{get:L9.bind(J,_),enumerable:!0});if(z)V.set(J,E);return E},sW=(J)=>{var Y=(C9??=new WeakMap).get(J),W;if(Y)return Y;if(Y=c8({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function"){for(var z of Q9(J))if(!T9.call(Y,z))c8(Y,z,{get:L9.bind(J,z),enumerable:!(W=iW(J,z))||W.enumerable})}return C9.set(J,Y),Y},C9,a=(J,Y)=>()=>(Y||J((Y={exports:{}}).exports,Y),Y.exports);var rW=(J)=>J;function aW(J,Y){this[J]=rW.bind(null,Y)}var tW=(J,Y)=>{for(var W in Y)c8(J,W,{get:Y[W],enumerable:!0,configurable:!0,set:aW.bind(Y,W)})};var vJ=a((Q6)=>{/*! +(()=>{var lW=Object.create;var{getPrototypeOf:nW,defineProperty:c8,getOwnPropertyNames:L9,getOwnPropertyDescriptor:sW}=Object,D9=Object.prototype.hasOwnProperty;function I9(J){return this[J]}var rW,aW,w9=(J,Y,W)=>{var z=J!=null&&typeof J==="object";if(z){var V=Y?rW??=new WeakMap:aW??=new WeakMap,F=V.get(J);if(F)return F}W=J!=null?lW(nW(J)):{};let E=Y||!J||!J.__esModule?c8(W,"default",{value:J,enumerable:!0}):W;for(let A of L9(J))if(!D9.call(E,A))c8(E,A,{get:I9.bind(J,A),enumerable:!0});if(z)V.set(J,E);return E},tW=(J)=>{var Y=(T9??=new WeakMap).get(J),W;if(Y)return Y;if(Y=c8({},"__esModule",{value:!0}),J&&typeof J==="object"||typeof J==="function"){for(var z of L9(J))if(!D9.call(Y,z))c8(Y,z,{get:I9.bind(J,z),enumerable:!(W=sW(J,z))||W.enumerable})}return T9.set(J,Y),Y},T9,a=(J,Y)=>()=>(Y||J((Y={exports:{}}).exports,Y),Y.exports);var oW=(J)=>J;function eW(J,Y){this[J]=oW.bind(null,Y)}var JK=(J,Y)=>{for(var W in Y)c8(J,W,{get:Y[W],enumerable:!0,configurable:!0,set:eW.bind(Y,W)})};var hJ=a((T6)=>{/*! * howler.js v2.2.4 * howlerjs.com * @@ -6,7 +6,7 @@ * goldfirestudios.com * * MIT License - */(function(){var J=function(){this.init()};J.prototype={init:function(){var G=this||Y;return G._counter=1000,G._html5AudioPool=[],G.html5PoolSize=10,G._codecs={},G._howls=[],G._muted=!1,G._volume=1,G._canPlayEvent="canplaythrough",G._navigator=typeof window<"u"&&window.navigator?window.navigator:null,G.masterGain=null,G.noAudio=!1,G.usingWebAudio=!0,G.autoSuspend=!0,G.ctx=null,G.autoUnlock=!0,G._setup(),G},volume:function(G){var U=this||Y;if(G=parseFloat(G),!U.ctx)w();if(typeof G<"u"&&G>=0&&G<=1){if(U._volume=G,U._muted)return U;if(U.usingWebAudio)U.masterGain.gain.setValueAtTime(G,Y.ctx.currentTime);for(var O=0;O=0;U--)G._howls[U].unload();if(G.usingWebAudio&&G.ctx&&typeof G.ctx.close<"u")G.ctx.close(),G.ctx=null,w();return G},codecs:function(G){return(this||Y)._codecs[G.replace(/^x-/,"")]},_setup:function(){var G=this||Y;if(G.state=G.ctx?G.ctx.state||"suspended":"suspended",G._autoSuspend(),!G.usingWebAudio)if(typeof Audio<"u")try{var U=new Audio;if(typeof U.oncanplaythrough>"u")G._canPlayEvent="canplay"}catch(O){G.noAudio=!0}else G.noAudio=!0;try{var U=new Audio;if(U.muted)G.noAudio=!0}catch(O){}if(!G.noAudio)G._setupCodecs();return G},_setupCodecs:function(){var G=this||Y,U=null;try{U=typeof Audio<"u"?new Audio:null}catch(p){return G}if(!U||typeof U.canPlayType!=="function")return G;var O=U.canPlayType("audio/mpeg;").replace(/^no$/,""),M=G._navigator?G._navigator.userAgent:"",L=M.match(/OPR\/(\d+)/g),Q=L&&parseInt(L[0].split("/")[1],10)<33,C=M.indexOf("Safari")!==-1&&M.indexOf("Chrome")===-1,T=M.match(/Version\/(.*?) /),v=C&&T&&parseInt(T[1],10)<15;return G._codecs={mp3:!!(!Q&&(O||U.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!O,opus:!!U.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!U.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!U.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(U.canPlayType('audio/wav; codecs="1"')||U.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!U.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!U.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(U.canPlayType("audio/x-m4a;")||U.canPlayType("audio/m4a;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(U.canPlayType("audio/x-m4b;")||U.canPlayType("audio/m4b;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(U.canPlayType("audio/x-mp4;")||U.canPlayType("audio/mp4;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!(!v&&U.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!!(!v&&U.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!U.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(U.canPlayType("audio/x-flac;")||U.canPlayType("audio/flac;")).replace(/^no$/,"")},G},_unlockAudio:function(){var G=this||Y;if(G._audioUnlocked||!G.ctx)return;if(G._audioUnlocked=!1,G.autoUnlock=!1,!G._mobileUnloaded&&G.ctx.sampleRate!==44100)G._mobileUnloaded=!0,G.unload();G._scratchBuffer=G.ctx.createBuffer(1,1,22050);var U=function(O){while(G._html5AudioPool.length"u")v.noteOn(0);else v.start(0);if(typeof G.ctx.resume==="function")G.ctx.resume();v.onended=function(){v.disconnect(0),G._audioUnlocked=!0,document.removeEventListener("touchstart",U,!0),document.removeEventListener("touchend",U,!0),document.removeEventListener("click",U,!0),document.removeEventListener("keydown",U,!0);for(var p=0;p"u"||!Y.usingWebAudio)return;for(var U=0;U"u"||!Y.usingWebAudio)return;if(G.state==="running"&&G.ctx.state!=="interrupted"&&G._suspendTimer)clearTimeout(G._suspendTimer),G._suspendTimer=null;else if(G.state==="suspended"||G.state==="running"&&G.ctx.state==="interrupted"){if(G.ctx.resume().then(function(){G.state="running";for(var U=0;U"u"){if(G="__default",!O._playLock){var L=0;for(var Q=0;Q0?C._seek:O._sprite[G][0]/1000),p=Math.max(0,(O._sprite[G][0]+O._sprite[G][1])/1000-v),u=p*1000/Math.abs(C._rate),z0=O._sprite[G][0]/1000,F=(O._sprite[G][0]+O._sprite[G][1])/1000;C._sprite=G,C._ended=!1;var n=function(){C._paused=!1,C._seek=v,C._start=z0,C._stop=F,C._loop=!!(C._loop||O._sprite[G][2])};if(v>=F){O._ended(C);return}var s=C._node;if(O._webAudio){var r=function(){O._playLock=!1,n(),O._refreshBuffer(C);var b=C._muted||O._muted?0:C._volume;if(s.gain.setValueAtTime(b,Y.ctx.currentTime),C._playStart=Y.ctx.currentTime,typeof s.bufferSource.start>"u")C._loop?s.bufferSource.noteGrainOn(0,v,86400):s.bufferSource.noteGrainOn(0,v,p);else C._loop?s.bufferSource.start(0,v,86400):s.bufferSource.start(0,v,p);if(u!==1/0)O._endTimers[C._id]=setTimeout(O._ended.bind(O,C),u);if(!U)setTimeout(function(){O._emit("play",C._id),O._loadQueue()},0)};if(Y.state==="running"&&Y.ctx.state!=="interrupted")r();else O._playLock=!0,O.once("resume",r),O._clearTimer(C._id)}else{var B0=function(){s.currentTime=v,s.muted=C._muted||O._muted||Y._muted||s.muted,s.volume=C._volume*Y.volume(),s.playbackRate=C._rate;try{var b=s.play();if(b&&typeof Promise<"u"&&(b instanceof Promise||typeof b.then==="function"))O._playLock=!0,n(),b.then(function(){if(O._playLock=!1,s._unlocked=!0,!U)O._emit("play",C._id);else O._loadQueue()}).catch(function(){O._playLock=!1,O._emit("playerror",C._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),C._ended=!0,C._paused=!0});else if(!U)O._playLock=!1,n(),O._emit("play",C._id);if(s.playbackRate=C._rate,s.paused){O._emit("playerror",C._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");return}if(G!=="__default"||C._loop)O._endTimers[C._id]=setTimeout(O._ended.bind(O,C),u);else O._endTimers[C._id]=function(){O._ended(C),s.removeEventListener("ended",O._endTimers[C._id],!1)},s.addEventListener("ended",O._endTimers[C._id],!1)}catch(t){O._emit("playerror",C._id,t)}};if(s.src==="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")s.src=O._src,s.load();var i0=window&&window.ejecta||!s.readyState&&Y._navigator.isCocoonJS;if(s.readyState>=3||i0)B0();else{O._playLock=!0,O._state="loading";var _0=function(){O._state="loaded",B0(),s.removeEventListener(Y._canPlayEvent,_0,!1)};s.addEventListener(Y._canPlayEvent,_0,!1),O._clearTimer(C._id)}}return C._id},pause:function(G){var U=this;if(U._state!=="loaded"||U._playLock)return U._queue.push({event:"pause",action:function(){U.pause(G)}}),U;var O=U._getSoundIds(G);for(var M=0;M"u")L._node.bufferSource.noteOff(0);else L._node.bufferSource.stop(0);U._cleanBuffer(L._node)}else if(!isNaN(L._node.duration)||L._node.duration===1/0)L._node.pause()}}if(!arguments[1])U._emit("pause",L?L._id:null)}return U},stop:function(G,U){var O=this;if(O._state!=="loaded"||O._playLock)return O._queue.push({event:"stop",action:function(){O.stop(G)}}),O;var M=O._getSoundIds(G);for(var L=0;L"u")Q._node.bufferSource.noteOff(0);else Q._node.bufferSource.stop(0);O._cleanBuffer(Q._node)}}else if(!isNaN(Q._node.duration)||Q._node.duration===1/0){if(Q._node.currentTime=Q._start||0,Q._node.pause(),Q._node.duration===1/0)O._clearSound(Q._node)}}if(!U)O._emit("stop",Q._id)}}return O},mute:function(G,U){var O=this;if(O._state!=="loaded"||O._playLock)return O._queue.push({event:"mute",action:function(){O.mute(G,U)}}),O;if(typeof U>"u")if(typeof G==="boolean")O._muted=G;else return O._muted;var M=O._getSoundIds(U);for(var L=0;L"u"){var L=G._getSoundIds(),Q=L.indexOf(U[0]);if(Q>=0)M=parseInt(U[0],10);else O=parseFloat(U[0])}else if(U.length>=2)O=parseFloat(U[0]),M=parseInt(U[1],10);var C;if(typeof O<"u"&&O>=0&&O<=1){if(G._state!=="loaded"||G._playLock)return G._queue.push({event:"volume",action:function(){G.volume.apply(G,U)}}),G;if(typeof M>"u")G._volume=O;M=G._getSoundIds(M);for(var T=0;T"u")}}return L},_startFadeInterval:function(G,U,O,M,L,Q){var C=this,T=U,v=O-U,p=Math.abs(v/0.01),u=Math.max(4,p>0?M/p:M),z0=Date.now();G._fadeTo=O,G._interval=setInterval(function(){var F=(Date.now()-z0)/M;if(z0=Date.now(),T+=v*F,T=Math.round(T*100)/100,v<0)T=Math.max(O,T);else T=Math.min(O,T);if(C._webAudio)G._volume=T;else C.volume(T,G._id,!0);if(Q)C._volume=T;if(OU&&T>=O)clearInterval(G._interval),G._interval=null,G._fadeTo=null,C.volume(O,G._id),C._emit("fade",G._id)},u)},_stopFade:function(G){var U=this,O=U._soundById(G);if(O&&O._interval){if(U._webAudio)O._node.gain.cancelScheduledValues(Y.ctx.currentTime);clearInterval(O._interval),O._interval=null,U.volume(O._fadeTo,G),O._fadeTo=null,U._emit("fade",G)}return U},loop:function(){var G=this,U=arguments,O,M,L;if(U.length===0)return G._loop;else if(U.length===1)if(typeof U[0]==="boolean")O=U[0],G._loop=O;else return L=G._soundById(parseInt(U[0],10)),L?L._loop:!1;else if(U.length===2)O=U[0],M=parseInt(U[1],10);var Q=G._getSoundIds(M);for(var C=0;C=0)M=parseInt(U[0],10);else O=parseFloat(U[0])}else if(U.length===2)O=parseFloat(U[0]),M=parseInt(U[1],10);var C;if(typeof O==="number"){if(G._state!=="loaded"||G._playLock)return G._queue.push({event:"rate",action:function(){G.rate.apply(G,U)}}),G;if(typeof M>"u")G._rate=O;M=G._getSoundIds(M);for(var T=0;T=0)M=parseInt(U[0],10);else if(G._sounds.length)M=G._sounds[0]._id,O=parseFloat(U[0])}else if(U.length===2)O=parseFloat(U[0]),M=parseInt(U[1],10);if(typeof M>"u")return 0;if(typeof O==="number"&&(G._state!=="loaded"||G._playLock))return G._queue.push({event:"seek",action:function(){G.seek.apply(G,U)}}),G;var C=G._soundById(M);if(C)if(typeof O==="number"&&O>=0){var T=G.playing(M);if(T)G.pause(M,!0);if(C._seek=O,C._ended=!1,G._clearTimer(M),!G._webAudio&&C._node&&!isNaN(C._node.duration))C._node.currentTime=O;var v=function(){if(T)G.play(M,!0);G._emit("seek",M)};if(T&&!G._webAudio){var p=function(){if(!G._playLock)v();else setTimeout(p,0)};setTimeout(p,0)}else v()}else if(G._webAudio){var u=G.playing(M)?Y.ctx.currentTime-C._playStart:0,z0=C._rateSeek?C._rateSeek-C._seek:0;return C._seek+(z0+u*Math.abs(C._rate))}else return C._node.currentTime;return G},playing:function(G){var U=this;if(typeof G==="number"){var O=U._soundById(G);return O?!O._paused:!1}for(var M=0;M=0)Y._howls.splice(M,1);var L=!0;for(O=0;O=0){L=!1;break}if(V&&L)delete V[G._src];return Y.noAudio=!1,G._state="unloaded",G._sounds=[],G=null,null},on:function(G,U,O,M){var L=this,Q=L["_on"+G];if(typeof U==="function")Q.push(M?{id:O,fn:U,once:M}:{id:O,fn:U});return L},off:function(G,U,O){var M=this,L=M["_on"+G],Q=0;if(typeof U==="number")O=U,U=null;if(U||O)for(Q=0;Q=0;Q--)if(!L[Q].id||L[Q].id===U||G==="load"){if(setTimeout(function(C){C.call(this,U,O)}.bind(M,L[Q].fn),0),L[Q].once)M.off(G,L[Q].fn,L[Q].id)}return M._loadQueue(G),M},_loadQueue:function(G){var U=this;if(U._queue.length>0){var O=U._queue[0];if(O.event===G)U._queue.shift(),U._loadQueue();if(!G)O.action()}return U},_ended:function(G){var U=this,O=G._sprite;if(!U._webAudio&&G._node&&!G._node.paused&&!G._node.ended&&G._node.currentTime=0;M--){if(O<=U)return;if(G._sounds[M]._ended){if(G._webAudio&&G._sounds[M]._node)G._sounds[M]._node.disconnect(0);G._sounds.splice(M,1),O--}}},_getSoundIds:function(G){var U=this;if(typeof G>"u"){var O=[];for(var M=0;M=0;if(!G.bufferSource)return U;if(Y._scratchBuffer&&G.bufferSource){if(G.bufferSource.onended=null,G.bufferSource.disconnect(0),O)try{G.bufferSource.buffer=Y._scratchBuffer}catch(M){}}return G.bufferSource=null,U},_clearSound:function(G){var U=/MSIE |Trident\//.test(Y._navigator&&Y._navigator.userAgent);if(!U)G.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"}};var z=function(G){this._parent=G,this.init()};z.prototype={init:function(){var G=this,U=G._parent;return G._muted=U._muted,G._loop=U._loop,G._volume=U._volume,G._rate=U._rate,G._seek=0,G._paused=!0,G._ended=!0,G._sprite="__default",G._id=++Y._counter,U._sounds.push(G),G.create(),G},create:function(){var G=this,U=G._parent,O=Y._muted||G._muted||G._parent._muted?0:G._volume;if(U._webAudio)G._node=typeof Y.ctx.createGain>"u"?Y.ctx.createGainNode():Y.ctx.createGain(),G._node.gain.setValueAtTime(O,Y.ctx.currentTime),G._node.paused=!0,G._node.connect(Y.masterGain);else if(!Y.noAudio)G._node=Y._obtainHtml5Audio(),G._errorFn=G._errorListener.bind(G),G._node.addEventListener("error",G._errorFn,!1),G._loadFn=G._loadListener.bind(G),G._node.addEventListener(Y._canPlayEvent,G._loadFn,!1),G._endFn=G._endListener.bind(G),G._node.addEventListener("ended",G._endFn,!1),G._node.src=U._src,G._node.preload=U._preload===!0?"auto":U._preload,G._node.volume=O*Y.volume(),G._node.load();return G},reset:function(){var G=this,U=G._parent;return G._muted=U._muted,G._loop=U._loop,G._volume=U._volume,G._rate=U._rate,G._seek=0,G._rateSeek=0,G._paused=!0,G._ended=!0,G._sprite="__default",G._id=++Y._counter,G},_errorListener:function(){var G=this;G._parent._emit("loaderror",G._id,G._node.error?G._node.error.code:0),G._node.removeEventListener("error",G._errorFn,!1)},_loadListener:function(){var G=this,U=G._parent;if(U._duration=Math.ceil(G._node.duration*10)/10,Object.keys(U._sprite).length===0)U._sprite={__default:[0,U._duration*1000]};if(U._state!=="loaded")U._state="loaded",U._emit("load"),U._loadQueue();G._node.removeEventListener(Y._canPlayEvent,G._loadFn,!1)},_endListener:function(){var G=this,U=G._parent;if(U._duration===1/0){if(U._duration=Math.ceil(G._node.duration*10)/10,U._sprite.__default[1]===1/0)U._sprite.__default[1]=U._duration*1000;U._ended(G)}G._node.removeEventListener("ended",G._endFn,!1)}};var V={},H=function(G){var U=G._src;if(V[U]){G._duration=V[U].duration,A(G);return}if(/^data:[^;]+;base64,/.test(U)){var O=atob(U.split(",")[1]),M=new Uint8Array(O.length);for(var L=0;L0)V[U._src]=L,A(U,L);else O()};if(typeof Promise<"u"&&Y.ctx.decodeAudioData.length===1)Y.ctx.decodeAudioData(G).then(M).catch(O);else Y.ctx.decodeAudioData(G,M,O)},A=function(G,U){if(U&&!G._duration)G._duration=U.duration;if(Object.keys(G._sprite).length===0)G._sprite={__default:[0,G._duration*1000]};if(G._state!=="loaded")G._state="loaded",G._emit("load"),G._loadQueue()},w=function(){if(!Y.usingWebAudio)return;try{if(typeof AudioContext<"u")Y.ctx=new AudioContext;else if(typeof webkitAudioContext<"u")Y.ctx=new webkitAudioContext;else Y.usingWebAudio=!1}catch(L){Y.usingWebAudio=!1}if(!Y.ctx)Y.usingWebAudio=!1;var G=/iP(hone|od|ad)/.test(Y._navigator&&Y._navigator.platform),U=Y._navigator&&Y._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),O=U?parseInt(U[1],10):null;if(G&&O&&O<9){var M=/safari/.test(Y._navigator&&Y._navigator.userAgent.toLowerCase());if(Y._navigator&&!M)Y.usingWebAudio=!1}if(Y.usingWebAudio)Y.masterGain=typeof Y.ctx.createGain>"u"?Y.ctx.createGainNode():Y.ctx.createGain(),Y.masterGain.gain.setValueAtTime(Y._muted?0:Y._volume,Y.ctx.currentTime),Y.masterGain.connect(Y.ctx.destination);Y._setup()};if(typeof define==="function"&&define.amd)define([],function(){return{Howler:Y,Howl:W}});if(typeof Q6<"u")Q6.Howler=Y,Q6.Howl=W;if(typeof global<"u")global.HowlerGlobal=J,global.Howler=Y,global.Howl=W,global.Sound=z;else if(typeof window<"u")window.HowlerGlobal=J,window.Howler=Y,window.Howl=W,window.Sound=z})();/*! + */(function(){var J=function(){this.init()};J.prototype={init:function(){var G=this||Y;return G._counter=1000,G._html5AudioPool=[],G.html5PoolSize=10,G._codecs={},G._howls=[],G._muted=!1,G._volume=1,G._canPlayEvent="canplaythrough",G._navigator=typeof window<"u"&&window.navigator?window.navigator:null,G.masterGain=null,G.noAudio=!1,G.usingWebAudio=!0,G.autoSuspend=!0,G.ctx=null,G.autoUnlock=!0,G._setup(),G},volume:function(G){var U=this||Y;if(G=parseFloat(G),!U.ctx)I();if(typeof G<"u"&&G>=0&&G<=1){if(U._volume=G,U._muted)return U;if(U.usingWebAudio)U.masterGain.gain.setValueAtTime(G,Y.ctx.currentTime);for(var R=0;R=0;U--)G._howls[U].unload();if(G.usingWebAudio&&G.ctx&&typeof G.ctx.close<"u")G.ctx.close(),G.ctx=null,I();return G},codecs:function(G){return(this||Y)._codecs[G.replace(/^x-/,"")]},_setup:function(){var G=this||Y;if(G.state=G.ctx?G.ctx.state||"suspended":"suspended",G._autoSuspend(),!G.usingWebAudio)if(typeof Audio<"u")try{var U=new Audio;if(typeof U.oncanplaythrough>"u")G._canPlayEvent="canplay"}catch(R){G.noAudio=!0}else G.noAudio=!0;try{var U=new Audio;if(U.muted)G.noAudio=!0}catch(R){}if(!G.noAudio)G._setupCodecs();return G},_setupCodecs:function(){var G=this||Y,U=null;try{U=typeof Audio<"u"?new Audio:null}catch(p){return G}if(!U||typeof U.canPlayType!=="function")return G;var R=U.canPlayType("audio/mpeg;").replace(/^no$/,""),P=G._navigator?G._navigator.userAgent:"",L=P.match(/OPR\/(\d+)/g),Q=L&&parseInt(L[0].split("/")[1],10)<33,C=P.indexOf("Safari")!==-1&&P.indexOf("Chrome")===-1,T=P.match(/Version\/(.*?) /),v=C&&T&&parseInt(T[1],10)<15;return G._codecs={mp3:!!(!Q&&(R||U.canPlayType("audio/mp3;").replace(/^no$/,""))),mpeg:!!R,opus:!!U.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/,""),ogg:!!U.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),oga:!!U.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),wav:!!(U.canPlayType('audio/wav; codecs="1"')||U.canPlayType("audio/wav")).replace(/^no$/,""),aac:!!U.canPlayType("audio/aac;").replace(/^no$/,""),caf:!!U.canPlayType("audio/x-caf;").replace(/^no$/,""),m4a:!!(U.canPlayType("audio/x-m4a;")||U.canPlayType("audio/m4a;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),m4b:!!(U.canPlayType("audio/x-m4b;")||U.canPlayType("audio/m4b;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),mp4:!!(U.canPlayType("audio/x-mp4;")||U.canPlayType("audio/mp4;")||U.canPlayType("audio/aac;")).replace(/^no$/,""),weba:!!(!v&&U.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),webm:!!(!v&&U.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/,"")),dolby:!!U.canPlayType('audio/mp4; codecs="ec-3"').replace(/^no$/,""),flac:!!(U.canPlayType("audio/x-flac;")||U.canPlayType("audio/flac;")).replace(/^no$/,"")},G},_unlockAudio:function(){var G=this||Y;if(G._audioUnlocked||!G.ctx)return;if(G._audioUnlocked=!1,G.autoUnlock=!1,!G._mobileUnloaded&&G.ctx.sampleRate!==44100)G._mobileUnloaded=!0,G.unload();G._scratchBuffer=G.ctx.createBuffer(1,1,22050);var U=function(R){while(G._html5AudioPool.length"u")v.noteOn(0);else v.start(0);if(typeof G.ctx.resume==="function")G.ctx.resume();v.onended=function(){v.disconnect(0),G._audioUnlocked=!0,document.removeEventListener("touchstart",U,!0),document.removeEventListener("touchend",U,!0),document.removeEventListener("click",U,!0),document.removeEventListener("keydown",U,!0);for(var p=0;p"u"||!Y.usingWebAudio)return;for(var U=0;U"u"||!Y.usingWebAudio)return;if(G.state==="running"&&G.ctx.state!=="interrupted"&&G._suspendTimer)clearTimeout(G._suspendTimer),G._suspendTimer=null;else if(G.state==="suspended"||G.state==="running"&&G.ctx.state==="interrupted"){if(G.ctx.resume().then(function(){G.state="running";for(var U=0;U"u"){if(G="__default",!R._playLock){var L=0;for(var Q=0;Q0?C._seek:R._sprite[G][0]/1000),p=Math.max(0,(R._sprite[G][0]+R._sprite[G][1])/1000-v),u=p*1000/Math.abs(C._rate),z0=R._sprite[G][0]/1000,q=(R._sprite[G][0]+R._sprite[G][1])/1000;C._sprite=G,C._ended=!1;var n=function(){C._paused=!1,C._seek=v,C._start=z0,C._stop=q,C._loop=!!(C._loop||R._sprite[G][2])};if(v>=q){R._ended(C);return}var s=C._node;if(R._webAudio){var r=function(){R._playLock=!1,n(),R._refreshBuffer(C);var b=C._muted||R._muted?0:C._volume;if(s.gain.setValueAtTime(b,Y.ctx.currentTime),C._playStart=Y.ctx.currentTime,typeof s.bufferSource.start>"u")C._loop?s.bufferSource.noteGrainOn(0,v,86400):s.bufferSource.noteGrainOn(0,v,p);else C._loop?s.bufferSource.start(0,v,86400):s.bufferSource.start(0,v,p);if(u!==1/0)R._endTimers[C._id]=setTimeout(R._ended.bind(R,C),u);if(!U)setTimeout(function(){R._emit("play",C._id),R._loadQueue()},0)};if(Y.state==="running"&&Y.ctx.state!=="interrupted")r();else R._playLock=!0,R.once("resume",r),R._clearTimer(C._id)}else{var B0=function(){s.currentTime=v,s.muted=C._muted||R._muted||Y._muted||s.muted,s.volume=C._volume*Y.volume(),s.playbackRate=C._rate;try{var b=s.play();if(b&&typeof Promise<"u"&&(b instanceof Promise||typeof b.then==="function"))R._playLock=!0,n(),b.then(function(){if(R._playLock=!1,s._unlocked=!0,!U)R._emit("play",C._id);else R._loadQueue()}).catch(function(){R._playLock=!1,R._emit("playerror",C._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction."),C._ended=!0,C._paused=!0});else if(!U)R._playLock=!1,n(),R._emit("play",C._id);if(s.playbackRate=C._rate,s.paused){R._emit("playerror",C._id,"Playback was unable to start. This is most commonly an issue on mobile devices and Chrome where playback was not within a user interaction.");return}if(G!=="__default"||C._loop)R._endTimers[C._id]=setTimeout(R._ended.bind(R,C),u);else R._endTimers[C._id]=function(){R._ended(C),s.removeEventListener("ended",R._endTimers[C._id],!1)},s.addEventListener("ended",R._endTimers[C._id],!1)}catch(t){R._emit("playerror",C._id,t)}};if(s.src==="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA")s.src=R._src,s.load();var i0=window&&window.ejecta||!s.readyState&&Y._navigator.isCocoonJS;if(s.readyState>=3||i0)B0();else{R._playLock=!0,R._state="loading";var _0=function(){R._state="loaded",B0(),s.removeEventListener(Y._canPlayEvent,_0,!1)};s.addEventListener(Y._canPlayEvent,_0,!1),R._clearTimer(C._id)}}return C._id},pause:function(G){var U=this;if(U._state!=="loaded"||U._playLock)return U._queue.push({event:"pause",action:function(){U.pause(G)}}),U;var R=U._getSoundIds(G);for(var P=0;P"u")L._node.bufferSource.noteOff(0);else L._node.bufferSource.stop(0);U._cleanBuffer(L._node)}else if(!isNaN(L._node.duration)||L._node.duration===1/0)L._node.pause()}}if(!arguments[1])U._emit("pause",L?L._id:null)}return U},stop:function(G,U){var R=this;if(R._state!=="loaded"||R._playLock)return R._queue.push({event:"stop",action:function(){R.stop(G)}}),R;var P=R._getSoundIds(G);for(var L=0;L"u")Q._node.bufferSource.noteOff(0);else Q._node.bufferSource.stop(0);R._cleanBuffer(Q._node)}}else if(!isNaN(Q._node.duration)||Q._node.duration===1/0){if(Q._node.currentTime=Q._start||0,Q._node.pause(),Q._node.duration===1/0)R._clearSound(Q._node)}}if(!U)R._emit("stop",Q._id)}}return R},mute:function(G,U){var R=this;if(R._state!=="loaded"||R._playLock)return R._queue.push({event:"mute",action:function(){R.mute(G,U)}}),R;if(typeof U>"u")if(typeof G==="boolean")R._muted=G;else return R._muted;var P=R._getSoundIds(U);for(var L=0;L"u"){var L=G._getSoundIds(),Q=L.indexOf(U[0]);if(Q>=0)P=parseInt(U[0],10);else R=parseFloat(U[0])}else if(U.length>=2)R=parseFloat(U[0]),P=parseInt(U[1],10);var C;if(typeof R<"u"&&R>=0&&R<=1){if(G._state!=="loaded"||G._playLock)return G._queue.push({event:"volume",action:function(){G.volume.apply(G,U)}}),G;if(typeof P>"u")G._volume=R;P=G._getSoundIds(P);for(var T=0;T"u")}}return L},_startFadeInterval:function(G,U,R,P,L,Q){var C=this,T=U,v=R-U,p=Math.abs(v/0.01),u=Math.max(4,p>0?P/p:P),z0=Date.now();G._fadeTo=R,G._interval=setInterval(function(){var q=(Date.now()-z0)/P;if(z0=Date.now(),T+=v*q,T=Math.round(T*100)/100,v<0)T=Math.max(R,T);else T=Math.min(R,T);if(C._webAudio)G._volume=T;else C.volume(T,G._id,!0);if(Q)C._volume=T;if(RU&&T>=R)clearInterval(G._interval),G._interval=null,G._fadeTo=null,C.volume(R,G._id),C._emit("fade",G._id)},u)},_stopFade:function(G){var U=this,R=U._soundById(G);if(R&&R._interval){if(U._webAudio)R._node.gain.cancelScheduledValues(Y.ctx.currentTime);clearInterval(R._interval),R._interval=null,U.volume(R._fadeTo,G),R._fadeTo=null,U._emit("fade",G)}return U},loop:function(){var G=this,U=arguments,R,P,L;if(U.length===0)return G._loop;else if(U.length===1)if(typeof U[0]==="boolean")R=U[0],G._loop=R;else return L=G._soundById(parseInt(U[0],10)),L?L._loop:!1;else if(U.length===2)R=U[0],P=parseInt(U[1],10);var Q=G._getSoundIds(P);for(var C=0;C=0)P=parseInt(U[0],10);else R=parseFloat(U[0])}else if(U.length===2)R=parseFloat(U[0]),P=parseInt(U[1],10);var C;if(typeof R==="number"){if(G._state!=="loaded"||G._playLock)return G._queue.push({event:"rate",action:function(){G.rate.apply(G,U)}}),G;if(typeof P>"u")G._rate=R;P=G._getSoundIds(P);for(var T=0;T=0)P=parseInt(U[0],10);else if(G._sounds.length)P=G._sounds[0]._id,R=parseFloat(U[0])}else if(U.length===2)R=parseFloat(U[0]),P=parseInt(U[1],10);if(typeof P>"u")return 0;if(typeof R==="number"&&(G._state!=="loaded"||G._playLock))return G._queue.push({event:"seek",action:function(){G.seek.apply(G,U)}}),G;var C=G._soundById(P);if(C)if(typeof R==="number"&&R>=0){var T=G.playing(P);if(T)G.pause(P,!0);if(C._seek=R,C._ended=!1,G._clearTimer(P),!G._webAudio&&C._node&&!isNaN(C._node.duration))C._node.currentTime=R;var v=function(){if(T)G.play(P,!0);G._emit("seek",P)};if(T&&!G._webAudio){var p=function(){if(!G._playLock)v();else setTimeout(p,0)};setTimeout(p,0)}else v()}else if(G._webAudio){var u=G.playing(P)?Y.ctx.currentTime-C._playStart:0,z0=C._rateSeek?C._rateSeek-C._seek:0;return C._seek+(z0+u*Math.abs(C._rate))}else return C._node.currentTime;return G},playing:function(G){var U=this;if(typeof G==="number"){var R=U._soundById(G);return R?!R._paused:!1}for(var P=0;P=0)Y._howls.splice(P,1);var L=!0;for(R=0;R=0){L=!1;break}if(V&&L)delete V[G._src];return Y.noAudio=!1,G._state="unloaded",G._sounds=[],G=null,null},on:function(G,U,R,P){var L=this,Q=L["_on"+G];if(typeof U==="function")Q.push(P?{id:R,fn:U,once:P}:{id:R,fn:U});return L},off:function(G,U,R){var P=this,L=P["_on"+G],Q=0;if(typeof U==="number")R=U,U=null;if(U||R)for(Q=0;Q=0;Q--)if(!L[Q].id||L[Q].id===U||G==="load"){if(setTimeout(function(C){C.call(this,U,R)}.bind(P,L[Q].fn),0),L[Q].once)P.off(G,L[Q].fn,L[Q].id)}return P._loadQueue(G),P},_loadQueue:function(G){var U=this;if(U._queue.length>0){var R=U._queue[0];if(R.event===G)U._queue.shift(),U._loadQueue();if(!G)R.action()}return U},_ended:function(G){var U=this,R=G._sprite;if(!U._webAudio&&G._node&&!G._node.paused&&!G._node.ended&&G._node.currentTime=0;P--){if(R<=U)return;if(G._sounds[P]._ended){if(G._webAudio&&G._sounds[P]._node)G._sounds[P]._node.disconnect(0);G._sounds.splice(P,1),R--}}},_getSoundIds:function(G){var U=this;if(typeof G>"u"){var R=[];for(var P=0;P=0;if(!G.bufferSource)return U;if(Y._scratchBuffer&&G.bufferSource){if(G.bufferSource.onended=null,G.bufferSource.disconnect(0),R)try{G.bufferSource.buffer=Y._scratchBuffer}catch(P){}}return G.bufferSource=null,U},_clearSound:function(G){var U=/MSIE |Trident\//.test(Y._navigator&&Y._navigator.userAgent);if(!U)G.src="data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA"}};var z=function(G){this._parent=G,this.init()};z.prototype={init:function(){var G=this,U=G._parent;return G._muted=U._muted,G._loop=U._loop,G._volume=U._volume,G._rate=U._rate,G._seek=0,G._paused=!0,G._ended=!0,G._sprite="__default",G._id=++Y._counter,U._sounds.push(G),G.create(),G},create:function(){var G=this,U=G._parent,R=Y._muted||G._muted||G._parent._muted?0:G._volume;if(U._webAudio)G._node=typeof Y.ctx.createGain>"u"?Y.ctx.createGainNode():Y.ctx.createGain(),G._node.gain.setValueAtTime(R,Y.ctx.currentTime),G._node.paused=!0,G._node.connect(Y.masterGain);else if(!Y.noAudio)G._node=Y._obtainHtml5Audio(),G._errorFn=G._errorListener.bind(G),G._node.addEventListener("error",G._errorFn,!1),G._loadFn=G._loadListener.bind(G),G._node.addEventListener(Y._canPlayEvent,G._loadFn,!1),G._endFn=G._endListener.bind(G),G._node.addEventListener("ended",G._endFn,!1),G._node.src=U._src,G._node.preload=U._preload===!0?"auto":U._preload,G._node.volume=R*Y.volume(),G._node.load();return G},reset:function(){var G=this,U=G._parent;return G._muted=U._muted,G._loop=U._loop,G._volume=U._volume,G._rate=U._rate,G._seek=0,G._rateSeek=0,G._paused=!0,G._ended=!0,G._sprite="__default",G._id=++Y._counter,G},_errorListener:function(){var G=this;G._parent._emit("loaderror",G._id,G._node.error?G._node.error.code:0),G._node.removeEventListener("error",G._errorFn,!1)},_loadListener:function(){var G=this,U=G._parent;if(U._duration=Math.ceil(G._node.duration*10)/10,Object.keys(U._sprite).length===0)U._sprite={__default:[0,U._duration*1000]};if(U._state!=="loaded")U._state="loaded",U._emit("load"),U._loadQueue();G._node.removeEventListener(Y._canPlayEvent,G._loadFn,!1)},_endListener:function(){var G=this,U=G._parent;if(U._duration===1/0){if(U._duration=Math.ceil(G._node.duration*10)/10,U._sprite.__default[1]===1/0)U._sprite.__default[1]=U._duration*1000;U._ended(G)}G._node.removeEventListener("ended",G._endFn,!1)}};var V={},F=function(G){var U=G._src;if(V[U]){G._duration=V[U].duration,N(G);return}if(/^data:[^;]+;base64,/.test(U)){var R=atob(U.split(",")[1]),P=new Uint8Array(R.length);for(var L=0;L0)V[U._src]=L,N(U,L);else R()};if(typeof Promise<"u"&&Y.ctx.decodeAudioData.length===1)Y.ctx.decodeAudioData(G).then(P).catch(R);else Y.ctx.decodeAudioData(G,P,R)},N=function(G,U){if(U&&!G._duration)G._duration=U.duration;if(Object.keys(G._sprite).length===0)G._sprite={__default:[0,G._duration*1000]};if(G._state!=="loaded")G._state="loaded",G._emit("load"),G._loadQueue()},I=function(){if(!Y.usingWebAudio)return;try{if(typeof AudioContext<"u")Y.ctx=new AudioContext;else if(typeof webkitAudioContext<"u")Y.ctx=new webkitAudioContext;else Y.usingWebAudio=!1}catch(L){Y.usingWebAudio=!1}if(!Y.ctx)Y.usingWebAudio=!1;var G=/iP(hone|od|ad)/.test(Y._navigator&&Y._navigator.platform),U=Y._navigator&&Y._navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/),R=U?parseInt(U[1],10):null;if(G&&R&&R<9){var P=/safari/.test(Y._navigator&&Y._navigator.userAgent.toLowerCase());if(Y._navigator&&!P)Y.usingWebAudio=!1}if(Y.usingWebAudio)Y.masterGain=typeof Y.ctx.createGain>"u"?Y.ctx.createGainNode():Y.ctx.createGain(),Y.masterGain.gain.setValueAtTime(Y._muted?0:Y._volume,Y.ctx.currentTime),Y.masterGain.connect(Y.ctx.destination);Y._setup()};if(typeof define==="function"&&define.amd)define([],function(){return{Howler:Y,Howl:W}});if(typeof T6<"u")T6.Howler=Y,T6.Howl=W;if(typeof global<"u")global.HowlerGlobal=J,global.Howler=Y,global.Howl=W,global.Sound=z;else if(typeof window<"u")window.HowlerGlobal=J,window.Howler=Y,window.Howl=W,window.Sound=z})();/*! * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported. * * howler.js v2.2.4 @@ -16,16 +16,16 @@ * goldfirestudios.com * * MIT License - */(function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(Y){var W=this;if(!W.ctx||!W.ctx.listener)return W;for(var z=W._howls.length-1;z>=0;z--)W._howls[z].stereo(Y);return W},HowlerGlobal.prototype.pos=function(Y,W,z){var V=this;if(!V.ctx||!V.ctx.listener)return V;if(W=typeof W!=="number"?V._pos[1]:W,z=typeof z!=="number"?V._pos[2]:z,typeof Y==="number")if(V._pos=[Y,W,z],typeof V.ctx.listener.positionX<"u")V.ctx.listener.positionX.setTargetAtTime(V._pos[0],Howler.ctx.currentTime,0.1),V.ctx.listener.positionY.setTargetAtTime(V._pos[1],Howler.ctx.currentTime,0.1),V.ctx.listener.positionZ.setTargetAtTime(V._pos[2],Howler.ctx.currentTime,0.1);else V.ctx.listener.setPosition(V._pos[0],V._pos[1],V._pos[2]);else return V._pos;return V},HowlerGlobal.prototype.orientation=function(Y,W,z,V,H,E){var _=this;if(!_.ctx||!_.ctx.listener)return _;var A=_._orientation;if(W=typeof W!=="number"?A[1]:W,z=typeof z!=="number"?A[2]:z,V=typeof V!=="number"?A[3]:V,H=typeof H!=="number"?A[4]:H,E=typeof E!=="number"?A[5]:E,typeof Y==="number")if(_._orientation=[Y,W,z,V,H,E],typeof _.ctx.listener.forwardX<"u")_.ctx.listener.forwardX.setTargetAtTime(Y,Howler.ctx.currentTime,0.1),_.ctx.listener.forwardY.setTargetAtTime(W,Howler.ctx.currentTime,0.1),_.ctx.listener.forwardZ.setTargetAtTime(z,Howler.ctx.currentTime,0.1),_.ctx.listener.upX.setTargetAtTime(V,Howler.ctx.currentTime,0.1),_.ctx.listener.upY.setTargetAtTime(H,Howler.ctx.currentTime,0.1),_.ctx.listener.upZ.setTargetAtTime(E,Howler.ctx.currentTime,0.1);else _.ctx.listener.setOrientation(Y,W,z,V,H,E);else return A;return _},Howl.prototype.init=function(Y){return function(W){var z=this;return z._orientation=W.orientation||[1,0,0],z._stereo=W.stereo||null,z._pos=W.pos||null,z._pannerAttr={coneInnerAngle:typeof W.coneInnerAngle<"u"?W.coneInnerAngle:360,coneOuterAngle:typeof W.coneOuterAngle<"u"?W.coneOuterAngle:360,coneOuterGain:typeof W.coneOuterGain<"u"?W.coneOuterGain:0,distanceModel:typeof W.distanceModel<"u"?W.distanceModel:"inverse",maxDistance:typeof W.maxDistance<"u"?W.maxDistance:1e4,panningModel:typeof W.panningModel<"u"?W.panningModel:"HRTF",refDistance:typeof W.refDistance<"u"?W.refDistance:1,rolloffFactor:typeof W.rolloffFactor<"u"?W.rolloffFactor:1},z._onstereo=W.onstereo?[{fn:W.onstereo}]:[],z._onpos=W.onpos?[{fn:W.onpos}]:[],z._onorientation=W.onorientation?[{fn:W.onorientation}]:[],Y.call(this,W)}}(Howl.prototype.init),Howl.prototype.stereo=function(Y,W){var z=this;if(!z._webAudio)return z;if(z._state!=="loaded")return z._queue.push({event:"stereo",action:function(){z.stereo(Y,W)}}),z;var V=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof W>"u")if(typeof Y==="number")z._stereo=Y,z._pos=[Y,0,0];else return z._stereo;var H=z._getSoundIds(W);for(var E=0;E"u")if(typeof Y==="number")H._pos=[Y,W,z];else return H._pos;var E=H._getSoundIds(V);for(var _=0;_"u")if(typeof Y==="number")H._orientation=[Y,W,z];else return H._orientation;var E=H._getSoundIds(V);for(var _=0;_"u"){if(!z.pannerAttr)z.pannerAttr={coneInnerAngle:z.coneInnerAngle,coneOuterAngle:z.coneOuterAngle,coneOuterGain:z.coneOuterGain,distanceModel:z.distanceModel,maxDistance:z.maxDistance,refDistance:z.refDistance,rolloffFactor:z.rolloffFactor,panningModel:z.panningModel};Y._pannerAttr={coneInnerAngle:typeof z.pannerAttr.coneInnerAngle<"u"?z.pannerAttr.coneInnerAngle:Y._coneInnerAngle,coneOuterAngle:typeof z.pannerAttr.coneOuterAngle<"u"?z.pannerAttr.coneOuterAngle:Y._coneOuterAngle,coneOuterGain:typeof z.pannerAttr.coneOuterGain<"u"?z.pannerAttr.coneOuterGain:Y._coneOuterGain,distanceModel:typeof z.pannerAttr.distanceModel<"u"?z.pannerAttr.distanceModel:Y._distanceModel,maxDistance:typeof z.pannerAttr.maxDistance<"u"?z.pannerAttr.maxDistance:Y._maxDistance,refDistance:typeof z.pannerAttr.refDistance<"u"?z.pannerAttr.refDistance:Y._refDistance,rolloffFactor:typeof z.pannerAttr.rolloffFactor<"u"?z.pannerAttr.rolloffFactor:Y._rolloffFactor,panningModel:typeof z.pannerAttr.panningModel<"u"?z.pannerAttr.panningModel:Y._panningModel}}}else return H=Y._soundById(parseInt(W[0],10)),H?H._pannerAttr:Y._pannerAttr;else if(W.length===2)z=W[0],V=parseInt(W[1],10);var E=Y._getSoundIds(V);for(var _=0;_{Object.defineProperty(T1,"__esModule",{value:!0});T1.ERROR_PACKET=T1.PACKET_TYPES_REVERSE=T1.PACKET_TYPES=void 0;var G1=Object.create(null);T1.PACKET_TYPES=G1;G1.open="0";G1.close="1";G1.ping="2";G1.pong="3";G1.message="4";G1.upgrade="5";G1.noop="6";var WZ=Object.create(null);T1.PACKET_TYPES_REVERSE=WZ;Object.keys(G1).forEach((J)=>{WZ[G1[J]]=J});var _K={type:"error",data:"parser error"};T1.ERROR_PACKET=_K});var $Z=a((r8)=>{Object.defineProperty(r8,"__esModule",{value:!0});r8.encodePacket=void 0;r8.encodePacketToBinary=EK;var AK=I6(),GZ=typeof Blob==="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",XZ=typeof ArrayBuffer==="function",UZ=(J)=>{return typeof ArrayBuffer.isView==="function"?ArrayBuffer.isView(J):J&&J.buffer instanceof ArrayBuffer},VZ=({type:J,data:Y},W,z)=>{if(GZ&&Y instanceof Blob)if(W)return z(Y);else return KZ(Y,z);else if(XZ&&(Y instanceof ArrayBuffer||UZ(Y)))if(W)return z(Y);else return KZ(new Blob([Y]),z);return z(AK.PACKET_TYPES[J]+(Y||""))};r8.encodePacket=VZ;var KZ=(J,Y)=>{let W=new FileReader;return W.onload=function(){let z=W.result.split(",")[1];Y("b"+(z||""))},W.readAsDataURL(J)};function zZ(J){if(J instanceof Uint8Array)return J;else if(J instanceof ArrayBuffer)return new Uint8Array(J);else return new Uint8Array(J.buffer,J.byteOffset,J.byteLength)}var pJ;function EK(J,Y){if(GZ&&J.data instanceof Blob)return J.data.arrayBuffer().then(zZ).then(Y);else if(XZ&&(J.data instanceof ArrayBuffer||UZ(J.data)))return Y(zZ(J.data));VZ(J,!1,(W)=>{if(!pJ)pJ=new TextEncoder;Y(pJ.encode(W))})}});var FZ=a((M8)=>{Object.defineProperty(M8,"__esModule",{value:!0});M8.decode=M8.encode=void 0;var E8="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a8=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let J=0;J{let Y=new Uint8Array(J),W,z=Y.length,V="";for(W=0;W>2],V+=E8[(Y[W]&3)<<4|Y[W+1]>>4],V+=E8[(Y[W+1]&15)<<2|Y[W+2]>>6],V+=E8[Y[W+2]&63];if(z%3===2)V=V.substring(0,V.length-1)+"=";else if(z%3===1)V=V.substring(0,V.length-2)+"==";return V};M8.encode=MK;var SK=(J)=>{let Y=J.length*0.75,W=J.length,z,V=0,H,E,_,A;if(J[J.length-1]==="="){if(Y--,J[J.length-2]==="=")Y--}let w=new ArrayBuffer(Y),G=new Uint8Array(w);for(z=0;z>4,G[V++]=(E&15)<<4|_>>2,G[V++]=(_&3)<<6|A&63;return w};M8.decode=SK});var HZ=a((j6)=>{Object.defineProperty(j6,"__esModule",{value:!0});j6.decodePacket=void 0;var w6=I6(),PK=FZ(),CK=typeof ArrayBuffer==="function",QK=(J,Y)=>{if(typeof J!=="string")return{type:"message",data:qZ(J,Y)};let W=J.charAt(0);if(W==="b")return{type:"message",data:TK(J.substring(1),Y)};if(!w6.PACKET_TYPES_REVERSE[W])return w6.ERROR_PACKET;return J.length>1?{type:w6.PACKET_TYPES_REVERSE[W],data:J.substring(1)}:{type:w6.PACKET_TYPES_REVERSE[W]}};j6.decodePacket=QK;var TK=(J,Y)=>{if(CK){let W=(0,PK.decode)(J);return qZ(W,Y)}else return{base64:!0,data:J}},qZ=(J,Y)=>{switch(Y){case"blob":if(J instanceof Blob)return J;else return new Blob([J]);case"arraybuffer":default:if(J instanceof ArrayBuffer)return J;else return J.buffer}}});var S8=a((k0)=>{Object.defineProperty(k0,"__esModule",{value:!0});k0.decodePayload=k0.decodePacket=k0.encodePayload=k0.encodePacket=k0.protocol=void 0;k0.createPacketEncoderStream=IK;k0.createPacketDecoderStream=wK;var cJ=$Z();Object.defineProperty(k0,"encodePacket",{enumerable:!0,get:function(){return cJ.encodePacket}});var dJ=HZ();Object.defineProperty(k0,"decodePacket",{enumerable:!0,get:function(){return dJ.decodePacket}});var BZ=I6(),NZ=String.fromCharCode(30),LK=(J,Y)=>{let W=J.length,z=Array(W),V=0;J.forEach((H,E)=>{(0,cJ.encodePacket)(H,!1,(_)=>{if(z[E]=_,++V===W)Y(z.join(NZ))})})};k0.encodePayload=LK;var DK=(J,Y)=>{let W=J.split(NZ),z=[];for(let V=0;V{let z=W.length,V;if(z<126)V=new Uint8Array(1),new DataView(V.buffer).setUint8(0,z);else if(z<65536){V=new Uint8Array(3);let H=new DataView(V.buffer);H.setUint8(0,126),H.setUint16(1,z)}else{V=new Uint8Array(9);let H=new DataView(V.buffer);H.setUint8(0,127),H.setBigUint64(1,BigInt(z))}if(J.data&&typeof J.data!=="string")V[0]|=128;Y.enqueue(V),Y.enqueue(W)})}})}var uJ;function x6(J){return J.reduce((Y,W)=>Y+W.length,0)}function k6(J,Y){if(J[0].length===Y)return J.shift();let W=new Uint8Array(Y),z=0;for(let V=0;VMath.pow(2,21)-1){_.enqueue(BZ.ERROR_PACKET);break}V=G*Math.pow(2,32)+w.getUint32(4),z=3}else{if(x6(W)J){_.enqueue(BZ.ERROR_PACKET);break}}}})}k0.protocol=4});var d1=a((OZ)=>{OZ.Emitter=L0;function L0(J){if(J)return jK(J)}function jK(J){for(var Y in L0.prototype)J[Y]=L0.prototype[Y];return J}L0.prototype.on=L0.prototype.addEventListener=function(J,Y){return this._callbacks=this._callbacks||{},(this._callbacks["$"+J]=this._callbacks["$"+J]||[]).push(Y),this};L0.prototype.once=function(J,Y){function W(){this.off(J,W),Y.apply(this,arguments)}return W.fn=Y,this.on(J,W),this};L0.prototype.off=L0.prototype.removeListener=L0.prototype.removeAllListeners=L0.prototype.removeEventListener=function(J,Y){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var W=this._callbacks["$"+J];if(!W)return this;if(arguments.length==1)return delete this._callbacks["$"+J],this;var z;for(var V=0;V{Object.defineProperty(O1,"__esModule",{value:!0});O1.defaultBinaryType=O1.globalThisShim=O1.nextTick=void 0;O1.createCookieJar=xK;O1.nextTick=(()=>{if(typeof Promise==="function"&&typeof Promise.resolve==="function")return(Y)=>Promise.resolve().then(Y);else return(Y,W)=>W(Y,0)})();O1.globalThisShim=(()=>{if(typeof self<"u")return self;else if(typeof window<"u")return window;else return Function("return this")()})();O1.defaultBinaryType="arraybuffer";function xK(){}});var l1=a((P8)=>{Object.defineProperty(P8,"__esModule",{value:!0});P8.pick=kK;P8.installTimerFunctions=hK;P8.byteLength=fK;P8.randomString=mK;var L1=i1();function kK(J,...Y){return Y.reduce((W,z)=>{if(J.hasOwnProperty(z))W[z]=J[z];return W},{})}var vK=L1.globalThisShim.setTimeout,bK=L1.globalThisShim.clearTimeout;function hK(J,Y){if(Y.useNativeTimers)J.setTimeoutFn=vK.bind(L1.globalThisShim),J.clearTimeoutFn=bK.bind(L1.globalThisShim);else J.setTimeoutFn=L1.globalThisShim.setTimeout.bind(L1.globalThisShim),J.clearTimeoutFn=L1.globalThisShim.clearTimeout.bind(L1.globalThisShim)}var yK=1.33;function fK(J){if(typeof J==="string")return gK(J);return Math.ceil((J.byteLength||J.size)*yK)}function gK(J){let Y=0,W=0;for(let z=0,V=J.length;z=57344)W+=3;else z++,W+=4;return W}function mK(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}});var iJ=a((v6)=>{Object.defineProperty(v6,"__esModule",{value:!0});v6.encode=pK;v6.decode=uK;function pK(J){let Y="";for(let W in J)if(J.hasOwnProperty(W)){if(Y.length)Y+="&";Y+=encodeURIComponent(W)+"="+encodeURIComponent(J[W])}return Y}function uK(J){let Y={},W=J.split("&");for(let z=0,V=W.length;z{var C8=1000,Q8=C8*60,T8=Q8*60,n1=T8*24,cK=n1*7,dK=n1*365.25;RZ.exports=function(J,Y){Y=Y||{};var W=typeof J;if(W==="string"&&J.length>0)return iK(J);else if(W==="number"&&isFinite(J))return Y.long?nK(J):lK(J);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(J))};function iK(J){if(J=String(J),J.length>100)return;var Y=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(J);if(!Y)return;var W=parseFloat(Y[1]),z=(Y[2]||"ms").toLowerCase();switch(z){case"years":case"year":case"yrs":case"yr":case"y":return W*dK;case"weeks":case"week":case"w":return W*cK;case"days":case"day":case"d":return W*n1;case"hours":case"hour":case"hrs":case"hr":case"h":return W*T8;case"minutes":case"minute":case"mins":case"min":case"m":return W*Q8;case"seconds":case"second":case"secs":case"sec":case"s":return W*C8;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return W;default:return}}function lK(J){var Y=Math.abs(J);if(Y>=n1)return Math.round(J/n1)+"d";if(Y>=T8)return Math.round(J/T8)+"h";if(Y>=Q8)return Math.round(J/Q8)+"m";if(Y>=C8)return Math.round(J/C8)+"s";return J+"ms"}function nK(J){var Y=Math.abs(J);if(Y>=n1)return b6(J,Y,n1,"day");if(Y>=T8)return b6(J,Y,T8,"hour");if(Y>=Q8)return b6(J,Y,Q8,"minute");if(Y>=C8)return b6(J,Y,C8,"second");return J+" ms"}function b6(J,Y,W,z){var V=Y>=W*1.5;return Math.round(J/W)+" "+z+(V?"s":"")}});var AZ=a((hG,_Z)=>{function sK(J){W.debug=W,W.default=W,W.coerce=A,W.disable=H,W.enable=V,W.enabled=E,W.humanize=h6(),W.destroy=w,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let O=0;O{if(F==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];F=s.call(T,r),C.splice(u,1),u--}return F}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(O!==null)return O;if(M!==W.namespaces)M=W.namespaces,L=W.enabled(G);return L},set:(C)=>{O=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let O=W(this.namespace+(typeof U>"u"?":":U)+G);return O.log=this.log,O}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U,O=(typeof G==="string"?G:"").split(/[\s,]+/),M=O.length;for(U=0;U"-"+U)].join(",");return W.enable(""),G}function E(G){if(G[G.length-1]==="*")return!0;let U,O;for(U=0,O=W.skips.length;U{f0.formatArgs=aK;f0.save=tK;f0.load=oK;f0.useColors=rK;f0.storage=eK();f0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();f0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function rK(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function aK(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+y6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}f0.log=console.debug||console.log||(()=>{});function tK(J){try{if(J)f0.storage.setItem("debug",J);else f0.storage.removeItem("debug")}catch(Y){}}function oK(){let J;try{J=f0.storage.getItem("debug")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function eK(){try{return localStorage}catch(J){}}y6.exports=AZ()(f0);var{formatters:J5}=y6.exports;J5.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var t8=a((D1)=>{var Y5=D1&&D1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(D1,"__esModule",{value:!0});D1.Transport=D1.TransportError=void 0;var Z5=S8(),W5=d1(),K5=l1(),z5=iJ(),G5=Y5(s1()),X5=(0,G5.default)("engine.io-client:transport");class lJ extends Error{constructor(J,Y,W){super(J);this.description=Y,this.context=W,this.type="TransportError"}}D1.TransportError=lJ;class EZ extends W5.Emitter{constructor(J){super();this.writable=!1,(0,K5.installTimerFunctions)(this,J),this.opts=J,this.query=J.query,this.socket=J.socket,this.supportsBinary=!J.forceBase64}onError(J,Y,W){return super.emitReserved("error",new lJ(J,Y,W)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){if(this.readyState==="opening"||this.readyState==="open")this.doClose(),this.onClose();return this}send(J){if(this.readyState==="open")this.write(J);else X5("transport is not open, discarding packets")}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(J){let Y=(0,Z5.decodePacket)(J,this.socket.binaryType);this.onPacket(Y)}onPacket(J){super.emitReserved("packet",J)}onClose(J){this.readyState="closed",super.emitReserved("close",J)}pause(J){}createUri(J,Y={}){return J+"://"+this._hostname()+this._port()+this.opts.path+this._query(Y)}_hostname(){let J=this.opts.hostname;return J.indexOf(":")===-1?J:"["+J+"]"}_port(){if(this.opts.port&&(this.opts.secure&&Number(this.opts.port!==443)||!this.opts.secure&&Number(this.opts.port)!==80))return":"+this.opts.port;else return""}_query(J){let Y=(0,z5.encode)(J);return Y.length?"?"+Y:""}}D1.Transport=EZ});var nJ=a((L8)=>{var U5=L8&&L8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(L8,"__esModule",{value:!0});L8.Polling=void 0;var V5=t8(),$5=l1(),MZ=S8(),F5=U5(s1()),r0=(0,F5.default)("engine.io-client:polling");class SZ extends V5.Transport{constructor(){super(...arguments);this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(J){this.readyState="pausing";let Y=()=>{r0("paused"),this.readyState="paused",J()};if(this._polling||!this.writable){let W=0;if(this._polling)r0("we are currently polling - waiting to pause"),W++,this.once("pollComplete",function(){r0("pre-pause polling complete"),--W||Y()});if(!this.writable)r0("we are currently writing - waiting to pause"),W++,this.once("drain",function(){r0("pre-pause writing complete"),--W||Y()})}else Y()}_poll(){r0("polling"),this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(J){r0("polling got data %s",J);let Y=(W)=>{if(this.readyState==="opening"&&W.type==="open")this.onOpen();if(W.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(W)};if((0,MZ.decodePayload)(J,this.socket.binaryType).forEach(Y),this.readyState!=="closed")if(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open")this._poll();else r0('ignoring poll - transport state "%s"',this.readyState)}doClose(){let J=()=>{r0("writing close packet"),this.write([{type:"close"}])};if(this.readyState==="open")r0("transport open - closing"),J();else r0("transport not open - deferring close"),this.once("open",J)}write(J){this.writable=!1,(0,MZ.encodePayload)(J,(Y)=>{this.doWrite(Y,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){let J=this.opts.secure?"https":"http",Y=this.query||{};if(this.opts.timestampRequests!==!1)Y[this.opts.timestampParam]=(0,$5.randomString)();if(!this.supportsBinary&&!Y.sid)Y.b64=1;return this.createUri(J,Y)}}L8.Polling=SZ});var CZ=a((f6)=>{Object.defineProperty(f6,"__esModule",{value:!0});f6.hasCORS=void 0;var PZ=!1;try{PZ=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch(J){}f6.hasCORS=PZ});var g6=a((X1)=>{var q5=X1&&X1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(X1,"__esModule",{value:!0});X1.XHR=X1.Request=X1.BaseXHR=void 0;var H5=nJ(),B5=d1(),QZ=l1(),LZ=i1(),N5=CZ(),O5=q5(s1()),sJ=(0,O5.default)("engine.io-client:polling");function R5(){}class rJ extends H5.Polling{constructor(J){super(J);if(typeof location<"u"){let Y=location.protocol==="https:",W=location.port;if(!W)W=Y?"443":"80";this.xd=typeof location<"u"&&J.hostname!==location.hostname||W!==J.port}}doWrite(J,Y){let W=this.request({method:"POST",data:J});W.on("success",Y),W.on("error",(z,V)=>{this.onError("xhr post error",z,V)})}doPoll(){sJ("xhr poll");let J=this.request();J.on("data",this.onData.bind(this)),J.on("error",(Y,W)=>{this.onError("xhr poll error",Y,W)}),this.pollXhr=J}}X1.BaseXHR=rJ;class a0 extends B5.Emitter{constructor(J,Y,W){super();this.createRequest=J,(0,QZ.installTimerFunctions)(this,W),this._opts=W,this._method=W.method||"GET",this._uri=Y,this._data=W.data!==void 0?W.data:null,this._create()}_create(){var J;let Y=(0,QZ.pick)(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");Y.xdomain=!!this._opts.xd;let W=this._xhr=this.createRequest(Y);try{sJ("xhr open %s: %s",this._method,this._uri),W.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){W.setDisableHeaderCheck&&W.setDisableHeaderCheck(!0);for(let z in this._opts.extraHeaders)if(this._opts.extraHeaders.hasOwnProperty(z))W.setRequestHeader(z,this._opts.extraHeaders[z])}}catch(z){}if(this._method==="POST")try{W.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(z){}try{W.setRequestHeader("Accept","*/*")}catch(z){}if((J=this._opts.cookieJar)===null||J===void 0||J.addCookies(W),"withCredentials"in W)W.withCredentials=this._opts.withCredentials;if(this._opts.requestTimeout)W.timeout=this._opts.requestTimeout;W.onreadystatechange=()=>{var z;if(W.readyState===3)(z=this._opts.cookieJar)===null||z===void 0||z.parseCookies(W.getResponseHeader("set-cookie"));if(W.readyState!==4)return;if(W.status===200||W.status===1223)this._onLoad();else this.setTimeoutFn(()=>{this._onError(typeof W.status==="number"?W.status:0)},0)},sJ("xhr data %s",this._data),W.send(this._data)}catch(z){this.setTimeoutFn(()=>{this._onError(z)},0);return}if(typeof document<"u")this._index=a0.requestsCount++,a0.requests[this._index]=this}_onError(J){this.emitReserved("error",J,this._xhr),this._cleanup(!0)}_cleanup(J){if(typeof this._xhr>"u"||this._xhr===null)return;if(this._xhr.onreadystatechange=R5,J)try{this._xhr.abort()}catch(Y){}if(typeof document<"u")delete a0.requests[this._index];this._xhr=null}_onLoad(){let J=this._xhr.responseText;if(J!==null)this.emitReserved("data",J),this.emitReserved("success"),this._cleanup()}abort(){this._cleanup()}}X1.Request=a0;a0.requestsCount=0;a0.requests={};if(typeof document<"u"){if(typeof attachEvent==="function")attachEvent("onunload",TZ);else if(typeof addEventListener==="function"){let J="onpagehide"in LZ.globalThisShim?"pagehide":"unload";addEventListener(J,TZ,!1)}}function TZ(){for(let J in a0.requests)if(a0.requests.hasOwnProperty(J))a0.requests[J].abort()}var _5=function(){let J=IZ({xdomain:!1});return J&&J.responseType!==null}();class DZ extends rJ{constructor(J){super(J);let Y=J&&J.forceBase64;this.supportsBinary=_5&&!Y}request(J={}){return Object.assign(J,{xd:this.xd},this.opts),new a0(IZ,this.uri(),J)}}X1.XHR=DZ;function IZ(J){let Y=J.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!Y||N5.hasCORS))return new XMLHttpRequest}catch(W){}if(!Y)try{return new LZ.globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch(W){}}});var m6=a((I1)=>{var A5=I1&&I1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(I1,"__esModule",{value:!0});I1.WS=I1.BaseWS=void 0;var E5=t8(),wZ=l1(),M5=S8(),tJ=i1(),S5=A5(s1()),P5=(0,S5.default)("engine.io-client:websocket"),jZ=typeof navigator<"u"&&typeof navigator.product==="string"&&navigator.product.toLowerCase()==="reactnative";class oJ extends E5.Transport{get name(){return"websocket"}doOpen(){let J=this.uri(),Y=this.opts.protocols,W=jZ?{}:(0,wZ.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");if(this.opts.extraHeaders)W.headers=this.opts.extraHeaders;try{this.ws=this.createSocket(J,Y,W)}catch(z){return this.emitReserved("error",z)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{if(this.opts.autoUnref)this.ws._socket.unref();this.onOpen()},this.ws.onclose=(J)=>this.onClose({description:"websocket connection closed",context:J}),this.ws.onmessage=(J)=>this.onData(J.data),this.ws.onerror=(J)=>this.onError("websocket error",J)}write(J){this.writable=!1;for(let Y=0;Y{try{this.doWrite(W,V)}catch(H){P5("websocket closed before onclose event")}if(z)(0,tJ.nextTick)(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){if(typeof this.ws<"u")this.ws.onerror=()=>{},this.ws.close(),this.ws=null}uri(){let J=this.opts.secure?"wss":"ws",Y=this.query||{};if(this.opts.timestampRequests)Y[this.opts.timestampParam]=(0,wZ.randomString)();if(!this.supportsBinary)Y.b64=1;return this.createUri(J,Y)}}I1.BaseWS=oJ;var aJ=tJ.globalThisShim.WebSocket||tJ.globalThisShim.MozWebSocket;class xZ extends oJ{createSocket(J,Y,W){return!jZ?Y?new aJ(J,Y):new aJ(J):new aJ(J,Y,W)}doWrite(J,Y){this.ws.send(Y)}}I1.WS=xZ});var eJ=a((D8)=>{var C5=D8&&D8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(D8,"__esModule",{value:!0});D8.WT=void 0;var Q5=t8(),T5=i1(),kZ=S8(),L5=C5(s1()),o8=(0,L5.default)("engine.io-client:webtransport");class vZ extends Q5.Transport{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(J){return this.emitReserved("error",J)}this._transport.closed.then(()=>{o8("transport closed gracefully"),this.onClose()}).catch((J)=>{o8("transport closed due to %s",J),this.onError("webtransport error",J)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then((J)=>{let Y=(0,kZ.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),W=J.readable.pipeThrough(Y).getReader(),z=(0,kZ.createPacketEncoderStream)();z.readable.pipeTo(J.writable),this._writer=z.writable.getWriter();let V=()=>{W.read().then(({done:E,value:_})=>{if(E){o8("session is closed");return}o8("received chunk: %o",_),this.onPacket(_),V()}).catch((E)=>{o8("an error occurred while reading: %s",E)})};V();let H={type:"open"};if(this.query.sid)H.data=`{"sid":"${this.query.sid}"}`;this._writer.write(H).then(()=>this.onOpen())})})}write(J){this.writable=!1;for(let Y=0;Y{if(z)(0,T5.nextTick)(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var J;(J=this._transport)===null||J===void 0||J.close()}}D8.WT=vZ});var JY=a((p6)=>{Object.defineProperty(p6,"__esModule",{value:!0});p6.transports=void 0;var D5=g6(),I5=m6(),w5=eJ();p6.transports={websocket:I5.WS,webtransport:w5.WT,polling:D5.XHR}});var ZY=a((YY)=>{Object.defineProperty(YY,"__esModule",{value:!0});YY.parse=k5;var j5=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,x5=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function k5(J){if(J.length>8000)throw"URI too long";let Y=J,W=J.indexOf("["),z=J.indexOf("]");if(W!=-1&&z!=-1)J=J.substring(0,W)+J.substring(W,z).replace(/:/g,";")+J.substring(z,J.length);let V=j5.exec(J||""),H={},E=14;while(E--)H[x5[E]]=V[E]||"";if(W!=-1&&z!=-1)H.source=Y,H.host=H.host.substring(1,H.host.length-1).replace(/;/g,":"),H.authority=H.authority.replace("[","").replace("]","").replace(/;/g,":"),H.ipv6uri=!0;return H.pathNames=v5(H,H.path),H.queryKey=b5(H,H.query),H}function v5(J,Y){let W=/\/{2,9}/g,z=Y.replace(W,"/").split("/");if(Y.slice(0,1)=="/"||Y.length===0)z.splice(0,1);if(Y.slice(-1)=="/")z.splice(z.length-1,1);return z}function b5(J,Y){let W={};return Y.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(z,V,H){if(V)W[V]=H}),W}});var GY=a((U1)=>{var h5=U1&&U1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(U1,"__esModule",{value:!0});U1.Socket=U1.SocketWithUpgrade=U1.SocketWithoutUpgrade=void 0;var y5=JY(),bZ=l1(),f5=iJ(),hZ=ZY(),g5=d1(),yZ=S8(),WY=i1(),m5=h5(s1()),X0=(0,m5.default)("engine.io-client:socket"),KY=typeof addEventListener==="function"&&typeof removeEventListener==="function",e8=[];if(KY)addEventListener("offline",()=>{X0("closing %d connection(s) because the network was lost",e8.length),e8.forEach((J)=>J())},!1);class R1 extends g5.Emitter{constructor(J,Y){super();if(this.binaryType=WY.defaultBinaryType,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,J&&typeof J==="object")Y=J,J=null;if(J){let W=(0,hZ.parse)(J);if(Y.hostname=W.host,Y.secure=W.protocol==="https"||W.protocol==="wss",Y.port=W.port,W.query)Y.query=W.query}else if(Y.host)Y.hostname=(0,hZ.parse)(Y.host).host;if((0,bZ.installTimerFunctions)(this,Y),this.secure=Y.secure!=null?Y.secure:typeof location<"u"&&location.protocol==="https:",Y.hostname&&!Y.port)Y.port=this.secure?"443":"80";if(this.hostname=Y.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=Y.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},Y.transports.forEach((W)=>{let z=W.prototype.name;this.transports.push(z),this._transportsByName[z]=W}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},Y),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query==="string")this.opts.query=(0,f5.decode)(this.opts.query);if(KY){if(this.opts.closeOnBeforeunload)this._beforeunloadEventListener=()=>{if(this.transport)this.transport.removeAllListeners(),this.transport.close()},addEventListener("beforeunload",this._beforeunloadEventListener,!1);if(this.hostname!=="localhost")X0("adding listener for the 'offline' event"),this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},e8.push(this._offlineEventListener)}if(this.opts.withCredentials)this._cookieJar=(0,WY.createCookieJar)();this._open()}createTransport(J){X0('creating transport "%s"',J);let Y=Object.assign({},this.opts.query);if(Y.EIO=yZ.protocol,Y.transport=J,this.id)Y.sid=this.id;let W=Object.assign({},this.opts,{query:Y,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[J]);return X0("options: %j",W),new this._transportsByName[J](W)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}let J=this.opts.rememberUpgrade&&R1.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";let Y=this.createTransport(J);Y.open(),this.setTransport(Y)}setTransport(J){if(X0("setting transport %s",J.name),this.transport)X0("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners();this.transport=J,J.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",(Y)=>this._onClose("transport close",Y))}onOpen(){X0("socket open"),this.readyState="open",R1.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(J){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(X0('socket receive: type "%s", data "%s"',J.type,J.data),this.emitReserved("packet",J),this.emitReserved("heartbeat"),J.type){case"open":this.onHandshake(JSON.parse(J.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let Y=Error("server error");Y.code=J.data,this._onError(Y);break;case"message":this.emitReserved("data",J.data),this.emitReserved("message",J.data);break}else X0('packet received with socket readyState "%s"',this.readyState)}onHandshake(J){if(this.emitReserved("handshake",J),this.id=J.sid,this.transport.query.sid=J.sid,this._pingInterval=J.pingInterval,this._pingTimeout=J.pingTimeout,this._maxPayload=J.maxPayload,this.onOpen(),this.readyState==="closed")return;this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let J=this._pingInterval+this._pingTimeout;if(this._pingTimeoutTime=Date.now()+J,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},J),this.opts.autoUnref)this._pingTimeoutTimer.unref()}_onDrain(){if(this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0)this.emitReserved("drain");else this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let J=this._getWritablePackets();X0("flushing %d packets in socket",J.length),this.transport.send(J),this._prevBufferLen=J.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let Y=1;for(let W=0;W0&&Y>this._maxPayload)return X0("only send %d out of %d packets",W,this.writeBuffer.length),this.writeBuffer.slice(0,W);Y+=2}return X0("payload size is %d (max: %d)",Y,this._maxPayload),this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let J=Date.now()>this._pingTimeoutTime;if(J)X0("throttled timer detected, scheduling connection close"),this._pingTimeoutTime=0,(0,WY.nextTick)(()=>{this._onClose("ping timeout")},this.setTimeoutFn);return J}write(J,Y,W){return this._sendPacket("message",J,Y,W),this}send(J,Y,W){return this._sendPacket("message",J,Y,W),this}_sendPacket(J,Y,W,z){if(typeof Y==="function")z=Y,Y=void 0;if(typeof W==="function")z=W,W=null;if(this.readyState==="closing"||this.readyState==="closed")return;W=W||{},W.compress=W.compress!==!1;let V={type:J,data:Y,options:W};if(this.emitReserved("packetCreate",V),this.writeBuffer.push(V),z)this.once("flush",z);this.flush()}close(){let J=()=>{this._onClose("forced close"),X0("socket closing - telling transport to close"),this.transport.close()},Y=()=>{this.off("upgrade",Y),this.off("upgradeError",Y),J()},W=()=>{this.once("upgrade",Y),this.once("upgradeError",Y)};if(this.readyState==="opening"||this.readyState==="open")if(this.readyState="closing",this.writeBuffer.length)this.once("drain",()=>{if(this.upgrading)W();else J()});else if(this.upgrading)W();else J();return this}_onError(J){if(X0("socket error %j",J),R1.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return X0("trying next transport"),this.transports.shift(),this._open();this.emitReserved("error",J),this._onClose("transport error",J)}_onClose(J,Y){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(X0('socket close with reason: "%s"',J),this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),KY){if(this._beforeunloadEventListener)removeEventListener("beforeunload",this._beforeunloadEventListener,!1);if(this._offlineEventListener){let W=e8.indexOf(this._offlineEventListener);if(W!==-1)X0("removing listener for the 'offline' event"),e8.splice(W,1)}}this.readyState="closed",this.id=null,this.emitReserved("close",J,Y),this.writeBuffer=[],this._prevBufferLen=0}}}U1.SocketWithoutUpgrade=R1;R1.protocol=yZ.protocol;class zY extends R1{constructor(){super(...arguments);this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade){X0("starting upgrade probes");for(let J=0;J{if(W)return;X0('probe transport "%s" opened',J),Y.send([{type:"ping",data:"probe"}]),Y.once("packet",(G)=>{if(W)return;if(G.type==="pong"&&G.data==="probe"){if(X0('probe transport "%s" pong',J),this.upgrading=!0,this.emitReserved("upgrading",Y),!Y)return;R1.priorWebsocketSuccess=Y.name==="websocket",X0('pausing current transport "%s"',this.transport.name),this.transport.pause(()=>{if(W)return;if(this.readyState==="closed")return;X0("changing transport and sending upgrade packet"),w(),this.setTransport(Y),Y.send([{type:"upgrade"}]),this.emitReserved("upgrade",Y),Y=null,this.upgrading=!1,this.flush()})}else{X0('probe transport "%s" failed',J);let U=Error("probe error");U.transport=Y.name,this.emitReserved("upgradeError",U)}})};function V(){if(W)return;W=!0,w(),Y.close(),Y=null}let H=(G)=>{let U=Error("probe error: "+G);U.transport=Y.name,V(),X0('probe transport "%s" failed because of error: %s',J,G),this.emitReserved("upgradeError",U)};function E(){H("transport closed")}function _(){H("socket closed")}function A(G){if(Y&&G.name!==Y.name)X0('"%s" works - aborting "%s"',G.name,Y.name),V()}let w=()=>{Y.removeListener("open",z),Y.removeListener("error",H),Y.removeListener("close",E),this.off("close",_),this.off("upgrading",A)};if(Y.once("open",z),Y.once("error",H),Y.once("close",E),this.once("close",_),this.once("upgrading",A),this._upgrades.indexOf("webtransport")!==-1&&J!=="webtransport")this.setTimeoutFn(()=>{if(!W)Y.open()},200);else Y.open()}onHandshake(J){this._upgrades=this._filterUpgrades(J.upgrades),super.onHandshake(J)}_filterUpgrades(J){let Y=[];for(let W=0;Wy5.transports[z]).filter((z)=>!!z);super(J,W)}}U1.Socket=fZ});var mZ=a((u6)=>{Object.defineProperty(u6,"__esModule",{value:!0});u6.Fetch=void 0;var p5=nJ();class gZ extends p5.Polling{doPoll(){this._fetch().then((J)=>{if(!J.ok)return this.onError("fetch read error",J.status,J);J.text().then((Y)=>this.onData(Y))}).catch((J)=>{this.onError("fetch read error",J)})}doWrite(J,Y){this._fetch(J).then((W)=>{if(!W.ok)return this.onError("fetch write error",W.status,W);Y()}).catch((W)=>{this.onError("fetch write error",W)})}_fetch(J){var Y;let W=J!==void 0,z=new Headers(this.opts.extraHeaders);if(W)z.set("content-type","text/plain;charset=UTF-8");return(Y=this.socket._cookieJar)===null||Y===void 0||Y.appendCookies(z),fetch(this.uri(),{method:W?"POST":"GET",body:W?J:null,headers:z,credentials:this.opts.withCredentials?"include":"omit"}).then((V)=>{var H;return(H=this.socket._cookieJar)===null||H===void 0||H.parseCookies(V.headers.getSetCookie()),V})}}u6.Fetch=gZ});var c6=a((o)=>{Object.defineProperty(o,"__esModule",{value:!0});o.WebTransport=o.WebSocket=o.NodeWebSocket=o.XHR=o.NodeXHR=o.Fetch=o.nextTick=o.parse=o.installTimerFunctions=o.transports=o.TransportError=o.Transport=o.protocol=o.SocketWithUpgrade=o.SocketWithoutUpgrade=o.Socket=void 0;var pZ=GY();Object.defineProperty(o,"Socket",{enumerable:!0,get:function(){return pZ.Socket}});var uZ=GY();Object.defineProperty(o,"SocketWithoutUpgrade",{enumerable:!0,get:function(){return uZ.SocketWithoutUpgrade}});Object.defineProperty(o,"SocketWithUpgrade",{enumerable:!0,get:function(){return uZ.SocketWithUpgrade}});o.protocol=pZ.Socket.protocol;var cZ=t8();Object.defineProperty(o,"Transport",{enumerable:!0,get:function(){return cZ.Transport}});Object.defineProperty(o,"TransportError",{enumerable:!0,get:function(){return cZ.TransportError}});var u5=JY();Object.defineProperty(o,"transports",{enumerable:!0,get:function(){return u5.transports}});var c5=l1();Object.defineProperty(o,"installTimerFunctions",{enumerable:!0,get:function(){return c5.installTimerFunctions}});var d5=ZY();Object.defineProperty(o,"parse",{enumerable:!0,get:function(){return d5.parse}});var i5=i1();Object.defineProperty(o,"nextTick",{enumerable:!0,get:function(){return i5.nextTick}});var l5=mZ();Object.defineProperty(o,"Fetch",{enumerable:!0,get:function(){return l5.Fetch}});var n5=g6();Object.defineProperty(o,"NodeXHR",{enumerable:!0,get:function(){return n5.XHR}});var s5=g6();Object.defineProperty(o,"XHR",{enumerable:!0,get:function(){return s5.XHR}});var r5=m6();Object.defineProperty(o,"NodeWebSocket",{enumerable:!0,get:function(){return r5.WS}});var a5=m6();Object.defineProperty(o,"WebSocket",{enumerable:!0,get:function(){return a5.WS}});var t5=eJ();Object.defineProperty(o,"WebTransport",{enumerable:!0,get:function(){return t5.WT}})});var iZ=a((sG,dZ)=>{function o5(J){W.debug=W,W.default=W,W.coerce=A,W.disable=E,W.enable=V,W.enabled=_,W.humanize=h6(),W.destroy=w,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let O=0;O{if(F==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];F=s.call(T,r),C.splice(u,1),u--}return F}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(O!==null)return O;if(M!==W.namespaces)M=W.namespaces,L=W.enabled(G);return L},set:(C)=>{O=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let O=W(this.namespace+(typeof U>"u"?":":U)+G);return O.log=this.log,O}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U=(typeof G==="string"?G:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let O of U)if(O[0]==="-")W.skips.push(O.slice(1));else W.names.push(O)}function H(G,U){let O=0,M=0,L=-1,Q=0;while(O"-"+U)].join(",");return W.enable(""),G}function _(G){for(let U of W.skips)if(H(G,U))return!1;for(let U of W.names)if(H(G,U))return!0;return!1}function A(G){if(G instanceof Error)return G.stack||G.message;return G}function w(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return W.enable(W.load()),W}dZ.exports=o5});var J6=a((v0,d6)=>{v0.formatArgs=Jz;v0.save=Yz;v0.load=Zz;v0.useColors=e5;v0.storage=Wz();v0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();v0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function e5(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Jz(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+d6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}v0.log=console.debug||console.log||(()=>{});function Yz(J){try{if(J)v0.storage.setItem("debug",J);else v0.storage.removeItem("debug")}catch(Y){}}function Zz(){let J;try{J=v0.storage.getItem("debug")||v0.storage.getItem("DEBUG")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function Wz(){try{return localStorage}catch(J){}}d6.exports=iZ()(v0);var{formatters:Kz}=d6.exports;Kz.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var nZ=a((Y6)=>{var zz=Y6&&Y6.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(Y6,"__esModule",{value:!0});Y6.url=Uz;var Gz=c6(),Xz=zz(J6()),lZ=(0,Xz.default)("socket.io-client:url");function Uz(J,Y="",W){let z=J;if(W=W||typeof location<"u"&&location,J==null)J=W.protocol+"//"+W.host;if(typeof J==="string"){if(J.charAt(0)==="/")if(J.charAt(1)==="/")J=W.protocol+J;else J=W.host+J;if(!/^(https?|wss?):\/\//.test(J))if(lZ("protocol-less url %s",J),typeof W<"u")J=W.protocol+"//"+J;else J="https://"+J;lZ("parse %s",J),z=(0,Gz.parse)(J)}if(!z.port){if(/^(http|ws)$/.test(z.protocol))z.port="80";else if(/^(http|ws)s$/.test(z.protocol))z.port="443"}z.path=z.path||"/";let H=z.host.indexOf(":")!==-1?"["+z.host+"]":z.host;return z.id=z.protocol+"://"+H+":"+z.port+Y,z.href=z.protocol+"://"+H+(W&&W.port===z.port?"":":"+z.port),z}});var XY=a((I8)=>{Object.defineProperty(I8,"__esModule",{value:!0});I8.hasBinary=I8.isBinary=void 0;var Vz=typeof ArrayBuffer==="function",$z=(J)=>{return typeof ArrayBuffer.isView==="function"?ArrayBuffer.isView(J):J.buffer instanceof ArrayBuffer},sZ=Object.prototype.toString,Fz=typeof Blob==="function"||typeof Blob<"u"&&sZ.call(Blob)==="[object BlobConstructor]",qz=typeof File==="function"||typeof File<"u"&&sZ.call(File)==="[object FileConstructor]";function rZ(J){return Vz&&(J instanceof ArrayBuffer||$z(J))||Fz&&J instanceof Blob||qz&&J instanceof File}I8.isBinary=rZ;function i6(J,Y){if(!J||typeof J!=="object")return!1;if(Array.isArray(J)){for(let W=0,z=J.length;W{Object.defineProperty(w8,"__esModule",{value:!0});w8.reconstructPacket=w8.deconstructPacket=void 0;var Hz=XY();function Bz(J){let Y=[],W=J.data,z=J;return z.data=UY(W,Y),z.attachments=Y.length,{packet:z,buffers:Y}}w8.deconstructPacket=Bz;function UY(J,Y){if(!J)return J;if((0,Hz.isBinary)(J)){let W={_placeholder:!0,num:Y.length};return Y.push(J),W}else if(Array.isArray(J)){let W=Array(J.length);for(let z=0;z=0&&J.num{function Oz(J){W.debug=W,W.default=W,W.coerce=A,W.disable=H,W.enable=V,W.enabled=E,W.humanize=h6(),W.destroy=w,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let O=0;O{if(F==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];F=s.call(T,r),C.splice(u,1),u--}return F}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(O!==null)return O;if(M!==W.namespaces)M=W.namespaces,L=W.enabled(G);return L},set:(C)=>{O=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let O=W(this.namespace+(typeof U>"u"?":":U)+G);return O.log=this.log,O}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U,O=(typeof G==="string"?G:"").split(/[\s,]+/),M=O.length;for(U=0;U"-"+U)].join(",");return W.enable(""),G}function E(G){if(G[G.length-1]==="*")return!0;let U,O;for(U=0,O=W.skips.length;U{g0.formatArgs=_z;g0.save=Az;g0.load=Ez;g0.useColors=Rz;g0.storage=Mz();g0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();g0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Rz(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function _z(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+l6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}g0.log=console.debug||console.log||(()=>{});function Az(J){try{if(J)g0.storage.setItem("debug",J);else g0.storage.removeItem("debug")}catch(Y){}}function Ez(){let J;try{J=g0.storage.getItem("debug")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function Mz(){try{return localStorage}catch(J){}}l6.exports=oZ()(g0);var{formatters:Sz}=l6.exports;Sz.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var n6=a((t0)=>{Object.defineProperty(t0,"__esModule",{value:!0});t0.Decoder=t0.Encoder=t0.PacketType=t0.protocol=void 0;var Pz=d1(),Y3=aZ(),Z3=XY(),Cz=eZ(),$Y=(0,Cz.default)("socket.io-parser"),Qz=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];t0.protocol=5;var H0;(function(J){J[J.CONNECT=0]="CONNECT",J[J.DISCONNECT=1]="DISCONNECT",J[J.EVENT=2]="EVENT",J[J.ACK=3]="ACK",J[J.CONNECT_ERROR=4]="CONNECT_ERROR",J[J.BINARY_EVENT=5]="BINARY_EVENT",J[J.BINARY_ACK=6]="BINARY_ACK"})(H0=t0.PacketType||(t0.PacketType={}));class W3{constructor(J){this.replacer=J}encode(J){if($Y("encoding packet %j",J),J.type===H0.EVENT||J.type===H0.ACK){if((0,Z3.hasBinary)(J))return this.encodeAsBinary({type:J.type===H0.EVENT?H0.BINARY_EVENT:H0.BINARY_ACK,nsp:J.nsp,data:J.data,id:J.id})}return[this.encodeAsString(J)]}encodeAsString(J){let Y=""+J.type;if(J.type===H0.BINARY_EVENT||J.type===H0.BINARY_ACK)Y+=J.attachments+"-";if(J.nsp&&J.nsp!=="/")Y+=J.nsp+",";if(J.id!=null)Y+=J.id;if(J.data!=null)Y+=JSON.stringify(J.data,this.replacer);return $Y("encoded %j as %s",J,Y),Y}encodeAsBinary(J){let Y=(0,Y3.deconstructPacket)(J),W=this.encodeAsString(Y.packet),z=Y.buffers;return z.unshift(W),z}}t0.Encoder=W3;function J3(J){return Object.prototype.toString.call(J)==="[object Object]"}class FY extends Pz.Emitter{constructor(J){super();this.reviver=J}add(J){let Y;if(typeof J==="string"){if(this.reconstructor)throw Error("got plaintext data when reconstructing a packet");Y=this.decodeString(J);let W=Y.type===H0.BINARY_EVENT;if(W||Y.type===H0.BINARY_ACK){if(Y.type=W?H0.EVENT:H0.ACK,this.reconstructor=new K3(Y),Y.attachments===0)super.emitReserved("decoded",Y)}else super.emitReserved("decoded",Y)}else if((0,Z3.isBinary)(J)||J.base64){if(!this.reconstructor)throw Error("got binary data when not reconstructing a packet");else if(Y=this.reconstructor.takeBinaryData(J),Y)this.reconstructor=null,super.emitReserved("decoded",Y)}else throw Error("Unknown type: "+J)}decodeString(J){let Y=0,W={type:Number(J.charAt(0))};if(H0[W.type]===void 0)throw Error("unknown packet type "+W.type);if(W.type===H0.BINARY_EVENT||W.type===H0.BINARY_ACK){let V=Y+1;while(J.charAt(++Y)!=="-"&&Y!=J.length);let H=J.substring(V,Y);if(H!=Number(H)||J.charAt(Y)!=="-")throw Error("Illegal attachments");W.attachments=Number(H)}if(J.charAt(Y+1)==="/"){let V=Y+1;while(++Y){if(J.charAt(Y)===",")break;if(Y===J.length)break}W.nsp=J.substring(V,Y)}else W.nsp="/";let z=J.charAt(Y+1);if(z!==""&&Number(z)==z){let V=Y+1;while(++Y){let H=J.charAt(Y);if(H==null||Number(H)!=H){--Y;break}if(Y===J.length)break}W.id=Number(J.substring(V,Y+1))}if(J.charAt(++Y)){let V=this.tryParse(J.substr(Y));if(FY.isPayloadValid(W.type,V))W.data=V;else throw Error("invalid payload")}return $Y("decoded %s as %j",J,W),W}tryParse(J){try{return JSON.parse(J,this.reviver)}catch(Y){return!1}}static isPayloadValid(J,Y){switch(J){case H0.CONNECT:return J3(Y);case H0.DISCONNECT:return Y===void 0;case H0.CONNECT_ERROR:return typeof Y==="string"||J3(Y);case H0.EVENT:case H0.BINARY_EVENT:return Array.isArray(Y)&&(typeof Y[0]==="number"||typeof Y[0]==="string"&&Qz.indexOf(Y[0])===-1);case H0.ACK:case H0.BINARY_ACK:return Array.isArray(Y)}}destroy(){if(this.reconstructor)this.reconstructor.finishedReconstruction(),this.reconstructor=null}}t0.Decoder=FY;class K3{constructor(J){this.packet=J,this.buffers=[],this.reconPack=J}takeBinaryData(J){if(this.buffers.push(J),this.buffers.length===this.reconPack.attachments){let Y=(0,Y3.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),Y}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}});var HY=a((qY)=>{Object.defineProperty(qY,"__esModule",{value:!0});qY.on=Tz;function Tz(J,Y,W){return J.on(Y,W),function(){J.off(Y,W)}}});var BY=a((j8)=>{var Lz=j8&&j8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(j8,"__esModule",{value:!0});j8.Socket=void 0;var o0=n6(),s6=HY(),Dz=d1(),Iz=Lz(J6()),R0=(0,Iz.default)("socket.io-client:socket"),wz=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class z3 extends Dz.Emitter{constructor(J,Y,W){super();if(this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=J,this.nsp=Y,W&&W.auth)this.auth=W.auth;if(this._opts=Object.assign({},W),this.io._autoConnect)this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let J=this.io;this.subs=[(0,s6.on)(J,"open",this.onopen.bind(this)),(0,s6.on)(J,"packet",this.onpacket.bind(this)),(0,s6.on)(J,"error",this.onerror.bind(this)),(0,s6.on)(J,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){if(this.connected)return this;if(this.subEvents(),!this.io._reconnecting)this.io.open();if(this.io._readyState==="open")this.onopen();return this}open(){return this.connect()}send(...J){return J.unshift("message"),this.emit.apply(this,J),this}emit(J,...Y){var W,z,V;if(wz.hasOwnProperty(J))throw Error('"'+J.toString()+'" is a reserved event name');if(Y.unshift(J),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(Y),this;let H={type:o0.PacketType.EVENT,data:Y};if(H.options={},H.options.compress=this.flags.compress!==!1,typeof Y[Y.length-1]==="function"){let w=this.ids++;R0("emitting packet with ack id %d",w);let G=Y.pop();this._registerAckCallback(w,G),H.id=w}let E=(z=(W=this.io.engine)===null||W===void 0?void 0:W.transport)===null||z===void 0?void 0:z.writable,_=this.connected&&!((V=this.io.engine)===null||V===void 0?void 0:V._hasPingExpired());if(this.flags.volatile&&!E)R0("discard packet as the transport is not currently writable");else if(_)this.notifyOutgoingListeners(H),this.packet(H);else this.sendBuffer.push(H);return this.flags={},this}_registerAckCallback(J,Y){var W;let z=(W=this.flags.timeout)!==null&&W!==void 0?W:this._opts.ackTimeout;if(z===void 0){this.acks[J]=Y;return}let V=this.io.setTimeoutFn(()=>{delete this.acks[J];for(let E=0;E{this.io.clearTimeoutFn(V),Y.apply(this,E)};H.withError=!0,this.acks[J]=H}emitWithAck(J,...Y){return new Promise((W,z)=>{let V=(H,E)=>{return H?z(H):W(E)};V.withError=!0,Y.push(V),this.emit(J,...Y)})}_addToQueue(J){let Y;if(typeof J[J.length-1]==="function")Y=J.pop();let W={id:this._queueSeq++,tryCount:0,pending:!1,args:J,flags:Object.assign({fromQueue:!0},this.flags)};J.push((z,...V)=>{if(W!==this._queue[0])return R0("packet [%d] already acknowledged",W.id);if(z!==null){if(W.tryCount>this._opts.retries){if(R0("packet [%d] is discarded after %d tries",W.id,W.tryCount),this._queue.shift(),Y)Y(z)}}else if(R0("packet [%d] was successfully sent",W.id),this._queue.shift(),Y)Y(null,...V);return W.pending=!1,this._drainQueue()}),this._queue.push(W),this._drainQueue()}_drainQueue(J=!1){if(R0("draining queue"),!this.connected||this._queue.length===0)return;let Y=this._queue[0];if(Y.pending&&!J){R0("packet [%d] has already been sent and is waiting for an ack",Y.id);return}Y.pending=!0,Y.tryCount++,R0("sending packet [%d] (try n°%d)",Y.id,Y.tryCount),this.flags=Y.flags,this.emit.apply(this,Y.args)}packet(J){J.nsp=this.nsp,this.io._packet(J)}onopen(){if(R0("transport is open - connecting"),typeof this.auth=="function")this.auth((J)=>{this._sendConnectPacket(J)});else this._sendConnectPacket(this.auth)}_sendConnectPacket(J){this.packet({type:o0.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},J):J})}onerror(J){if(!this.connected)this.emitReserved("connect_error",J)}onclose(J,Y){R0("close (%s)",J),this.connected=!1,delete this.id,this.emitReserved("disconnect",J,Y),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach((J)=>{if(!this.sendBuffer.some((W)=>String(W.id)===J)){let W=this.acks[J];if(delete this.acks[J],W.withError)W.call(this,Error("socket has been disconnected"))}})}onpacket(J){if(J.nsp!==this.nsp)return;switch(J.type){case o0.PacketType.CONNECT:if(J.data&&J.data.sid)this.onconnect(J.data.sid,J.data.pid);else this.emitReserved("connect_error",Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case o0.PacketType.EVENT:case o0.PacketType.BINARY_EVENT:this.onevent(J);break;case o0.PacketType.ACK:case o0.PacketType.BINARY_ACK:this.onack(J);break;case o0.PacketType.DISCONNECT:this.ondisconnect();break;case o0.PacketType.CONNECT_ERROR:this.destroy();let W=Error(J.data.message);W.data=J.data.data,this.emitReserved("connect_error",W);break}}onevent(J){let Y=J.data||[];if(R0("emitting event %j",Y),J.id!=null)R0("attaching ack callback to event"),Y.push(this.ack(J.id));if(this.connected)this.emitEvent(Y);else this.receiveBuffer.push(Object.freeze(Y))}emitEvent(J){if(this._anyListeners&&this._anyListeners.length){let Y=this._anyListeners.slice();for(let W of Y)W.apply(this,J)}if(super.emit.apply(this,J),this._pid&&J.length&&typeof J[J.length-1]==="string")this._lastOffset=J[J.length-1]}ack(J){let Y=this,W=!1;return function(...z){if(W)return;W=!0,R0("sending ack %j",z),Y.packet({type:o0.PacketType.ACK,id:J,data:z})}}onack(J){let Y=this.acks[J.id];if(typeof Y!=="function"){R0("bad ack %s",J.id);return}if(delete this.acks[J.id],R0("calling ack %s with %j",J.id,J.data),Y.withError)J.data.unshift(null);Y.apply(this,J.data)}onconnect(J,Y){R0("socket connected with id %s",J),this.id=J,this.recovered=Y&&this._pid===Y,this._pid=Y,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach((J)=>this.emitEvent(J)),this.receiveBuffer=[],this.sendBuffer.forEach((J)=>{this.notifyOutgoingListeners(J),this.packet(J)}),this.sendBuffer=[]}ondisconnect(){R0("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){if(this.subs)this.subs.forEach((J)=>J()),this.subs=void 0;this.io._destroy(this)}disconnect(){if(this.connected)R0("performing disconnect (%s)",this.nsp),this.packet({type:o0.PacketType.DISCONNECT});if(this.destroy(),this.connected)this.onclose("io client disconnect");return this}close(){return this.disconnect()}compress(J){return this.flags.compress=J,this}get volatile(){return this.flags.volatile=!0,this}timeout(J){return this.flags.timeout=J,this}onAny(J){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(J),this}prependAny(J){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(J),this}offAny(J){if(!this._anyListeners)return this;if(J){let Y=this._anyListeners;for(let W=0;W{Object.defineProperty(NY,"__esModule",{value:!0});NY.Backoff=x8;function x8(J){J=J||{},this.ms=J.min||100,this.max=J.max||1e4,this.factor=J.factor||2,this.jitter=J.jitter>0&&J.jitter<=1?J.jitter:0,this.attempts=0}x8.prototype.duration=function(){var J=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var Y=Math.random(),W=Math.floor(Y*this.jitter*J);J=(Math.floor(Y*10)&1)==0?J-W:J+W}return Math.min(J,this.max)|0};x8.prototype.reset=function(){this.attempts=0};x8.prototype.setMin=function(J){this.ms=J};x8.prototype.setMax=function(J){this.max=J};x8.prototype.setJitter=function(J){this.jitter=J}});var U3=a((c0)=>{var jz=c0&&c0.__createBinding||(Object.create?function(J,Y,W,z){if(z===void 0)z=W;var V=Object.getOwnPropertyDescriptor(Y,W);if(!V||("get"in V?!Y.__esModule:V.writable||V.configurable))V={enumerable:!0,get:function(){return Y[W]}};Object.defineProperty(J,z,V)}:function(J,Y,W,z){if(z===void 0)z=W;J[z]=Y[W]}),xz=c0&&c0.__setModuleDefault||(Object.create?function(J,Y){Object.defineProperty(J,"default",{enumerable:!0,value:Y})}:function(J,Y){J.default=Y}),kz=c0&&c0.__importStar||function(J){if(J&&J.__esModule)return J;var Y={};if(J!=null){for(var W in J)if(W!=="default"&&Object.prototype.hasOwnProperty.call(J,W))jz(Y,J,W)}return xz(Y,J),Y},vz=c0&&c0.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(c0,"__esModule",{value:!0});c0.Manager=void 0;var OY=c6(),bz=BY(),hz=kz(n6()),r1=HY(),yz=G3(),fz=d1(),gz=vz(J6()),M0=(0,gz.default)("socket.io-client:manager");class X3 extends fz.Emitter{constructor(J,Y){var W;super();if(this.nsps={},this.subs=[],J&&typeof J==="object")Y=J,J=void 0;Y=Y||{},Y.path=Y.path||"/socket.io",this.opts=Y,(0,OY.installTimerFunctions)(this,Y),this.reconnection(Y.reconnection!==!1),this.reconnectionAttempts(Y.reconnectionAttempts||1/0),this.reconnectionDelay(Y.reconnectionDelay||1000),this.reconnectionDelayMax(Y.reconnectionDelayMax||5000),this.randomizationFactor((W=Y.randomizationFactor)!==null&&W!==void 0?W:0.5),this.backoff=new yz.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(Y.timeout==null?20000:Y.timeout),this._readyState="closed",this.uri=J;let z=Y.parser||hz;if(this.encoder=new z.Encoder,this.decoder=new z.Decoder,this._autoConnect=Y.autoConnect!==!1,this._autoConnect)this.open()}reconnection(J){if(!arguments.length)return this._reconnection;if(this._reconnection=!!J,!J)this.skipReconnect=!0;return this}reconnectionAttempts(J){if(J===void 0)return this._reconnectionAttempts;return this._reconnectionAttempts=J,this}reconnectionDelay(J){var Y;if(J===void 0)return this._reconnectionDelay;return this._reconnectionDelay=J,(Y=this.backoff)===null||Y===void 0||Y.setMin(J),this}randomizationFactor(J){var Y;if(J===void 0)return this._randomizationFactor;return this._randomizationFactor=J,(Y=this.backoff)===null||Y===void 0||Y.setJitter(J),this}reconnectionDelayMax(J){var Y;if(J===void 0)return this._reconnectionDelayMax;return this._reconnectionDelayMax=J,(Y=this.backoff)===null||Y===void 0||Y.setMax(J),this}timeout(J){if(!arguments.length)return this._timeout;return this._timeout=J,this}maybeReconnectOnOpen(){if(!this._reconnecting&&this._reconnection&&this.backoff.attempts===0)this.reconnect()}open(J){if(M0("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;M0("opening %s",this.uri),this.engine=new OY.Socket(this.uri,this.opts);let Y=this.engine,W=this;this._readyState="opening",this.skipReconnect=!1;let z=(0,r1.on)(Y,"open",function(){W.onopen(),J&&J()}),V=(E)=>{if(M0("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",E),J)J(E);else this.maybeReconnectOnOpen()},H=(0,r1.on)(Y,"error",V);if(this._timeout!==!1){let E=this._timeout;M0("connect attempt will timeout after %d",E);let _=this.setTimeoutFn(()=>{M0("connect attempt timed out after %d",E),z(),V(Error("timeout")),Y.close()},E);if(this.opts.autoUnref)_.unref();this.subs.push(()=>{this.clearTimeoutFn(_)})}return this.subs.push(z),this.subs.push(H),this}connect(J){return this.open(J)}onopen(){M0("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");let J=this.engine;this.subs.push((0,r1.on)(J,"ping",this.onping.bind(this)),(0,r1.on)(J,"data",this.ondata.bind(this)),(0,r1.on)(J,"error",this.onerror.bind(this)),(0,r1.on)(J,"close",this.onclose.bind(this)),(0,r1.on)(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(J){try{this.decoder.add(J)}catch(Y){this.onclose("parse error",Y)}}ondecoded(J){(0,OY.nextTick)(()=>{this.emitReserved("packet",J)},this.setTimeoutFn)}onerror(J){M0("error",J),this.emitReserved("error",J)}socket(J,Y){let W=this.nsps[J];if(!W)W=new bz.Socket(this,J,Y),this.nsps[J]=W;else if(this._autoConnect&&!W.active)W.connect();return W}_destroy(J){let Y=Object.keys(this.nsps);for(let W of Y)if(this.nsps[W].active){M0("socket %s is still active, skipping close",W);return}this._close()}_packet(J){M0("writing packet %j",J);let Y=this.encoder.encode(J);for(let W=0;WJ()),this.subs.length=0,this.decoder.destroy()}_close(){M0("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(J,Y){var W;if(M0("closed due to %s",J),this.cleanup(),(W=this.engine)===null||W===void 0||W.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",J,Y),this._reconnection&&!this.skipReconnect)this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let J=this;if(this.backoff.attempts>=this._reconnectionAttempts)M0("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let Y=this.backoff.duration();M0("will wait %dms before reconnect attempt",Y),this._reconnecting=!0;let W=this.setTimeoutFn(()=>{if(J.skipReconnect)return;if(M0("attempting reconnect"),this.emitReserved("reconnect_attempt",J.backoff.attempts),J.skipReconnect)return;J.open((z)=>{if(z)M0("reconnect attempt error"),J._reconnecting=!1,J.reconnect(),this.emitReserved("reconnect_error",z);else M0("reconnect success"),J.onreconnect()})},Y);if(this.opts.autoUnref)W.unref();this.subs.push(()=>{this.clearTimeoutFn(W)})}}onreconnect(){let J=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",J)}}c0.Manager=X3});var q3=a((F0,F3)=>{var mz=F0&&F0.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(F0,"__esModule",{value:!0});F0.WebTransport=F0.WebSocket=F0.NodeWebSocket=F0.XHR=F0.NodeXHR=F0.Fetch=F0.Socket=F0.Manager=F0.protocol=void 0;F0.io=a1;F0.connect=a1;F0.default=a1;var pz=nZ(),r6=U3();Object.defineProperty(F0,"Manager",{enumerable:!0,get:function(){return r6.Manager}});var $3=BY();Object.defineProperty(F0,"Socket",{enumerable:!0,get:function(){return $3.Socket}});var uz=mz(J6()),V3=(0,uz.default)("socket.io-client"),Z6={};function a1(J,Y){if(typeof J==="object")Y=J,J=void 0;Y=Y||{};let W=(0,pz.url)(J,Y.path||"/socket.io"),z=W.source,V=W.id,H=W.path,E=Z6[V]&&H in Z6[V].nsps,_=Y.forceNew||Y["force new connection"]||Y.multiplex===!1||E,A;if(_)V3("ignoring socket cache for %s",z),A=new r6.Manager(z,Y);else{if(!Z6[V])V3("new io instance for %s",z),Z6[V]=new r6.Manager(z,Y);A=Z6[V]}if(W.query&&!Y.query)Y.query=W.queryKey;return A.socket(W.path,Y)}Object.assign(a1,{Manager:r6.Manager,Socket:$3.Socket,io:a1,connect:a1});var cz=n6();Object.defineProperty(F0,"protocol",{enumerable:!0,get:function(){return cz.protocol}});var k8=c6();Object.defineProperty(F0,"Fetch",{enumerable:!0,get:function(){return k8.Fetch}});Object.defineProperty(F0,"NodeXHR",{enumerable:!0,get:function(){return k8.NodeXHR}});Object.defineProperty(F0,"XHR",{enumerable:!0,get:function(){return k8.XHR}});Object.defineProperty(F0,"NodeWebSocket",{enumerable:!0,get:function(){return k8.NodeWebSocket}});Object.defineProperty(F0,"WebSocket",{enumerable:!0,get:function(){return k8.WebSocket}});Object.defineProperty(F0,"WebTransport",{enumerable:!0,get:function(){return k8.WebTransport}});F3.exports=a1});var B3=a((W6)=>{var b0={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},EY={silent:{level:-1},fatal:{level:b0.fatal},error:{level:b0.error},warn:{level:b0.warn},log:{level:b0.log},info:{level:b0.info},success:{level:b0.success},fail:{level:b0.fail},ready:{level:b0.info},start:{level:b0.info},box:{level:b0.info},debug:{level:b0.debug},trace:{level:b0.trace},verbose:{level:b0.verbose}};function RY(J){if(J===null||typeof J!=="object")return!1;let Y=Object.getPrototypeOf(J);if(Y!==null&&Y!==Object.prototype&&Object.getPrototypeOf(Y)!==null)return!1;if(Symbol.iterator in J)return!1;if(Symbol.toStringTag in J)return Object.prototype.toString.call(J)==="[object Module]";return!0}function MY(J,Y,W=".",z){if(!RY(Y))return MY(J,{},W,z);let V=Object.assign({},Y);for(let H in J){if(H==="__proto__"||H==="constructor")continue;let E=J[H];if(E===null||E===void 0)continue;if(z&&z(V,H,E,W))continue;if(Array.isArray(E)&&Array.isArray(V[H]))V[H]=[...E,...V[H]];else if(RY(E)&&RY(V[H]))V[H]=MY(E,V[H],(W?`${W}.`:"")+H.toString(),z);else V[H]=E}return V}function dz(J){return(...Y)=>Y.reduce((W,z)=>MY(W,z,"",J),{})}var iz=dz();function lz(J){return Object.prototype.toString.call(J)==="[object Object]"}function nz(J){if(!lz(J))return!1;if(!J.message&&!J.args)return!1;if(J.stack)return!1;return!0}var _Y=!1,H3=[];class A0{options;_lastLog;_mockFn;constructor(J={}){let Y=J.types||EY;this.options=iz({...J,defaults:{...J.defaults},level:AY(J.level,Y),reporters:[...J.reporters||[]]},{types:EY,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let W in Y){let z={type:W,...this.options.defaults,...Y[W]};this[W]=this._wrapLogFn(z),this[W].raw=this._wrapLogFn(z,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(J){this.options.level=AY(J,this.options.types,this.options.level)}prompt(J,Y){if(!this.options.prompt)throw Error("prompt is not supported!");return this.options.prompt(J,Y)}create(J){let Y=new A0({...this.options,...J});if(this._mockFn)Y.mockTypes(this._mockFn);return Y}withDefaults(J){return this.create({...this.options,defaults:{...this.options.defaults,...J}})}withTag(J){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+J:J})}addReporter(J){return this.options.reporters.push(J),this}removeReporter(J){if(J){let Y=this.options.reporters.indexOf(J);if(Y!==-1)return this.options.reporters.splice(Y,1)}else this.options.reporters.splice(0);return this}setReporters(J){return this.options.reporters=Array.isArray(J)?J:[J],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let J in this.options.types){if(!console["__"+J])console["__"+J]=console[J];console[J]=this[J].raw}}restoreConsole(){for(let J in this.options.types)if(console["__"+J])console[J]=console["__"+J],delete console["__"+J]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(J,Y){if(!J)return;if(!J.__write)J.__write=J.write;J.write=(W)=>{this[Y].raw(String(W).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(J){if(!J)return;if(J.__write)J.write=J.__write,delete J.__write}pauseLogs(){_Y=!0}resumeLogs(){_Y=!1;let J=H3.splice(0);for(let Y of J)Y[0]._logFn(Y[1],Y[2])}mockTypes(J){let Y=J||this.options.mockFn;if(this._mockFn=Y,typeof Y!=="function")return;for(let W in this.options.types)this[W]=Y(W,this.options.types[W])||this[W],this[W].raw=this[W]}_wrapLogFn(J,Y){return(...W)=>{if(_Y){H3.push([this,J,W,Y]);return}return this._logFn(J,W,Y)}}_logFn(J,Y,W){if((J.level||0)>this.level)return!1;let z={date:new Date,args:[],...J,level:AY(J.level,this.options.types)};if(!W&&Y.length===1&&nz(Y[0]))Object.assign(z,Y[0]);else z.args=[...Y];if(z.message)z.args.unshift(z.message),delete z.message;if(z.additional){if(!Array.isArray(z.additional))z.additional=z.additional.split(` + */(function(){HowlerGlobal.prototype._pos=[0,0,0],HowlerGlobal.prototype._orientation=[0,0,-1,0,1,0],HowlerGlobal.prototype.stereo=function(Y){var W=this;if(!W.ctx||!W.ctx.listener)return W;for(var z=W._howls.length-1;z>=0;z--)W._howls[z].stereo(Y);return W},HowlerGlobal.prototype.pos=function(Y,W,z){var V=this;if(!V.ctx||!V.ctx.listener)return V;if(W=typeof W!=="number"?V._pos[1]:W,z=typeof z!=="number"?V._pos[2]:z,typeof Y==="number")if(V._pos=[Y,W,z],typeof V.ctx.listener.positionX<"u")V.ctx.listener.positionX.setTargetAtTime(V._pos[0],Howler.ctx.currentTime,0.1),V.ctx.listener.positionY.setTargetAtTime(V._pos[1],Howler.ctx.currentTime,0.1),V.ctx.listener.positionZ.setTargetAtTime(V._pos[2],Howler.ctx.currentTime,0.1);else V.ctx.listener.setPosition(V._pos[0],V._pos[1],V._pos[2]);else return V._pos;return V},HowlerGlobal.prototype.orientation=function(Y,W,z,V,F,E){var A=this;if(!A.ctx||!A.ctx.listener)return A;var N=A._orientation;if(W=typeof W!=="number"?N[1]:W,z=typeof z!=="number"?N[2]:z,V=typeof V!=="number"?N[3]:V,F=typeof F!=="number"?N[4]:F,E=typeof E!=="number"?N[5]:E,typeof Y==="number")if(A._orientation=[Y,W,z,V,F,E],typeof A.ctx.listener.forwardX<"u")A.ctx.listener.forwardX.setTargetAtTime(Y,Howler.ctx.currentTime,0.1),A.ctx.listener.forwardY.setTargetAtTime(W,Howler.ctx.currentTime,0.1),A.ctx.listener.forwardZ.setTargetAtTime(z,Howler.ctx.currentTime,0.1),A.ctx.listener.upX.setTargetAtTime(V,Howler.ctx.currentTime,0.1),A.ctx.listener.upY.setTargetAtTime(F,Howler.ctx.currentTime,0.1),A.ctx.listener.upZ.setTargetAtTime(E,Howler.ctx.currentTime,0.1);else A.ctx.listener.setOrientation(Y,W,z,V,F,E);else return N;return A},Howl.prototype.init=function(Y){return function(W){var z=this;return z._orientation=W.orientation||[1,0,0],z._stereo=W.stereo||null,z._pos=W.pos||null,z._pannerAttr={coneInnerAngle:typeof W.coneInnerAngle<"u"?W.coneInnerAngle:360,coneOuterAngle:typeof W.coneOuterAngle<"u"?W.coneOuterAngle:360,coneOuterGain:typeof W.coneOuterGain<"u"?W.coneOuterGain:0,distanceModel:typeof W.distanceModel<"u"?W.distanceModel:"inverse",maxDistance:typeof W.maxDistance<"u"?W.maxDistance:1e4,panningModel:typeof W.panningModel<"u"?W.panningModel:"HRTF",refDistance:typeof W.refDistance<"u"?W.refDistance:1,rolloffFactor:typeof W.rolloffFactor<"u"?W.rolloffFactor:1},z._onstereo=W.onstereo?[{fn:W.onstereo}]:[],z._onpos=W.onpos?[{fn:W.onpos}]:[],z._onorientation=W.onorientation?[{fn:W.onorientation}]:[],Y.call(this,W)}}(Howl.prototype.init),Howl.prototype.stereo=function(Y,W){var z=this;if(!z._webAudio)return z;if(z._state!=="loaded")return z._queue.push({event:"stereo",action:function(){z.stereo(Y,W)}}),z;var V=typeof Howler.ctx.createStereoPanner>"u"?"spatial":"stereo";if(typeof W>"u")if(typeof Y==="number")z._stereo=Y,z._pos=[Y,0,0];else return z._stereo;var F=z._getSoundIds(W);for(var E=0;E"u")if(typeof Y==="number")F._pos=[Y,W,z];else return F._pos;var E=F._getSoundIds(V);for(var A=0;A"u")if(typeof Y==="number")F._orientation=[Y,W,z];else return F._orientation;var E=F._getSoundIds(V);for(var A=0;A"u"){if(!z.pannerAttr)z.pannerAttr={coneInnerAngle:z.coneInnerAngle,coneOuterAngle:z.coneOuterAngle,coneOuterGain:z.coneOuterGain,distanceModel:z.distanceModel,maxDistance:z.maxDistance,refDistance:z.refDistance,rolloffFactor:z.rolloffFactor,panningModel:z.panningModel};Y._pannerAttr={coneInnerAngle:typeof z.pannerAttr.coneInnerAngle<"u"?z.pannerAttr.coneInnerAngle:Y._coneInnerAngle,coneOuterAngle:typeof z.pannerAttr.coneOuterAngle<"u"?z.pannerAttr.coneOuterAngle:Y._coneOuterAngle,coneOuterGain:typeof z.pannerAttr.coneOuterGain<"u"?z.pannerAttr.coneOuterGain:Y._coneOuterGain,distanceModel:typeof z.pannerAttr.distanceModel<"u"?z.pannerAttr.distanceModel:Y._distanceModel,maxDistance:typeof z.pannerAttr.maxDistance<"u"?z.pannerAttr.maxDistance:Y._maxDistance,refDistance:typeof z.pannerAttr.refDistance<"u"?z.pannerAttr.refDistance:Y._refDistance,rolloffFactor:typeof z.pannerAttr.rolloffFactor<"u"?z.pannerAttr.rolloffFactor:Y._rolloffFactor,panningModel:typeof z.pannerAttr.panningModel<"u"?z.pannerAttr.panningModel:Y._panningModel}}}else return F=Y._soundById(parseInt(W[0],10)),F?F._pannerAttr:Y._pannerAttr;else if(W.length===2)z=W[0],V=parseInt(W[1],10);var E=Y._getSoundIds(V);for(var A=0;A{Object.defineProperty(T1,"__esModule",{value:!0});T1.ERROR_PACKET=T1.PACKET_TYPES_REVERSE=T1.PACKET_TYPES=void 0;var G1=Object.create(null);T1.PACKET_TYPES=G1;G1.open="0";G1.close="1";G1.ping="2";G1.pong="3";G1.message="4";G1.upgrade="5";G1.noop="6";var GZ=Object.create(null);T1.PACKET_TYPES_REVERSE=GZ;Object.keys(G1).forEach((J)=>{GZ[G1[J]]=J});var PK={type:"error",data:"parser error"};T1.ERROR_PACKET=PK});var HZ=a((a8)=>{Object.defineProperty(a8,"__esModule",{value:!0});a8.encodePacket=void 0;a8.encodePacketToBinary=SK;var MK=w6(),VZ=typeof Blob==="function"||typeof Blob<"u"&&Object.prototype.toString.call(Blob)==="[object BlobConstructor]",$Z=typeof ArrayBuffer==="function",qZ=(J)=>{return typeof ArrayBuffer.isView==="function"?ArrayBuffer.isView(J):J&&J.buffer instanceof ArrayBuffer},FZ=({type:J,data:Y},W,z)=>{if(VZ&&Y instanceof Blob)if(W)return z(Y);else return XZ(Y,z);else if($Z&&(Y instanceof ArrayBuffer||qZ(Y)))if(W)return z(Y);else return XZ(new Blob([Y]),z);return z(MK.PACKET_TYPES[J]+(Y||""))};a8.encodePacket=FZ;var XZ=(J,Y)=>{let W=new FileReader;return W.onload=function(){let z=W.result.split(",")[1];Y("b"+(z||""))},W.readAsDataURL(J)};function UZ(J){if(J instanceof Uint8Array)return J;else if(J instanceof ArrayBuffer)return new Uint8Array(J);else return new Uint8Array(J.buffer,J.byteOffset,J.byteLength)}var cJ;function SK(J,Y){if(VZ&&J.data instanceof Blob)return J.data.arrayBuffer().then(UZ).then(Y);else if($Z&&(J.data instanceof ArrayBuffer||qZ(J.data)))return Y(UZ(J.data));FZ(J,!1,(W)=>{if(!cJ)cJ=new TextEncoder;Y(cJ.encode(W))})}});var BZ=a((P8)=>{Object.defineProperty(P8,"__esModule",{value:!0});P8.decode=P8.encode=void 0;var E8="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t8=typeof Uint8Array>"u"?[]:new Uint8Array(256);for(let J=0;J{let Y=new Uint8Array(J),W,z=Y.length,V="";for(W=0;W>2],V+=E8[(Y[W]&3)<<4|Y[W+1]>>4],V+=E8[(Y[W+1]&15)<<2|Y[W+2]>>6],V+=E8[Y[W+2]&63];if(z%3===2)V=V.substring(0,V.length-1)+"=";else if(z%3===1)V=V.substring(0,V.length-2)+"==";return V};P8.encode=CK;var QK=(J)=>{let Y=J.length*0.75,W=J.length,z,V=0,F,E,A,N;if(J[J.length-1]==="="){if(Y--,J[J.length-2]==="=")Y--}let I=new ArrayBuffer(Y),G=new Uint8Array(I);for(z=0;z>4,G[V++]=(E&15)<<4|A>>2,G[V++]=(A&3)<<6|N&63;return I};P8.decode=QK});var RZ=a((k6)=>{Object.defineProperty(k6,"__esModule",{value:!0});k6.decodePacket=void 0;var j6=w6(),TK=BZ(),LK=typeof ArrayBuffer==="function",DK=(J,Y)=>{if(typeof J!=="string")return{type:"message",data:OZ(J,Y)};let W=J.charAt(0);if(W==="b")return{type:"message",data:IK(J.substring(1),Y)};if(!j6.PACKET_TYPES_REVERSE[W])return j6.ERROR_PACKET;return J.length>1?{type:j6.PACKET_TYPES_REVERSE[W],data:J.substring(1)}:{type:j6.PACKET_TYPES_REVERSE[W]}};k6.decodePacket=DK;var IK=(J,Y)=>{if(LK){let W=(0,TK.decode)(J);return OZ(W,Y)}else return{base64:!0,data:J}},OZ=(J,Y)=>{switch(Y){case"blob":if(J instanceof Blob)return J;else return new Blob([J]);case"arraybuffer":default:if(J instanceof ArrayBuffer)return J;else return J.buffer}}});var M8=a((x0)=>{Object.defineProperty(x0,"__esModule",{value:!0});x0.decodePayload=x0.decodePacket=x0.encodePayload=x0.encodePacket=x0.protocol=void 0;x0.createPacketEncoderStream=kK;x0.createPacketDecoderStream=xK;var iJ=HZ();Object.defineProperty(x0,"encodePacket",{enumerable:!0,get:function(){return iJ.encodePacket}});var lJ=RZ();Object.defineProperty(x0,"decodePacket",{enumerable:!0,get:function(){return lJ.decodePacket}});var AZ=w6(),_Z=String.fromCharCode(30),wK=(J,Y)=>{let W=J.length,z=Array(W),V=0;J.forEach((F,E)=>{(0,iJ.encodePacket)(F,!1,(A)=>{if(z[E]=A,++V===W)Y(z.join(_Z))})})};x0.encodePayload=wK;var jK=(J,Y)=>{let W=J.split(_Z),z=[];for(let V=0;V{let z=W.length,V;if(z<126)V=new Uint8Array(1),new DataView(V.buffer).setUint8(0,z);else if(z<65536){V=new Uint8Array(3);let F=new DataView(V.buffer);F.setUint8(0,126),F.setUint16(1,z)}else{V=new Uint8Array(9);let F=new DataView(V.buffer);F.setUint8(0,127),F.setBigUint64(1,BigInt(z))}if(J.data&&typeof J.data!=="string")V[0]|=128;Y.enqueue(V),Y.enqueue(W)})}})}var dJ;function x6(J){return J.reduce((Y,W)=>Y+W.length,0)}function v6(J,Y){if(J[0].length===Y)return J.shift();let W=new Uint8Array(Y),z=0;for(let V=0;VMath.pow(2,21)-1){A.enqueue(AZ.ERROR_PACKET);break}V=G*Math.pow(2,32)+I.getUint32(4),z=3}else{if(x6(W)J){A.enqueue(AZ.ERROR_PACKET);break}}}})}x0.protocol=4});var d1=a((NZ)=>{NZ.Emitter=L0;function L0(J){if(J)return vK(J)}function vK(J){for(var Y in L0.prototype)J[Y]=L0.prototype[Y];return J}L0.prototype.on=L0.prototype.addEventListener=function(J,Y){return this._callbacks=this._callbacks||{},(this._callbacks["$"+J]=this._callbacks["$"+J]||[]).push(Y),this};L0.prototype.once=function(J,Y){function W(){this.off(J,W),Y.apply(this,arguments)}return W.fn=Y,this.on(J,W),this};L0.prototype.off=L0.prototype.removeListener=L0.prototype.removeAllListeners=L0.prototype.removeEventListener=function(J,Y){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var W=this._callbacks["$"+J];if(!W)return this;if(arguments.length==1)return delete this._callbacks["$"+J],this;var z;for(var V=0;V{Object.defineProperty(R1,"__esModule",{value:!0});R1.defaultBinaryType=R1.globalThisShim=R1.nextTick=void 0;R1.createCookieJar=bK;R1.nextTick=(()=>{if(typeof Promise==="function"&&typeof Promise.resolve==="function")return(Y)=>Promise.resolve().then(Y);else return(Y,W)=>W(Y,0)})();R1.globalThisShim=(()=>{if(typeof self<"u")return self;else if(typeof window<"u")return window;else return Function("return this")()})();R1.defaultBinaryType="arraybuffer";function bK(){}});var l1=a((S8)=>{Object.defineProperty(S8,"__esModule",{value:!0});S8.pick=hK;S8.installTimerFunctions=gK;S8.byteLength=pK;S8.randomString=cK;var L1=i1();function hK(J,...Y){return Y.reduce((W,z)=>{if(J.hasOwnProperty(z))W[z]=J[z];return W},{})}var yK=L1.globalThisShim.setTimeout,fK=L1.globalThisShim.clearTimeout;function gK(J,Y){if(Y.useNativeTimers)J.setTimeoutFn=yK.bind(L1.globalThisShim),J.clearTimeoutFn=fK.bind(L1.globalThisShim);else J.setTimeoutFn=L1.globalThisShim.setTimeout.bind(L1.globalThisShim),J.clearTimeoutFn=L1.globalThisShim.clearTimeout.bind(L1.globalThisShim)}var mK=1.33;function pK(J){if(typeof J==="string")return uK(J);return Math.ceil((J.byteLength||J.size)*mK)}function uK(J){let Y=0,W=0;for(let z=0,V=J.length;z=57344)W+=3;else z++,W+=4;return W}function cK(){return Date.now().toString(36).substring(3)+Math.random().toString(36).substring(2,5)}});var nJ=a((b6)=>{Object.defineProperty(b6,"__esModule",{value:!0});b6.encode=dK;b6.decode=iK;function dK(J){let Y="";for(let W in J)if(J.hasOwnProperty(W)){if(Y.length)Y+="&";Y+=encodeURIComponent(W)+"="+encodeURIComponent(J[W])}return Y}function iK(J){let Y={},W=J.split("&");for(let z=0,V=W.length;z{var C8=1000,Q8=C8*60,T8=Q8*60,n1=T8*24,lK=n1*7,nK=n1*365.25;EZ.exports=function(J,Y){Y=Y||{};var W=typeof J;if(W==="string"&&J.length>0)return sK(J);else if(W==="number"&&isFinite(J))return Y.long?aK(J):rK(J);throw Error("val is not a non-empty string or a valid number. val="+JSON.stringify(J))};function sK(J){if(J=String(J),J.length>100)return;var Y=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(J);if(!Y)return;var W=parseFloat(Y[1]),z=(Y[2]||"ms").toLowerCase();switch(z){case"years":case"year":case"yrs":case"yr":case"y":return W*nK;case"weeks":case"week":case"w":return W*lK;case"days":case"day":case"d":return W*n1;case"hours":case"hour":case"hrs":case"hr":case"h":return W*T8;case"minutes":case"minute":case"mins":case"min":case"m":return W*Q8;case"seconds":case"second":case"secs":case"sec":case"s":return W*C8;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return W;default:return}}function rK(J){var Y=Math.abs(J);if(Y>=n1)return Math.round(J/n1)+"d";if(Y>=T8)return Math.round(J/T8)+"h";if(Y>=Q8)return Math.round(J/Q8)+"m";if(Y>=C8)return Math.round(J/C8)+"s";return J+"ms"}function aK(J){var Y=Math.abs(J);if(Y>=n1)return h6(J,Y,n1,"day");if(Y>=T8)return h6(J,Y,T8,"hour");if(Y>=Q8)return h6(J,Y,Q8,"minute");if(Y>=C8)return h6(J,Y,C8,"second");return J+" ms"}function h6(J,Y,W,z){var V=Y>=W*1.5;return Math.round(J/W)+" "+z+(V?"s":"")}});var MZ=a((gG,PZ)=>{function tK(J){W.debug=W,W.default=W,W.coerce=N,W.disable=F,W.enable=V,W.enabled=E,W.humanize=y6(),W.destroy=I,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let R=0;R{if(q==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];q=s.call(T,r),C.splice(u,1),u--}return q}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(R!==null)return R;if(P!==W.namespaces)P=W.namespaces,L=W.enabled(G);return L},set:(C)=>{R=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let R=W(this.namespace+(typeof U>"u"?":":U)+G);return R.log=this.log,R}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U,R=(typeof G==="string"?G:"").split(/[\s,]+/),P=R.length;for(U=0;U"-"+U)].join(",");return W.enable(""),G}function E(G){if(G[G.length-1]==="*")return!0;let U,R;for(U=0,R=W.skips.length;U{f0.formatArgs=eK;f0.save=J5;f0.load=Y5;f0.useColors=oK;f0.storage=Z5();f0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();f0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function oK(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function eK(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+f6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}f0.log=console.debug||console.log||(()=>{});function J5(J){try{if(J)f0.storage.setItem("debug",J);else f0.storage.removeItem("debug")}catch(Y){}}function Y5(){let J;try{J=f0.storage.getItem("debug")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function Z5(){try{return localStorage}catch(J){}}f6.exports=MZ()(f0);var{formatters:W5}=f6.exports;W5.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var o8=a((D1)=>{var K5=D1&&D1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(D1,"__esModule",{value:!0});D1.Transport=D1.TransportError=void 0;var z5=M8(),G5=d1(),X5=l1(),U5=nJ(),V5=K5(s1()),$5=(0,V5.default)("engine.io-client:transport");class sJ extends Error{constructor(J,Y,W){super(J);this.description=Y,this.context=W,this.type="TransportError"}}D1.TransportError=sJ;class SZ extends G5.Emitter{constructor(J){super();this.writable=!1,(0,X5.installTimerFunctions)(this,J),this.opts=J,this.query=J.query,this.socket=J.socket,this.supportsBinary=!J.forceBase64}onError(J,Y,W){return super.emitReserved("error",new sJ(J,Y,W)),this}open(){return this.readyState="opening",this.doOpen(),this}close(){if(this.readyState==="opening"||this.readyState==="open")this.doClose(),this.onClose();return this}send(J){if(this.readyState==="open")this.write(J);else $5("transport is not open, discarding packets")}onOpen(){this.readyState="open",this.writable=!0,super.emitReserved("open")}onData(J){let Y=(0,z5.decodePacket)(J,this.socket.binaryType);this.onPacket(Y)}onPacket(J){super.emitReserved("packet",J)}onClose(J){this.readyState="closed",super.emitReserved("close",J)}pause(J){}createUri(J,Y={}){return J+"://"+this._hostname()+this._port()+this.opts.path+this._query(Y)}_hostname(){let J=this.opts.hostname;return J.indexOf(":")===-1?J:"["+J+"]"}_port(){if(this.opts.port&&(this.opts.secure&&Number(this.opts.port!==443)||!this.opts.secure&&Number(this.opts.port)!==80))return":"+this.opts.port;else return""}_query(J){let Y=(0,U5.encode)(J);return Y.length?"?"+Y:""}}D1.Transport=SZ});var rJ=a((L8)=>{var q5=L8&&L8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(L8,"__esModule",{value:!0});L8.Polling=void 0;var F5=o8(),H5=l1(),CZ=M8(),B5=q5(s1()),r0=(0,B5.default)("engine.io-client:polling");class QZ extends F5.Transport{constructor(){super(...arguments);this._polling=!1}get name(){return"polling"}doOpen(){this._poll()}pause(J){this.readyState="pausing";let Y=()=>{r0("paused"),this.readyState="paused",J()};if(this._polling||!this.writable){let W=0;if(this._polling)r0("we are currently polling - waiting to pause"),W++,this.once("pollComplete",function(){r0("pre-pause polling complete"),--W||Y()});if(!this.writable)r0("we are currently writing - waiting to pause"),W++,this.once("drain",function(){r0("pre-pause writing complete"),--W||Y()})}else Y()}_poll(){r0("polling"),this._polling=!0,this.doPoll(),this.emitReserved("poll")}onData(J){r0("polling got data %s",J);let Y=(W)=>{if(this.readyState==="opening"&&W.type==="open")this.onOpen();if(W.type==="close")return this.onClose({description:"transport closed by the server"}),!1;this.onPacket(W)};if((0,CZ.decodePayload)(J,this.socket.binaryType).forEach(Y),this.readyState!=="closed")if(this._polling=!1,this.emitReserved("pollComplete"),this.readyState==="open")this._poll();else r0('ignoring poll - transport state "%s"',this.readyState)}doClose(){let J=()=>{r0("writing close packet"),this.write([{type:"close"}])};if(this.readyState==="open")r0("transport open - closing"),J();else r0("transport not open - deferring close"),this.once("open",J)}write(J){this.writable=!1,(0,CZ.encodePayload)(J,(Y)=>{this.doWrite(Y,()=>{this.writable=!0,this.emitReserved("drain")})})}uri(){let J=this.opts.secure?"https":"http",Y=this.query||{};if(this.opts.timestampRequests!==!1)Y[this.opts.timestampParam]=(0,H5.randomString)();if(!this.supportsBinary&&!Y.sid)Y.b64=1;return this.createUri(J,Y)}}L8.Polling=QZ});var LZ=a((g6)=>{Object.defineProperty(g6,"__esModule",{value:!0});g6.hasCORS=void 0;var TZ=!1;try{TZ=typeof XMLHttpRequest<"u"&&"withCredentials"in new XMLHttpRequest}catch(J){}g6.hasCORS=TZ});var m6=a((X1)=>{var O5=X1&&X1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(X1,"__esModule",{value:!0});X1.XHR=X1.Request=X1.BaseXHR=void 0;var R5=rJ(),A5=d1(),DZ=l1(),wZ=i1(),_5=LZ(),N5=O5(s1()),aJ=(0,N5.default)("engine.io-client:polling");function E5(){}class tJ extends R5.Polling{constructor(J){super(J);if(typeof location<"u"){let Y=location.protocol==="https:",W=location.port;if(!W)W=Y?"443":"80";this.xd=typeof location<"u"&&J.hostname!==location.hostname||W!==J.port}}doWrite(J,Y){let W=this.request({method:"POST",data:J});W.on("success",Y),W.on("error",(z,V)=>{this.onError("xhr post error",z,V)})}doPoll(){aJ("xhr poll");let J=this.request();J.on("data",this.onData.bind(this)),J.on("error",(Y,W)=>{this.onError("xhr poll error",Y,W)}),this.pollXhr=J}}X1.BaseXHR=tJ;class a0 extends A5.Emitter{constructor(J,Y,W){super();this.createRequest=J,(0,DZ.installTimerFunctions)(this,W),this._opts=W,this._method=W.method||"GET",this._uri=Y,this._data=W.data!==void 0?W.data:null,this._create()}_create(){var J;let Y=(0,DZ.pick)(this._opts,"agent","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","autoUnref");Y.xdomain=!!this._opts.xd;let W=this._xhr=this.createRequest(Y);try{aJ("xhr open %s: %s",this._method,this._uri),W.open(this._method,this._uri,!0);try{if(this._opts.extraHeaders){W.setDisableHeaderCheck&&W.setDisableHeaderCheck(!0);for(let z in this._opts.extraHeaders)if(this._opts.extraHeaders.hasOwnProperty(z))W.setRequestHeader(z,this._opts.extraHeaders[z])}}catch(z){}if(this._method==="POST")try{W.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(z){}try{W.setRequestHeader("Accept","*/*")}catch(z){}if((J=this._opts.cookieJar)===null||J===void 0||J.addCookies(W),"withCredentials"in W)W.withCredentials=this._opts.withCredentials;if(this._opts.requestTimeout)W.timeout=this._opts.requestTimeout;W.onreadystatechange=()=>{var z;if(W.readyState===3)(z=this._opts.cookieJar)===null||z===void 0||z.parseCookies(W.getResponseHeader("set-cookie"));if(W.readyState!==4)return;if(W.status===200||W.status===1223)this._onLoad();else this.setTimeoutFn(()=>{this._onError(typeof W.status==="number"?W.status:0)},0)},aJ("xhr data %s",this._data),W.send(this._data)}catch(z){this.setTimeoutFn(()=>{this._onError(z)},0);return}if(typeof document<"u")this._index=a0.requestsCount++,a0.requests[this._index]=this}_onError(J){this.emitReserved("error",J,this._xhr),this._cleanup(!0)}_cleanup(J){if(typeof this._xhr>"u"||this._xhr===null)return;if(this._xhr.onreadystatechange=E5,J)try{this._xhr.abort()}catch(Y){}if(typeof document<"u")delete a0.requests[this._index];this._xhr=null}_onLoad(){let J=this._xhr.responseText;if(J!==null)this.emitReserved("data",J),this.emitReserved("success"),this._cleanup()}abort(){this._cleanup()}}X1.Request=a0;a0.requestsCount=0;a0.requests={};if(typeof document<"u"){if(typeof attachEvent==="function")attachEvent("onunload",IZ);else if(typeof addEventListener==="function"){let J="onpagehide"in wZ.globalThisShim?"pagehide":"unload";addEventListener(J,IZ,!1)}}function IZ(){for(let J in a0.requests)if(a0.requests.hasOwnProperty(J))a0.requests[J].abort()}var P5=function(){let J=kZ({xdomain:!1});return J&&J.responseType!==null}();class jZ extends tJ{constructor(J){super(J);let Y=J&&J.forceBase64;this.supportsBinary=P5&&!Y}request(J={}){return Object.assign(J,{xd:this.xd},this.opts),new a0(kZ,this.uri(),J)}}X1.XHR=jZ;function kZ(J){let Y=J.xdomain;try{if(typeof XMLHttpRequest<"u"&&(!Y||_5.hasCORS))return new XMLHttpRequest}catch(W){}if(!Y)try{return new wZ.globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP")}catch(W){}}});var p6=a((I1)=>{var M5=I1&&I1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(I1,"__esModule",{value:!0});I1.WS=I1.BaseWS=void 0;var S5=o8(),xZ=l1(),C5=M8(),eJ=i1(),Q5=M5(s1()),T5=(0,Q5.default)("engine.io-client:websocket"),vZ=typeof navigator<"u"&&typeof navigator.product==="string"&&navigator.product.toLowerCase()==="reactnative";class JY extends S5.Transport{get name(){return"websocket"}doOpen(){let J=this.uri(),Y=this.opts.protocols,W=vZ?{}:(0,xZ.pick)(this.opts,"agent","perMessageDeflate","pfx","key","passphrase","cert","ca","ciphers","rejectUnauthorized","localAddress","protocolVersion","origin","maxPayload","family","checkServerIdentity");if(this.opts.extraHeaders)W.headers=this.opts.extraHeaders;try{this.ws=this.createSocket(J,Y,W)}catch(z){return this.emitReserved("error",z)}this.ws.binaryType=this.socket.binaryType,this.addEventListeners()}addEventListeners(){this.ws.onopen=()=>{if(this.opts.autoUnref)this.ws._socket.unref();this.onOpen()},this.ws.onclose=(J)=>this.onClose({description:"websocket connection closed",context:J}),this.ws.onmessage=(J)=>this.onData(J.data),this.ws.onerror=(J)=>this.onError("websocket error",J)}write(J){this.writable=!1;for(let Y=0;Y{try{this.doWrite(W,V)}catch(F){T5("websocket closed before onclose event")}if(z)(0,eJ.nextTick)(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){if(typeof this.ws<"u")this.ws.onerror=()=>{},this.ws.close(),this.ws=null}uri(){let J=this.opts.secure?"wss":"ws",Y=this.query||{};if(this.opts.timestampRequests)Y[this.opts.timestampParam]=(0,xZ.randomString)();if(!this.supportsBinary)Y.b64=1;return this.createUri(J,Y)}}I1.BaseWS=JY;var oJ=eJ.globalThisShim.WebSocket||eJ.globalThisShim.MozWebSocket;class bZ extends JY{createSocket(J,Y,W){return!vZ?Y?new oJ(J,Y):new oJ(J):new oJ(J,Y,W)}doWrite(J,Y){this.ws.send(Y)}}I1.WS=bZ});var YY=a((D8)=>{var L5=D8&&D8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(D8,"__esModule",{value:!0});D8.WT=void 0;var D5=o8(),I5=i1(),hZ=M8(),w5=L5(s1()),e8=(0,w5.default)("engine.io-client:webtransport");class yZ extends D5.Transport{get name(){return"webtransport"}doOpen(){try{this._transport=new WebTransport(this.createUri("https"),this.opts.transportOptions[this.name])}catch(J){return this.emitReserved("error",J)}this._transport.closed.then(()=>{e8("transport closed gracefully"),this.onClose()}).catch((J)=>{e8("transport closed due to %s",J),this.onError("webtransport error",J)}),this._transport.ready.then(()=>{this._transport.createBidirectionalStream().then((J)=>{let Y=(0,hZ.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER,this.socket.binaryType),W=J.readable.pipeThrough(Y).getReader(),z=(0,hZ.createPacketEncoderStream)();z.readable.pipeTo(J.writable),this._writer=z.writable.getWriter();let V=()=>{W.read().then(({done:E,value:A})=>{if(E){e8("session is closed");return}e8("received chunk: %o",A),this.onPacket(A),V()}).catch((E)=>{e8("an error occurred while reading: %s",E)})};V();let F={type:"open"};if(this.query.sid)F.data=`{"sid":"${this.query.sid}"}`;this._writer.write(F).then(()=>this.onOpen())})})}write(J){this.writable=!1;for(let Y=0;Y{if(z)(0,I5.nextTick)(()=>{this.writable=!0,this.emitReserved("drain")},this.setTimeoutFn)})}}doClose(){var J;(J=this._transport)===null||J===void 0||J.close()}}D8.WT=yZ});var ZY=a((u6)=>{Object.defineProperty(u6,"__esModule",{value:!0});u6.transports=void 0;var j5=m6(),k5=p6(),x5=YY();u6.transports={websocket:k5.WS,webtransport:x5.WT,polling:j5.XHR}});var KY=a((WY)=>{Object.defineProperty(WY,"__esModule",{value:!0});WY.parse=h5;var v5=/^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,b5=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];function h5(J){if(J.length>8000)throw"URI too long";let Y=J,W=J.indexOf("["),z=J.indexOf("]");if(W!=-1&&z!=-1)J=J.substring(0,W)+J.substring(W,z).replace(/:/g,";")+J.substring(z,J.length);let V=v5.exec(J||""),F={},E=14;while(E--)F[b5[E]]=V[E]||"";if(W!=-1&&z!=-1)F.source=Y,F.host=F.host.substring(1,F.host.length-1).replace(/;/g,":"),F.authority=F.authority.replace("[","").replace("]","").replace(/;/g,":"),F.ipv6uri=!0;return F.pathNames=y5(F,F.path),F.queryKey=f5(F,F.query),F}function y5(J,Y){let W=/\/{2,9}/g,z=Y.replace(W,"/").split("/");if(Y.slice(0,1)=="/"||Y.length===0)z.splice(0,1);if(Y.slice(-1)=="/")z.splice(z.length-1,1);return z}function f5(J,Y){let W={};return Y.replace(/(?:^|&)([^&=]*)=?([^&]*)/g,function(z,V,F){if(V)W[V]=F}),W}});var UY=a((U1)=>{var g5=U1&&U1.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(U1,"__esModule",{value:!0});U1.Socket=U1.SocketWithUpgrade=U1.SocketWithoutUpgrade=void 0;var m5=ZY(),fZ=l1(),p5=nJ(),gZ=KY(),u5=d1(),mZ=M8(),zY=i1(),c5=g5(s1()),X0=(0,c5.default)("engine.io-client:socket"),GY=typeof addEventListener==="function"&&typeof removeEventListener==="function",J6=[];if(GY)addEventListener("offline",()=>{X0("closing %d connection(s) because the network was lost",J6.length),J6.forEach((J)=>J())},!1);class A1 extends u5.Emitter{constructor(J,Y){super();if(this.binaryType=zY.defaultBinaryType,this.writeBuffer=[],this._prevBufferLen=0,this._pingInterval=-1,this._pingTimeout=-1,this._maxPayload=-1,this._pingTimeoutTime=1/0,J&&typeof J==="object")Y=J,J=null;if(J){let W=(0,gZ.parse)(J);if(Y.hostname=W.host,Y.secure=W.protocol==="https"||W.protocol==="wss",Y.port=W.port,W.query)Y.query=W.query}else if(Y.host)Y.hostname=(0,gZ.parse)(Y.host).host;if((0,fZ.installTimerFunctions)(this,Y),this.secure=Y.secure!=null?Y.secure:typeof location<"u"&&location.protocol==="https:",Y.hostname&&!Y.port)Y.port=this.secure?"443":"80";if(this.hostname=Y.hostname||(typeof location<"u"?location.hostname:"localhost"),this.port=Y.port||(typeof location<"u"&&location.port?location.port:this.secure?"443":"80"),this.transports=[],this._transportsByName={},Y.transports.forEach((W)=>{let z=W.prototype.name;this.transports.push(z),this._transportsByName[z]=W}),this.opts=Object.assign({path:"/engine.io",agent:!1,withCredentials:!1,upgrade:!0,timestampParam:"t",rememberUpgrade:!1,addTrailingSlash:!0,rejectUnauthorized:!0,perMessageDeflate:{threshold:1024},transportOptions:{},closeOnBeforeunload:!1},Y),this.opts.path=this.opts.path.replace(/\/$/,"")+(this.opts.addTrailingSlash?"/":""),typeof this.opts.query==="string")this.opts.query=(0,p5.decode)(this.opts.query);if(GY){if(this.opts.closeOnBeforeunload)this._beforeunloadEventListener=()=>{if(this.transport)this.transport.removeAllListeners(),this.transport.close()},addEventListener("beforeunload",this._beforeunloadEventListener,!1);if(this.hostname!=="localhost")X0("adding listener for the 'offline' event"),this._offlineEventListener=()=>{this._onClose("transport close",{description:"network connection lost"})},J6.push(this._offlineEventListener)}if(this.opts.withCredentials)this._cookieJar=(0,zY.createCookieJar)();this._open()}createTransport(J){X0('creating transport "%s"',J);let Y=Object.assign({},this.opts.query);if(Y.EIO=mZ.protocol,Y.transport=J,this.id)Y.sid=this.id;let W=Object.assign({},this.opts,{query:Y,socket:this,hostname:this.hostname,secure:this.secure,port:this.port},this.opts.transportOptions[J]);return X0("options: %j",W),new this._transportsByName[J](W)}_open(){if(this.transports.length===0){this.setTimeoutFn(()=>{this.emitReserved("error","No transports available")},0);return}let J=this.opts.rememberUpgrade&&A1.priorWebsocketSuccess&&this.transports.indexOf("websocket")!==-1?"websocket":this.transports[0];this.readyState="opening";let Y=this.createTransport(J);Y.open(),this.setTransport(Y)}setTransport(J){if(X0("setting transport %s",J.name),this.transport)X0("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners();this.transport=J,J.on("drain",this._onDrain.bind(this)).on("packet",this._onPacket.bind(this)).on("error",this._onError.bind(this)).on("close",(Y)=>this._onClose("transport close",Y))}onOpen(){X0("socket open"),this.readyState="open",A1.priorWebsocketSuccess=this.transport.name==="websocket",this.emitReserved("open"),this.flush()}_onPacket(J){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing")switch(X0('socket receive: type "%s", data "%s"',J.type,J.data),this.emitReserved("packet",J),this.emitReserved("heartbeat"),J.type){case"open":this.onHandshake(JSON.parse(J.data));break;case"ping":this._sendPacket("pong"),this.emitReserved("ping"),this.emitReserved("pong"),this._resetPingTimeout();break;case"error":let Y=Error("server error");Y.code=J.data,this._onError(Y);break;case"message":this.emitReserved("data",J.data),this.emitReserved("message",J.data);break}else X0('packet received with socket readyState "%s"',this.readyState)}onHandshake(J){if(this.emitReserved("handshake",J),this.id=J.sid,this.transport.query.sid=J.sid,this._pingInterval=J.pingInterval,this._pingTimeout=J.pingTimeout,this._maxPayload=J.maxPayload,this.onOpen(),this.readyState==="closed")return;this._resetPingTimeout()}_resetPingTimeout(){this.clearTimeoutFn(this._pingTimeoutTimer);let J=this._pingInterval+this._pingTimeout;if(this._pingTimeoutTime=Date.now()+J,this._pingTimeoutTimer=this.setTimeoutFn(()=>{this._onClose("ping timeout")},J),this.opts.autoUnref)this._pingTimeoutTimer.unref()}_onDrain(){if(this.writeBuffer.splice(0,this._prevBufferLen),this._prevBufferLen=0,this.writeBuffer.length===0)this.emitReserved("drain");else this.flush()}flush(){if(this.readyState!=="closed"&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length){let J=this._getWritablePackets();X0("flushing %d packets in socket",J.length),this.transport.send(J),this._prevBufferLen=J.length,this.emitReserved("flush")}}_getWritablePackets(){if(!(this._maxPayload&&this.transport.name==="polling"&&this.writeBuffer.length>1))return this.writeBuffer;let Y=1;for(let W=0;W0&&Y>this._maxPayload)return X0("only send %d out of %d packets",W,this.writeBuffer.length),this.writeBuffer.slice(0,W);Y+=2}return X0("payload size is %d (max: %d)",Y,this._maxPayload),this.writeBuffer}_hasPingExpired(){if(!this._pingTimeoutTime)return!0;let J=Date.now()>this._pingTimeoutTime;if(J)X0("throttled timer detected, scheduling connection close"),this._pingTimeoutTime=0,(0,zY.nextTick)(()=>{this._onClose("ping timeout")},this.setTimeoutFn);return J}write(J,Y,W){return this._sendPacket("message",J,Y,W),this}send(J,Y,W){return this._sendPacket("message",J,Y,W),this}_sendPacket(J,Y,W,z){if(typeof Y==="function")z=Y,Y=void 0;if(typeof W==="function")z=W,W=null;if(this.readyState==="closing"||this.readyState==="closed")return;W=W||{},W.compress=W.compress!==!1;let V={type:J,data:Y,options:W};if(this.emitReserved("packetCreate",V),this.writeBuffer.push(V),z)this.once("flush",z);this.flush()}close(){let J=()=>{this._onClose("forced close"),X0("socket closing - telling transport to close"),this.transport.close()},Y=()=>{this.off("upgrade",Y),this.off("upgradeError",Y),J()},W=()=>{this.once("upgrade",Y),this.once("upgradeError",Y)};if(this.readyState==="opening"||this.readyState==="open")if(this.readyState="closing",this.writeBuffer.length)this.once("drain",()=>{if(this.upgrading)W();else J()});else if(this.upgrading)W();else J();return this}_onError(J){if(X0("socket error %j",J),A1.priorWebsocketSuccess=!1,this.opts.tryAllTransports&&this.transports.length>1&&this.readyState==="opening")return X0("trying next transport"),this.transports.shift(),this._open();this.emitReserved("error",J),this._onClose("transport error",J)}_onClose(J,Y){if(this.readyState==="opening"||this.readyState==="open"||this.readyState==="closing"){if(X0('socket close with reason: "%s"',J),this.clearTimeoutFn(this._pingTimeoutTimer),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),GY){if(this._beforeunloadEventListener)removeEventListener("beforeunload",this._beforeunloadEventListener,!1);if(this._offlineEventListener){let W=J6.indexOf(this._offlineEventListener);if(W!==-1)X0("removing listener for the 'offline' event"),J6.splice(W,1)}}this.readyState="closed",this.id=null,this.emitReserved("close",J,Y),this.writeBuffer=[],this._prevBufferLen=0}}}U1.SocketWithoutUpgrade=A1;A1.protocol=mZ.protocol;class XY extends A1{constructor(){super(...arguments);this._upgrades=[]}onOpen(){if(super.onOpen(),this.readyState==="open"&&this.opts.upgrade){X0("starting upgrade probes");for(let J=0;J{if(W)return;X0('probe transport "%s" opened',J),Y.send([{type:"ping",data:"probe"}]),Y.once("packet",(G)=>{if(W)return;if(G.type==="pong"&&G.data==="probe"){if(X0('probe transport "%s" pong',J),this.upgrading=!0,this.emitReserved("upgrading",Y),!Y)return;A1.priorWebsocketSuccess=Y.name==="websocket",X0('pausing current transport "%s"',this.transport.name),this.transport.pause(()=>{if(W)return;if(this.readyState==="closed")return;X0("changing transport and sending upgrade packet"),I(),this.setTransport(Y),Y.send([{type:"upgrade"}]),this.emitReserved("upgrade",Y),Y=null,this.upgrading=!1,this.flush()})}else{X0('probe transport "%s" failed',J);let U=Error("probe error");U.transport=Y.name,this.emitReserved("upgradeError",U)}})};function V(){if(W)return;W=!0,I(),Y.close(),Y=null}let F=(G)=>{let U=Error("probe error: "+G);U.transport=Y.name,V(),X0('probe transport "%s" failed because of error: %s',J,G),this.emitReserved("upgradeError",U)};function E(){F("transport closed")}function A(){F("socket closed")}function N(G){if(Y&&G.name!==Y.name)X0('"%s" works - aborting "%s"',G.name,Y.name),V()}let I=()=>{Y.removeListener("open",z),Y.removeListener("error",F),Y.removeListener("close",E),this.off("close",A),this.off("upgrading",N)};if(Y.once("open",z),Y.once("error",F),Y.once("close",E),this.once("close",A),this.once("upgrading",N),this._upgrades.indexOf("webtransport")!==-1&&J!=="webtransport")this.setTimeoutFn(()=>{if(!W)Y.open()},200);else Y.open()}onHandshake(J){this._upgrades=this._filterUpgrades(J.upgrades),super.onHandshake(J)}_filterUpgrades(J){let Y=[];for(let W=0;Wm5.transports[z]).filter((z)=>!!z);super(J,W)}}U1.Socket=pZ});var cZ=a((c6)=>{Object.defineProperty(c6,"__esModule",{value:!0});c6.Fetch=void 0;var d5=rJ();class uZ extends d5.Polling{doPoll(){this._fetch().then((J)=>{if(!J.ok)return this.onError("fetch read error",J.status,J);J.text().then((Y)=>this.onData(Y))}).catch((J)=>{this.onError("fetch read error",J)})}doWrite(J,Y){this._fetch(J).then((W)=>{if(!W.ok)return this.onError("fetch write error",W.status,W);Y()}).catch((W)=>{this.onError("fetch write error",W)})}_fetch(J){var Y;let W=J!==void 0,z=new Headers(this.opts.extraHeaders);if(W)z.set("content-type","text/plain;charset=UTF-8");return(Y=this.socket._cookieJar)===null||Y===void 0||Y.appendCookies(z),fetch(this.uri(),{method:W?"POST":"GET",body:W?J:null,headers:z,credentials:this.opts.withCredentials?"include":"omit"}).then((V)=>{var F;return(F=this.socket._cookieJar)===null||F===void 0||F.parseCookies(V.headers.getSetCookie()),V})}}c6.Fetch=uZ});var d6=a((e)=>{Object.defineProperty(e,"__esModule",{value:!0});e.WebTransport=e.WebSocket=e.NodeWebSocket=e.XHR=e.NodeXHR=e.Fetch=e.nextTick=e.parse=e.installTimerFunctions=e.transports=e.TransportError=e.Transport=e.protocol=e.SocketWithUpgrade=e.SocketWithoutUpgrade=e.Socket=void 0;var dZ=UY();Object.defineProperty(e,"Socket",{enumerable:!0,get:function(){return dZ.Socket}});var iZ=UY();Object.defineProperty(e,"SocketWithoutUpgrade",{enumerable:!0,get:function(){return iZ.SocketWithoutUpgrade}});Object.defineProperty(e,"SocketWithUpgrade",{enumerable:!0,get:function(){return iZ.SocketWithUpgrade}});e.protocol=dZ.Socket.protocol;var lZ=o8();Object.defineProperty(e,"Transport",{enumerable:!0,get:function(){return lZ.Transport}});Object.defineProperty(e,"TransportError",{enumerable:!0,get:function(){return lZ.TransportError}});var i5=ZY();Object.defineProperty(e,"transports",{enumerable:!0,get:function(){return i5.transports}});var l5=l1();Object.defineProperty(e,"installTimerFunctions",{enumerable:!0,get:function(){return l5.installTimerFunctions}});var n5=KY();Object.defineProperty(e,"parse",{enumerable:!0,get:function(){return n5.parse}});var s5=i1();Object.defineProperty(e,"nextTick",{enumerable:!0,get:function(){return s5.nextTick}});var r5=cZ();Object.defineProperty(e,"Fetch",{enumerable:!0,get:function(){return r5.Fetch}});var a5=m6();Object.defineProperty(e,"NodeXHR",{enumerable:!0,get:function(){return a5.XHR}});var t5=m6();Object.defineProperty(e,"XHR",{enumerable:!0,get:function(){return t5.XHR}});var o5=p6();Object.defineProperty(e,"NodeWebSocket",{enumerable:!0,get:function(){return o5.WS}});var e5=p6();Object.defineProperty(e,"WebSocket",{enumerable:!0,get:function(){return e5.WS}});var Jz=YY();Object.defineProperty(e,"WebTransport",{enumerable:!0,get:function(){return Jz.WT}})});var sZ=a((tG,nZ)=>{function Yz(J){W.debug=W,W.default=W,W.coerce=N,W.disable=E,W.enable=V,W.enabled=A,W.humanize=y6(),W.destroy=I,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let R=0;R{if(q==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];q=s.call(T,r),C.splice(u,1),u--}return q}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(R!==null)return R;if(P!==W.namespaces)P=W.namespaces,L=W.enabled(G);return L},set:(C)=>{R=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let R=W(this.namespace+(typeof U>"u"?":":U)+G);return R.log=this.log,R}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U=(typeof G==="string"?G:"").trim().replace(/\s+/g,",").split(",").filter(Boolean);for(let R of U)if(R[0]==="-")W.skips.push(R.slice(1));else W.names.push(R)}function F(G,U){let R=0,P=0,L=-1,Q=0;while(R"-"+U)].join(",");return W.enable(""),G}function A(G){for(let U of W.skips)if(F(G,U))return!1;for(let U of W.names)if(F(G,U))return!0;return!1}function N(G){if(G instanceof Error)return G.stack||G.message;return G}function I(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return W.enable(W.load()),W}nZ.exports=Yz});var Y6=a((v0,i6)=>{v0.formatArgs=Wz;v0.save=Kz;v0.load=zz;v0.useColors=Zz;v0.storage=Gz();v0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();v0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Zz(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Wz(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+i6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}v0.log=console.debug||console.log||(()=>{});function Kz(J){try{if(J)v0.storage.setItem("debug",J);else v0.storage.removeItem("debug")}catch(Y){}}function zz(){let J;try{J=v0.storage.getItem("debug")||v0.storage.getItem("DEBUG")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function Gz(){try{return localStorage}catch(J){}}i6.exports=sZ()(v0);var{formatters:Xz}=i6.exports;Xz.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var aZ=a((Z6)=>{var Uz=Z6&&Z6.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(Z6,"__esModule",{value:!0});Z6.url=qz;var Vz=d6(),$z=Uz(Y6()),rZ=(0,$z.default)("socket.io-client:url");function qz(J,Y="",W){let z=J;if(W=W||typeof location<"u"&&location,J==null)J=W.protocol+"//"+W.host;if(typeof J==="string"){if(J.charAt(0)==="/")if(J.charAt(1)==="/")J=W.protocol+J;else J=W.host+J;if(!/^(https?|wss?):\/\//.test(J))if(rZ("protocol-less url %s",J),typeof W<"u")J=W.protocol+"//"+J;else J="https://"+J;rZ("parse %s",J),z=(0,Vz.parse)(J)}if(!z.port){if(/^(http|ws)$/.test(z.protocol))z.port="80";else if(/^(http|ws)s$/.test(z.protocol))z.port="443"}z.path=z.path||"/";let F=z.host.indexOf(":")!==-1?"["+z.host+"]":z.host;return z.id=z.protocol+"://"+F+":"+z.port+Y,z.href=z.protocol+"://"+F+(W&&W.port===z.port?"":":"+z.port),z}});var VY=a((I8)=>{Object.defineProperty(I8,"__esModule",{value:!0});I8.hasBinary=I8.isBinary=void 0;var Fz=typeof ArrayBuffer==="function",Hz=(J)=>{return typeof ArrayBuffer.isView==="function"?ArrayBuffer.isView(J):J.buffer instanceof ArrayBuffer},tZ=Object.prototype.toString,Bz=typeof Blob==="function"||typeof Blob<"u"&&tZ.call(Blob)==="[object BlobConstructor]",Oz=typeof File==="function"||typeof File<"u"&&tZ.call(File)==="[object FileConstructor]";function oZ(J){return Fz&&(J instanceof ArrayBuffer||Hz(J))||Bz&&J instanceof Blob||Oz&&J instanceof File}I8.isBinary=oZ;function l6(J,Y){if(!J||typeof J!=="object")return!1;if(Array.isArray(J)){for(let W=0,z=J.length;W{Object.defineProperty(w8,"__esModule",{value:!0});w8.reconstructPacket=w8.deconstructPacket=void 0;var Rz=VY();function Az(J){let Y=[],W=J.data,z=J;return z.data=$Y(W,Y),z.attachments=Y.length,{packet:z,buffers:Y}}w8.deconstructPacket=Az;function $Y(J,Y){if(!J)return J;if((0,Rz.isBinary)(J)){let W={_placeholder:!0,num:Y.length};return Y.push(J),W}else if(Array.isArray(J)){let W=Array(J.length);for(let z=0;z=0&&J.num{function Nz(J){W.debug=W,W.default=W,W.coerce=N,W.disable=F,W.enable=V,W.enabled=E,W.humanize=y6(),W.destroy=I,Object.keys(J).forEach((G)=>{W[G]=J[G]}),W.names=[],W.skips=[],W.formatters={};function Y(G){let U=0;for(let R=0;R{if(q==="%%")return"%";u++;let s=W.formatters[n];if(typeof s==="function"){let r=C[u];q=s.call(T,r),C.splice(u,1),u--}return q}),W.formatArgs.call(T,C),(T.log||W.log).apply(T,C)}if(Q.namespace=G,Q.useColors=W.useColors(),Q.color=W.selectColor(G),Q.extend=z,Q.destroy=W.destroy,Object.defineProperty(Q,"enabled",{enumerable:!0,configurable:!1,get:()=>{if(R!==null)return R;if(P!==W.namespaces)P=W.namespaces,L=W.enabled(G);return L},set:(C)=>{R=C}}),typeof W.init==="function")W.init(Q);return Q}function z(G,U){let R=W(this.namespace+(typeof U>"u"?":":U)+G);return R.log=this.log,R}function V(G){W.save(G),W.namespaces=G,W.names=[],W.skips=[];let U,R=(typeof G==="string"?G:"").split(/[\s,]+/),P=R.length;for(U=0;U"-"+U)].join(",");return W.enable(""),G}function E(G){if(G[G.length-1]==="*")return!0;let U,R;for(U=0,R=W.skips.length;U{g0.formatArgs=Pz;g0.save=Mz;g0.load=Sz;g0.useColors=Ez;g0.storage=Cz();g0.destroy=(()=>{let J=!1;return()=>{if(!J)J=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}})();g0.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Ez(){if(typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs))return!0;if(typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;let J;return typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&(J=navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/))&&parseInt(J[1],10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Pz(J){if(J[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+J[0]+(this.useColors?"%c ":" ")+"+"+n6.exports.humanize(this.diff),!this.useColors)return;let Y="color: "+this.color;J.splice(1,0,Y,"color: inherit");let W=0,z=0;J[0].replace(/%[a-zA-Z%]/g,(V)=>{if(V==="%%")return;if(W++,V==="%c")z=W}),J.splice(z,0,Y)}g0.log=console.debug||console.log||(()=>{});function Mz(J){try{if(J)g0.storage.setItem("debug",J);else g0.storage.removeItem("debug")}catch(Y){}}function Sz(){let J;try{J=g0.storage.getItem("debug")}catch(Y){}if(!J&&typeof process<"u"&&"env"in process)J=process.env.DEBUG;return J}function Cz(){try{return localStorage}catch(J){}}n6.exports=Y3()(g0);var{formatters:Qz}=n6.exports;Qz.j=function(J){try{return JSON.stringify(J)}catch(Y){return"[UnexpectedJSONParseError]: "+Y.message}}});var s6=a((t0)=>{Object.defineProperty(t0,"__esModule",{value:!0});t0.Decoder=t0.Encoder=t0.PacketType=t0.protocol=void 0;var Tz=d1(),K3=eZ(),z3=VY(),Lz=Z3(),FY=(0,Lz.default)("socket.io-parser"),Dz=["connect","connect_error","disconnect","disconnecting","newListener","removeListener"];t0.protocol=5;var H0;(function(J){J[J.CONNECT=0]="CONNECT",J[J.DISCONNECT=1]="DISCONNECT",J[J.EVENT=2]="EVENT",J[J.ACK=3]="ACK",J[J.CONNECT_ERROR=4]="CONNECT_ERROR",J[J.BINARY_EVENT=5]="BINARY_EVENT",J[J.BINARY_ACK=6]="BINARY_ACK"})(H0=t0.PacketType||(t0.PacketType={}));class G3{constructor(J){this.replacer=J}encode(J){if(FY("encoding packet %j",J),J.type===H0.EVENT||J.type===H0.ACK){if((0,z3.hasBinary)(J))return this.encodeAsBinary({type:J.type===H0.EVENT?H0.BINARY_EVENT:H0.BINARY_ACK,nsp:J.nsp,data:J.data,id:J.id})}return[this.encodeAsString(J)]}encodeAsString(J){let Y=""+J.type;if(J.type===H0.BINARY_EVENT||J.type===H0.BINARY_ACK)Y+=J.attachments+"-";if(J.nsp&&J.nsp!=="/")Y+=J.nsp+",";if(J.id!=null)Y+=J.id;if(J.data!=null)Y+=JSON.stringify(J.data,this.replacer);return FY("encoded %j as %s",J,Y),Y}encodeAsBinary(J){let Y=(0,K3.deconstructPacket)(J),W=this.encodeAsString(Y.packet),z=Y.buffers;return z.unshift(W),z}}t0.Encoder=G3;function W3(J){return Object.prototype.toString.call(J)==="[object Object]"}class HY extends Tz.Emitter{constructor(J){super();this.reviver=J}add(J){let Y;if(typeof J==="string"){if(this.reconstructor)throw Error("got plaintext data when reconstructing a packet");Y=this.decodeString(J);let W=Y.type===H0.BINARY_EVENT;if(W||Y.type===H0.BINARY_ACK){if(Y.type=W?H0.EVENT:H0.ACK,this.reconstructor=new X3(Y),Y.attachments===0)super.emitReserved("decoded",Y)}else super.emitReserved("decoded",Y)}else if((0,z3.isBinary)(J)||J.base64){if(!this.reconstructor)throw Error("got binary data when not reconstructing a packet");else if(Y=this.reconstructor.takeBinaryData(J),Y)this.reconstructor=null,super.emitReserved("decoded",Y)}else throw Error("Unknown type: "+J)}decodeString(J){let Y=0,W={type:Number(J.charAt(0))};if(H0[W.type]===void 0)throw Error("unknown packet type "+W.type);if(W.type===H0.BINARY_EVENT||W.type===H0.BINARY_ACK){let V=Y+1;while(J.charAt(++Y)!=="-"&&Y!=J.length);let F=J.substring(V,Y);if(F!=Number(F)||J.charAt(Y)!=="-")throw Error("Illegal attachments");W.attachments=Number(F)}if(J.charAt(Y+1)==="/"){let V=Y+1;while(++Y){if(J.charAt(Y)===",")break;if(Y===J.length)break}W.nsp=J.substring(V,Y)}else W.nsp="/";let z=J.charAt(Y+1);if(z!==""&&Number(z)==z){let V=Y+1;while(++Y){let F=J.charAt(Y);if(F==null||Number(F)!=F){--Y;break}if(Y===J.length)break}W.id=Number(J.substring(V,Y+1))}if(J.charAt(++Y)){let V=this.tryParse(J.substr(Y));if(HY.isPayloadValid(W.type,V))W.data=V;else throw Error("invalid payload")}return FY("decoded %s as %j",J,W),W}tryParse(J){try{return JSON.parse(J,this.reviver)}catch(Y){return!1}}static isPayloadValid(J,Y){switch(J){case H0.CONNECT:return W3(Y);case H0.DISCONNECT:return Y===void 0;case H0.CONNECT_ERROR:return typeof Y==="string"||W3(Y);case H0.EVENT:case H0.BINARY_EVENT:return Array.isArray(Y)&&(typeof Y[0]==="number"||typeof Y[0]==="string"&&Dz.indexOf(Y[0])===-1);case H0.ACK:case H0.BINARY_ACK:return Array.isArray(Y)}}destroy(){if(this.reconstructor)this.reconstructor.finishedReconstruction(),this.reconstructor=null}}t0.Decoder=HY;class X3{constructor(J){this.packet=J,this.buffers=[],this.reconPack=J}takeBinaryData(J){if(this.buffers.push(J),this.buffers.length===this.reconPack.attachments){let Y=(0,K3.reconstructPacket)(this.reconPack,this.buffers);return this.finishedReconstruction(),Y}return null}finishedReconstruction(){this.reconPack=null,this.buffers=[]}}});var OY=a((BY)=>{Object.defineProperty(BY,"__esModule",{value:!0});BY.on=Iz;function Iz(J,Y,W){return J.on(Y,W),function(){J.off(Y,W)}}});var RY=a((j8)=>{var wz=j8&&j8.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(j8,"__esModule",{value:!0});j8.Socket=void 0;var o0=s6(),r6=OY(),jz=d1(),kz=wz(Y6()),A0=(0,kz.default)("socket.io-client:socket"),xz=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class U3 extends jz.Emitter{constructor(J,Y,W){super();if(this.connected=!1,this.recovered=!1,this.receiveBuffer=[],this.sendBuffer=[],this._queue=[],this._queueSeq=0,this.ids=0,this.acks={},this.flags={},this.io=J,this.nsp=Y,W&&W.auth)this.auth=W.auth;if(this._opts=Object.assign({},W),this.io._autoConnect)this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;let J=this.io;this.subs=[(0,r6.on)(J,"open",this.onopen.bind(this)),(0,r6.on)(J,"packet",this.onpacket.bind(this)),(0,r6.on)(J,"error",this.onerror.bind(this)),(0,r6.on)(J,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){if(this.connected)return this;if(this.subEvents(),!this.io._reconnecting)this.io.open();if(this.io._readyState==="open")this.onopen();return this}open(){return this.connect()}send(...J){return J.unshift("message"),this.emit.apply(this,J),this}emit(J,...Y){var W,z,V;if(xz.hasOwnProperty(J))throw Error('"'+J.toString()+'" is a reserved event name');if(Y.unshift(J),this._opts.retries&&!this.flags.fromQueue&&!this.flags.volatile)return this._addToQueue(Y),this;let F={type:o0.PacketType.EVENT,data:Y};if(F.options={},F.options.compress=this.flags.compress!==!1,typeof Y[Y.length-1]==="function"){let I=this.ids++;A0("emitting packet with ack id %d",I);let G=Y.pop();this._registerAckCallback(I,G),F.id=I}let E=(z=(W=this.io.engine)===null||W===void 0?void 0:W.transport)===null||z===void 0?void 0:z.writable,A=this.connected&&!((V=this.io.engine)===null||V===void 0?void 0:V._hasPingExpired());if(this.flags.volatile&&!E)A0("discard packet as the transport is not currently writable");else if(A)this.notifyOutgoingListeners(F),this.packet(F);else this.sendBuffer.push(F);return this.flags={},this}_registerAckCallback(J,Y){var W;let z=(W=this.flags.timeout)!==null&&W!==void 0?W:this._opts.ackTimeout;if(z===void 0){this.acks[J]=Y;return}let V=this.io.setTimeoutFn(()=>{delete this.acks[J];for(let E=0;E{this.io.clearTimeoutFn(V),Y.apply(this,E)};F.withError=!0,this.acks[J]=F}emitWithAck(J,...Y){return new Promise((W,z)=>{let V=(F,E)=>{return F?z(F):W(E)};V.withError=!0,Y.push(V),this.emit(J,...Y)})}_addToQueue(J){let Y;if(typeof J[J.length-1]==="function")Y=J.pop();let W={id:this._queueSeq++,tryCount:0,pending:!1,args:J,flags:Object.assign({fromQueue:!0},this.flags)};J.push((z,...V)=>{if(W!==this._queue[0])return A0("packet [%d] already acknowledged",W.id);if(z!==null){if(W.tryCount>this._opts.retries){if(A0("packet [%d] is discarded after %d tries",W.id,W.tryCount),this._queue.shift(),Y)Y(z)}}else if(A0("packet [%d] was successfully sent",W.id),this._queue.shift(),Y)Y(null,...V);return W.pending=!1,this._drainQueue()}),this._queue.push(W),this._drainQueue()}_drainQueue(J=!1){if(A0("draining queue"),!this.connected||this._queue.length===0)return;let Y=this._queue[0];if(Y.pending&&!J){A0("packet [%d] has already been sent and is waiting for an ack",Y.id);return}Y.pending=!0,Y.tryCount++,A0("sending packet [%d] (try n°%d)",Y.id,Y.tryCount),this.flags=Y.flags,this.emit.apply(this,Y.args)}packet(J){J.nsp=this.nsp,this.io._packet(J)}onopen(){if(A0("transport is open - connecting"),typeof this.auth=="function")this.auth((J)=>{this._sendConnectPacket(J)});else this._sendConnectPacket(this.auth)}_sendConnectPacket(J){this.packet({type:o0.PacketType.CONNECT,data:this._pid?Object.assign({pid:this._pid,offset:this._lastOffset},J):J})}onerror(J){if(!this.connected)this.emitReserved("connect_error",J)}onclose(J,Y){A0("close (%s)",J),this.connected=!1,delete this.id,this.emitReserved("disconnect",J,Y),this._clearAcks()}_clearAcks(){Object.keys(this.acks).forEach((J)=>{if(!this.sendBuffer.some((W)=>String(W.id)===J)){let W=this.acks[J];if(delete this.acks[J],W.withError)W.call(this,Error("socket has been disconnected"))}})}onpacket(J){if(J.nsp!==this.nsp)return;switch(J.type){case o0.PacketType.CONNECT:if(J.data&&J.data.sid)this.onconnect(J.data.sid,J.data.pid);else this.emitReserved("connect_error",Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case o0.PacketType.EVENT:case o0.PacketType.BINARY_EVENT:this.onevent(J);break;case o0.PacketType.ACK:case o0.PacketType.BINARY_ACK:this.onack(J);break;case o0.PacketType.DISCONNECT:this.ondisconnect();break;case o0.PacketType.CONNECT_ERROR:this.destroy();let W=Error(J.data.message);W.data=J.data.data,this.emitReserved("connect_error",W);break}}onevent(J){let Y=J.data||[];if(A0("emitting event %j",Y),J.id!=null)A0("attaching ack callback to event"),Y.push(this.ack(J.id));if(this.connected)this.emitEvent(Y);else this.receiveBuffer.push(Object.freeze(Y))}emitEvent(J){if(this._anyListeners&&this._anyListeners.length){let Y=this._anyListeners.slice();for(let W of Y)W.apply(this,J)}if(super.emit.apply(this,J),this._pid&&J.length&&typeof J[J.length-1]==="string")this._lastOffset=J[J.length-1]}ack(J){let Y=this,W=!1;return function(...z){if(W)return;W=!0,A0("sending ack %j",z),Y.packet({type:o0.PacketType.ACK,id:J,data:z})}}onack(J){let Y=this.acks[J.id];if(typeof Y!=="function"){A0("bad ack %s",J.id);return}if(delete this.acks[J.id],A0("calling ack %s with %j",J.id,J.data),Y.withError)J.data.unshift(null);Y.apply(this,J.data)}onconnect(J,Y){A0("socket connected with id %s",J),this.id=J,this.recovered=Y&&this._pid===Y,this._pid=Y,this.connected=!0,this.emitBuffered(),this._drainQueue(!0),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach((J)=>this.emitEvent(J)),this.receiveBuffer=[],this.sendBuffer.forEach((J)=>{this.notifyOutgoingListeners(J),this.packet(J)}),this.sendBuffer=[]}ondisconnect(){A0("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")}destroy(){if(this.subs)this.subs.forEach((J)=>J()),this.subs=void 0;this.io._destroy(this)}disconnect(){if(this.connected)A0("performing disconnect (%s)",this.nsp),this.packet({type:o0.PacketType.DISCONNECT});if(this.destroy(),this.connected)this.onclose("io client disconnect");return this}close(){return this.disconnect()}compress(J){return this.flags.compress=J,this}get volatile(){return this.flags.volatile=!0,this}timeout(J){return this.flags.timeout=J,this}onAny(J){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(J),this}prependAny(J){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(J),this}offAny(J){if(!this._anyListeners)return this;if(J){let Y=this._anyListeners;for(let W=0;W{Object.defineProperty(AY,"__esModule",{value:!0});AY.Backoff=k8;function k8(J){J=J||{},this.ms=J.min||100,this.max=J.max||1e4,this.factor=J.factor||2,this.jitter=J.jitter>0&&J.jitter<=1?J.jitter:0,this.attempts=0}k8.prototype.duration=function(){var J=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var Y=Math.random(),W=Math.floor(Y*this.jitter*J);J=(Math.floor(Y*10)&1)==0?J-W:J+W}return Math.min(J,this.max)|0};k8.prototype.reset=function(){this.attempts=0};k8.prototype.setMin=function(J){this.ms=J};k8.prototype.setMax=function(J){this.max=J};k8.prototype.setJitter=function(J){this.jitter=J}});var q3=a((c0)=>{var vz=c0&&c0.__createBinding||(Object.create?function(J,Y,W,z){if(z===void 0)z=W;var V=Object.getOwnPropertyDescriptor(Y,W);if(!V||("get"in V?!Y.__esModule:V.writable||V.configurable))V={enumerable:!0,get:function(){return Y[W]}};Object.defineProperty(J,z,V)}:function(J,Y,W,z){if(z===void 0)z=W;J[z]=Y[W]}),bz=c0&&c0.__setModuleDefault||(Object.create?function(J,Y){Object.defineProperty(J,"default",{enumerable:!0,value:Y})}:function(J,Y){J.default=Y}),hz=c0&&c0.__importStar||function(J){if(J&&J.__esModule)return J;var Y={};if(J!=null){for(var W in J)if(W!=="default"&&Object.prototype.hasOwnProperty.call(J,W))vz(Y,J,W)}return bz(Y,J),Y},yz=c0&&c0.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(c0,"__esModule",{value:!0});c0.Manager=void 0;var _Y=d6(),fz=RY(),gz=hz(s6()),r1=OY(),mz=V3(),pz=d1(),uz=yz(Y6()),M0=(0,uz.default)("socket.io-client:manager");class $3 extends pz.Emitter{constructor(J,Y){var W;super();if(this.nsps={},this.subs=[],J&&typeof J==="object")Y=J,J=void 0;Y=Y||{},Y.path=Y.path||"/socket.io",this.opts=Y,(0,_Y.installTimerFunctions)(this,Y),this.reconnection(Y.reconnection!==!1),this.reconnectionAttempts(Y.reconnectionAttempts||1/0),this.reconnectionDelay(Y.reconnectionDelay||1000),this.reconnectionDelayMax(Y.reconnectionDelayMax||5000),this.randomizationFactor((W=Y.randomizationFactor)!==null&&W!==void 0?W:0.5),this.backoff=new mz.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(Y.timeout==null?20000:Y.timeout),this._readyState="closed",this.uri=J;let z=Y.parser||gz;if(this.encoder=new z.Encoder,this.decoder=new z.Decoder,this._autoConnect=Y.autoConnect!==!1,this._autoConnect)this.open()}reconnection(J){if(!arguments.length)return this._reconnection;if(this._reconnection=!!J,!J)this.skipReconnect=!0;return this}reconnectionAttempts(J){if(J===void 0)return this._reconnectionAttempts;return this._reconnectionAttempts=J,this}reconnectionDelay(J){var Y;if(J===void 0)return this._reconnectionDelay;return this._reconnectionDelay=J,(Y=this.backoff)===null||Y===void 0||Y.setMin(J),this}randomizationFactor(J){var Y;if(J===void 0)return this._randomizationFactor;return this._randomizationFactor=J,(Y=this.backoff)===null||Y===void 0||Y.setJitter(J),this}reconnectionDelayMax(J){var Y;if(J===void 0)return this._reconnectionDelayMax;return this._reconnectionDelayMax=J,(Y=this.backoff)===null||Y===void 0||Y.setMax(J),this}timeout(J){if(!arguments.length)return this._timeout;return this._timeout=J,this}maybeReconnectOnOpen(){if(!this._reconnecting&&this._reconnection&&this.backoff.attempts===0)this.reconnect()}open(J){if(M0("readyState %s",this._readyState),~this._readyState.indexOf("open"))return this;M0("opening %s",this.uri),this.engine=new _Y.Socket(this.uri,this.opts);let Y=this.engine,W=this;this._readyState="opening",this.skipReconnect=!1;let z=(0,r1.on)(Y,"open",function(){W.onopen(),J&&J()}),V=(E)=>{if(M0("error"),this.cleanup(),this._readyState="closed",this.emitReserved("error",E),J)J(E);else this.maybeReconnectOnOpen()},F=(0,r1.on)(Y,"error",V);if(this._timeout!==!1){let E=this._timeout;M0("connect attempt will timeout after %d",E);let A=this.setTimeoutFn(()=>{M0("connect attempt timed out after %d",E),z(),V(Error("timeout")),Y.close()},E);if(this.opts.autoUnref)A.unref();this.subs.push(()=>{this.clearTimeoutFn(A)})}return this.subs.push(z),this.subs.push(F),this}connect(J){return this.open(J)}onopen(){M0("open"),this.cleanup(),this._readyState="open",this.emitReserved("open");let J=this.engine;this.subs.push((0,r1.on)(J,"ping",this.onping.bind(this)),(0,r1.on)(J,"data",this.ondata.bind(this)),(0,r1.on)(J,"error",this.onerror.bind(this)),(0,r1.on)(J,"close",this.onclose.bind(this)),(0,r1.on)(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(J){try{this.decoder.add(J)}catch(Y){this.onclose("parse error",Y)}}ondecoded(J){(0,_Y.nextTick)(()=>{this.emitReserved("packet",J)},this.setTimeoutFn)}onerror(J){M0("error",J),this.emitReserved("error",J)}socket(J,Y){let W=this.nsps[J];if(!W)W=new fz.Socket(this,J,Y),this.nsps[J]=W;else if(this._autoConnect&&!W.active)W.connect();return W}_destroy(J){let Y=Object.keys(this.nsps);for(let W of Y)if(this.nsps[W].active){M0("socket %s is still active, skipping close",W);return}this._close()}_packet(J){M0("writing packet %j",J);let Y=this.encoder.encode(J);for(let W=0;WJ()),this.subs.length=0,this.decoder.destroy()}_close(){M0("disconnect"),this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close")}disconnect(){return this._close()}onclose(J,Y){var W;if(M0("closed due to %s",J),this.cleanup(),(W=this.engine)===null||W===void 0||W.close(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",J,Y),this._reconnection&&!this.skipReconnect)this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;let J=this;if(this.backoff.attempts>=this._reconnectionAttempts)M0("reconnect failed"),this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{let Y=this.backoff.duration();M0("will wait %dms before reconnect attempt",Y),this._reconnecting=!0;let W=this.setTimeoutFn(()=>{if(J.skipReconnect)return;if(M0("attempting reconnect"),this.emitReserved("reconnect_attempt",J.backoff.attempts),J.skipReconnect)return;J.open((z)=>{if(z)M0("reconnect attempt error"),J._reconnecting=!1,J.reconnect(),this.emitReserved("reconnect_error",z);else M0("reconnect success"),J.onreconnect()})},Y);if(this.opts.autoUnref)W.unref();this.subs.push(()=>{this.clearTimeoutFn(W)})}}onreconnect(){let J=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",J)}}c0.Manager=$3});var O3=a((q0,B3)=>{var cz=q0&&q0.__importDefault||function(J){return J&&J.__esModule?J:{default:J}};Object.defineProperty(q0,"__esModule",{value:!0});q0.WebTransport=q0.WebSocket=q0.NodeWebSocket=q0.XHR=q0.NodeXHR=q0.Fetch=q0.Socket=q0.Manager=q0.protocol=void 0;q0.io=a1;q0.connect=a1;q0.default=a1;var dz=aZ(),a6=q3();Object.defineProperty(q0,"Manager",{enumerable:!0,get:function(){return a6.Manager}});var H3=RY();Object.defineProperty(q0,"Socket",{enumerable:!0,get:function(){return H3.Socket}});var iz=cz(Y6()),F3=(0,iz.default)("socket.io-client"),W6={};function a1(J,Y){if(typeof J==="object")Y=J,J=void 0;Y=Y||{};let W=(0,dz.url)(J,Y.path||"/socket.io"),z=W.source,V=W.id,F=W.path,E=W6[V]&&F in W6[V].nsps,A=Y.forceNew||Y["force new connection"]||Y.multiplex===!1||E,N;if(A)F3("ignoring socket cache for %s",z),N=new a6.Manager(z,Y);else{if(!W6[V])F3("new io instance for %s",z),W6[V]=new a6.Manager(z,Y);N=W6[V]}if(W.query&&!Y.query)Y.query=W.queryKey;return N.socket(W.path,Y)}Object.assign(a1,{Manager:a6.Manager,Socket:H3.Socket,io:a1,connect:a1});var lz=s6();Object.defineProperty(q0,"protocol",{enumerable:!0,get:function(){return lz.protocol}});var x8=d6();Object.defineProperty(q0,"Fetch",{enumerable:!0,get:function(){return x8.Fetch}});Object.defineProperty(q0,"NodeXHR",{enumerable:!0,get:function(){return x8.NodeXHR}});Object.defineProperty(q0,"XHR",{enumerable:!0,get:function(){return x8.XHR}});Object.defineProperty(q0,"NodeWebSocket",{enumerable:!0,get:function(){return x8.NodeWebSocket}});Object.defineProperty(q0,"WebSocket",{enumerable:!0,get:function(){return x8.WebSocket}});Object.defineProperty(q0,"WebTransport",{enumerable:!0,get:function(){return x8.WebTransport}});B3.exports=a1});var A3=a((K6)=>{var b0={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},MY={silent:{level:-1},fatal:{level:b0.fatal},error:{level:b0.error},warn:{level:b0.warn},log:{level:b0.log},info:{level:b0.info},success:{level:b0.success},fail:{level:b0.fail},ready:{level:b0.info},start:{level:b0.info},box:{level:b0.info},debug:{level:b0.debug},trace:{level:b0.trace},verbose:{level:b0.verbose}};function NY(J){if(J===null||typeof J!=="object")return!1;let Y=Object.getPrototypeOf(J);if(Y!==null&&Y!==Object.prototype&&Object.getPrototypeOf(Y)!==null)return!1;if(Symbol.iterator in J)return!1;if(Symbol.toStringTag in J)return Object.prototype.toString.call(J)==="[object Module]";return!0}function SY(J,Y,W=".",z){if(!NY(Y))return SY(J,{},W,z);let V=Object.assign({},Y);for(let F in J){if(F==="__proto__"||F==="constructor")continue;let E=J[F];if(E===null||E===void 0)continue;if(z&&z(V,F,E,W))continue;if(Array.isArray(E)&&Array.isArray(V[F]))V[F]=[...E,...V[F]];else if(NY(E)&&NY(V[F]))V[F]=SY(E,V[F],(W?`${W}.`:"")+F.toString(),z);else V[F]=E}return V}function nz(J){return(...Y)=>Y.reduce((W,z)=>SY(W,z,"",J),{})}var sz=nz();function rz(J){return Object.prototype.toString.call(J)==="[object Object]"}function az(J){if(!rz(J))return!1;if(!J.message&&!J.args)return!1;if(J.stack)return!1;return!0}var EY=!1,R3=[];class N0{options;_lastLog;_mockFn;constructor(J={}){let Y=J.types||MY;this.options=sz({...J,defaults:{...J.defaults},level:PY(J.level,Y),reporters:[...J.reporters||[]]},{types:MY,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let W in Y){let z={type:W,...this.options.defaults,...Y[W]};this[W]=this._wrapLogFn(z),this[W].raw=this._wrapLogFn(z,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(J){this.options.level=PY(J,this.options.types,this.options.level)}prompt(J,Y){if(!this.options.prompt)throw Error("prompt is not supported!");return this.options.prompt(J,Y)}create(J){let Y=new N0({...this.options,...J});if(this._mockFn)Y.mockTypes(this._mockFn);return Y}withDefaults(J){return this.create({...this.options,defaults:{...this.options.defaults,...J}})}withTag(J){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+J:J})}addReporter(J){return this.options.reporters.push(J),this}removeReporter(J){if(J){let Y=this.options.reporters.indexOf(J);if(Y!==-1)return this.options.reporters.splice(Y,1)}else this.options.reporters.splice(0);return this}setReporters(J){return this.options.reporters=Array.isArray(J)?J:[J],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let J in this.options.types){if(!console["__"+J])console["__"+J]=console[J];console[J]=this[J].raw}}restoreConsole(){for(let J in this.options.types)if(console["__"+J])console[J]=console["__"+J],delete console["__"+J]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(J,Y){if(!J)return;if(!J.__write)J.__write=J.write;J.write=(W)=>{this[Y].raw(String(W).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(J){if(!J)return;if(J.__write)J.write=J.__write,delete J.__write}pauseLogs(){EY=!0}resumeLogs(){EY=!1;let J=R3.splice(0);for(let Y of J)Y[0]._logFn(Y[1],Y[2])}mockTypes(J){let Y=J||this.options.mockFn;if(this._mockFn=Y,typeof Y!=="function")return;for(let W in this.options.types)this[W]=Y(W,this.options.types[W])||this[W],this[W].raw=this[W]}_wrapLogFn(J,Y){return(...W)=>{if(EY){R3.push([this,J,W,Y]);return}return this._logFn(J,W,Y)}}_logFn(J,Y,W){if((J.level||0)>this.level)return!1;let z={date:new Date,args:[],...J,level:PY(J.level,this.options.types)};if(!W&&Y.length===1&&az(Y[0]))Object.assign(z,Y[0]);else z.args=[...Y];if(z.message)z.args.unshift(z.message),delete z.message;if(z.additional){if(!Array.isArray(z.additional))z.additional=z.additional.split(` `);z.args.push(` `+z.additional.join(` -`)),delete z.additional}z.type=typeof z.type==="string"?z.type.toLowerCase():"log",z.tag=typeof z.tag==="string"?z.tag:"";let V=(E=!1)=>{let _=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&_>0){let A=[...this._lastLog.object.args];if(_>1)A.push(`(repeated ${_} times)`);this._log({...this._lastLog.object,args:A}),this._lastLog.count=1}if(E)this._lastLog.object=z,this._log(z)};clearTimeout(this._lastLog.timeout);let H=this._lastLog.time&&z.date?z.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=z.date,Hthis.options.throttleMin){this._lastLog.timeout=setTimeout(V,this.options.throttle);return}}}catch{}V(!0)}_log(J){for(let Y of this.options.reporters)Y.log(J,{options:this.options})}}function AY(J,Y={},W=3){if(J===void 0)return W;if(typeof J==="number")return J;if(Y[J]&&Y[J].level!==void 0)return Y[J].level;return W}A0.prototype.add=A0.prototype.addReporter;A0.prototype.remove=A0.prototype.removeReporter;A0.prototype.clear=A0.prototype.removeReporter;A0.prototype.withScope=A0.prototype.withTag;A0.prototype.mock=A0.prototype.mockTypes;A0.prototype.pause=A0.prototype.pauseLogs;A0.prototype.resume=A0.prototype.resumeLogs;function sz(J={}){return new A0(J)}W6.Consola=A0;W6.LogLevels=b0;W6.LogTypes=EY;W6.createConsola=sz});var _3=a((w1)=>{Object.defineProperty(w1,"__esModule",{value:!0});var a6=B3();class N3{options;defaultColor;levelColorMap;typeColorMap;constructor(J){this.options={...J},this.defaultColor="#7f8c8d",this.levelColorMap={0:"#c0392b",1:"#f39c12",3:"#00BCD4"},this.typeColorMap={success:"#2ecc71"}}_getLogFn(J){if(J<1)return console.__error||console.error;if(J===1)return console.__warn||console.warn;return console.__log||console.log}log(J){let Y=this._getLogFn(J.level),W=J.type==="log"?"":J.type,z=J.tag||"",H=` +`)),delete z.additional}z.type=typeof z.type==="string"?z.type.toLowerCase():"log",z.tag=typeof z.tag==="string"?z.tag:"";let V=(E=!1)=>{let A=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&A>0){let N=[...this._lastLog.object.args];if(A>1)N.push(`(repeated ${A} times)`);this._log({...this._lastLog.object,args:N}),this._lastLog.count=1}if(E)this._lastLog.object=z,this._log(z)};clearTimeout(this._lastLog.timeout);let F=this._lastLog.time&&z.date?z.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=z.date,Fthis.options.throttleMin){this._lastLog.timeout=setTimeout(V,this.options.throttle);return}}}catch{}V(!0)}_log(J){for(let Y of this.options.reporters)Y.log(J,{options:this.options})}}function PY(J,Y={},W=3){if(J===void 0)return W;if(typeof J==="number")return J;if(Y[J]&&Y[J].level!==void 0)return Y[J].level;return W}N0.prototype.add=N0.prototype.addReporter;N0.prototype.remove=N0.prototype.removeReporter;N0.prototype.clear=N0.prototype.removeReporter;N0.prototype.withScope=N0.prototype.withTag;N0.prototype.mock=N0.prototype.mockTypes;N0.prototype.pause=N0.prototype.pauseLogs;N0.prototype.resume=N0.prototype.resumeLogs;function tz(J={}){return new N0(J)}K6.Consola=N0;K6.LogLevels=b0;K6.LogTypes=MY;K6.createConsola=tz});var P3=a((w1)=>{Object.defineProperty(w1,"__esModule",{value:!0});var t6=A3();class _3{options;defaultColor;levelColorMap;typeColorMap;constructor(J){this.options={...J},this.defaultColor="#7f8c8d",this.levelColorMap={0:"#c0392b",1:"#f39c12",3:"#00BCD4"},this.typeColorMap={success:"#2ecc71"}}_getLogFn(J){if(J<1)return console.__error||console.error;if(J===1)return console.__warn||console.warn;return console.__log||console.log}log(J){let Y=this._getLogFn(J.level),W=J.type==="log"?"":J.type,z=J.tag||"",F=` background: ${this.typeColorMap[J.type]||this.levelColorMap[J.level]||this.defaultColor}; border-radius: 0.5em; color: white; font-weight: bold; padding: 2px 0.5em; - `,E=`%c${[z,W].filter(Boolean).join(":")}`;if(typeof J.args[0]==="string")Y(`${E}%c ${J.args[0]}`,H,"",...J.args.slice(1));else Y(E,H,...J.args)}}function O3(J={}){return a6.createConsola({reporters:J.reporters||[new N3({})],prompt(W,z={}){if(z.type==="confirm")return Promise.resolve(confirm(W));return Promise.resolve(prompt(W))},...J})}var R3=O3();w1.Consola=a6.Consola;w1.LogLevels=a6.LogLevels;w1.LogTypes=a6.LogTypes;w1.consola=R3;w1.createConsola=O3;w1.default=R3});var XG={};tW(XG,{clientLogger:()=>B,audioManager:()=>y});var oW=function(J){if(J){var Y=function(b){return[].slice.call(b)},W=0,z=1,V=2,H=3,E=[],_=null,A="requestAnimationFrame"in J?function(){var b=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{sync:!1};J.cancelAnimationFrame(_);var t=function(){return G(E.filter(function(N0){return N0.dirty&&N0.active}))};if(b.sync)return t();_=J.requestAnimationFrame(t)}:function(){},w=function(b){return function(t){E.forEach(function(N0){return N0.dirty=b}),A(t)}},G=function(b){b.filter(function(N0){return!N0.styleComputed}).forEach(function(N0){N0.styleComputed=L(N0)}),b.filter(Q).forEach(C);var t=b.filter(M);t.forEach(O),t.forEach(function(N0){C(N0),U(N0)}),t.forEach(T)},U=function(b){return b.dirty=W},O=function(b){b.availableWidth=b.element.parentNode.clientWidth,b.currentWidth=b.element.scrollWidth,b.previousFontSize=b.currentFontSize,b.currentFontSize=Math.min(Math.max(b.minSize,b.availableWidth/b.currentWidth*b.previousFontSize),b.maxSize),b.whiteSpace=b.multiLine&&b.currentFontSize===b.minSize?"normal":"nowrap"},M=function(b){return b.dirty!==V||b.dirty===V&&b.element.parentNode.clientWidth!==b.availableWidth},L=function(b){var t=J.getComputedStyle(b.element,null);return b.currentFontSize=parseFloat(t.getPropertyValue("font-size")),b.display=t.getPropertyValue("display"),b.whiteSpace=t.getPropertyValue("white-space"),!0},Q=function(b){var t=!1;return!b.preStyleTestCompleted&&(/inline-/.test(b.display)||(t=!0,b.display="inline-block"),b.whiteSpace!=="nowrap"&&(t=!0,b.whiteSpace="nowrap"),b.preStyleTestCompleted=!0,t)},C=function(b){b.element.style.whiteSpace=b.whiteSpace,b.element.style.display=b.display,b.element.style.fontSize=b.currentFontSize+"px"},T=function(b){b.element.dispatchEvent(new CustomEvent("fit",{detail:{oldValue:b.previousFontSize,newValue:b.currentFontSize,scaleFactor:b.currentFontSize/b.previousFontSize}}))},v=function(b,t){return function(N0){b.dirty=t,b.active&&A(N0)}},p=function(b){return function(){E=E.filter(function(t){return t.element!==b.element}),b.observeMutations&&b.observer.disconnect(),b.element.style.whiteSpace=b.originalStyle.whiteSpace,b.element.style.display=b.originalStyle.display,b.element.style.fontSize=b.originalStyle.fontSize}},u=function(b){return function(){b.active||(b.active=!0,A())}},z0=function(b){return function(){return b.active=!1}},F=function(b){b.observeMutations&&(b.observer=new MutationObserver(v(b,z)),b.observer.observe(b.element,b.observeMutations))},n={minSize:16,maxSize:512,multiLine:!0,observeMutations:"MutationObserver"in J&&{subtree:!0,childList:!0,characterData:!0}},s=null,r=function(){J.clearTimeout(s),s=J.setTimeout(w(V),_0.observeWindowDelay)},B0=["resize","orientationchange"];return Object.defineProperty(_0,"observeWindow",{set:function(b){var t="".concat(b?"add":"remove","EventListener");B0.forEach(function(N0){J[t](N0,r)})}}),_0.observeWindow=!0,_0.observeWindowDelay=100,_0.fitAll=w(H),_0}function i0(b,t){var N0=Object.assign({},n,t),v8=b.map(function(l0){var v1=Object.assign({},N0,{element:l0,active:!0});return function(h0){h0.originalStyle={whiteSpace:h0.element.style.whiteSpace,display:h0.element.style.display,fontSize:h0.element.style.fontSize},F(h0),h0.newbie=!0,h0.dirty=!0,E.push(h0)}(v1),{element:l0,fit:v(v1,H),unfreeze:u(v1),freeze:z0(v1),unsubscribe:p(v1)}});return A(),v8}function _0(b){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return typeof b=="string"?i0(Y(document.querySelectorAll(b)),t):i0([b],t)[0]}}(typeof window>"u"?null:window),QJ=oW;/*! + `,E=`%c${[z,W].filter(Boolean).join(":")}`;if(typeof J.args[0]==="string")Y(`${E}%c ${J.args[0]}`,F,"",...J.args.slice(1));else Y(E,F,...J.args)}}function N3(J={}){return t6.createConsola({reporters:J.reporters||[new _3({})],prompt(W,z={}){if(z.type==="confirm")return Promise.resolve(confirm(W));return Promise.resolve(prompt(W))},...J})}var E3=N3();w1.Consola=t6.Consola;w1.LogLevels=t6.LogLevels;w1.LogTypes=t6.LogTypes;w1.consola=E3;w1.createConsola=N3;w1.default=E3});var $G={};JK($G,{clientLogger:()=>B,audioManager:()=>h});var YK=function(J){if(J){var Y=function(b){return[].slice.call(b)},W=0,z=1,V=2,F=3,E=[],A=null,N="requestAnimationFrame"in J?function(){var b=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{sync:!1};J.cancelAnimationFrame(A);var t=function(){return G(E.filter(function(O0){return O0.dirty&&O0.active}))};if(b.sync)return t();A=J.requestAnimationFrame(t)}:function(){},I=function(b){return function(t){E.forEach(function(O0){return O0.dirty=b}),N(t)}},G=function(b){b.filter(function(O0){return!O0.styleComputed}).forEach(function(O0){O0.styleComputed=L(O0)}),b.filter(Q).forEach(C);var t=b.filter(P);t.forEach(R),t.forEach(function(O0){C(O0),U(O0)}),t.forEach(T)},U=function(b){return b.dirty=W},R=function(b){b.availableWidth=b.element.parentNode.clientWidth,b.currentWidth=b.element.scrollWidth,b.previousFontSize=b.currentFontSize,b.currentFontSize=Math.min(Math.max(b.minSize,b.availableWidth/b.currentWidth*b.previousFontSize),b.maxSize),b.whiteSpace=b.multiLine&&b.currentFontSize===b.minSize?"normal":"nowrap"},P=function(b){return b.dirty!==V||b.dirty===V&&b.element.parentNode.clientWidth!==b.availableWidth},L=function(b){var t=J.getComputedStyle(b.element,null);return b.currentFontSize=parseFloat(t.getPropertyValue("font-size")),b.display=t.getPropertyValue("display"),b.whiteSpace=t.getPropertyValue("white-space"),!0},Q=function(b){var t=!1;return!b.preStyleTestCompleted&&(/inline-/.test(b.display)||(t=!0,b.display="inline-block"),b.whiteSpace!=="nowrap"&&(t=!0,b.whiteSpace="nowrap"),b.preStyleTestCompleted=!0,t)},C=function(b){b.element.style.whiteSpace=b.whiteSpace,b.element.style.display=b.display,b.element.style.fontSize=b.currentFontSize+"px"},T=function(b){b.element.dispatchEvent(new CustomEvent("fit",{detail:{oldValue:b.previousFontSize,newValue:b.currentFontSize,scaleFactor:b.currentFontSize/b.previousFontSize}}))},v=function(b,t){return function(O0){b.dirty=t,b.active&&N(O0)}},p=function(b){return function(){E=E.filter(function(t){return t.element!==b.element}),b.observeMutations&&b.observer.disconnect(),b.element.style.whiteSpace=b.originalStyle.whiteSpace,b.element.style.display=b.originalStyle.display,b.element.style.fontSize=b.originalStyle.fontSize}},u=function(b){return function(){b.active||(b.active=!0,N())}},z0=function(b){return function(){return b.active=!1}},q=function(b){b.observeMutations&&(b.observer=new MutationObserver(v(b,z)),b.observer.observe(b.element,b.observeMutations))},n={minSize:16,maxSize:512,multiLine:!0,observeMutations:"MutationObserver"in J&&{subtree:!0,childList:!0,characterData:!0}},s=null,r=function(){J.clearTimeout(s),s=J.setTimeout(I(V),_0.observeWindowDelay)},B0=["resize","orientationchange"];return Object.defineProperty(_0,"observeWindow",{set:function(b){var t="".concat(b?"add":"remove","EventListener");B0.forEach(function(O0){J[t](O0,r)})}}),_0.observeWindow=!0,_0.observeWindowDelay=100,_0.fitAll=I(F),_0}function i0(b,t){var O0=Object.assign({},n,t),v8=b.map(function(l0){var v1=Object.assign({},O0,{element:l0,active:!0});return function(h0){h0.originalStyle={whiteSpace:h0.element.style.whiteSpace,display:h0.element.style.display,fontSize:h0.element.style.fontSize},q(h0),h0.newbie=!0,h0.dirty=!0,E.push(h0)}(v1),{element:l0,fit:v(v1,F),unfreeze:u(v1),freeze:z0(v1),unsubscribe:p(v1)}});return N(),v8}function _0(b){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return typeof b=="string"?i0(Y(document.querySelectorAll(b)),t):i0([b],t)[0]}}(typeof window>"u"?null:window),TJ=YK;/*! * jQuery JavaScript Library v4.0.0 * https://jquery.com/ * @@ -34,10 +34,10 @@ * https://jquery.com/license/ * * Date: 2026-01-18T00:20Z - */function eW(J,Y){if(typeof J>"u"||!J.document)throw Error("jQuery requires a window with a document");var W=[],z=Object.getPrototypeOf,V=W.slice,H=W.flat?function(Z){return W.flat.call(Z)}:function(Z){return W.concat.apply([],Z)},E=W.push,_=W.indexOf,A={},w=A.toString,G=A.hasOwnProperty,U=G.toString,O=U.call(Object),M={};function L(Z){if(Z==null)return Z+"";return typeof Z==="object"?A[w.call(Z)]||"object":typeof Z}function Q(Z){return Z!=null&&Z===Z.window}function C(Z){var K=!!Z&&Z.length,X=L(Z);if(typeof Z==="function"||Q(Z))return!1;return X==="array"||K===0||typeof K==="number"&&K>0&&K-1 in Z}var T=J.document,v={type:!0,src:!0,nonce:!0,noModule:!0};function p(Z,K,X){X=X||T;var $,q=X.createElement("script");q.text=Z;for($ in v)if(K&&K[$])q[$]=K[$];if(X.head.appendChild(q).parentNode)q.parentNode.removeChild(q)}var u="4.0.0",z0=/HTML$/i,F=function(Z,K){return new F.fn.init(Z,K)};if(F.fn=F.prototype={jquery:u,constructor:F,length:0,toArray:function(){return V.call(this)},get:function(Z){if(Z==null)return V.call(this);return Z<0?this[Z+this.length]:this[Z]},pushStack:function(Z){var K=F.merge(this.constructor(),Z);return K.prevObject=this,K},each:function(Z){return F.each(this,Z)},map:function(Z){return this.pushStack(F.map(this,function(K,X){return Z.call(K,X,K)}))},slice:function(){return this.pushStack(V.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(F.grep(this,function(Z,K){return(K+1)%2}))},odd:function(){return this.pushStack(F.grep(this,function(Z,K){return K%2}))},eq:function(Z){var K=this.length,X=+Z+(Z<0?K:0);return this.pushStack(X>=0&&X+~]|"+r+")"+r+"*"),N0=new RegExp(r+"|>"),v8=/[+~]/,l0=T.documentElement,v1=l0.matches||l0.msMatchesSelector;function h0(){var Z=[];function K(X,$){if(Z.push(X+" ")>F.expr.cacheLength)delete K[Z.shift()];return K[X+" "]=$}return K}function ZJ(Z){return Z&&typeof Z.getElementsByTagName<"u"&&Z}var DY="\\["+r+"*("+b+")(?:"+r+"*([*^$|!~]?=)"+r+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+b+"))|)"+r+"*\\]",IY=":("+b+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+DY+")*)|.*)\\)|)",WJ={ID:new RegExp("^#("+b+")"),CLASS:new RegExp("^\\.("+b+")"),TAG:new RegExp("^("+b+"|[*])"),ATTR:new RegExp("^"+DY),PSEUDO:new RegExp("^"+IY),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+r+"*(even|odd|(([+-]|)(\\d*)n|)"+r+"*(?:([+-]|)"+r+"*(\\d+)|))"+r+"*\\)|)","i")},I3=new RegExp(IY),w3=new RegExp("\\\\[\\da-fA-F]{1,6}"+r+"?|\\\\([^\\r\\n\\f])","g"),j3=function(Z,K){var X="0x"+Z.slice(1)-65536;if(K)return K;return X<0?String.fromCharCode(X+65536):String.fromCharCode(X>>10|55296,X&1023|56320)};function M1(Z){return Z.replace(w3,j3)}function b8(Z){F.error("Syntax error, unrecognized expression: "+Z)}var x3=new RegExp("^"+r+"*,"+r+"*"),wY=h0();function h8(Z,K){var X,$,q,N,R,P,S,D=wY[Z+" "];if(D)return K?0:D.slice(0);R=Z,P=[],S=F.expr.preFilter;while(R){if(!X||($=x3.exec(R))){if($)R=R.slice($[0].length)||R;P.push(q=[])}if(X=!1,$=t.exec(R))X=$.shift(),q.push({value:X,type:$[0].replace(_0," ")}),R=R.slice(X.length);for(N in WJ)if(($=F.expr.match[N].exec(R))&&(!S[N]||($=S[N]($))))X=$.shift(),q.push({value:X,type:N,matches:$}),R=R.slice(X.length);if(!X)break}if(K)return R.length;return R?b8(Z):wY(Z,P).slice(0)}var k3={ATTR:function(Z){if(Z[1]=M1(Z[1]),Z[3]=M1(Z[3]||Z[4]||Z[5]||""),Z[2]==="~=")Z[3]=" "+Z[3]+" ";return Z.slice(0,4)},CHILD:function(Z){if(Z[1]=Z[1].toLowerCase(),Z[1].slice(0,3)==="nth"){if(!Z[3])b8(Z[0]);Z[4]=+(Z[4]?Z[5]+(Z[6]||1):2*(Z[3]==="even"||Z[3]==="odd")),Z[5]=+(Z[7]+Z[8]||Z[3]==="odd")}else if(Z[3])b8(Z[0]);return Z},PSEUDO:function(Z){var K,X=!Z[6]&&Z[2];if(WJ.CHILD.test(Z[0]))return null;if(Z[3])Z[2]=Z[4]||Z[5]||"";else if(X&&I3.test(X)&&(K=h8(X,!0))&&(K=X.indexOf(")",X.length-K)-X.length))Z[0]=Z[0].slice(0,K),Z[2]=X.slice(0,K);return Z.slice(0,3)}};function U6(Z){var K=0,X=Z.length,$="";for(;K1)},removeAttr:function(Z){return this.each(function(){F.removeAttr(this,Z)})}}),F.extend({attr:function(Z,K,X){var $,q,N=Z.nodeType;if(N===3||N===8||N===2)return;if(typeof Z.getAttribute>"u")return F.prop(Z,K,X);if(N!==1||!F.isXMLDoc(Z))q=F.attrHooks[K.toLowerCase()];if(X!==void 0){if(X===null||X===!1&&K.toLowerCase().indexOf("aria-")!==0){F.removeAttr(Z,K);return}if(q&&"set"in q&&($=q.set(Z,X,K))!==void 0)return $;return Z.setAttribute(K,X),X}if(q&&"get"in q&&($=q.get(Z,K))!==null)return $;return $=Z.getAttribute(K),$==null?void 0:$},attrHooks:{},removeAttr:function(Z,K){var X,$=0,q=K&&K.match(Y1);if(q&&Z.nodeType===1)while(X=q[$++])Z.removeAttribute(X)}}),B0)F.attrHooks.type={set:function(Z,K){if(K==="radio"&&n(Z,"input")){var X=Z.value;if(Z.setAttribute("type",K),X)Z.value=X;return K}}};var v3=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function b3(Z,K){if(K){if(Z==="\x00")return"�";return Z.slice(0,-1)+"\\"+Z.charCodeAt(Z.length-1).toString(16)+" "}return"\\"+Z}F.escapeSelector=function(Z){return(Z+"").replace(v3,b3)};var{sort:h3,splice:y3}=W,KJ;function f3(Z,K){if(Z===K)return KJ=!0,0;var X=!Z.compareDocumentPosition-!K.compareDocumentPosition;if(X)return X;if(X=(Z.ownerDocument||Z)==(K.ownerDocument||K)?Z.compareDocumentPosition(K):1,X&1){if(Z==T||Z.ownerDocument==T&&F.contains(T,Z))return-1;if(K==T||K.ownerDocument==T&&F.contains(T,K))return 1;return 0}return X&4?-1:1}F.uniqueSort=function(Z){var K,X=[],$=0,q=0;if(KJ=!1,h3.call(Z,f3),KJ){while(K=Z[q++])if(K===Z[q])$=X.push(q);while($--)y3.call(Z,X[$],1)}return Z},F.fn.uniqueSort=function(){return this.pushStack(F.uniqueSort(V.apply(this)))};var W8,V6,y0,jY,q1,H1=0,g3=0,xY=h0(),kY=h0(),$6=h0(),m3=new RegExp(r+"+","g"),p3=new RegExp("^"+b+"$"),vY=F.extend({needsContext:new RegExp("^"+r+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+r+"*((?:-\\d)?\\d*)"+r+"*\\)|)(?=[^-]|$)","i")},WJ),u3=/^(?:input|select|textarea|button)$/i,c3=/^h\d$/i,d3=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,i3=function(){K8()},l3=F6(function(Z){return Z.disabled===!0&&n(Z,"fieldset")},{dir:"parentNode",next:"legend"});function n0(Z,K,X,$){var q,N,R,P,S,D,j,k=K&&K.ownerDocument,I=K?K.nodeType:9;if(X=X||[],typeof Z!=="string"||!Z||I!==1&&I!==9&&I!==11)return X;if(!$){if(K8(K),K=K||y0,q1){if(I!==11&&(S=d3.exec(Z))){if(q=S[1]){if(I===9){if(R=K.getElementById(q))E.call(X,R);return X}else if(k&&(R=k.getElementById(q))&&F.contains(K,R))return E.call(X,R),X}else if(S[2])return E.apply(X,K.getElementsByTagName(Z)),X;else if((q=S[3])&&K.getElementsByClassName)return E.apply(X,K.getElementsByClassName(q)),X}if(!$6[Z+" "]&&(!i0||!i0.test(Z))){if(j=Z,k=K,I===1&&(N0.test(Z)||t.test(Z))){if(k=v8.test(Z)&&ZJ(K.parentNode)||K,k!=K||B0)if(P=K.getAttribute("id"))P=F.escapeSelector(P);else K.setAttribute("id",P=F.expando);D=h8(Z),N=D.length;while(N--)D[N]=(P?"#"+P:":scope")+" "+U6(D[N]);j=D.join(",")}try{return E.apply(X,k.querySelectorAll(j)),X}catch(x){$6(Z,!0)}finally{if(P===F.expando)K.removeAttribute("id")}}}}return yY(Z.replace(_0,"$1"),K,X,$)}function Z1(Z){return Z[F.expando]=!0,Z}function n3(Z){return function(K){return n(K,"input")&&K.type===Z}}function s3(Z){return function(K){return(n(K,"input")||n(K,"button"))&&K.type===Z}}function bY(Z){return function(K){if("form"in K){if(K.parentNode&&K.disabled===!1){if("label"in K)if("label"in K.parentNode)return K.parentNode.disabled===Z;else return K.disabled===Z;return K.isDisabled===Z||K.isDisabled!==!Z&&l3(K)===Z}return K.disabled===Z}else if("label"in K)return K.disabled===Z;return!1}}function b1(Z){return Z1(function(K){return K=+K,Z1(function(X,$){var q,N=Z([],X.length,K),R=N.length;while(R--)if(X[q=N[R]])X[q]=!($[q]=X[q])})})}function K8(Z){var K,X=Z?Z.ownerDocument||Z:T;if(X==y0||X.nodeType!==9)return;if(y0=X,jY=y0.documentElement,q1=!F.isXMLDoc(y0),B0&&T!=y0&&(K=y0.defaultView)&&K.top!==K)K.addEventListener("unload",i3)}n0.matches=function(Z,K){return n0(Z,null,null,K)},n0.matchesSelector=function(Z,K){if(K8(Z),q1&&!$6[K+" "]&&(!i0||!i0.test(K)))try{return v1.call(Z,K)}catch(X){$6(K,!0)}return n0(K,y0,null,[Z]).length>0},F.expr={cacheLength:50,createPseudo:Z1,match:vY,find:{ID:function(Z,K){if(typeof K.getElementById<"u"&&q1){var X=K.getElementById(Z);return X?[X]:[]}},TAG:function(Z,K){if(typeof K.getElementsByTagName<"u")return K.getElementsByTagName(Z);else return K.querySelectorAll(Z)},CLASS:function(Z,K){if(typeof K.getElementsByClassName<"u"&&q1)return K.getElementsByClassName(Z)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:k3,filter:{ID:function(Z){var K=M1(Z);return function(X){return X.getAttribute("id")===K}},TAG:function(Z){var K=M1(Z).toLowerCase();return Z==="*"?function(){return!0}:function(X){return n(X,K)}},CLASS:function(Z){var K=xY[Z+" "];return K||(K=new RegExp("(^|"+r+")"+Z+"("+r+"|$)"))&&xY(Z,function(X){return K.test(typeof X.className==="string"&&X.className||typeof X.getAttribute<"u"&&X.getAttribute("class")||"")})},ATTR:function(Z,K,X){return function($){var q=F.attr($,Z);if(q==null)return K==="!=";if(!K)return!0;if(q+="",K==="=")return q===X;if(K==="!=")return q!==X;if(K==="^=")return X&&q.indexOf(X)===0;if(K==="*=")return X&&q.indexOf(X)>-1;if(K==="$=")return X&&q.slice(-X.length)===X;if(K==="~=")return(" "+q.replace(m3," ")+" ").indexOf(X)>-1;if(K==="|=")return q===X||q.slice(0,X.length+1)===X+"-";return!1}},CHILD:function(Z,K,X,$,q){var N=Z.slice(0,3)!=="nth",R=Z.slice(-4)!=="last",P=K==="of-type";return $===1&&q===0?function(S){return!!S.parentNode}:function(S,D,j){var k,I,x,g,i,d=N!==R?"nextSibling":"previousSibling",q0=S.parentNode,V0=P&&S.nodeName.toLowerCase(),x0=!j&&!P,C0=!1;if(q0){if(N){while(d){x=S;while(x=x[d])if(P?n(x,V0):x.nodeType===1)return!1;i=d=Z==="only"&&!i&&"nextSibling"}return!0}if(i=[R?q0.firstChild:q0.lastChild],R&&x0){I=q0[F.expando]||(q0[F.expando]={}),k=I[Z]||[],g=k[0]===H1&&k[1],C0=g&&k[2],x=g&&q0.childNodes[g];while(x=++g&&x&&x[d]||(C0=g=0)||i.pop())if(x.nodeType===1&&++C0&&x===S){I[Z]=[H1,g,C0];break}}else{if(x0)I=S[F.expando]||(S[F.expando]={}),k=I[Z]||[],g=k[0]===H1&&k[1],C0=g;if(C0===!1){while(x=++g&&x&&x[d]||(C0=g=0)||i.pop())if((P?n(x,V0):x.nodeType===1)&&++C0){if(x0)I=x[F.expando]||(x[F.expando]={}),I[Z]=[H1,C0];if(x===S)break}}}return C0-=q,C0===$||C0%$===0&&C0/$>=0}}},PSEUDO:function(Z,K){var X=F.expr.pseudos[Z]||F.expr.setFilters[Z.toLowerCase()]||b8("unsupported pseudo: "+Z);if(X[F.expando])return X(K);return X}},pseudos:{not:Z1(function(Z){var K=[],X=[],$=UJ(Z.replace(_0,"$1"));return $[F.expando]?Z1(function(q,N,R,P){var S,D=$(q,null,P,[]),j=q.length;while(j--)if(S=D[j])q[j]=!(N[j]=S)}):function(q,N,R){return K[0]=q,$(K,null,R,X),K[0]=null,!X.pop()}}),has:Z1(function(Z){return function(K){return n0(Z,K).length>0}}),contains:Z1(function(Z){return Z=M1(Z),function(K){return(K.textContent||F.text(K)).indexOf(Z)>-1}}),lang:Z1(function(Z){if(!p3.test(Z||""))b8("unsupported lang: "+Z);return Z=M1(Z).toLowerCase(),function(K){var X;do if(X=q1?K.lang:K.getAttribute("xml:lang")||K.getAttribute("lang"))return X=X.toLowerCase(),X===Z||X.indexOf(Z+"-")===0;while((K=K.parentNode)&&K.nodeType===1);return!1}}),target:function(Z){var K=J.location&&J.location.hash;return K&&K.slice(1)===Z.id},root:function(Z){return Z===jY},focus:function(Z){return Z===y0.activeElement&&y0.hasFocus()&&!!(Z.type||Z.href||~Z.tabIndex)},enabled:bY(!1),disabled:bY(!0),checked:function(Z){return n(Z,"input")&&!!Z.checked||n(Z,"option")&&!!Z.selected},selected:function(Z){if(B0&&Z.parentNode)Z.parentNode.selectedIndex;return Z.selected===!0},empty:function(Z){for(Z=Z.firstChild;Z;Z=Z.nextSibling)if(Z.nodeType<6)return!1;return!0},parent:function(Z){return!F.expr.pseudos.empty(Z)},header:function(Z){return c3.test(Z.nodeName)},input:function(Z){return u3.test(Z.nodeName)},button:function(Z){return n(Z,"input")&&Z.type==="button"||n(Z,"button")},text:function(Z){return n(Z,"input")&&Z.type==="text"},first:b1(function(){return[0]}),last:b1(function(Z,K){return[K-1]}),eq:b1(function(Z,K,X){return[X<0?X+K:X]}),even:b1(function(Z,K){var X=0;for(;XK)$=K;else $=X;for(;--$>=0;)Z.push($);return Z}),gt:b1(function(Z,K,X){var $=X<0?X+K:X;for(;++$1?function(K,X,$){var q=Z.length;while(q--)if(!Z[q](K,X,$))return!1;return!0}:Z[0]}function r3(Z,K,X){var $=0,q=K.length;for(;$-1)R[j]=!(P[j]=I)}}else if(x=q6(x===P?x.splice(d,x.length):x),q)q(null,P,x,D);else E.apply(P,x)})}function XJ(Z){var K,X,$,q=Z.length,N=F.expr.relative[Z[0].type],R=N||F.expr.relative[" "],P=N?1:0,S=F6(function(k){return k===K},R,!0),D=F6(function(k){return _.call(K,k)>-1},R,!0),j=[function(k,I,x){var g=!N&&(x||I!=V6)||((K=I).nodeType?S(k,I,x):D(k,I,x));return K=null,g}];for(;P1&&zJ(j),P>1&&U6(Z.slice(0,P-1).concat({value:Z[P-2].type===" "?"*":""})).replace(_0,"$1"),X,P<$&&XJ(Z.slice(P,$)),$0,$=Z.length>0,q=function(N,R,P,S,D){var j,k,I,x=0,g="0",i=N&&[],d=[],q0=V6,V0=N||$&&F.expr.find.TAG("*",D),x0=H1+=q0==null?1:Math.random()||0.1;if(D)V6=R==y0||R||D;for(;(j=V0[g])!=null;g++){if($&&j){if(k=0,!R&&j.ownerDocument!=y0)K8(j),P=!q1;while(I=Z[k++])if(I(j,R||y0,P)){E.call(S,j);break}if(D)H1=x0}if(X){if(j=!I&&j)x--;if(N)i.push(j)}}if(x+=g,X&&g!==x){k=0;while(I=K[k++])I(i,d,R,P);if(N){if(x>0){while(g--)if(!(i[g]||d[g]))d[g]=s.call(S)}d=q6(d)}if(E.apply(S,d),D&&!N&&d.length>0&&x+K.length>1)F.uniqueSort(S)}if(D)H1=x0,V6=q0;return i};return X?Z1(q):q}function UJ(Z,K){var X,$=[],q=[],N=kY[Z+" "];if(!N){if(!K)K=h8(Z);X=K.length;while(X--)if(N=XJ(K[X]),N[F.expando])$.push(N);else q.push(N);N=kY(Z,a3(q,$)),N.selector=Z}return N}function yY(Z,K,X,$){var q,N,R,P,S,D=typeof Z==="function"&&Z,j=!$&&h8(Z=D.selector||Z);if(X=X||[],j.length===1){if(N=j[0]=j[0].slice(0),N.length>2&&(R=N[0]).type==="ID"&&K.nodeType===9&&q1&&F.expr.relative[N[1].type]){if(K=(F.expr.find.ID(M1(R.matches[0]),K)||[])[0],!K)return X;else if(D)K=K.parentNode;Z=Z.slice(N.shift().value.length)}q=vY.needsContext.test(Z)?0:N.length;while(q--){if(R=N[q],F.expr.relative[P=R.type])break;if(S=F.expr.find[P]){if($=S(M1(R.matches[0]),v8.test(N[0].type)&&ZJ(K.parentNode)||K)){if(N.splice(q,1),Z=$.length&&U6(N),!Z)return E.apply(X,$),X;break}}}}return(D||UJ(Z,j))($,K,!q1,X,!K||v8.test(Z)&&ZJ(K.parentNode)||K),X}K8(),F.find=n0,n0.compile=UJ,n0.select=yY,n0.setDocument=K8,n0.tokenize=h8;function z8(Z,K,X){var $=[],q=X!==void 0;while((Z=Z[K])&&Z.nodeType!==9)if(Z.nodeType===1){if(q&&F(Z).is(X))break;$.push(Z)}return $}function fY(Z,K){var X=[];for(;Z;Z=Z.nextSibling)if(Z.nodeType===1&&Z!==K)X.push(Z);return X}var gY=F.expr.match.needsContext,mY=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function pY(Z){return Z[0]==="<"&&Z[Z.length-1]===">"&&Z.length>=3}function VJ(Z,K,X){if(typeof K==="function")return F.grep(Z,function($,q){return!!K.call($,q,$)!==X});if(K.nodeType)return F.grep(Z,function($){return $===K!==X});if(typeof K!=="string")return F.grep(Z,function($){return _.call(K,$)>-1!==X});return F.filter(K,Z,X)}F.filter=function(Z,K,X){var $=K[0];if(X)Z=":not("+Z+")";if(K.length===1&&$.nodeType===1)return F.find.matchesSelector($,Z)?[$]:[];return F.find.matches(Z,F.grep(K,function(q){return q.nodeType===1}))},F.fn.extend({find:function(Z){var K,X,$=this.length,q=this;if(typeof Z!=="string")return this.pushStack(F(Z).filter(function(){for(K=0;K<$;K++)if(F.contains(q[K],this))return!0}));X=this.pushStack([]);for(K=0;K<$;K++)F.find(Z,q[K],X);return $>1?F.uniqueSort(X):X},filter:function(Z){return this.pushStack(VJ(this,Z||[],!1))},not:function(Z){return this.pushStack(VJ(this,Z||[],!0))},is:function(Z){return!!VJ(this,typeof Z==="string"&&gY.test(Z)?F(Z):Z||[],!1).length}});var H6,t3=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,o3=F.fn.init=function(Z,K){var X,$;if(!Z)return this;if(Z.nodeType)return this[0]=Z,this.length=1,this;else if(typeof Z==="function")return H6.ready!==void 0?H6.ready(Z):Z(F);else{if(X=Z+"",pY(X))X=[null,Z,null];else if(typeof Z==="string")X=t3.exec(Z);else return F.makeArray(Z,this);if(X&&(X[1]||!K))if(X[1]){if(K=K instanceof F?K[0]:K,F.merge(this,F.parseHTML(X[1],K&&K.nodeType?K.ownerDocument||K:T,!0)),mY.test(X[1])&&F.isPlainObject(K))for(X in K)if(typeof this[X]==="function")this[X](K[X]);else this.attr(X,K[X]);return this}else{if($=T.getElementById(X[2]),$)this[0]=$,this.length=1;return this}else if(!K||K.jquery)return(K||H6).find(Z);else return this.constructor(K).find(Z)}};o3.prototype=F.fn,H6=F(T);var e3=/^(?:parents|prev(?:Until|All))/,JW={children:!0,contents:!0,next:!0,prev:!0};F.fn.extend({has:function(Z){var K=F(Z,this),X=K.length;return this.filter(function(){var $=0;for(;$-1:X.nodeType===1&&F.find.matchesSelector(X,Z))){N.push(X);break}}return this.pushStack(N.length>1?F.uniqueSort(N):N)},index:function(Z){if(!Z)return this[0]&&this[0].parentNode?this.first().prevAll().length:-1;if(typeof Z==="string")return _.call(F(Z),this[0]);return _.call(this,Z.jquery?Z[0]:Z)},add:function(Z,K){return this.pushStack(F.uniqueSort(F.merge(this.get(),F(Z,K))))},addBack:function(Z){return this.add(Z==null?this.prevObject:this.prevObject.filter(Z))}});function uY(Z,K){while((Z=Z[K])&&Z.nodeType!==1);return Z}F.each({parent:function(Z){var K=Z.parentNode;return K&&K.nodeType!==11?K:null},parents:function(Z){return z8(Z,"parentNode")},parentsUntil:function(Z,K,X){return z8(Z,"parentNode",X)},next:function(Z){return uY(Z,"nextSibling")},prev:function(Z){return uY(Z,"previousSibling")},nextAll:function(Z){return z8(Z,"nextSibling")},prevAll:function(Z){return z8(Z,"previousSibling")},nextUntil:function(Z,K,X){return z8(Z,"nextSibling",X)},prevUntil:function(Z,K,X){return z8(Z,"previousSibling",X)},siblings:function(Z){return fY((Z.parentNode||{}).firstChild,Z)},children:function(Z){return fY(Z.firstChild)},contents:function(Z){if(Z.contentDocument!=null&&z(Z.contentDocument))return Z.contentDocument;if(n(Z,"template"))Z=Z.content||Z;return F.merge([],Z.childNodes)}},function(Z,K){F.fn[Z]=function(X,$){var q=F.map(this,K,X);if(Z.slice(-5)!=="Until")$=X;if($&&typeof $==="string")q=F.filter($,q);if(this.length>1){if(!JW[Z])F.uniqueSort(q);if(e3.test(Z))q.reverse()}return this.pushStack(q)}});function YW(Z){var K={};return F.each(Z.match(Y1)||[],function(X,$){K[$]=!0}),K}F.Callbacks=function(Z){Z=typeof Z==="string"?YW(Z):F.extend({},Z);var K,X,$,q,N=[],R=[],P=-1,S=function(){q=q||Z.once,$=K=!0;for(;R.length;P=-1){X=R.shift();while(++P-1)if(N.splice(I,1),I<=P)P--}),this},has:function(j){return j?F.inArray(j,N)>-1:N.length>0},empty:function(){if(N)N=[];return this},disable:function(){return q=R=[],N=X="",this},disabled:function(){return!N},lock:function(){if(q=R=[],!X&&!K)N=X="";return this},locked:function(){return!!q},fireWith:function(j,k){if(!q){if(k=k||[],k=[j,k.slice?k.slice():k],R.push(k),!K)S()}return this},fire:function(){return D.fireWith(this,arguments),this},fired:function(){return!!$}};return D};function G8(Z){return Z}function B6(Z){throw Z}function cY(Z,K,X,$){var q;try{if(Z&&typeof(q=Z.promise)==="function")q.call(Z).done(K).fail(X);else if(Z&&typeof(q=Z.then)==="function")q.call(Z,K,X);else K.apply(void 0,[Z].slice($))}catch(N){X(N)}}F.extend({Deferred:function(Z){var K=[["notify","progress",F.Callbacks("memory"),F.Callbacks("memory"),2],["resolve","done",F.Callbacks("once memory"),F.Callbacks("once memory"),0,"resolved"],["reject","fail",F.Callbacks("once memory"),F.Callbacks("once memory"),1,"rejected"]],X="pending",$={state:function(){return X},always:function(){return q.done(arguments).fail(arguments),this},catch:function(N){return $.then(null,N)},pipe:function(){var N=arguments;return F.Deferred(function(R){F.each(K,function(P,S){var D=typeof N[S[4]]==="function"&&N[S[4]];q[S[1]](function(){var j=D&&D.apply(this,arguments);if(j&&typeof j.promise==="function")j.promise().progress(R.notify).done(R.resolve).fail(R.reject);else R[S[0]+"With"](this,D?[j]:arguments)})}),N=null}).promise()},then:function(N,R,P){var S=0;function D(j,k,I,x){return function(){var g=this,i=arguments,d=function(){var V0,x0;if(j=S){if(I!==B6)g=void 0,i=[V0];k.rejectWith(g,i)}}};if(j)q0();else{if(F.Deferred.getErrorHook)q0.error=F.Deferred.getErrorHook();J.setTimeout(q0)}}}return F.Deferred(function(j){K[0][3].add(D(0,j,typeof P==="function"?P:G8,j.notifyWith)),K[1][3].add(D(0,j,typeof N==="function"?N:G8)),K[2][3].add(D(0,j,typeof R==="function"?R:B6))}).promise()},promise:function(N){return N!=null?F.extend(N,$):$}},q={};if(F.each(K,function(N,R){var P=R[2],S=R[5];if($[R[1]]=P.add,S)P.add(function(){X=S},K[3-N][2].disable,K[3-N][3].disable,K[0][2].lock,K[0][3].lock);P.add(R[3].fire),q[R[0]]=function(){return q[R[0]+"With"](this===q?void 0:this,arguments),this},q[R[0]+"With"]=P.fireWith}),$.promise(q),Z)Z.call(q,q);return q},when:function(Z){var K=arguments.length,X=K,$=Array(X),q=V.call(arguments),N=F.Deferred(),R=function(P){return function(S){if($[P]=this,q[P]=arguments.length>1?V.call(arguments):S,!--K)N.resolveWith($,q)}};if(K<=1){if(cY(Z,N.done(R(X)).resolve,N.reject,!K),N.state()==="pending"||typeof(q[X]&&q[X].then)==="function")return N.then()}while(X--)cY(q[X],R(X),N.reject);return N.promise()}});var ZW=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;F.Deferred.exceptionHook=function(Z,K){if(Z&&ZW.test(Z.name))J.console.warn("jQuery.Deferred exception",Z,K)},F.readyException=function(Z){J.setTimeout(function(){throw Z})};var $J=F.Deferred();F.fn.ready=function(Z){return $J.then(Z).catch(function(K){F.readyException(K)}),this},F.extend({isReady:!1,readyWait:1,ready:function(Z){if(Z===!0?--F.readyWait:F.isReady)return;if(F.isReady=!0,Z!==!0&&--F.readyWait>0)return;$J.resolveWith(T,[F])}}),F.ready.then=$J.then;function N6(){T.removeEventListener("DOMContentLoaded",N6),J.removeEventListener("load",N6),F.ready()}if(T.readyState!=="loading")J.setTimeout(F.ready);else T.addEventListener("DOMContentLoaded",N6),J.addEventListener("load",N6);var WW=/-([a-z])/g;function KW(Z,K){return K.toUpperCase()}function h1(Z){return Z.replace(WW,KW)}function y8(Z){return Z.nodeType===1||Z.nodeType===9||!+Z.nodeType}function f8(){this.expando=F.expando+f8.uid++}f8.uid=1,f8.prototype={cache:function(Z){var K=Z[this.expando];if(!K){if(K=Object.create(null),y8(Z))if(Z.nodeType)Z[this.expando]=K;else Object.defineProperty(Z,this.expando,{value:K,configurable:!0})}return K},set:function(Z,K,X){var $,q=this.cache(Z);if(typeof K==="string")q[h1(K)]=X;else for($ in K)q[h1($)]=K[$];return X},get:function(Z,K){return K===void 0?this.cache(Z):Z[this.expando]&&Z[this.expando][h1(K)]},access:function(Z,K,X){if(K===void 0||K&&typeof K==="string"&&X===void 0)return this.get(Z,K);return this.set(Z,K,X),X!==void 0?X:K},remove:function(Z,K){var X,$=Z[this.expando];if($===void 0)return;if(K!==void 0){if(Array.isArray(K))K=K.map(h1);else K=h1(K),K=K in $?[K]:K.match(Y1)||[];X=K.length;while(X--)delete $[K[X]]}if(K===void 0||F.isEmptyObject($))if(Z.nodeType)Z[this.expando]=void 0;else delete Z[this.expando]},hasData:function(Z){var K=Z[this.expando];return K!==void 0&&!F.isEmptyObject(K)}};var l=new f8,w0=new f8,zW=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,GW=/[A-Z]/g;function XW(Z){if(Z==="true")return!0;if(Z==="false")return!1;if(Z==="null")return null;if(Z===+Z+"")return+Z;if(zW.test(Z))return JSON.parse(Z);return Z}function dY(Z,K,X){var $;if(X===void 0&&Z.nodeType===1)if($="data-"+K.replace(GW,"-$&").toLowerCase(),X=Z.getAttribute($),typeof X==="string"){try{X=XW(X)}catch(q){}w0.set(Z,K,X)}else X=void 0;return X}F.extend({hasData:function(Z){return w0.hasData(Z)||l.hasData(Z)},data:function(Z,K,X){return w0.access(Z,K,X)},removeData:function(Z,K){w0.remove(Z,K)},_data:function(Z,K,X){return l.access(Z,K,X)},_removeData:function(Z,K){l.remove(Z,K)}}),F.fn.extend({data:function(Z,K){var X,$,q,N=this[0],R=N&&N.attributes;if(Z===void 0){if(this.length){if(q=w0.get(N),N.nodeType===1&&!l.get(N,"hasDataAttrs")){X=R.length;while(X--)if(R[X]){if($=R[X].name,$.indexOf("data-")===0)$=h1($.slice(5)),dY(N,$,q[$])}l.set(N,"hasDataAttrs",!0)}}return q}if(typeof Z==="object")return this.each(function(){w0.set(this,Z)});return F1(this,function(P){var S;if(N&&P===void 0){if(S=w0.get(N,Z),S!==void 0)return S;if(S=dY(N,Z),S!==void 0)return S;return}this.each(function(){w0.set(this,Z,P)})},null,K,arguments.length>1,null,!0)},removeData:function(Z){return this.each(function(){w0.remove(this,Z)})}}),F.extend({queue:function(Z,K,X){var $;if(Z){if(K=(K||"fx")+"queue",$=l.get(Z,K),X)if(!$||Array.isArray(X))$=l.set(Z,K,F.makeArray(X));else $.push(X);return $||[]}},dequeue:function(Z,K){K=K||"fx";var X=F.queue(Z,K),$=X.length,q=X.shift(),N=F._queueHooks(Z,K),R=function(){F.dequeue(Z,K)};if(q==="inprogress")q=X.shift(),$--;if(q){if(K==="fx")X.unshift("inprogress");delete N.stop,q.call(Z,R,N)}if(!$&&N)N.empty.fire()},_queueHooks:function(Z,K){var X=K+"queueHooks";return l.get(Z,X)||l.set(Z,X,{empty:F.Callbacks("once memory").add(function(){l.remove(Z,[K+"queue",X])})})}}),F.fn.extend({queue:function(Z,K){var X=2;if(typeof Z!=="string")K=Z,Z="fx",X--;if(arguments.length\x20\t\r\n\f]*)/i,B1={thead:["table"],col:["colgroup","table"],tr:["tbody","table"],td:["tr","tbody","table"]};B1.tbody=B1.tfoot=B1.colgroup=B1.caption=B1.thead,B1.th=B1.td;function j0(Z,K){var X;if(typeof Z.getElementsByTagName<"u")X=W.slice.call(Z.getElementsByTagName(K||"*"));else if(typeof Z.querySelectorAll<"u")X=Z.querySelectorAll(K||"*");else X=[];if(K===void 0||K&&n(Z,K))return F.merge([Z],X);return X}var rY=/^$|^module$|\/(?:java|ecma)script/i;function qJ(Z,K){var X=0,$=Z.length;for(;X<$;X++)l.set(Z[X],"globalEval",!K||l.get(K[X],"globalEval"))}var HW=/<|&#?\w+;/;function aY(Z,K,X,$,q){var N,R,P,S,D,j,k=K.createDocumentFragment(),I=[],x=0,g=Z.length;for(;x-1)R=R.appendChild(K.createElement(S[j]));R.innerHTML=F.htmlPrefilter(N),F.merge(I,R.childNodes),R=k.firstChild,R.textContent=""}k.textContent="",x=0;while(N=I[x++]){if($&&F.inArray(N,$)>-1){if(q)q.push(N);continue}if(D=m8(N),R=j0(k.appendChild(N),"script"),D)qJ(R);if(X){j=0;while(N=R[j++])if(rY.test(N.type||""))X.push(N)}}return k}function BW(Z){return Z.type=(Z.getAttribute("type")!==null)+"/"+Z.type,Z}function NW(Z){if((Z.type||"").slice(0,5)==="true/")Z.type=Z.type.slice(5);else Z.removeAttribute("type");return Z}function U8(Z,K,X,$){K=H(K);var q,N,R,P,S,D,j=0,k=Z.length,I=k-1,x=K[0],g=typeof x==="function";if(g)return Z.each(function(i){var d=Z.eq(i);K[0]=x.call(this,i,d.html()),U8(d,K,X,$)});if(k){if(q=aY(K,Z[0].ownerDocument,!1,Z,$),N=q.firstChild,q.childNodes.length===1)q=N;if(N||$){R=F.map(j0(q,"script"),BW),P=R.length;for(;j=1)){for(;D!==this;D=D.parentNode||this)if(D.nodeType===1&&!(Z.type==="click"&&D.disabled===!0)){N=[],R={};for(X=0;X-1:F.find(q,this,null,[D]).length;if(R[q])N.push($)}if(N.length)P.push({elem:D,handlers:N})}}if(D=this,S0)qJ(R,!S&&j0(Z,"script"));return P},cleanData:function(Z){var K,X,$,q=F.event.special,N=0;for(;(X=Z[N])!==void 0;N++)if(y8(X)){if(K=X[l.expando]){if(K.events)for($ in K.events)if(q[$])F.event.remove(X,$);else F.removeEvent(X,$,K.handle);X[l.expando]=void 0}if(X[w0.expando])X[w0.expando]=void 0}}}),F.fn.extend({detach:function(Z){return J9(this,Z,!0)},remove:function(Z){return J9(this,Z)},text:function(Z){return F1(this,function(K){return K===void 0?F.text(this):this.empty().each(function(){if(this.nodeType===1||this.nodeType===11||this.nodeType===9)this.textContent=K})},null,Z,arguments.length)},append:function(){return U8(this,arguments,function(Z){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var K=oY(this,Z);K.appendChild(Z)}})},prepend:function(){return U8(this,arguments,function(Z){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var K=oY(this,Z);K.insertBefore(Z,K.firstChild)}})},before:function(){return U8(this,arguments,function(Z){if(this.parentNode)this.parentNode.insertBefore(Z,this)})},after:function(){return U8(this,arguments,function(Z){if(this.parentNode)this.parentNode.insertBefore(Z,this.nextSibling)})},empty:function(){var Z,K=0;for(;(Z=this[K])!=null;K++)if(Z.nodeType===1)F.cleanData(j0(Z,!1)),Z.textContent="";return this},clone:function(Z,K){return Z=Z==null?!1:Z,K=K==null?Z:K,this.map(function(){return F.clone(this,Z,K)})},html:function(Z){return F1(this,function(K){var X=this[0]||{},$=0,q=this.length;if(K===void 0&&X.nodeType===1)return X.innerHTML;if(typeof K==="string"&&!OW.test(K)&&!B1[(sY.exec(K)||["",""])[1].toLowerCase()]){K=F.htmlPrefilter(K);try{for(;$=0)S+=Math.max(0,Math.ceil(Z["offset"+K[0].toUpperCase()+K.slice(1)]-N-S-P-0.5))||0;return S+D}function $9(Z,K,X){var $=E6(Z),q=B0||X,N=q&&F.css(Z,"boxSizing",!1,$)==="border-box",R=N,P=Y9(Z,K,$),S="offset"+K[0].toUpperCase()+K.slice(1);if(RW.test(P)){if(!X)return P;P="auto"}if((P==="auto"||B0&&N||!M.reliableColDimensions()&&n(Z,"col")||!M.reliableTrDimensions()&&n(Z,"tr"))&&Z.getClientRects().length){if(N=F.css(Z,"boxSizing",!1,$)==="border-box",R=S in Z,R)P=Z[S]}return P=parseFloat(P)||0,P+V9(Z,K,X||(N?"border":"content"),R,$,P)+"px"}F.extend({cssHooks:{},style:function(Z,K,X,$){if(!Z||Z.nodeType===3||Z.nodeType===8||!Z.style)return;var q,N,R,P=FJ(K),S=BJ.test(K),D=Z.style;if(!S)K=NJ(P);if(R=F.cssHooks[K]||F.cssHooks[P],X!==void 0){if(N=typeof X,N==="string"&&(q=g8.exec(X))&&q[1])X=lY(Z,K,q),N="number";if(X==null||X!==X)return;if(N==="number")X+=q&&q[3]||(R6(P)?"px":"");if(B0&&X===""&&K.indexOf("background")===0)D[K]="inherit";if(!R||!("set"in R)||(X=R.set(Z,X,$))!==void 0)if(S)D.setProperty(K,X);else D[K]=X}else{if(R&&"get"in R&&(q=R.get(Z,!1,$))!==void 0)return q;return D[K]}},css:function(Z,K,X,$){var q,N,R,P=FJ(K),S=BJ.test(K);if(!S)K=NJ(P);if(R=F.cssHooks[K]||F.cssHooks[P],R&&"get"in R)q=R.get(Z,!0,X);if(q===void 0)q=Y9(Z,K,$);if(q==="normal"&&K in X9)q=X9[K];if(X===""||X)return N=parseFloat(q),X===!0||isFinite(N)?N||0:q;return q}}),F.each(["height","width"],function(Z,K){F.cssHooks[K]={get:function(X,$,q){if($)return F.css(X,"display")==="none"?_W(X,EW,function(){return $9(X,K,q)}):$9(X,K,q)},set:function(X,$,q){var N,R=E6(X),P=q&&F.css(X,"boxSizing",!1,R)==="border-box",S=q?V9(X,K,q,P,R):0;if(S&&(N=g8.exec($))&&(N[3]||"px")!=="px")X.style[K]=$,$=F.css(X,K);return U9(X,$,S)}}}),F.each({margin:"",padding:"",border:"Width"},function(Z,K){if(F.cssHooks[Z+K]={expand:function(X){var $=0,q={},N=typeof X==="string"?X.split(" "):[X];for(;$<4;$++)q[Z+S1[$]+K]=N[$]||N[$-2]||N[0];return q}},Z!=="margin")F.cssHooks[Z+K].set=U9}),F.fn.extend({css:function(Z,K){return F1(this,function(X,$,q){var N,R,P={},S=0;if(Array.isArray($)){N=E6(X),R=$.length;for(;S1)}});function u0(Z,K,X,$,q){return new u0.prototype.init(Z,K,X,$,q)}F.Tween=u0,u0.prototype={constructor:u0,init:function(Z,K,X,$,q,N){this.elem=Z,this.prop=X,this.easing=q||F.easing._default,this.options=K,this.start=this.now=this.cur(),this.end=$,this.unit=N||(R6(X)?"px":"")},cur:function(){var Z=u0.propHooks[this.prop];return Z&&Z.get?Z.get(this):u0.propHooks._default.get(this)},run:function(Z){var K,X=u0.propHooks[this.prop];if(this.options.duration)this.pos=K=F.easing[this.easing](Z,this.options.duration*Z,0,1,this.options.duration);else this.pos=K=Z;if(this.now=(this.end-this.start)*K+this.start,this.options.step)this.options.step.call(this.elem,this.now,this);if(X&&X.set)X.set(this);else u0.propHooks._default.set(this);return this}},u0.prototype.init.prototype=u0.prototype,u0.propHooks={_default:{get:function(Z){var K;if(Z.elem.nodeType!==1||Z.elem[Z.prop]!=null&&Z.elem.style[Z.prop]==null)return Z.elem[Z.prop];return K=F.css(Z.elem,Z.prop,""),!K||K==="auto"?0:K},set:function(Z){if(F.fx.step[Z.prop])F.fx.step[Z.prop](Z);else if(Z.elem.nodeType===1&&(F.cssHooks[Z.prop]||Z.elem.style[NJ(Z.prop)]!=null))F.style(Z.elem,Z.prop,Z.now+Z.unit);else Z.elem[Z.prop]=Z.now}}},F.easing={linear:function(Z){return Z},swing:function(Z){return 0.5-Math.cos(Z*Math.PI)/2},_default:"swing"},F.fx=u0.prototype.init,F.fx.step={};var F8,M6,MW=/^(?:toggle|show|hide)$/,SW=/queueHooks$/;function OJ(){if(M6){if(T.hidden===!1&&J.requestAnimationFrame)J.requestAnimationFrame(OJ);else J.setTimeout(OJ,13);F.fx.tick()}}function F9(){return J.setTimeout(function(){F8=void 0}),F8=Date.now()}function S6(Z,K){var X,$=0,q={height:Z};K=K?1:0;for(;$<4;$+=2-K)X=S1[$],q["margin"+X]=q["padding"+X]=Z;if(K)q.opacity=q.width=Z;return q}function q9(Z,K,X){var $,q=(s0.tweeners[K]||[]).concat(s0.tweeners["*"]),N=0,R=q.length;for(;N1)},removeProp:function(Z){return this.each(function(){delete this[F.propFix[Z]||Z]})}}),F.extend({prop:function(Z,K,X){var $,q,N=Z.nodeType;if(N===3||N===8||N===2)return;if(N!==1||!F.isXMLDoc(Z))K=F.propFix[K]||K,q=F.propHooks[K];if(X!==void 0){if(q&&"set"in q&&($=q.set(Z,X,K))!==void 0)return $;return Z[K]=X}if(q&&"get"in q&&($=q.get(Z,K))!==null)return $;return Z[K]},propHooks:{tabIndex:{get:function(Z){var K=Z.getAttribute("tabindex");if(K)return parseInt(K,10);if(QW.test(Z.nodeName)||TW.test(Z.nodeName)&&Z.href)return 0;return-1}}},propFix:{for:"htmlFor",class:"className"}}),B0)F.propHooks.selected={get:function(Z){var K=Z.parentNode;if(K&&K.parentNode)K.parentNode.selectedIndex;return null},set:function(Z){var K=Z.parentNode;if(K){if(K.selectedIndex,K.parentNode)K.parentNode.selectedIndex}}};F.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){F.propFix[this.toLowerCase()]=this});function y1(Z){var K=Z.match(Y1)||[];return K.join(" ")}function q8(Z){return Z.getAttribute&&Z.getAttribute("class")||""}function RJ(Z){if(Array.isArray(Z))return Z;if(typeof Z==="string")return Z.match(Y1)||[];return[]}if(F.fn.extend({addClass:function(Z){var K,X,$,q,N,R;if(typeof Z==="function")return this.each(function(P){F(this).addClass(Z.call(this,P,q8(this)))});if(K=RJ(Z),K.length)return this.each(function(){if($=q8(this),X=this.nodeType===1&&" "+y1($)+" ",X){for(N=0;N-1)X=X.replace(" "+q+" "," ")}if(R=y1(X),$!==R)this.setAttribute("class",R)}});return this},toggleClass:function(Z,K){var X,$,q,N;if(typeof Z==="function")return this.each(function(R){F(this).toggleClass(Z.call(this,R,q8(this),K),K)});if(typeof K==="boolean")return K?this.addClass(Z):this.removeClass(Z);if(X=RJ(Z),X.length)return this.each(function(){N=F(this);for(q=0;q-1)return!0;return!1}}),F.fn.extend({val:function(Z){var K,X,$,q=this[0];if(!arguments.length){if(q){if(K=F.valHooks[q.type]||F.valHooks[q.nodeName.toLowerCase()],K&&"get"in K&&(X=K.get(q,"value"))!==void 0)return X;return X=q.value,X==null?"":X}return}return $=typeof Z==="function",this.each(function(N){var R;if(this.nodeType!==1)return;if($)R=Z.call(this,N,F(this).val());else R=Z;if(R==null)R="";else if(typeof R==="number")R+="";else if(Array.isArray(R))R=F.map(R,function(P){return P==null?"":P+""});if(K=F.valHooks[this.type]||F.valHooks[this.nodeName.toLowerCase()],!K||!("set"in K)||K.set(this,R,"value")===void 0)this.value=R})}}),F.extend({valHooks:{select:{get:function(Z){var K,X,$,q=Z.options,N=Z.selectedIndex,R=Z.type==="select-one",P=R?null:[],S=R?N+1:q.length;if(N<0)$=S;else $=R?N:0;for(;$-1)X=!0;if(!X)Z.selectedIndex=-1;return N}}}}),B0)F.valHooks.option={get:function(Z){var K=Z.getAttribute("value");return K!=null?K:y1(F.text(Z))}};F.each(["radio","checkbox"],function(){F.valHooks[this]={set:function(Z,K){if(Array.isArray(K))return Z.checked=F.inArray(F(Z).val(),K)>-1}}});var H9=/^(?:focusinfocus|focusoutblur)$/,B9=function(Z){Z.stopPropagation()};F.extend(F.event,{trigger:function(Z,K,X,$){var q,N,R,P,S,D,j,k,I=[X||T],x=G.call(Z,"type")?Z.type:Z,g=G.call(Z,"namespace")?Z.namespace.split("."):[];if(N=k=R=X=X||T,X.nodeType===3||X.nodeType===8)return;if(H9.test(x+F.event.triggered))return;if(x.indexOf(".")>-1)g=x.split("."),x=g.shift(),g.sort();if(S=x.indexOf(":")<0&&"on"+x,Z=Z[F.expando]?Z:new F.Event(x,typeof Z==="object"&&Z),Z.isTrigger=$?2:3,Z.namespace=g.join("."),Z.rnamespace=Z.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,Z.result=void 0,!Z.target)Z.target=X;if(K=K==null?[Z]:F.makeArray(K,[Z]),j=F.event.special[x]||{},!$&&j.trigger&&j.trigger.apply(X,K)===!1)return;if(!$&&!j.noBubble&&!Q(X)){if(P=j.delegateType||x,!H9.test(P+x))N=N.parentNode;for(;N;N=N.parentNode)I.push(N),R=N;if(R===(X.ownerDocument||T))I.push(R.defaultView||R.parentWindow||J)}q=0;while((N=I[q++])&&!Z.isPropagationStopped()){if(k=N,Z.type=q>1?P:j.bindType||x,D=(l.get(N,"events")||Object.create(null))[Z.type]&&l.get(N,"handle"),D)D.apply(N,K);if(D=S&&N[S],D&&D.apply&&y8(N)){if(Z.result=D.apply(N,K),Z.result===!1)Z.preventDefault()}}if(Z.type=x,!$&&!Z.isDefaultPrevented()){if((!j._default||j._default.apply(I.pop(),K)===!1)&&y8(X)){if(S&&typeof X[x]==="function"&&!Q(X)){if(R=X[S],R)X[S]=null;if(F.event.triggered=x,Z.isPropagationStopped())k.addEventListener(x,B9);if(X[x](),Z.isPropagationStopped())k.removeEventListener(x,B9);if(F.event.triggered=void 0,R)X[S]=R}}}return Z.result},simulate:function(Z,K,X){var $=F.extend(new F.Event,X,{type:Z,isSimulated:!0});F.event.trigger($,null,K)}}),F.fn.extend({trigger:function(Z,K){return this.each(function(){F.event.trigger(Z,K,this)})},triggerHandler:function(Z,K){var X=this[0];if(X)return F.event.trigger(Z,K,X,!0)}});var p8=J.location,N9={guid:Date.now()},_J=/\?/;F.parseXML=function(Z){var K,X;if(!Z||typeof Z!=="string")return null;try{K=new J.DOMParser().parseFromString(Z,"text/xml")}catch($){}if(X=K&&K.getElementsByTagName("parsererror")[0],!K||X)F.error("Invalid XML: "+(X?F.map(X.childNodes,function($){return $.textContent}).join(` -`):Z));return K};var LW=/\[\]$/,O9=/\r?\n/g,DW=/^(?:submit|button|image|reset|file)$/i,IW=/^(?:input|select|textarea|keygen)/i;function AJ(Z,K,X,$){var q;if(Array.isArray(K))F.each(K,function(N,R){if(X||LW.test(Z))$(Z,R);else AJ(Z+"["+(typeof R==="object"&&R!=null?N:"")+"]",R,X,$)});else if(!X&&L(K)==="object")for(q in K)AJ(Z+"["+q+"]",K[q],X,$);else $(Z,K)}F.param=function(Z,K){var X,$=[],q=function(N,R){var P=typeof R==="function"?R():R;$[$.length]=encodeURIComponent(N)+"="+encodeURIComponent(P==null?"":P)};if(Z==null)return"";if(Array.isArray(Z)||Z.jquery&&!F.isPlainObject(Z))F.each(Z,function(){q(this.name,this.value)});else for(X in Z)AJ(X,Z[X],K,q);return $.join("&")},F.fn.extend({serialize:function(){return F.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var Z=F.prop(this,"elements");return Z?F.makeArray(Z):this}).filter(function(){var Z=this.type;return this.name&&!F(this).is(":disabled")&&IW.test(this.nodeName)&&!DW.test(Z)&&(this.checked||!_6.test(Z))}).map(function(Z,K){var X=F(this).val();if(X==null)return null;if(Array.isArray(X))return F.map(X,function($){return{name:K.name,value:$.replace(O9,`\r -`)}});return{name:K.name,value:X.replace(O9,`\r -`)}}).get()}});var wW=/%20/g,jW=/#.*$/,xW=/([?&])_=[^&]*/,kW=/^(.*?):[ \t]*([^\r\n]*)$/mg,vW=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,bW=/^(?:GET|HEAD)$/,hW=/^\/\//,R9={},EJ={},_9="*/".concat("*"),MJ=T.createElement("a");MJ.href=p8.href;function A9(Z){return function(K,X){if(typeof K!=="string")X=K,K="*";var $,q=0,N=K.toLowerCase().match(Y1)||[];if(typeof X==="function")while($=N[q++])if($[0]==="+")$=$.slice(1)||"*",(Z[$]=Z[$]||[]).unshift(X);else(Z[$]=Z[$]||[]).push(X)}}function E9(Z,K,X,$){var q={},N=Z===EJ;function R(P){var S;return q[P]=!0,F.each(Z[P]||[],function(D,j){var k=j(K,X,$);if(typeof k==="string"&&!N&&!q[k])return K.dataTypes.unshift(k),R(k),!1;else if(N)return!(S=k)}),S}return R(K.dataTypes[0])||!q["*"]&&R("*")}function SJ(Z,K){var X,$,q=F.ajaxSettings.flatOptions||{};for(X in K)if(K[X]!==void 0)(q[X]?Z:$||($={}))[X]=K[X];if($)F.extend(!0,Z,$);return Z}function yW(Z,K,X){var $,q,N,R,P=Z.contents,S=Z.dataTypes;while(S[0]==="*")if(S.shift(),$===void 0)$=Z.mimeType||K.getResponseHeader("Content-Type");if($){for(q in P)if(P[q]&&P[q].test($)){S.unshift(q);break}}if(S[0]in X)N=S[0];else{for(q in X){if(!S[0]||Z.converters[q+" "+S[0]]){N=q;break}if(!R)R=q}N=N||R}if(N){if(N!==S[0])S.unshift(N);return X[N]}}function fW(Z,K,X,$){var q,N,R,P,S,D={},j=Z.dataTypes.slice();if(j[1])for(R in Z.converters)D[R.toLowerCase()]=Z.converters[R];N=j.shift();while(N){if(Z.responseFields[N])X[Z.responseFields[N]]=K;if(!S&&$&&Z.dataFilter)K=Z.dataFilter(K,Z.dataType);if(S=N,N=j.shift(),N){if(N==="*")N=S;else if(S!=="*"&&S!==N){if(R=D[S+" "+N]||D["* "+N],!R){for(q in D)if(P=q.split(" "),P[1]===N){if(R=D[S+" "+P[0]]||D["* "+P[0]],R){if(R===!0)R=D[q];else if(D[q]!==!0)N=P[0],j.unshift(P[1]);break}}}if(R!==!0)if(R&&Z.throws)K=R(K);else try{K=R(K)}catch(k){return{state:"parsererror",error:R?k:"No conversion from "+S+" to "+N}}}}}return{state:"success",data:K}}F.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:p8.href,type:"GET",isLocal:vW.test(p8.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":_9,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":F.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(Z,K){return K?SJ(SJ(Z,F.ajaxSettings),K):SJ(F.ajaxSettings,Z)},ajaxPrefilter:A9(R9),ajaxTransport:A9(EJ),ajax:function(Z,K){if(typeof Z==="object")K=Z,Z=void 0;K=K||{};var X,$,q,N,R,P,S,D,j,k,I=F.ajaxSetup({},K),x=I.context||I,g=I.context&&(x.nodeType||x.jquery)?F(x):F.event,i=F.Deferred(),d=F.Callbacks("once memory"),q0=I.statusCode||{},V0={},x0={},C0="canceled",e={readyState:0,getResponseHeader:function(Z0){var O0;if(S){if(!N){N={};while(O0=kW.exec(q))N[O0[1].toLowerCase()+" "]=(N[O0[1].toLowerCase()+" "]||[]).concat(O0[2])}O0=N[Z0.toLowerCase()+" "]}return O0==null?null:O0.join(", ")},getAllResponseHeaders:function(){return S?q:null},setRequestHeader:function(Z0,O0){if(S==null)Z0=x0[Z0.toLowerCase()]=x0[Z0.toLowerCase()]||Z0,V0[Z0]=O0;return this},overrideMimeType:function(Z0){if(S==null)I.mimeType=Z0;return this},statusCode:function(Z0){var O0;if(Z0)if(S)e.always(Z0[e.status]);else for(O0 in Z0)q0[O0]=[q0[O0],Z0[O0]];return this},abort:function(Z0){var O0=Z0||C0;if(X)X.abort(O0);return P6(0,O0),this}};if(i.promise(e),I.url=((Z||I.url||p8.href)+"").replace(hW,p8.protocol+"//"),I.type=K.method||K.type||I.method||I.type,I.dataTypes=(I.dataType||"*").toLowerCase().match(Y1)||[""],I.crossDomain==null){P=T.createElement("a");try{P.href=I.url,P.href=P.href,I.crossDomain=MJ.protocol+"//"+MJ.host!==P.protocol+"//"+P.host}catch(Z0){I.crossDomain=!0}}if(E9(R9,I,K,e),I.data&&I.processData&&typeof I.data!=="string")I.data=F.param(I.data,I.traditional);if(S)return e;if(D=F.event&&I.global,D&&F.active++===0)F.event.trigger("ajaxStart");if(I.type=I.type.toUpperCase(),I.hasContent=!bW.test(I.type),$=I.url.replace(jW,""),!I.hasContent){if(k=I.url.slice($.length),I.data&&(I.processData||typeof I.data==="string"))$+=(_J.test($)?"&":"?")+I.data,delete I.data;if(I.cache===!1)$=$.replace(xW,"$1"),k=(_J.test($)?"&":"?")+"_="+N9.guid+++k;I.url=$+k}else if(I.data&&I.processData&&(I.contentType||"").indexOf("application/x-www-form-urlencoded")===0)I.data=I.data.replace(wW,"+");if(I.ifModified){if(F.lastModified[$])e.setRequestHeader("If-Modified-Since",F.lastModified[$]);if(F.etag[$])e.setRequestHeader("If-None-Match",F.etag[$])}if(I.data&&I.hasContent&&I.contentType!==!1||K.contentType)e.setRequestHeader("Content-Type",I.contentType);e.setRequestHeader("Accept",I.dataTypes[0]&&I.accepts[I.dataTypes[0]]?I.accepts[I.dataTypes[0]]+(I.dataTypes[0]!=="*"?", "+_9+"; q=0.01":""):I.accepts["*"]);for(j in I.headers)e.setRequestHeader(j,I.headers[j]);if(I.beforeSend&&(I.beforeSend.call(x,e,I)===!1||S))return e.abort();if(C0="abort",d.add(I.complete),e.done(I.success),e.fail(I.error),X=E9(EJ,I,K,e),!X)P6(-1,"No Transport");else{if(e.readyState=1,D)g.trigger("ajaxSend",[e,I]);if(S)return e;if(I.async&&I.timeout>0)R=J.setTimeout(function(){e.abort("timeout")},I.timeout);try{S=!1,X.send(V0,P6)}catch(Z0){if(S)throw Z0;P6(-1,Z0)}}function P6(Z0,O0,P9,uW){var C1,CJ,u8,H8,B8,W1=O0;if(S)return;if(S=!0,R)J.clearTimeout(R);if(X=void 0,q=uW||"",e.readyState=Z0>0?4:0,C1=Z0>=200&&Z0<300||Z0===304,P9)H8=yW(I,e,P9);if(!C1&&F.inArray("script",I.dataTypes)>-1&&F.inArray("json",I.dataTypes)<0)I.converters["text script"]=function(){};if(H8=fW(I,H8,e,C1),C1){if(I.ifModified){if(B8=e.getResponseHeader("Last-Modified"),B8)F.lastModified[$]=B8;if(B8=e.getResponseHeader("etag"),B8)F.etag[$]=B8}if(Z0===204||I.type==="HEAD")W1="nocontent";else if(Z0===304)W1="notmodified";else W1=H8.state,CJ=H8.data,u8=H8.error,C1=!u8}else if(u8=W1,Z0||!W1){if(W1="error",Z0<0)Z0=0}if(e.status=Z0,e.statusText=(O0||W1)+"",C1)i.resolveWith(x,[CJ,W1,e]);else i.rejectWith(x,[e,W1,u8]);if(e.statusCode(q0),q0=void 0,D)g.trigger(C1?"ajaxSuccess":"ajaxError",[e,I,C1?CJ:u8]);if(d.fireWith(x,[e,W1]),D){if(g.trigger("ajaxComplete",[e,I]),!--F.active)F.event.trigger("ajaxStop")}}return e},getJSON:function(Z,K,X){return F.get(Z,K,X,"json")},getScript:function(Z,K){return F.get(Z,void 0,K,"script")}}),F.each(["get","post"],function(Z,K){F[K]=function(X,$,q,N){if(typeof $==="function"||$===null)N=N||q,q=$,$=void 0;return F.ajax(F.extend({url:X,type:K,dataType:N,data:$,success:q},F.isPlainObject(X)&&X))}}),F.ajaxPrefilter(function(Z){var K;for(K in Z.headers)if(K.toLowerCase()==="content-type")Z.contentType=Z.headers[K]||""}),F._evalUrl=function(Z,K,X){return F.ajax({url:Z,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,scriptAttrs:K.crossOrigin?{crossOrigin:K.crossOrigin}:void 0,converters:{"text script":function(){}},dataFilter:function($){F.globalEval($,K,X)}})},F.fn.extend({wrapAll:function(Z){var K;if(this[0]){if(typeof Z==="function")Z=Z.call(this[0]);if(K=F(Z,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode)K.insertBefore(this[0]);K.map(function(){var X=this;while(X.firstElementChild)X=X.firstElementChild;return X}).append(this)}return this},wrapInner:function(Z){if(typeof Z==="function")return this.each(function(K){F(this).wrapInner(Z.call(this,K))});return this.each(function(){var K=F(this),X=K.contents();if(X.length)X.wrapAll(Z);else K.append(Z)})},wrap:function(Z){var K=typeof Z==="function";return this.each(function(X){F(this).wrapAll(K?Z.call(this,X):Z)})},unwrap:function(Z){return this.parent(Z).not("body").each(function(){F(this).replaceWith(this.childNodes)}),this}}),F.expr.pseudos.hidden=function(Z){return!F.expr.pseudos.visible(Z)},F.expr.pseudos.visible=function(Z){return!!(Z.offsetWidth||Z.offsetHeight||Z.getClientRects().length)},F.ajaxSettings.xhr=function(){return new J.XMLHttpRequest};var gW={0:200};F.ajaxTransport(function(Z){var K;return{send:function(X,$){var q,N=Z.xhr();if(N.open(Z.type,Z.url,Z.async,Z.username,Z.password),Z.xhrFields)for(q in Z.xhrFields)N[q]=Z.xhrFields[q];if(Z.mimeType&&N.overrideMimeType)N.overrideMimeType(Z.mimeType);if(!Z.crossDomain&&!X["X-Requested-With"])X["X-Requested-With"]="XMLHttpRequest";for(q in X)N.setRequestHeader(q,X[q]);K=function(R){return function(){if(K)if(K=N.onload=N.onerror=N.onabort=N.ontimeout=null,R==="abort")N.abort();else if(R==="error")$(N.status,N.statusText);else $(gW[N.status]||N.status,N.statusText,(N.responseType||"text")==="text"?{text:N.responseText}:{binary:N.response},N.getAllResponseHeaders())}},N.onload=K(),N.onabort=N.onerror=N.ontimeout=K("error"),K=K("abort");try{N.send(Z.hasContent&&Z.data||null)}catch(R){if(K)throw R}},abort:function(){if(K)K()}}});function M9(Z){return Z.scriptAttrs||!Z.headers&&(Z.crossDomain||Z.async&&F.inArray("json",Z.dataTypes)<0)}F.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},converters:{"text script":function(Z){return F.globalEval(Z),Z}}}),F.ajaxPrefilter("script",function(Z){if(Z.cache===void 0)Z.cache=!1;if(M9(Z))Z.type="GET"}),F.ajaxTransport("script",function(Z){if(M9(Z)){var K,X;return{send:function($,q){K=F(" \ No newline at end of file diff --git a/resources/radio/client/screen.lua b/resources/radio/client/screen.lua new file mode 100644 index 000000000..0dfa4fe03 --- /dev/null +++ b/resources/radio/client/screen.lua @@ -0,0 +1,407 @@ +-- ┌──────────────────────────────────────────────────────────────┐ +-- │ Tommy's Radio - 3D Vehicle Radio Screen │ +-- │ Renders the AFX-1500 screen on the vehicle radio prop │ +-- │ using AddReplaceTexture to swap the prop's screen material │ +-- │ with a DUI browser. Zero jitter — the DUI content renders │ +-- │ as part of the 3D model geometry itself. │ +-- │ Active only when the player owns a vehicle that has an │ +-- │ attached radio prop (see positions.lua). │ +-- │ Documentation: https://docs.timmygstudios.com/docs/tommys-radio │ +-- └──────────────────────────────────────────────────────────────┘ + +-- Server has nothing to do here +if IsDuplicityVersion() then return end + + +-- ══════════════════════════════════════════════════════════════════ +-- CONFIGURATION +-- ══════════════════════════════════════════════════════════════════ + +-- The original texture dictionary and texture name on the AFX1500 prop model. +-- AddReplaceTexture swaps this material with the DUI content at runtime. +local ORIG_TXD = "afx1500" +local ORIG_TEX = "C_Screen" + +local DUI_RES_W = 480 -- DUI browser resolution (width) +local DUI_RES_H = 240 -- DUI browser resolution (height) + +-- LED texture names on the AFX1500 prop and their lit colors (RGBA 0-255). +local LED_TEXTURES = { + power = { tex = "C_Red", onR = 255, onG = 0, onB = 0 }, + connected = { tex = "C_Green", onR = 0, onG = 255, onB = 0 }, + transmit = { tex = "C_Orange", onR = 255, onG = 153, onB = 0 }, +} +-- Dim color when LED is off +local LED_OFF_R, LED_OFF_G, LED_OFF_B = 20, 20, 20 + + +-- ══════════════════════════════════════════════════════════════════ +-- DUI STATE +-- ══════════════════════════════════════════════════════════════════ + +local screenDui = nil +local screenTxdName = "radio_scr_txd" +local screenTexName = "radio_scr_tex" +local textureActive = false + +local screenActive = false +local screenVehicle = nil +local screenProp = nil + +-- LED runtime texture state: { [key] = { txdName, texName, currentlyOn } } +local ledState = {} + +-- Cache of the last message sent for each action type, so we can +-- replay the full display state when the DUI is first created. +local lastScreenState = {} + + +-- ══════════════════════════════════════════════════════════════════ +-- LED TEXTURE HELPERS +-- Creates a 4x4 solid-color runtime texture for each LED and +-- uses AddReplaceTexture to swap the prop's LED materials. +-- ══════════════════════════════════════════════════════════════════ + +--- Fills a runtime texture with a solid color by setting every pixel. +local function fillTexture(tex, w, h, r, g, b, a) + for y = 0, h - 1 do + for x = 0, w - 1 do + SetRuntimeTexturePixel(tex, x, y, r, g, b, a) + end + end + CommitRuntimeTexture(tex) +end + +--- Creates the runtime textures for all LEDs and sets them to the off color. +local function createLedTextures() + for key, cfg in pairs(LED_TEXTURES) do + local txdName = "radio_led_" .. key .. "_txd" + local texName = "radio_led_" .. key .. "_tex" + + local txd = CreateRuntimeTxd(txdName) + local tex = CreateRuntimeTexture(txd, texName, 4, 4) + fillTexture(tex, 4, 4, LED_OFF_R, LED_OFF_G, LED_OFF_B, 255) + + AddReplaceTexture(ORIG_TXD, cfg.tex, txdName, texName) + + ledState[key] = { + txdName = txdName, + texName = texName, + texHandle = tex, + currentlyOn = false, + } + end +end + +--- Removes all LED texture replacements and clears state. +local function destroyLedTextures() + for key, st in pairs(ledState) do + local cfg = LED_TEXTURES[key] + if cfg then + RemoveReplaceTexture(ORIG_TXD, cfg.tex) + end + end + ledState = {} +end + +--- Sets a single LED to its on or off color. +local function setLedColor(key, on) + local st = ledState[key] + local cfg = LED_TEXTURES[key] + if not st or not cfg then return end + if st.currentlyOn == on then return end -- no change + + if on then + fillTexture(st.texHandle, 4, 4, cfg.onR, cfg.onG, cfg.onB, 255) + else + fillTexture(st.texHandle, 4, 4, LED_OFF_R, LED_OFF_G, LED_OFF_B, 255) + end + st.currentlyOn = on +end + + +-- ══════════════════════════════════════════════════════════════════ +-- DUI LIFECYCLE +-- ══════════════════════════════════════════════════════════════════ + +local function createScreenDui() + if screenDui then return end + + local resName = GetCurrentResourceName() + local url = "https://cfx-nui-" .. resName .. "/client/screen.html" + screenDui = CreateDui(url, DUI_RES_W, DUI_RES_H) + + local handle = GetDuiHandle(screenDui) + local txd = CreateRuntimeTxd(screenTxdName) + CreateRuntimeTextureFromDuiHandle(txd, screenTexName, handle) + + -- Swap the prop's screen texture with the DUI content + AddReplaceTexture(ORIG_TXD, ORIG_TEX, screenTxdName, screenTexName) + textureActive = true + + -- Create LED textures and sync to cached state + createLedTextures() + for key, _ in pairs(LED_TEXTURES) do + local cached = lastScreenState['setLED_' .. key] + if cached and cached.mode then + setLedColor(key, true) + end + end + + -- Give the browser a moment to load, then replay cached state. + -- Skip 'alert' — alerts are transient (3s auto-clear) and should + -- not be replayed on screen activation or power-on. + Citizen.SetTimeout(300, function() + if screenDui then + for key, msg in pairs(lastScreenState) do + if key ~= 'alert' then + SendDuiMessage(screenDui, json.encode(msg)) + end + end + end + end) +end + +local function destroyScreenDui() + destroyLedTextures() + if textureActive then + RemoveReplaceTexture(ORIG_TXD, ORIG_TEX) + textureActive = false + end + if screenDui then + DestroyDui(screenDui) + screenDui = nil + end +end + +--- Sends a JSON message to the DUI browser (no-op if DUI is inactive). +local function sendToScreen(msg) + if screenDui then + SendDuiMessage(screenDui, json.encode(msg)) + end +end + + +-- ══════════════════════════════════════════════════════════════════ +-- DISPLAY FUNCTION WRAPPING +-- Intercepts the global display functions defined in shared.lua +-- to mirror every NUI update into the 3D DUI screen. +-- Cached so the full state can be replayed on DUI creation. +-- ══════════════════════════════════════════════════════════════════ + +-- dispUpdate — main display text, zone, channel +local _origDispUpdate = dispUpdate +function dispUpdate(btn01, btn02, btn03, btn04, btn05, ln01, ln02, zone, channel) + _origDispUpdate(btn01, btn02, btn03, btn04, btn05, ln01, ln02, zone, channel) + local msg = { + action = 'dispUpdate', + display = { + btn01 = btn01, btn02 = btn02, btn03 = btn03, + btn04 = btn04, btn05 = btn05, + ln01 = ln01, ln02 = ln02, + zone = zone, channel = channel, + } + } + lastScreenState['dispUpdate'] = msg + sendToScreen(msg) +end + +-- setBatt +local _origSetBatt = setBatt +function setBatt(status) + _origSetBatt(status) + local msg = { action = 'setBatt', status = status } + lastScreenState['setBatt'] = msg + sendToScreen(msg) +end + +-- setSignal +local _origSetSignal = setSignal +function setSignal(status) + _origSetSignal(status) + local msg = { action = 'setSignal', status = status } + lastScreenState['setSignal'] = msg + sendToScreen(msg) +end + +-- setGPS +local _origSetGPS = setGPS +function setGPS(status) + _origSetGPS(status) + local msg = { action = 'setGPS', status = status } + lastScreenState['setGPS'] = msg + sendToScreen(msg) +end + +-- setTrunk +local _origSetTrunk = setTrunk +function setTrunk(status) + _origSetTrunk(status) + local msg = { action = 'setTrunk', status = status } + lastScreenState['setTrunk'] = msg + sendToScreen(msg) +end + +-- setScan +local _origSetScan = setScan +function setScan(status) + _origSetScan(status) + local msg = { action = 'setScan', status = status } + lastScreenState['setScan'] = msg + sendToScreen(msg) +end + +-- setWarn +local _origSetWarn = setWarn +function setWarn(status) + _origSetWarn(status) + local msg = { action = 'setWarn', status = status } + lastScreenState['setWarn'] = msg + sendToScreen(msg) +end + +-- setLED — also drives the 3D prop LED textures +local _origSetLED = setLED +function setLED(key, state) + _origSetLED(key, state) + local msg = { action = 'setLED', key = key, mode = state } + lastScreenState['setLED_' .. tostring(key)] = msg + sendToScreen(msg) + -- Update the prop's LED material color + setLedColor(key, state and true or false) +end + +-- updateTime — recompute the time string (mirrors shared.lua logic) +local _origUpdateTime = updateTime +function updateTime() + _origUpdateTime() + local msg + if RadioState and RadioState.power then + local hours = GetClockHours() + local minutes = GetClockMinutes() + local period = "AM" + if hours >= 12 then + period = "PM" + if hours > 12 then hours = hours - 12 end + elseif hours == 0 then + hours = 12 + end + msg = { action = 'setTime', time = string.format("%02d:%02d %s", hours, minutes, period) } + else + msg = { action = 'setTime', time = "" } + end + lastScreenState['setTime'] = msg + sendToScreen(msg) +end + +-- setTheme — sync dark/light mode to the 3D screen +-- resolveTheme is local in shared.lua, so we inline the Auto logic here. +local _origSetTheme = setTheme +function setTheme(theme) + _origSetTheme(theme) + local resolved = theme + if theme == "Auto" then + local h = GetClockHours() + resolved = (h >= 20 or h < 6) and "Dark" or "Light" + end + local msg = { action = 'setTheme', theme = resolved } + lastScreenState['setTheme'] = msg + sendToScreen(msg) +end + +-- setRadioConfig — forward model name so the DUI can load useAlertLineTS +local _origSetRadioConfig = setRadioConfig +function setRadioConfig(model) + _origSetRadioConfig(model) + local msg = { action = 'setRadioConfig', model = model } + lastScreenState['setRadioConfig'] = msg + sendToScreen(msg) +end + +-- showAlert +local _origShowAlert = showAlert +function showAlert(message, mode, color) + _origShowAlert(message, mode, color) + if not mode then mode = 'none' end + if not color and mode == 'none' then color = 'black' end + if not color then color = 'white' end + local msg = { action = 'alert', message = message, mode = mode, textColor = color } + lastScreenState['alert'] = msg + sendToScreen(msg) +end + + +-- ══════════════════════════════════════════════════════════════════ +-- VEHICLE OWNERSHIP LIFECYCLE +-- Watches playerOwnedVehicle (defined in shared.lua) and +-- activates the screen when the owned vehicle has a radio prop. +-- ══════════════════════════════════════════════════════════════════ + +Citizen.CreateThread(function() + while true do + Citizen.Wait(1000) + + local vehicle = playerOwnedVehicle + + if vehicle and DoesEntityExist(vehicle) then + -- Check if this vehicle has an attached radio prop + local prop = getAttachedRadioProp and getAttachedRadioProp(vehicle) or nil + + if prop and DoesEntityExist(prop) then + if not screenActive or screenVehicle ~= vehicle then + screenVehicle = vehicle + screenProp = prop + screenActive = true + createScreenDui() + end + elseif screenActive then + screenActive = false + screenVehicle = nil + screenProp = nil + destroyScreenDui() + end + elseif screenActive then + screenActive = false + screenVehicle = nil + screenProp = nil + destroyScreenDui() + end + end +end) + + +-- ══════════════════════════════════════════════════════════════════ +-- EVENT HOOKS +-- Catch LED changes that bypass the global setLED() function. +-- shared.lua line 9914: radioClient:setLED sends directly to NUI. +-- ══════════════════════════════════════════════════════════════════ + +AddEventHandler("radioClient:setLED", function(mode) + -- This event doesn't include a key — it's a general LED mode toggle. + -- Forward to the DUI and sync all prop LEDs based on the mode value. + if type(mode) == "table" then + -- mode might be a table of { key = state } pairs + for key, state in pairs(mode) do + setLedColor(key, state and true or false) + local msg = { action = 'setLED', key = key, mode = state } + lastScreenState['setLED_' .. tostring(key)] = msg + sendToScreen(msg) + end + elseif type(mode) == "boolean" then + -- Boolean: toggle all LEDs on/off + for key, _ in pairs(LED_TEXTURES) do + setLedColor(key, mode) + end + end +end) + + +-- ══════════════════════════════════════════════════════════════════ +-- CLEANUP +-- ══════════════════════════════════════════════════════════════════ + +AddEventHandler('onResourceStop', function(resourceName) + if GetCurrentResourceName() == resourceName then + destroyScreenDui() + end +end) diff --git a/resources/radio/config.lua b/resources/radio/config.lua index 4bd2ea7e7..c2d5a0347 100644 --- a/resources/radio/config.lua +++ b/resources/radio/config.lua @@ -1,9 +1,11 @@ -- Tommy's Radio System Configuration -- Documentation: https://docs.timmygstudios.com/docs/tommys-radio --- Config Version 4.0 - Use a website like https://www.diffchecker.com/ to compare configuration file changes +-- Config Version 4.3 - Use a website like https://www.diffchecker.com/ to compare configuration file changes Config = { + communityID = "egrpleo", -- This is so player's settings are unique to your server + -- ┌──────────────────────────────────────────────────────────────┐ -- │ RADIO LAYOUTS │ -- └──────────────────────────────────────────────────────────────┘ @@ -35,8 +37,18 @@ Config = { ["Air"] = "TXDF-9100", -- Per-spawn-code overrides (add as many as you need) - ["fbi2"] = "XPR-6500", - ["police"] = "XPR-6500", + ["fbi2"] = "XPR-6500", + ["police"] = "XPR-6500", + }, + + -- External vehicle resources that ship pre-configured radio prop positions. + -- Each resource listed here should define tRadioProp 'filename.json' + -- in its fxmanifest.lua. The JSON format matches client/prop_locations.json: + -- { "modelname": { "x":0, "y":0.7, "z":0.38, "rx":-270, "ry":0, "rz":-19 } } + -- Positions saved in-game via /radioattach take priority over external ones. + ExternalVehResources = { + -- "my-police-pack", + -- "my-fire-vehicles", }, -- ┌──────────────────────────────────────────────────────────────┐ @@ -48,33 +60,33 @@ Config = { controls = { -- Primary controls - talkRadioKey = "B", -- Push-to-talk - toggleRadioKey = "F6", -- Open / close the radio UI - closeRadioKey = "", -- Alternative close key - powerBtnKey = "", -- Toggle radio power on/off + talkRadioKey = "B", -- Push-to-talk + toggleRadioKey = "F6", -- Open / close the radio UI + closeRadioKey = "", -- Alternative close key + powerBtnKey = "", -- Toggle radio power on/off -- Channel & zone navigation - channelUpKey = "", - channelDownKey = "", - zoneUpKey = "", - zoneDownKey = "", + channelUpKey = "", + channelDownKey = "", + zoneUpKey = "", + zoneDownKey = "", -- Menu navigation - menuUpKey = "", - menuDownKey = "", - menuRightKey = "", - menuLeftKey = "", - menuHomeKey = "", - menuBtn1Key = "", - menuBtn2Key = "", - menuBtn3Key = "", + menuUpKey = "", + menuDownKey = "", + menuRightKey = "", + menuLeftKey = "", + menuHomeKey = "", + menuBtn1Key = "", + menuBtn2Key = "", + menuBtn3Key = "", -- Misc - emergencyBtnKey = "", -- Trigger emergency / panic button + emergencyBtnKey = "", -- Trigger emergency / panic button -- Radio style cycling - styleUpKey = "", - styleDownKey = "", + styleUpKey = "", + styleDownKey = "", -- Volume hotkeys voiceVolumeUpKey = "", @@ -92,20 +104,20 @@ Config = { -- Final connection string sent to clients. Include protocol and/or port -- if using a proxy (e.g., "https://proxy.example.com"). When empty, the -- server's auto-detected IP address and serverPort are used instead. - serverAddress = " ", + serverAddress = "", -- Port for the radio voice server and dispatch panel. Choose a port not -- used by other resources on your server. - serverPort = 012019, + serverPort = 7777, -- Secure token for radio authentication. Change this to a long, random -- string — it protects the voice server and dispatch panel API. - authToken = " ", + authToken = "changeme", -- NAC ID / password for the dispatch channel. In-game players whose NAC -- ID matches this value can access the trunked control frequency and -- trigger SGN alerts from their radio. - dispatchNacId = " ", + dispatchNacId = "141", -- Enable Discord-based authentication for the dispatch panel. Requires -- a Discord application configured in server/.env (see server/.env.example). @@ -126,16 +138,17 @@ Config = { -- players who haven't set a custom callsign yet. useCallsignSystem = true, - callsignCommand = "callsign", -- In-game command (e.g., /callsign 2L-319). Set to "" to disable. + callsignCommand = "callsign", -- In-game command (e.g., /callsign 2L-319). Set to "" to disable. -- ┌──────────────────────────────────────────────────────────────┐ -- │ GENERAL │ -- └──────────────────────────────────────────────────────────────┘ - checkForUpdates = true, -- Check for script updates on resource start - logLevel = 3, -- 0 = Error, 1 = Warnings, 2 = Minimal, 3 = Normal, 4 = Debug, 5 = Verbose - pttReleaseDelay = 350, -- Milliseconds before releasing PTT to prevent audio cut-off (250-500 recommended) - panicTimeout = 60000, -- Milliseconds before a panic alert auto-clears + checkForUpdates = true, -- Check for script updates on resource start + healthCheck = true, -- Perform HTTP health check after server starts (https://docs.timmygstudios.com/docs/tommys-radio/troubleshooting#health-checks-failing-despite-working-panel-toc) + logLevel = 3, -- 0 = Error, 1 = Warnings, 2 = Minimal, 3 = Normal, 4 = Debug, 5 = Verbose + pttReleaseDelay = 350, -- Milliseconds before releasing PTT to prevent audio cut-off (250-500 recommended) + panicTimeout = 60000, -- Milliseconds before a panic alert auto-clears -- When true, pressing PTT on the radio will also trigger proximity -- voice chat so nearby players can hear you speaking in-game. @@ -178,32 +191,32 @@ Config = { -- applied to all received voice. Works well on its own as a -- lightweight "radio sound" without any vocoder overhead. - fxEnabled = false, -- Master switch for the FX chain below. + fxEnabled = false, -- Master switch for the FX chain below. - highpassFrequency = 250, -- Hz (80–800) Low cut. Removes rumble/low-end. - -- 250 Hz is a clean radio sound without - -- eating the low harmonics of deep voices. - lowpassFrequency = 3400, -- Hz (1200–8000) High cut. 3400 Hz = telephone band. - distortion = 20, -- (0–100) Tube saturation / analog warmth. - compression = 60, -- (0–100) Dynamic range crushing. - midBoost = 2, -- dB (-12 to 12) Presence boost at ~1200 Hz. - inputGain = 1.2, -- (0.5–3.0) Pre-amp before the chain. + highpassFrequency = 250, -- Hz (80–800) Low cut. Removes rumble/low-end. + -- 250 Hz is a clean radio sound without + -- eating the low harmonics of deep voices. + lowpassFrequency = 3400, -- Hz (1200–8000) High cut. 3400 Hz = telephone band. + distortion = 20, -- (0–100) Tube saturation / analog warmth. + compression = 60, -- (0–100) Dynamic range crushing. + midBoost = 2, -- dB (-12 to 12) Presence boost at ~1200 Hz. + inputGain = 1.2, -- (0.5–3.0) Pre-amp before the chain. - -- ── P25 IMBE Vocoder ──────────────────────────────────────── + -- ── P25 IMBE Vocoder (EXPERIMENTAL) ──────────────────────────────────────── -- True IMBE encode→decode loop. Produces the -- characteristic P25 digital radio sound. More CPU than fxEnabled -- alone but bit-accurate to real P25 Phase 1 hardware. - p25Enabled = true, -- Master switch for the IMBE vocoder. + p25Enabled = true, -- Master switch for the IMBE vocoder. }, -- 3D Audio (EXPERIMENTAL) — when enabled, radio audio is spatially -- positioned in the game world instead of playing in 2D. - enable3DAudio = false, -- Master switch for the 3D audio system - default3DAudio = false, -- true = earbuds OFF by default (3D enabled), false = earbuds ON (3D disabled) - default3DVolume = 50, -- Default 3D volume (0-100), saved per user - vehicle3DActivationDistance = 3.0, -- Min distance (meters) from vehicle before its 3D audio activates + enable3DAudio = false, -- Master switch for the 3D audio system + default3DAudio = false, -- true = earbuds OFF by default (3D enabled), false = earbuds ON (3D disabled) + default3DVolume = 50, -- Default 3D volume (0-100), saved per user + vehicle3DActivationDistance = 3.0, -- Min distance (meters) from vehicle before its 3D audio activates -- ┌──────────────────────────────────────────────────────────────┐ -- │ GPS & SIGNAL │ @@ -214,8 +227,13 @@ Config = { -- Recommended: 50 (smooth), 100 (balanced), 250 (performance), 500 (low-end) gpsBlipUpdateRate = 50, - -- Signal tower positions used for the signal-strength icon on the radio. - -- NOTE: These do NOT affect voice quality — they are cosmetic only. + -- When enabled, audio quality degrades based on distance to the nearest + -- signal tower. Closer = clearer voice, further = crushed/garbled audio + -- with dropouts. Affects both your outgoing mic and incoming playback. + signalDegradationEnabled = false, + + -- Signal tower positions used for the signal-strength icon on the radio + -- and, when signalDegradationEnabled is true, for audio degradation. signalTowerCoordinates = { { x = 1860.0, y = 3677.0, z = 33.0 }, { x = 449.0, y = -992.0, z = 30.0 }, @@ -282,10 +300,10 @@ Config = { -- doubleTapOverride = true. bonking = { - blockTransmission = true, - playBonkTone = true, - doubleTapOverride = true, - doubleTapWindow = 1500, + blockTransmission = true, + playBonkTone = true, + doubleTapOverride = true, + doubleTapWindow = 1500, }, -- ┌──────────────────────────────────────────────────────────────┐ @@ -342,22 +360,22 @@ Config = { alerts = { [1] = { - name = "SIGNAL 100", - color = "#a38718", - isPersistent = true, -- Stays active until manually cleared + name = "SIGNAL 100", + color = "#a38718", + isPersistent = true, -- Stays active until manually cleared -- Per-phase tones: loud triple-beep to activate, quiet single -- beep on each repeat so it stays noticeable without being -- overwhelming, and a falling tone to confirm it's cleared. - tones = { + tones = { ["activate"] = "PRIORITY", ["repeat"] = "PRIORITY_REPEAT", ["deactivate"] = "ALERT_C", }, - repeatInterval = 15000, -- repeat fires every 15 seconds exactly - -- omit this line for the default random 5-10s cadence + repeatInterval = 15000, -- repeat fires every 15 seconds exactly + -- omit this line for the default random 5-10s cadence repeatShowBanner = false, -- true → flash alert name on radio each repeat - -- false → play the repeat tone only, no visual flash - deactivateLabel = "RESUME", -- text shown on radio when cleared + -- false → play the repeat tone only, no visual flash + deactivateLabel = "RESUME", -- text shown on radio when cleared deactivateColor = "#1a8a38", -- colour of that label }, [2] = { @@ -370,12 +388,12 @@ Config = { [3] = { name = "Ping", color = "#1852a3", - tone = "ALERT_B", -- non-persistent: only activate phase matters + tone = "ALERT_B", -- non-persistent: only activate phase matters }, [4] = { name = "Boop", color = "#1c4ba3", - toneOnly = true, -- Plays tone without showing an alert on the radio + toneOnly = true, -- Plays tone without showing an alert on the radio tone = "BONK", }, }, @@ -400,7 +418,7 @@ Config = { zones = { [1] = { - name = "California Highway Patrol", + name = "Statewide", nacIds = { "141", "110" }, Channels = { [1] = { @@ -440,7 +458,7 @@ Config = { }, }, [2] = { - name = "Los Angeles POLICE DEPARTMENT", + name = "Los Santos", nacIds = { "141" }, Channels = { [1] = { @@ -480,7 +498,7 @@ Config = { }, }, [3] = { - name = "Los Angeles County Sheriff", + name = "Blaine County", nacIds = { "141" }, Channels = { [1] = { diff --git a/resources/radio/fxmanifest.lua b/resources/radio/fxmanifest.lua index a5d715543..2aca6d076 100644 --- a/resources/radio/fxmanifest.lua +++ b/resources/radio/fxmanifest.lua @@ -4,9 +4,9 @@ fx_version 'bodacious' game 'gta5' name 'Tommy\'s Radio' -description 'FiveM In-Game Radio Script' -author 'Tommy Johnston' -version 'v4.0' +description 'Realistic Radio for FiveM' +author 'Tommy Johnston (TIMMYG Studios)' +version 'v4.3' -- Lua Version lua54 'yes' @@ -21,15 +21,19 @@ files { 'client/dist/imbe_vocoder.wasm', 'client/radios/**/*.*', 'client/index.html', + 'client/screen.html', + 'stream/**' } -- Scripts shared_scripts { 'config.lua', 'animations.lua', - 'audio.lua', + 'client/audio.lua', 'shared.lua', - 'blips.lua', + 'client/blips.lua', + 'client/positions.lua', + 'client/screen.lua', } server_scripts { @@ -41,7 +45,11 @@ server_scripts { escrow_ignore { 'config.lua', 'animations.lua', + 'client/positions.lua', + 'client/screen.lua', 'client/radios/**/*.*' } +data_file 'DLC_ITYP_REQUEST' 'stream/afx1500.ytyp' + dependency '/assetpacks' \ No newline at end of file diff --git a/resources/radio/server/dispatch.html b/resources/radio/server/dispatch.html index da7fbbe98..90537b21c 100644 --- a/resources/radio/server/dispatch.html +++ b/resources/radio/server/dispatch.html @@ -1 +1 @@ - Radio Dispatch Panel
Connected
MUTED
Loading dispatch panel...
Connecting to radio system

Settings

Configure your dispatch panel preferences

Update your callsign without re-logging in

Click and press a key to change PTT button

Volume for tone, background effects, and transmission sounds

Volume for voice communications

Choose your preferred theme

Configure Endpoint

Welcome! Please configure your dispatch server endpoint to continue. You can use the default endpoint or specify a custom one.

Dispatch Access Control

Enter your Network Access Code to continue

Broadcast Alert

Send User Alert

Send alert to user

Change Callsign

Set callsign for user

Leave empty and click Save to reset to the default name.

Disconnect User

Are you sure you want to disconnect this user from the radio system?

\ No newline at end of file + Radio Dispatch Panel
Connected
MUTED
Loading dispatch panel...
Connecting to radio system

Settings

Configure your dispatch panel preferences

Update your callsign without re-logging in

Click and press a key to change PTT button

Volume for tone, background effects, and transmission sounds

Volume for voice communications

Choose your preferred theme

Configure Endpoint

Welcome! Please configure your dispatch server endpoint to continue. You can use the default endpoint or specify a custom one.

Dispatch Access Control

Enter your Network Access Code to continue

Broadcast Alert

Send User Alert

Send alert to user

Change Callsign

Set callsign for user

Leave empty and click Save to reset to the default name.

Disconnect User

Are you sure you want to disconnect this user from the radio system?

\ No newline at end of file diff --git a/resources/radio/server/dispatch.lua b/resources/radio/server/dispatch.lua index 7b82a194c..c86ec05e7 100644 Binary files a/resources/radio/server/dispatch.lua and b/resources/radio/server/dispatch.lua differ diff --git a/resources/radio/server/dist/bundle.js b/resources/radio/server/dist/bundle.js index 779fd1758..c558e7286 100644 --- a/resources/radio/server/dist/bundle.js +++ b/resources/radio/server/dist/bundle.js @@ -11243,7 +11243,7 @@ var require_webtransport = __commonJS((exports2) => { var engine_io_parser_1 = require_cjs(); var debug = (0, debug_1.default)("engine:webtransport"); - class WebTransport2 extends transport_1.Transport { + class WebTransport extends transport_1.Transport { constructor(session, stream, reader) { super({ _query: { EIO: "4" } }); this.session = session; @@ -11293,7 +11293,7 @@ var require_webtransport = __commonJS((exports2) => { fn && fn(); } } - exports2.WebTransport = WebTransport2; + exports2.WebTransport = WebTransport; }); // node_modules/engine.io/build/transports/index.js @@ -13413,7 +13413,7 @@ var require_websocket2 = __commonJS((exports2, module2) => { NOOP } = require_constants(); var { - EventTarget: { addEventListener: addEventListener2, removeEventListener: removeEventListener2 } + EventTarget: { addEventListener, removeEventListener } } = require_event_target(); var { format, parse } = require_extension(); var { toBuffer } = require_buffer_util(); @@ -13737,8 +13737,8 @@ var require_websocket2 = __commonJS((exports2, module2) => { } }); }); - WebSocket.prototype.addEventListener = addEventListener2; - WebSocket.prototype.removeEventListener = removeEventListener2; + WebSocket.prototype.addEventListener = addEventListener; + WebSocket.prototype.removeEventListener = removeEventListener; module2.exports = WebSocket; function initAsClient(websocket, address, protocols, options) { const opts = { @@ -13892,9 +13892,9 @@ var require_websocket2 = __commonJS((exports2, module2) => { emitErrorAndClose(websocket, err); }); req.on("response", (res) => { - const location2 = res.headers.location; + const location = res.headers.location; const statusCode = res.statusCode; - if (location2 && opts.followRedirects && statusCode >= 300 && statusCode < 400) { + if (location && opts.followRedirects && statusCode >= 300 && statusCode < 400) { if (++websocket._redirects > opts.maxRedirects) { abortHandshake(websocket, req, "Maximum redirects exceeded"); return; @@ -13902,9 +13902,9 @@ var require_websocket2 = __commonJS((exports2, module2) => { req.abort(); let addr; try { - addr = new URL2(location2, address); + addr = new URL2(location, address); } catch (e) { - const err = new SyntaxError(`Invalid URL: ${location2}`); + const err = new SyntaxError(`Invalid URL: ${location}`); emitErrorAndClose(websocket, err); return; } @@ -23374,3458 +23374,6 @@ var require_main = __commonJS((exports2, module2) => { module2.exports = DotenvModule; }); -// node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js -var require_XMLHttpRequest = __commonJS((exports2, module2) => { - var fs = require("fs"); - var Url = require("url"); - var spawn = require("child_process").spawn; - module2.exports = XMLHttpRequest2; - XMLHttpRequest2.XMLHttpRequest = XMLHttpRequest2; - function XMLHttpRequest2(opts) { - opts = opts || {}; - var self = this; - var http = require("http"); - var https = require("https"); - var request; - var response; - var settings = {}; - var disableHeaderCheck = false; - var defaultHeaders = { - "User-Agent": "node-XMLHttpRequest", - Accept: "*/*" - }; - var headers = Object.assign({}, defaultHeaders); - var forbiddenRequestHeaders = [ - "accept-charset", - "accept-encoding", - "access-control-request-headers", - "access-control-request-method", - "connection", - "content-length", - "content-transfer-encoding", - "cookie", - "cookie2", - "date", - "expect", - "host", - "keep-alive", - "origin", - "referer", - "te", - "trailer", - "transfer-encoding", - "upgrade", - "via" - ]; - var forbiddenRequestMethods = [ - "TRACE", - "TRACK", - "CONNECT" - ]; - var sendFlag = false; - var errorFlag = false; - var abortedFlag = false; - var listeners = {}; - this.UNSENT = 0; - this.OPENED = 1; - this.HEADERS_RECEIVED = 2; - this.LOADING = 3; - this.DONE = 4; - this.readyState = this.UNSENT; - this.onreadystatechange = null; - this.responseText = ""; - this.responseXML = ""; - this.response = Buffer.alloc(0); - this.status = null; - this.statusText = null; - var isAllowedHttpHeader = function(header) { - return disableHeaderCheck || header && forbiddenRequestHeaders.indexOf(header.toLowerCase()) === -1; - }; - var isAllowedHttpMethod = function(method) { - return method && forbiddenRequestMethods.indexOf(method) === -1; - }; - this.open = function(method, url, async, user, password) { - this.abort(); - errorFlag = false; - abortedFlag = false; - if (!isAllowedHttpMethod(method)) { - throw new Error("SecurityError: Request method not allowed"); - } - settings = { - method, - url: url.toString(), - async: typeof async !== "boolean" ? true : async, - user: user || null, - password: password || null - }; - setState(this.OPENED); - }; - this.setDisableHeaderCheck = function(state) { - disableHeaderCheck = state; - }; - this.setRequestHeader = function(header, value) { - if (this.readyState != this.OPENED) { - throw new Error("INVALID_STATE_ERR: setRequestHeader can only be called when state is OPEN"); - } - if (!isAllowedHttpHeader(header)) { - console.warn('Refused to set unsafe header "' + header + '"'); - return false; - } - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send flag is true"); - } - headers[header] = value; - return true; - }; - this.getResponseHeader = function(header) { - if (typeof header === "string" && this.readyState > this.OPENED && response.headers[header.toLowerCase()] && !errorFlag) { - return response.headers[header.toLowerCase()]; - } - return null; - }; - this.getAllResponseHeaders = function() { - if (this.readyState < this.HEADERS_RECEIVED || errorFlag) { - return ""; - } - var result = ""; - for (var i in response.headers) { - if (i !== "set-cookie" && i !== "set-cookie2") { - result += i + ": " + response.headers[i] + `\r -`; - } - } - return result.substr(0, result.length - 2); - }; - this.getRequestHeader = function(name) { - if (typeof name === "string" && headers[name]) { - return headers[name]; - } - return ""; - }; - this.send = function(data) { - if (this.readyState != this.OPENED) { - throw new Error("INVALID_STATE_ERR: connection must be opened before send() is called"); - } - if (sendFlag) { - throw new Error("INVALID_STATE_ERR: send has already been called"); - } - var ssl = false, local = false; - var url = Url.parse(settings.url); - var host; - switch (url.protocol) { - case "https:": - ssl = true; - case "http:": - host = url.hostname; - break; - case "file:": - local = true; - break; - case undefined: - case "": - host = "localhost"; - break; - default: - throw new Error("Protocol not supported."); - } - if (local) { - if (settings.method !== "GET") { - throw new Error("XMLHttpRequest: Only GET method is supported"); - } - if (settings.async) { - fs.readFile(unescape(url.pathname), function(error, data2) { - if (error) { - self.handleError(error, error.errno || -1); - } else { - self.status = 200; - self.responseText = data2.toString("utf8"); - self.response = data2; - setState(self.DONE); - } - }); - } else { - try { - this.response = fs.readFileSync(unescape(url.pathname)); - this.responseText = this.response.toString("utf8"); - this.status = 200; - setState(self.DONE); - } catch (e) { - this.handleError(e, e.errno || -1); - } - } - return; - } - var port = url.port || (ssl ? 443 : 80); - var uri = url.pathname + (url.search ? url.search : ""); - headers["Host"] = host; - if (!(ssl && port === 443 || port === 80)) { - headers["Host"] += ":" + url.port; - } - if (settings.user) { - if (typeof settings.password == "undefined") { - settings.password = ""; - } - var authBuf = new Buffer(settings.user + ":" + settings.password); - headers["Authorization"] = "Basic " + authBuf.toString("base64"); - } - if (settings.method === "GET" || settings.method === "HEAD") { - data = null; - } else if (data) { - headers["Content-Length"] = Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data); - var headersKeys = Object.keys(headers); - if (!headersKeys.some(function(h) { - return h.toLowerCase() === "content-type"; - })) { - headers["Content-Type"] = "text/plain;charset=UTF-8"; - } - } else if (settings.method === "POST") { - headers["Content-Length"] = 0; - } - var agent = opts.agent || false; - var options = { - host, - port, - path: uri, - method: settings.method, - headers, - agent - }; - if (ssl) { - options.pfx = opts.pfx; - options.key = opts.key; - options.passphrase = opts.passphrase; - options.cert = opts.cert; - options.ca = opts.ca; - options.ciphers = opts.ciphers; - options.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true; - } - errorFlag = false; - if (settings.async) { - var doRequest = ssl ? https.request : http.request; - sendFlag = true; - self.dispatchEvent("readystatechange"); - var responseHandler = function(resp2) { - response = resp2; - if (response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) { - settings.url = response.headers.location; - var url2 = Url.parse(settings.url); - host = url2.hostname; - var newOptions = { - hostname: url2.hostname, - port: url2.port, - path: url2.path, - method: response.statusCode === 303 ? "GET" : settings.method, - headers - }; - if (ssl) { - newOptions.pfx = opts.pfx; - newOptions.key = opts.key; - newOptions.passphrase = opts.passphrase; - newOptions.cert = opts.cert; - newOptions.ca = opts.ca; - newOptions.ciphers = opts.ciphers; - newOptions.rejectUnauthorized = opts.rejectUnauthorized === false ? false : true; - } - request = doRequest(newOptions, responseHandler).on("error", errorHandler); - request.end(); - return; - } - setState(self.HEADERS_RECEIVED); - self.status = response.statusCode; - response.on("data", function(chunk) { - if (chunk) { - var data2 = Buffer.from(chunk); - self.response = Buffer.concat([self.response, data2]); - } - if (sendFlag) { - setState(self.LOADING); - } - }); - response.on("end", function() { - if (sendFlag) { - sendFlag = false; - setState(self.DONE); - self.responseText = self.response.toString("utf8"); - } - }); - response.on("error", function(error) { - self.handleError(error); - }); - }; - var errorHandler = function(error) { - if (request.reusedSocket && error.code === "ECONNRESET") - return doRequest(options, responseHandler).on("error", errorHandler); - self.handleError(error); - }; - request = doRequest(options, responseHandler).on("error", errorHandler); - if (opts.autoUnref) { - request.on("socket", (socket) => { - socket.unref(); - }); - } - if (data) { - request.write(data); - } - request.end(); - self.dispatchEvent("loadstart"); - } else { - var contentFile = ".node-xmlhttprequest-content-" + process.pid; - var syncFile = ".node-xmlhttprequest-sync-" + process.pid; - fs.writeFileSync(syncFile, "", "utf8"); - var execString = "var http = require('http'), https = require('https'), fs = require('fs');" + "var doRequest = http" + (ssl ? "s" : "") + ".request;" + "var options = " + JSON.stringify(options) + ";" + "var responseText = '';" + "var responseData = Buffer.alloc(0);" + "var req = doRequest(options, function(response) {" + "response.on('data', function(chunk) {" + " var data = Buffer.from(chunk);" + " responseText += data.toString('utf8');" + " responseData = Buffer.concat([responseData, data]);" + "});" + "response.on('end', function() {" + "fs.writeFileSync('" + contentFile + "', JSON.stringify({err: null, data: {statusCode: response.statusCode, headers: response.headers, text: responseText, data: responseData.toString('base64')}}), 'utf8');" + "fs.unlinkSync('" + syncFile + "');" + "});" + "response.on('error', function(error) {" + "fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" + "fs.unlinkSync('" + syncFile + "');" + "});" + "}).on('error', function(error) {" + "fs.writeFileSync('" + contentFile + "', 'NODE-XMLHTTPREQUEST-ERROR:' + JSON.stringify(error), 'utf8');" + "fs.unlinkSync('" + syncFile + "');" + "});" + (data ? "req.write('" + JSON.stringify(data).slice(1, -1).replace(/'/g, "\\'") + "');" : "") + "req.end();"; - var syncProc = spawn(process.argv[0], ["-e", execString]); - var statusText; - while (fs.existsSync(syncFile)) {} - self.responseText = fs.readFileSync(contentFile, "utf8"); - syncProc.stdin.end(); - fs.unlinkSync(contentFile); - if (self.responseText.match(/^NODE-XMLHTTPREQUEST-ERROR:/)) { - var errorObj = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-ERROR:/, "")); - self.handleError(errorObj, 503); - } else { - self.status = self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:([0-9]*),.*/, "$1"); - var resp = JSON.parse(self.responseText.replace(/^NODE-XMLHTTPREQUEST-STATUS:[0-9]*,(.*)/, "$1")); - response = { - statusCode: self.status, - headers: resp.data.headers - }; - self.responseText = resp.data.text; - self.response = Buffer.from(resp.data.data, "base64"); - setState(self.DONE, true); - } - } - }; - this.handleError = function(error, status) { - this.status = status || 0; - this.statusText = error; - this.responseText = error.stack; - errorFlag = true; - setState(this.DONE); - }; - this.abort = function() { - if (request) { - request.abort(); - request = null; - } - headers = Object.assign({}, defaultHeaders); - this.responseText = ""; - this.responseXML = ""; - this.response = Buffer.alloc(0); - errorFlag = abortedFlag = true; - if (this.readyState !== this.UNSENT && (this.readyState !== this.OPENED || sendFlag) && this.readyState !== this.DONE) { - sendFlag = false; - setState(this.DONE); - } - this.readyState = this.UNSENT; - }; - this.addEventListener = function(event, callback) { - if (!(event in listeners)) { - listeners[event] = []; - } - listeners[event].push(callback); - }; - this.removeEventListener = function(event, callback) { - if (event in listeners) { - listeners[event] = listeners[event].filter(function(ev) { - return ev !== callback; - }); - } - }; - this.dispatchEvent = function(event) { - if (typeof self["on" + event] === "function") { - if (this.readyState === this.DONE && settings.async) - setTimeout(function() { - self["on" + event](); - }, 0); - else - self["on" + event](); - } - if (event in listeners) { - for (let i = 0, len = listeners[event].length;i < len; i++) { - if (this.readyState === this.DONE) - setTimeout(function() { - listeners[event][i].call(self); - }, 0); - else - listeners[event][i].call(self); - } - } - }; - var setState = function(state) { - if (self.readyState === state || self.readyState === self.UNSENT && abortedFlag) - return; - self.readyState = state; - if (settings.async || self.readyState < self.OPENED || self.readyState === self.DONE) { - self.dispatchEvent("readystatechange"); - } - if (self.readyState === self.DONE) { - let fire; - if (abortedFlag) - fire = "abort"; - else if (errorFlag) - fire = "error"; - else - fire = "load"; - self.dispatchEvent(fire); - self.dispatchEvent("loadend"); - } - }; - } -}); - -// node_modules/engine.io-client/build/cjs/globals.node.js -var require_globals_node = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.CookieJar = exports2.defaultBinaryType = exports2.globalThisShim = exports2.nextTick = undefined; - exports2.createCookieJar = createCookieJar; - exports2.parse = parse; - exports2.nextTick = process.nextTick; - exports2.globalThisShim = global; - exports2.defaultBinaryType = "nodebuffer"; - function createCookieJar() { - return new CookieJar; - } - function parse(setCookieString) { - const parts = setCookieString.split("; "); - const i = parts[0].indexOf("="); - if (i === -1) { - return; - } - const name = parts[0].substring(0, i).trim(); - if (!name.length) { - return; - } - let value = parts[0].substring(i + 1).trim(); - if (value.charCodeAt(0) === 34) { - value = value.slice(1, -1); - } - const cookie = { - name, - value - }; - for (let j = 1;j < parts.length; j++) { - const subParts = parts[j].split("="); - if (subParts.length !== 2) { - continue; - } - const key = subParts[0].trim(); - const value2 = subParts[1].trim(); - switch (key) { - case "Expires": - cookie.expires = new Date(value2); - break; - case "Max-Age": - const expiration = new Date; - expiration.setUTCSeconds(expiration.getUTCSeconds() + parseInt(value2, 10)); - cookie.expires = expiration; - break; - default: - } - } - return cookie; - } - - class CookieJar { - constructor() { - this._cookies = new Map; - } - parseCookies(values) { - if (!values) { - return; - } - values.forEach((value) => { - const parsed = parse(value); - if (parsed) { - this._cookies.set(parsed.name, parsed); - } - }); - } - get cookies() { - const now = Date.now(); - this._cookies.forEach((cookie, name) => { - var _a; - if (((_a = cookie.expires) === null || _a === undefined ? undefined : _a.getTime()) < now) { - this._cookies.delete(name); - } - }); - return this._cookies.entries(); - } - addCookies(xhr) { - const cookies = []; - for (const [name, cookie] of this.cookies) { - cookies.push(`${name}=${cookie.value}`); - } - if (cookies.length) { - xhr.setDisableHeaderCheck(true); - xhr.setRequestHeader("cookie", cookies.join("; ")); - } - } - appendCookies(headers) { - for (const [name, cookie] of this.cookies) { - headers.append("cookie", `${name}=${cookie.value}`); - } - } - } - exports2.CookieJar = CookieJar; -}); - -// node_modules/engine.io-client/build/cjs/util.js -var require_util = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.pick = pick; - exports2.installTimerFunctions = installTimerFunctions; - exports2.byteLength = byteLength; - exports2.randomString = randomString; - var globals_node_js_1 = require_globals_node(); - function pick(obj, ...attr) { - return attr.reduce((acc, k) => { - if (obj.hasOwnProperty(k)) { - acc[k] = obj[k]; - } - return acc; - }, {}); - } - var NATIVE_SET_TIMEOUT = globals_node_js_1.globalThisShim.setTimeout; - var NATIVE_CLEAR_TIMEOUT = globals_node_js_1.globalThisShim.clearTimeout; - function installTimerFunctions(obj, opts) { - if (opts.useNativeTimers) { - obj.setTimeoutFn = NATIVE_SET_TIMEOUT.bind(globals_node_js_1.globalThisShim); - obj.clearTimeoutFn = NATIVE_CLEAR_TIMEOUT.bind(globals_node_js_1.globalThisShim); - } else { - obj.setTimeoutFn = globals_node_js_1.globalThisShim.setTimeout.bind(globals_node_js_1.globalThisShim); - obj.clearTimeoutFn = globals_node_js_1.globalThisShim.clearTimeout.bind(globals_node_js_1.globalThisShim); - } - } - var BASE64_OVERHEAD = 1.33; - function byteLength(obj) { - if (typeof obj === "string") { - return utf8Length(obj); - } - return Math.ceil((obj.byteLength || obj.size) * BASE64_OVERHEAD); - } - function utf8Length(str) { - let c = 0, length = 0; - for (let i = 0, l = str.length;i < l; i++) { - c = str.charCodeAt(i); - if (c < 128) { - length += 1; - } else if (c < 2048) { - length += 2; - } else if (c < 55296 || c >= 57344) { - length += 3; - } else { - i++; - length += 4; - } - } - return length; - } - function randomString() { - return Date.now().toString(36).substring(3) + Math.random().toString(36).substring(2, 5); - } -}); - -// node_modules/engine.io-client/build/cjs/contrib/parseqs.js -var require_parseqs = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.encode = encode; - exports2.decode = decode; - function encode(obj) { - let str = ""; - for (let i in obj) { - if (obj.hasOwnProperty(i)) { - if (str.length) - str += "&"; - str += encodeURIComponent(i) + "=" + encodeURIComponent(obj[i]); - } - } - return str; - } - function decode(qs) { - let qry = {}; - let pairs = qs.split("&"); - for (let i = 0, l = pairs.length;i < l; i++) { - let pair = pairs[i].split("="); - qry[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); - } - return qry; - } -}); - -// node_modules/engine.io-client/node_modules/debug/src/common.js -var require_common5 = __commonJS((exports2, module2) => { - function setup(env2) { - createDebug.debug = createDebug; - createDebug.default = createDebug; - createDebug.coerce = coerce; - createDebug.disable = disable; - createDebug.enable = enable; - createDebug.enabled = enabled; - createDebug.humanize = require_ms(); - createDebug.destroy = destroy; - Object.keys(env2).forEach((key) => { - createDebug[key] = env2[key]; - }); - createDebug.names = []; - createDebug.skips = []; - createDebug.formatters = {}; - function selectColor(namespace) { - let hash = 0; - for (let i = 0;i < namespace.length; i++) { - hash = (hash << 5) - hash + namespace.charCodeAt(i); - hash |= 0; - } - return createDebug.colors[Math.abs(hash) % createDebug.colors.length]; - } - createDebug.selectColor = selectColor; - function createDebug(namespace) { - let prevTime; - let enableOverride = null; - let namespacesCache; - let enabledCache; - function debug(...args) { - if (!debug.enabled) { - return; - } - const self = debug; - const curr = Number(new Date); - const ms = curr - (prevTime || curr); - self.diff = ms; - self.prev = prevTime; - self.curr = curr; - prevTime = curr; - args[0] = createDebug.coerce(args[0]); - if (typeof args[0] !== "string") { - args.unshift("%O"); - } - let index = 0; - args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => { - if (match === "%%") { - return "%"; - } - index++; - const formatter = createDebug.formatters[format]; - if (typeof formatter === "function") { - const val = args[index]; - match = formatter.call(self, val); - args.splice(index, 1); - index--; - } - return match; - }); - createDebug.formatArgs.call(self, args); - const logFn = self.log || createDebug.log; - logFn.apply(self, args); - } - debug.namespace = namespace; - debug.useColors = createDebug.useColors(); - debug.color = createDebug.selectColor(namespace); - debug.extend = extend; - debug.destroy = createDebug.destroy; - Object.defineProperty(debug, "enabled", { - enumerable: true, - configurable: false, - get: () => { - if (enableOverride !== null) { - return enableOverride; - } - if (namespacesCache !== createDebug.namespaces) { - namespacesCache = createDebug.namespaces; - enabledCache = createDebug.enabled(namespace); - } - return enabledCache; - }, - set: (v) => { - enableOverride = v; - } - }); - if (typeof createDebug.init === "function") { - createDebug.init(debug); - } - return debug; - } - function extend(namespace, delimiter) { - const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace); - newDebug.log = this.log; - return newDebug; - } - function enable(namespaces) { - createDebug.save(namespaces); - createDebug.namespaces = namespaces; - createDebug.names = []; - createDebug.skips = []; - let i; - const split = (typeof namespaces === "string" ? namespaces : "").split(/[\s,]+/); - const len = split.length; - for (i = 0;i < len; i++) { - if (!split[i]) { - continue; - } - namespaces = split[i].replace(/\*/g, ".*?"); - if (namespaces[0] === "-") { - createDebug.skips.push(new RegExp("^" + namespaces.slice(1) + "$")); - } else { - createDebug.names.push(new RegExp("^" + namespaces + "$")); - } - } - } - function disable() { - const namespaces = [ - ...createDebug.names.map(toNamespace), - ...createDebug.skips.map(toNamespace).map((namespace) => "-" + namespace) - ].join(","); - createDebug.enable(""); - return namespaces; - } - function enabled(name) { - if (name[name.length - 1] === "*") { - return true; - } - let i; - let len; - for (i = 0, len = createDebug.skips.length;i < len; i++) { - if (createDebug.skips[i].test(name)) { - return false; - } - } - for (i = 0, len = createDebug.names.length;i < len; i++) { - if (createDebug.names[i].test(name)) { - return true; - } - } - return false; - } - function toNamespace(regexp) { - return regexp.toString().substring(2, regexp.toString().length - 2).replace(/\.\*\?$/, "*"); - } - function coerce(val) { - if (val instanceof Error) { - return val.stack || val.message; - } - return val; - } - function destroy() { - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - createDebug.enable(createDebug.load()); - return createDebug; - } - module2.exports = setup; -}); - -// node_modules/engine.io-client/node_modules/debug/src/browser.js -var require_browser5 = __commonJS((exports2, module2) => { - exports2.formatArgs = formatArgs; - exports2.save = save; - exports2.load = load; - exports2.useColors = useColors; - exports2.storage = localstorage(); - exports2.destroy = (() => { - let warned = false; - return () => { - if (!warned) { - warned = true; - console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - } - }; - })(); - exports2.colors = [ - "#0000CC", - "#0000FF", - "#0033CC", - "#0033FF", - "#0066CC", - "#0066FF", - "#0099CC", - "#0099FF", - "#00CC00", - "#00CC33", - "#00CC66", - "#00CC99", - "#00CCCC", - "#00CCFF", - "#3300CC", - "#3300FF", - "#3333CC", - "#3333FF", - "#3366CC", - "#3366FF", - "#3399CC", - "#3399FF", - "#33CC00", - "#33CC33", - "#33CC66", - "#33CC99", - "#33CCCC", - "#33CCFF", - "#6600CC", - "#6600FF", - "#6633CC", - "#6633FF", - "#66CC00", - "#66CC33", - "#9900CC", - "#9900FF", - "#9933CC", - "#9933FF", - "#99CC00", - "#99CC33", - "#CC0000", - "#CC0033", - "#CC0066", - "#CC0099", - "#CC00CC", - "#CC00FF", - "#CC3300", - "#CC3333", - "#CC3366", - "#CC3399", - "#CC33CC", - "#CC33FF", - "#CC6600", - "#CC6633", - "#CC9900", - "#CC9933", - "#CCCC00", - "#CCCC33", - "#FF0000", - "#FF0033", - "#FF0066", - "#FF0099", - "#FF00CC", - "#FF00FF", - "#FF3300", - "#FF3333", - "#FF3366", - "#FF3399", - "#FF33CC", - "#FF33FF", - "#FF6600", - "#FF6633", - "#FF9900", - "#FF9933", - "#FFCC00", - "#FFCC33" - ]; - function useColors() { - if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) { - return true; - } - if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) { - return false; - } - let m; - return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/); - } - function formatArgs(args) { - args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff); - if (!this.useColors) { - return; - } - const c = "color: " + this.color; - args.splice(1, 0, c, "color: inherit"); - let index = 0; - let lastC = 0; - args[0].replace(/%[a-zA-Z%]/g, (match) => { - if (match === "%%") { - return; - } - index++; - if (match === "%c") { - lastC = index; - } - }); - args.splice(lastC, 0, c); - } - exports2.log = console.debug || console.log || (() => {}); - function save(namespaces) { - try { - if (namespaces) { - exports2.storage.setItem("debug", namespaces); - } else { - exports2.storage.removeItem("debug"); - } - } catch (error) {} - } - function load() { - let r; - try { - r = exports2.storage.getItem("debug"); - } catch (error) {} - if (!r && typeof process !== "undefined" && "env" in process) { - r = process.env.DEBUG; - } - return r; - } - function localstorage() { - try { - return localStorage; - } catch (error) {} - } - module2.exports = require_common5()(exports2); - var { formatters } = module2.exports; - formatters.j = function(v) { - try { - return JSON.stringify(v); - } catch (error) { - return "[UnexpectedJSONParseError]: " + error.message; - } - }; -}); - -// node_modules/engine.io-client/node_modules/debug/src/node.js -var require_node5 = __commonJS((exports2, module2) => { - var tty2 = require("tty"); - var util = require("util"); - exports2.init = init; - exports2.log = log; - exports2.formatArgs = formatArgs; - exports2.save = save; - exports2.load = load; - exports2.useColors = useColors; - exports2.destroy = util.deprecate(() => {}, "Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."); - exports2.colors = [6, 2, 3, 4, 5, 1]; - try { - const supportsColor2 = (init_supports_color(), __toCommonJS(exports_supports_color)); - if (supportsColor2 && (supportsColor2.stderr || supportsColor2).level >= 2) { - exports2.colors = [ - 20, - 21, - 26, - 27, - 32, - 33, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 56, - 57, - 62, - 63, - 68, - 69, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 92, - 93, - 98, - 99, - 112, - 113, - 128, - 129, - 134, - 135, - 148, - 149, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 178, - 179, - 184, - 185, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 214, - 215, - 220, - 221 - ]; - } - } catch (error) {} - exports2.inspectOpts = Object.keys(process.env).filter((key) => { - return /^debug_/i.test(key); - }).reduce((obj, key) => { - const prop = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => { - return k.toUpperCase(); - }); - let val = process.env[key]; - if (/^(yes|on|true|enabled)$/i.test(val)) { - val = true; - } else if (/^(no|off|false|disabled)$/i.test(val)) { - val = false; - } else if (val === "null") { - val = null; - } else { - val = Number(val); - } - obj[prop] = val; - return obj; - }, {}); - function useColors() { - return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty2.isatty(process.stderr.fd); - } - function formatArgs(args) { - const { namespace: name, useColors: useColors2 } = this; - if (useColors2) { - const c = this.color; - const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c); - const prefix = ` ${colorCode};1m${name} \x1B[0m`; - args[0] = prefix + args[0].split(` -`).join(` -` + prefix); - args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m"); - } else { - args[0] = getDate() + name + " " + args[0]; - } - } - function getDate() { - if (exports2.inspectOpts.hideDate) { - return ""; - } - return new Date().toISOString() + " "; - } - function log(...args) { - return process.stderr.write(util.formatWithOptions(exports2.inspectOpts, ...args) + ` -`); - } - function save(namespaces) { - if (namespaces) { - process.env.DEBUG = namespaces; - } else { - delete process.env.DEBUG; - } - } - function load() { - return process.env.DEBUG; - } - function init(debug) { - debug.inspectOpts = {}; - const keys = Object.keys(exports2.inspectOpts); - for (let i = 0;i < keys.length; i++) { - debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]]; - } - } - module2.exports = require_common5()(exports2); - var { formatters } = module2.exports; - formatters.o = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts).split(` -`).map((str) => str.trim()).join(" "); - }; - formatters.O = function(v) { - this.inspectOpts.colors = this.useColors; - return util.inspect(v, this.inspectOpts); - }; -}); - -// node_modules/engine.io-client/node_modules/debug/src/index.js -var require_src5 = __commonJS((exports2, module2) => { - if (typeof process === "undefined" || process.type === "renderer" || false || process.__nwjs) { - module2.exports = require_browser5(); - } else { - module2.exports = require_node5(); - } -}); - -// node_modules/engine.io-client/build/cjs/transport.js -var require_transport2 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Transport = exports2.TransportError = undefined; - var engine_io_parser_1 = require_cjs(); - var component_emitter_1 = require_cjs2(); - var util_js_1 = require_util(); - var parseqs_js_1 = require_parseqs(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:transport"); - - class TransportError extends Error { - constructor(reason, description, context) { - super(reason); - this.description = description; - this.context = context; - this.type = "TransportError"; - } - } - exports2.TransportError = TransportError; - - class Transport extends component_emitter_1.Emitter { - constructor(opts) { - super(); - this.writable = false; - (0, util_js_1.installTimerFunctions)(this, opts); - this.opts = opts; - this.query = opts.query; - this.socket = opts.socket; - this.supportsBinary = !opts.forceBase64; - } - onError(reason, description, context) { - super.emitReserved("error", new TransportError(reason, description, context)); - return this; - } - open() { - this.readyState = "opening"; - this.doOpen(); - return this; - } - close() { - if (this.readyState === "opening" || this.readyState === "open") { - this.doClose(); - this.onClose(); - } - return this; - } - send(packets) { - if (this.readyState === "open") { - this.write(packets); - } else { - debug("transport is not open, discarding packets"); - } - } - onOpen() { - this.readyState = "open"; - this.writable = true; - super.emitReserved("open"); - } - onData(data) { - const packet = (0, engine_io_parser_1.decodePacket)(data, this.socket.binaryType); - this.onPacket(packet); - } - onPacket(packet) { - super.emitReserved("packet", packet); - } - onClose(details) { - this.readyState = "closed"; - super.emitReserved("close", details); - } - pause(onPause) {} - createUri(schema, query = {}) { - return schema + "://" + this._hostname() + this._port() + this.opts.path + this._query(query); - } - _hostname() { - const hostname = this.opts.hostname; - return hostname.indexOf(":") === -1 ? hostname : "[" + hostname + "]"; - } - _port() { - if (this.opts.port && (this.opts.secure && Number(this.opts.port !== 443) || !this.opts.secure && Number(this.opts.port) !== 80)) { - return ":" + this.opts.port; - } else { - return ""; - } - } - _query(query) { - const encodedQuery = (0, parseqs_js_1.encode)(query); - return encodedQuery.length ? "?" + encodedQuery : ""; - } - } - exports2.Transport = Transport; -}); - -// node_modules/engine.io-client/build/cjs/transports/polling.js -var require_polling3 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Polling = undefined; - var transport_js_1 = require_transport2(); - var util_js_1 = require_util(); - var engine_io_parser_1 = require_cjs(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:polling"); - - class Polling extends transport_js_1.Transport { - constructor() { - super(...arguments); - this._polling = false; - } - get name() { - return "polling"; - } - doOpen() { - this._poll(); - } - pause(onPause) { - this.readyState = "pausing"; - const pause = () => { - debug("paused"); - this.readyState = "paused"; - onPause(); - }; - if (this._polling || !this.writable) { - let total = 0; - if (this._polling) { - debug("we are currently polling - waiting to pause"); - total++; - this.once("pollComplete", function() { - debug("pre-pause polling complete"); - --total || pause(); - }); - } - if (!this.writable) { - debug("we are currently writing - waiting to pause"); - total++; - this.once("drain", function() { - debug("pre-pause writing complete"); - --total || pause(); - }); - } - } else { - pause(); - } - } - _poll() { - debug("polling"); - this._polling = true; - this.doPoll(); - this.emitReserved("poll"); - } - onData(data) { - debug("polling got data %s", data); - const callback = (packet) => { - if (this.readyState === "opening" && packet.type === "open") { - this.onOpen(); - } - if (packet.type === "close") { - this.onClose({ description: "transport closed by the server" }); - return false; - } - this.onPacket(packet); - }; - (0, engine_io_parser_1.decodePayload)(data, this.socket.binaryType).forEach(callback); - if (this.readyState !== "closed") { - this._polling = false; - this.emitReserved("pollComplete"); - if (this.readyState === "open") { - this._poll(); - } else { - debug('ignoring poll - transport state "%s"', this.readyState); - } - } - } - doClose() { - const close = () => { - debug("writing close packet"); - this.write([{ type: "close" }]); - }; - if (this.readyState === "open") { - debug("transport open - closing"); - close(); - } else { - debug("transport not open - deferring close"); - this.once("open", close); - } - } - write(packets) { - this.writable = false; - (0, engine_io_parser_1.encodePayload)(packets, (data) => { - this.doWrite(data, () => { - this.writable = true; - this.emitReserved("drain"); - }); - }); - } - uri() { - const schema = this.opts.secure ? "https" : "http"; - const query = this.query || {}; - if (this.opts.timestampRequests !== false) { - query[this.opts.timestampParam] = (0, util_js_1.randomString)(); - } - if (!this.supportsBinary && !query.sid) { - query.b64 = 1; - } - return this.createUri(schema, query); - } - } - exports2.Polling = Polling; -}); - -// node_modules/engine.io-client/build/cjs/contrib/has-cors.js -var require_has_cors = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.hasCORS = undefined; - var value = false; - try { - value = typeof XMLHttpRequest !== "undefined" && "withCredentials" in new XMLHttpRequest; - } catch (err) {} - exports2.hasCORS = value; -}); - -// node_modules/engine.io-client/build/cjs/transports/polling-xhr.js -var require_polling_xhr = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.XHR = exports2.Request = exports2.BaseXHR = undefined; - var polling_js_1 = require_polling3(); - var component_emitter_1 = require_cjs2(); - var util_js_1 = require_util(); - var globals_node_js_1 = require_globals_node(); - var has_cors_js_1 = require_has_cors(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:polling"); - function empty() {} - - class BaseXHR extends polling_js_1.Polling { - constructor(opts) { - super(opts); - if (typeof location !== "undefined") { - const isSSL = location.protocol === "https:"; - let port = location.port; - if (!port) { - port = isSSL ? "443" : "80"; - } - this.xd = typeof location !== "undefined" && opts.hostname !== location.hostname || port !== opts.port; - } - } - doWrite(data, fn) { - const req = this.request({ - method: "POST", - data - }); - req.on("success", fn); - req.on("error", (xhrStatus, context) => { - this.onError("xhr post error", xhrStatus, context); - }); - } - doPoll() { - debug("xhr poll"); - const req = this.request(); - req.on("data", this.onData.bind(this)); - req.on("error", (xhrStatus, context) => { - this.onError("xhr poll error", xhrStatus, context); - }); - this.pollXhr = req; - } - } - exports2.BaseXHR = BaseXHR; - - class Request extends component_emitter_1.Emitter { - constructor(createRequest, uri, opts) { - super(); - this.createRequest = createRequest; - (0, util_js_1.installTimerFunctions)(this, opts); - this._opts = opts; - this._method = opts.method || "GET"; - this._uri = uri; - this._data = opts.data !== undefined ? opts.data : null; - this._create(); - } - _create() { - var _a; - const opts = (0, util_js_1.pick)(this._opts, "agent", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "autoUnref"); - opts.xdomain = !!this._opts.xd; - const xhr = this._xhr = this.createRequest(opts); - try { - debug("xhr open %s: %s", this._method, this._uri); - xhr.open(this._method, this._uri, true); - try { - if (this._opts.extraHeaders) { - xhr.setDisableHeaderCheck && xhr.setDisableHeaderCheck(true); - for (let i in this._opts.extraHeaders) { - if (this._opts.extraHeaders.hasOwnProperty(i)) { - xhr.setRequestHeader(i, this._opts.extraHeaders[i]); - } - } - } - } catch (e) {} - if (this._method === "POST") { - try { - xhr.setRequestHeader("Content-type", "text/plain;charset=UTF-8"); - } catch (e) {} - } - try { - xhr.setRequestHeader("Accept", "*/*"); - } catch (e) {} - (_a = this._opts.cookieJar) === null || _a === undefined || _a.addCookies(xhr); - if ("withCredentials" in xhr) { - xhr.withCredentials = this._opts.withCredentials; - } - if (this._opts.requestTimeout) { - xhr.timeout = this._opts.requestTimeout; - } - xhr.onreadystatechange = () => { - var _a2; - if (xhr.readyState === 3) { - (_a2 = this._opts.cookieJar) === null || _a2 === undefined || _a2.parseCookies(xhr.getResponseHeader("set-cookie")); - } - if (xhr.readyState !== 4) - return; - if (xhr.status === 200 || xhr.status === 1223) { - this._onLoad(); - } else { - this.setTimeoutFn(() => { - this._onError(typeof xhr.status === "number" ? xhr.status : 0); - }, 0); - } - }; - debug("xhr data %s", this._data); - xhr.send(this._data); - } catch (e) { - this.setTimeoutFn(() => { - this._onError(e); - }, 0); - return; - } - if (typeof document !== "undefined") { - this._index = Request.requestsCount++; - Request.requests[this._index] = this; - } - } - _onError(err) { - this.emitReserved("error", err, this._xhr); - this._cleanup(true); - } - _cleanup(fromError) { - if (typeof this._xhr === "undefined" || this._xhr === null) { - return; - } - this._xhr.onreadystatechange = empty; - if (fromError) { - try { - this._xhr.abort(); - } catch (e) {} - } - if (typeof document !== "undefined") { - delete Request.requests[this._index]; - } - this._xhr = null; - } - _onLoad() { - const data = this._xhr.responseText; - if (data !== null) { - this.emitReserved("data", data); - this.emitReserved("success"); - this._cleanup(); - } - } - abort() { - this._cleanup(); - } - } - exports2.Request = Request; - Request.requestsCount = 0; - Request.requests = {}; - if (typeof document !== "undefined") { - if (typeof attachEvent === "function") { - attachEvent("onunload", unloadHandler); - } else if (typeof addEventListener === "function") { - const terminationEvent = "onpagehide" in globals_node_js_1.globalThisShim ? "pagehide" : "unload"; - addEventListener(terminationEvent, unloadHandler, false); - } - } - function unloadHandler() { - for (let i in Request.requests) { - if (Request.requests.hasOwnProperty(i)) { - Request.requests[i].abort(); - } - } - } - var hasXHR2 = function() { - const xhr = newRequest({ - xdomain: false - }); - return xhr && xhr.responseType !== null; - }(); - - class XHR extends BaseXHR { - constructor(opts) { - super(opts); - const forceBase64 = opts && opts.forceBase64; - this.supportsBinary = hasXHR2 && !forceBase64; - } - request(opts = {}) { - Object.assign(opts, { xd: this.xd }, this.opts); - return new Request(newRequest, this.uri(), opts); - } - } - exports2.XHR = XHR; - function newRequest(opts) { - const xdomain = opts.xdomain; - try { - if (typeof XMLHttpRequest !== "undefined" && (!xdomain || has_cors_js_1.hasCORS)) { - return new XMLHttpRequest; - } - } catch (e) {} - if (!xdomain) { - try { - return new globals_node_js_1.globalThisShim[["Active"].concat("Object").join("X")]("Microsoft.XMLHTTP"); - } catch (e) {} - } - } -}); - -// node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.js -var require_polling_xhr_node = __commonJS((exports2) => { - var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports2 && exports2.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.XHR = undefined; - var XMLHttpRequestModule = __importStar(require_XMLHttpRequest()); - var polling_xhr_js_1 = require_polling_xhr(); - var XMLHttpRequest2 = XMLHttpRequestModule.default || XMLHttpRequestModule; - - class XHR extends polling_xhr_js_1.BaseXHR { - request(opts = {}) { - var _a; - Object.assign(opts, { xd: this.xd, cookieJar: (_a = this.socket) === null || _a === undefined ? undefined : _a._cookieJar }, this.opts); - return new polling_xhr_js_1.Request((opts2) => new XMLHttpRequest2(opts2), this.uri(), opts); - } - } - exports2.XHR = XHR; -}); - -// node_modules/engine.io-client/build/cjs/transports/websocket.js -var require_websocket4 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.WS = exports2.BaseWS = undefined; - var transport_js_1 = require_transport2(); - var util_js_1 = require_util(); - var engine_io_parser_1 = require_cjs(); - var globals_node_js_1 = require_globals_node(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:websocket"); - var isReactNative = typeof navigator !== "undefined" && typeof navigator.product === "string" && navigator.product.toLowerCase() === "reactnative"; - - class BaseWS extends transport_js_1.Transport { - get name() { - return "websocket"; - } - doOpen() { - const uri = this.uri(); - const protocols = this.opts.protocols; - const opts = isReactNative ? {} : (0, util_js_1.pick)(this.opts, "agent", "perMessageDeflate", "pfx", "key", "passphrase", "cert", "ca", "ciphers", "rejectUnauthorized", "localAddress", "protocolVersion", "origin", "maxPayload", "family", "checkServerIdentity"); - if (this.opts.extraHeaders) { - opts.headers = this.opts.extraHeaders; - } - try { - this.ws = this.createSocket(uri, protocols, opts); - } catch (err) { - return this.emitReserved("error", err); - } - this.ws.binaryType = this.socket.binaryType; - this.addEventListeners(); - } - addEventListeners() { - this.ws.onopen = () => { - if (this.opts.autoUnref) { - this.ws._socket.unref(); - } - this.onOpen(); - }; - this.ws.onclose = (closeEvent) => this.onClose({ - description: "websocket connection closed", - context: closeEvent - }); - this.ws.onmessage = (ev) => this.onData(ev.data); - this.ws.onerror = (e) => this.onError("websocket error", e); - } - write(packets) { - this.writable = false; - for (let i = 0;i < packets.length; i++) { - const packet = packets[i]; - const lastPacket = i === packets.length - 1; - (0, engine_io_parser_1.encodePacket)(packet, this.supportsBinary, (data) => { - try { - this.doWrite(packet, data); - } catch (e) { - debug("websocket closed before onclose event"); - } - if (lastPacket) { - (0, globals_node_js_1.nextTick)(() => { - this.writable = true; - this.emitReserved("drain"); - }, this.setTimeoutFn); - } - }); - } - } - doClose() { - if (typeof this.ws !== "undefined") { - this.ws.onerror = () => {}; - this.ws.close(); - this.ws = null; - } - } - uri() { - const schema = this.opts.secure ? "wss" : "ws"; - const query = this.query || {}; - if (this.opts.timestampRequests) { - query[this.opts.timestampParam] = (0, util_js_1.randomString)(); - } - if (!this.supportsBinary) { - query.b64 = 1; - } - return this.createUri(schema, query); - } - } - exports2.BaseWS = BaseWS; - var WebSocketCtor = globals_node_js_1.globalThisShim.WebSocket || globals_node_js_1.globalThisShim.MozWebSocket; - - class WS extends BaseWS { - createSocket(uri, protocols, opts) { - return !isReactNative ? protocols ? new WebSocketCtor(uri, protocols) : new WebSocketCtor(uri) : new WebSocketCtor(uri, protocols, opts); - } - doWrite(_packet, data) { - this.ws.send(data); - } - } - exports2.WS = WS; -}); - -// node_modules/engine.io-client/build/cjs/transports/websocket.node.js -var require_websocket_node = __commonJS((exports2) => { - var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports2 && exports2.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.WS = undefined; - var ws = __importStar(require_ws()); - var websocket_js_1 = require_websocket4(); - - class WS extends websocket_js_1.BaseWS { - createSocket(uri, protocols, opts) { - var _a; - if ((_a = this.socket) === null || _a === undefined ? undefined : _a._cookieJar) { - opts.headers = opts.headers || {}; - opts.headers.cookie = typeof opts.headers.cookie === "string" ? [opts.headers.cookie] : opts.headers.cookie || []; - for (const [name, cookie] of this.socket._cookieJar.cookies) { - opts.headers.cookie.push(`${name}=${cookie.value}`); - } - } - return new ws.WebSocket(uri, protocols, opts); - } - doWrite(packet, data) { - const opts = {}; - if (packet.options) { - opts.compress = packet.options.compress; - } - if (this.opts.perMessageDeflate) { - const len = typeof data === "string" ? Buffer.byteLength(data) : data.length; - if (len < this.opts.perMessageDeflate.threshold) { - opts.compress = false; - } - } - this.ws.send(data, opts); - } - } - exports2.WS = WS; -}); - -// node_modules/engine.io-client/build/cjs/transports/webtransport.js -var require_webtransport2 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.WT = undefined; - var transport_js_1 = require_transport2(); - var globals_node_js_1 = require_globals_node(); - var engine_io_parser_1 = require_cjs(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:webtransport"); - - class WT extends transport_js_1.Transport { - get name() { - return "webtransport"; - } - doOpen() { - try { - this._transport = new WebTransport(this.createUri("https"), this.opts.transportOptions[this.name]); - } catch (err) { - return this.emitReserved("error", err); - } - this._transport.closed.then(() => { - debug("transport closed gracefully"); - this.onClose(); - }).catch((err) => { - debug("transport closed due to %s", err); - this.onError("webtransport error", err); - }); - this._transport.ready.then(() => { - this._transport.createBidirectionalStream().then((stream) => { - const decoderStream = (0, engine_io_parser_1.createPacketDecoderStream)(Number.MAX_SAFE_INTEGER, this.socket.binaryType); - const reader = stream.readable.pipeThrough(decoderStream).getReader(); - const encoderStream = (0, engine_io_parser_1.createPacketEncoderStream)(); - encoderStream.readable.pipeTo(stream.writable); - this._writer = encoderStream.writable.getWriter(); - const read = () => { - reader.read().then(({ done, value }) => { - if (done) { - debug("session is closed"); - return; - } - debug("received chunk: %o", value); - this.onPacket(value); - read(); - }).catch((err) => { - debug("an error occurred while reading: %s", err); - }); - }; - read(); - const packet = { type: "open" }; - if (this.query.sid) { - packet.data = `{"sid":"${this.query.sid}"}`; - } - this._writer.write(packet).then(() => this.onOpen()); - }); - }); - } - write(packets) { - this.writable = false; - for (let i = 0;i < packets.length; i++) { - const packet = packets[i]; - const lastPacket = i === packets.length - 1; - this._writer.write(packet).then(() => { - if (lastPacket) { - (0, globals_node_js_1.nextTick)(() => { - this.writable = true; - this.emitReserved("drain"); - }, this.setTimeoutFn); - } - }); - } - } - doClose() { - var _a; - (_a = this._transport) === null || _a === undefined || _a.close(); - } - } - exports2.WT = WT; -}); - -// node_modules/engine.io-client/build/cjs/transports/index.js -var require_transports2 = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.transports = undefined; - var polling_xhr_node_js_1 = require_polling_xhr_node(); - var websocket_node_js_1 = require_websocket_node(); - var webtransport_js_1 = require_webtransport2(); - exports2.transports = { - websocket: websocket_node_js_1.WS, - webtransport: webtransport_js_1.WT, - polling: polling_xhr_node_js_1.XHR - }; -}); - -// node_modules/engine.io-client/build/cjs/contrib/parseuri.js -var require_parseuri = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.parse = parse; - var re = /^(?:(?![^:@\/?#]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@\/?#]*)(?::([^:@\/?#]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/; - var parts = [ - "source", - "protocol", - "authority", - "userInfo", - "user", - "password", - "host", - "port", - "relative", - "path", - "directory", - "file", - "query", - "anchor" - ]; - function parse(str) { - if (str.length > 8000) { - throw "URI too long"; - } - const src = str, b = str.indexOf("["), e = str.indexOf("]"); - if (b != -1 && e != -1) { - str = str.substring(0, b) + str.substring(b, e).replace(/:/g, ";") + str.substring(e, str.length); - } - let m = re.exec(str || ""), uri = {}, i = 14; - while (i--) { - uri[parts[i]] = m[i] || ""; - } - if (b != -1 && e != -1) { - uri.source = src; - uri.host = uri.host.substring(1, uri.host.length - 1).replace(/;/g, ":"); - uri.authority = uri.authority.replace("[", "").replace("]", "").replace(/;/g, ":"); - uri.ipv6uri = true; - } - uri.pathNames = pathNames(uri, uri["path"]); - uri.queryKey = queryKey(uri, uri["query"]); - return uri; - } - function pathNames(obj, path) { - const regx = /\/{2,9}/g, names = path.replace(regx, "/").split("/"); - if (path.slice(0, 1) == "/" || path.length === 0) { - names.splice(0, 1); - } - if (path.slice(-1) == "/") { - names.splice(names.length - 1, 1); - } - return names; - } - function queryKey(uri, query) { - const data = {}; - query.replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function($0, $1, $2) { - if ($1) { - data[$1] = $2; - } - }); - return data; - } -}); - -// node_modules/engine.io-client/build/cjs/socket.js -var require_socket3 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Socket = exports2.SocketWithUpgrade = exports2.SocketWithoutUpgrade = undefined; - var index_js_1 = require_transports2(); - var util_js_1 = require_util(); - var parseqs_js_1 = require_parseqs(); - var parseuri_js_1 = require_parseuri(); - var component_emitter_1 = require_cjs2(); - var engine_io_parser_1 = require_cjs(); - var globals_node_js_1 = require_globals_node(); - var debug_1 = __importDefault(require_src5()); - var debug = (0, debug_1.default)("engine.io-client:socket"); - var withEventListeners = typeof addEventListener === "function" && typeof removeEventListener === "function"; - var OFFLINE_EVENT_LISTENERS = []; - if (withEventListeners) { - addEventListener("offline", () => { - debug("closing %d connection(s) because the network was lost", OFFLINE_EVENT_LISTENERS.length); - OFFLINE_EVENT_LISTENERS.forEach((listener) => listener()); - }, false); - } - - class SocketWithoutUpgrade extends component_emitter_1.Emitter { - constructor(uri, opts) { - super(); - this.binaryType = globals_node_js_1.defaultBinaryType; - this.writeBuffer = []; - this._prevBufferLen = 0; - this._pingInterval = -1; - this._pingTimeout = -1; - this._maxPayload = -1; - this._pingTimeoutTime = Infinity; - if (uri && typeof uri === "object") { - opts = uri; - uri = null; - } - if (uri) { - const parsedUri = (0, parseuri_js_1.parse)(uri); - opts.hostname = parsedUri.host; - opts.secure = parsedUri.protocol === "https" || parsedUri.protocol === "wss"; - opts.port = parsedUri.port; - if (parsedUri.query) - opts.query = parsedUri.query; - } else if (opts.host) { - opts.hostname = (0, parseuri_js_1.parse)(opts.host).host; - } - (0, util_js_1.installTimerFunctions)(this, opts); - this.secure = opts.secure != null ? opts.secure : typeof location !== "undefined" && location.protocol === "https:"; - if (opts.hostname && !opts.port) { - opts.port = this.secure ? "443" : "80"; - } - this.hostname = opts.hostname || (typeof location !== "undefined" ? location.hostname : "localhost"); - this.port = opts.port || (typeof location !== "undefined" && location.port ? location.port : this.secure ? "443" : "80"); - this.transports = []; - this._transportsByName = {}; - opts.transports.forEach((t) => { - const transportName = t.prototype.name; - this.transports.push(transportName); - this._transportsByName[transportName] = t; - }); - this.opts = Object.assign({ - path: "/engine.io", - agent: false, - withCredentials: false, - upgrade: true, - timestampParam: "t", - rememberUpgrade: false, - addTrailingSlash: true, - rejectUnauthorized: true, - perMessageDeflate: { - threshold: 1024 - }, - transportOptions: {}, - closeOnBeforeunload: false - }, opts); - this.opts.path = this.opts.path.replace(/\/$/, "") + (this.opts.addTrailingSlash ? "/" : ""); - if (typeof this.opts.query === "string") { - this.opts.query = (0, parseqs_js_1.decode)(this.opts.query); - } - if (withEventListeners) { - if (this.opts.closeOnBeforeunload) { - this._beforeunloadEventListener = () => { - if (this.transport) { - this.transport.removeAllListeners(); - this.transport.close(); - } - }; - addEventListener("beforeunload", this._beforeunloadEventListener, false); - } - if (this.hostname !== "localhost") { - debug("adding listener for the 'offline' event"); - this._offlineEventListener = () => { - this._onClose("transport close", { - description: "network connection lost" - }); - }; - OFFLINE_EVENT_LISTENERS.push(this._offlineEventListener); - } - } - if (this.opts.withCredentials) { - this._cookieJar = (0, globals_node_js_1.createCookieJar)(); - } - this._open(); - } - createTransport(name) { - debug('creating transport "%s"', name); - const query = Object.assign({}, this.opts.query); - query.EIO = engine_io_parser_1.protocol; - query.transport = name; - if (this.id) - query.sid = this.id; - const opts = Object.assign({}, this.opts, { - query, - socket: this, - hostname: this.hostname, - secure: this.secure, - port: this.port - }, this.opts.transportOptions[name]); - debug("options: %j", opts); - return new this._transportsByName[name](opts); - } - _open() { - if (this.transports.length === 0) { - this.setTimeoutFn(() => { - this.emitReserved("error", "No transports available"); - }, 0); - return; - } - const transportName = this.opts.rememberUpgrade && SocketWithoutUpgrade.priorWebsocketSuccess && this.transports.indexOf("websocket") !== -1 ? "websocket" : this.transports[0]; - this.readyState = "opening"; - const transport = this.createTransport(transportName); - transport.open(); - this.setTransport(transport); - } - setTransport(transport) { - debug("setting transport %s", transport.name); - if (this.transport) { - debug("clearing existing transport %s", this.transport.name); - this.transport.removeAllListeners(); - } - this.transport = transport; - transport.on("drain", this._onDrain.bind(this)).on("packet", this._onPacket.bind(this)).on("error", this._onError.bind(this)).on("close", (reason) => this._onClose("transport close", reason)); - } - onOpen() { - debug("socket open"); - this.readyState = "open"; - SocketWithoutUpgrade.priorWebsocketSuccess = this.transport.name === "websocket"; - this.emitReserved("open"); - this.flush(); - } - _onPacket(packet) { - if (this.readyState === "opening" || this.readyState === "open" || this.readyState === "closing") { - debug('socket receive: type "%s", data "%s"', packet.type, packet.data); - this.emitReserved("packet", packet); - this.emitReserved("heartbeat"); - switch (packet.type) { - case "open": - this.onHandshake(JSON.parse(packet.data)); - break; - case "ping": - this._sendPacket("pong"); - this.emitReserved("ping"); - this.emitReserved("pong"); - this._resetPingTimeout(); - break; - case "error": - const err = new Error("server error"); - err.code = packet.data; - this._onError(err); - break; - case "message": - this.emitReserved("data", packet.data); - this.emitReserved("message", packet.data); - break; - } - } else { - debug('packet received with socket readyState "%s"', this.readyState); - } - } - onHandshake(data) { - this.emitReserved("handshake", data); - this.id = data.sid; - this.transport.query.sid = data.sid; - this._pingInterval = data.pingInterval; - this._pingTimeout = data.pingTimeout; - this._maxPayload = data.maxPayload; - this.onOpen(); - if (this.readyState === "closed") - return; - this._resetPingTimeout(); - } - _resetPingTimeout() { - this.clearTimeoutFn(this._pingTimeoutTimer); - const delay = this._pingInterval + this._pingTimeout; - this._pingTimeoutTime = Date.now() + delay; - this._pingTimeoutTimer = this.setTimeoutFn(() => { - this._onClose("ping timeout"); - }, delay); - if (this.opts.autoUnref) { - this._pingTimeoutTimer.unref(); - } - } - _onDrain() { - this.writeBuffer.splice(0, this._prevBufferLen); - this._prevBufferLen = 0; - if (this.writeBuffer.length === 0) { - this.emitReserved("drain"); - } else { - this.flush(); - } - } - flush() { - if (this.readyState !== "closed" && this.transport.writable && !this.upgrading && this.writeBuffer.length) { - const packets = this._getWritablePackets(); - debug("flushing %d packets in socket", packets.length); - this.transport.send(packets); - this._prevBufferLen = packets.length; - this.emitReserved("flush"); - } - } - _getWritablePackets() { - const shouldCheckPayloadSize = this._maxPayload && this.transport.name === "polling" && this.writeBuffer.length > 1; - if (!shouldCheckPayloadSize) { - return this.writeBuffer; - } - let payloadSize = 1; - for (let i = 0;i < this.writeBuffer.length; i++) { - const data = this.writeBuffer[i].data; - if (data) { - payloadSize += (0, util_js_1.byteLength)(data); - } - if (i > 0 && payloadSize > this._maxPayload) { - debug("only send %d out of %d packets", i, this.writeBuffer.length); - return this.writeBuffer.slice(0, i); - } - payloadSize += 2; - } - debug("payload size is %d (max: %d)", payloadSize, this._maxPayload); - return this.writeBuffer; - } - _hasPingExpired() { - if (!this._pingTimeoutTime) - return true; - const hasExpired = Date.now() > this._pingTimeoutTime; - if (hasExpired) { - debug("throttled timer detected, scheduling connection close"); - this._pingTimeoutTime = 0; - (0, globals_node_js_1.nextTick)(() => { - this._onClose("ping timeout"); - }, this.setTimeoutFn); - } - return hasExpired; - } - write(msg, options, fn) { - this._sendPacket("message", msg, options, fn); - return this; - } - send(msg, options, fn) { - this._sendPacket("message", msg, options, fn); - return this; - } - _sendPacket(type, data, options, fn) { - if (typeof data === "function") { - fn = data; - data = undefined; - } - if (typeof options === "function") { - fn = options; - options = null; - } - if (this.readyState === "closing" || this.readyState === "closed") { - return; - } - options = options || {}; - options.compress = options.compress !== false; - const packet = { - type, - data, - options - }; - this.emitReserved("packetCreate", packet); - this.writeBuffer.push(packet); - if (fn) - this.once("flush", fn); - this.flush(); - } - close() { - const close = () => { - this._onClose("forced close"); - debug("socket closing - telling transport to close"); - this.transport.close(); - }; - const cleanupAndClose = () => { - this.off("upgrade", cleanupAndClose); - this.off("upgradeError", cleanupAndClose); - close(); - }; - const waitForUpgrade = () => { - this.once("upgrade", cleanupAndClose); - this.once("upgradeError", cleanupAndClose); - }; - if (this.readyState === "opening" || this.readyState === "open") { - this.readyState = "closing"; - if (this.writeBuffer.length) { - this.once("drain", () => { - if (this.upgrading) { - waitForUpgrade(); - } else { - close(); - } - }); - } else if (this.upgrading) { - waitForUpgrade(); - } else { - close(); - } - } - return this; - } - _onError(err) { - debug("socket error %j", err); - SocketWithoutUpgrade.priorWebsocketSuccess = false; - if (this.opts.tryAllTransports && this.transports.length > 1 && this.readyState === "opening") { - debug("trying next transport"); - this.transports.shift(); - return this._open(); - } - this.emitReserved("error", err); - this._onClose("transport error", err); - } - _onClose(reason, description) { - if (this.readyState === "opening" || this.readyState === "open" || this.readyState === "closing") { - debug('socket close with reason: "%s"', reason); - this.clearTimeoutFn(this._pingTimeoutTimer); - this.transport.removeAllListeners("close"); - this.transport.close(); - this.transport.removeAllListeners(); - if (withEventListeners) { - if (this._beforeunloadEventListener) { - removeEventListener("beforeunload", this._beforeunloadEventListener, false); - } - if (this._offlineEventListener) { - const i = OFFLINE_EVENT_LISTENERS.indexOf(this._offlineEventListener); - if (i !== -1) { - debug("removing listener for the 'offline' event"); - OFFLINE_EVENT_LISTENERS.splice(i, 1); - } - } - } - this.readyState = "closed"; - this.id = null; - this.emitReserved("close", reason, description); - this.writeBuffer = []; - this._prevBufferLen = 0; - } - } - } - exports2.SocketWithoutUpgrade = SocketWithoutUpgrade; - SocketWithoutUpgrade.protocol = engine_io_parser_1.protocol; - - class SocketWithUpgrade extends SocketWithoutUpgrade { - constructor() { - super(...arguments); - this._upgrades = []; - } - onOpen() { - super.onOpen(); - if (this.readyState === "open" && this.opts.upgrade) { - debug("starting upgrade probes"); - for (let i = 0;i < this._upgrades.length; i++) { - this._probe(this._upgrades[i]); - } - } - } - _probe(name) { - debug('probing transport "%s"', name); - let transport = this.createTransport(name); - let failed = false; - SocketWithoutUpgrade.priorWebsocketSuccess = false; - const onTransportOpen = () => { - if (failed) - return; - debug('probe transport "%s" opened', name); - transport.send([{ type: "ping", data: "probe" }]); - transport.once("packet", (msg) => { - if (failed) - return; - if (msg.type === "pong" && msg.data === "probe") { - debug('probe transport "%s" pong', name); - this.upgrading = true; - this.emitReserved("upgrading", transport); - if (!transport) - return; - SocketWithoutUpgrade.priorWebsocketSuccess = transport.name === "websocket"; - debug('pausing current transport "%s"', this.transport.name); - this.transport.pause(() => { - if (failed) - return; - if (this.readyState === "closed") - return; - debug("changing transport and sending upgrade packet"); - cleanup(); - this.setTransport(transport); - transport.send([{ type: "upgrade" }]); - this.emitReserved("upgrade", transport); - transport = null; - this.upgrading = false; - this.flush(); - }); - } else { - debug('probe transport "%s" failed', name); - const err = new Error("probe error"); - err.transport = transport.name; - this.emitReserved("upgradeError", err); - } - }); - }; - function freezeTransport() { - if (failed) - return; - failed = true; - cleanup(); - transport.close(); - transport = null; - } - const onerror = (err) => { - const error = new Error("probe error: " + err); - error.transport = transport.name; - freezeTransport(); - debug('probe transport "%s" failed because of error: %s', name, err); - this.emitReserved("upgradeError", error); - }; - function onTransportClose() { - onerror("transport closed"); - } - function onclose() { - onerror("socket closed"); - } - function onupgrade(to) { - if (transport && to.name !== transport.name) { - debug('"%s" works - aborting "%s"', to.name, transport.name); - freezeTransport(); - } - } - const cleanup = () => { - transport.removeListener("open", onTransportOpen); - transport.removeListener("error", onerror); - transport.removeListener("close", onTransportClose); - this.off("close", onclose); - this.off("upgrading", onupgrade); - }; - transport.once("open", onTransportOpen); - transport.once("error", onerror); - transport.once("close", onTransportClose); - this.once("close", onclose); - this.once("upgrading", onupgrade); - if (this._upgrades.indexOf("webtransport") !== -1 && name !== "webtransport") { - this.setTimeoutFn(() => { - if (!failed) { - transport.open(); - } - }, 200); - } else { - transport.open(); - } - } - onHandshake(data) { - this._upgrades = this._filterUpgrades(data.upgrades); - super.onHandshake(data); - } - _filterUpgrades(upgrades) { - const filteredUpgrades = []; - for (let i = 0;i < upgrades.length; i++) { - if (~this.transports.indexOf(upgrades[i])) - filteredUpgrades.push(upgrades[i]); - } - return filteredUpgrades; - } - } - exports2.SocketWithUpgrade = SocketWithUpgrade; - - class Socket extends SocketWithUpgrade { - constructor(uri, opts = {}) { - const o = typeof uri === "object" ? uri : opts; - if (!o.transports || o.transports && typeof o.transports[0] === "string") { - o.transports = (o.transports || ["polling", "websocket", "webtransport"]).map((transportName) => index_js_1.transports[transportName]).filter((t) => !!t); - } - super(uri, o); - } - } - exports2.Socket = Socket; -}); - -// node_modules/engine.io-client/build/cjs/transports/polling-fetch.js -var require_polling_fetch = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Fetch = undefined; - var polling_js_1 = require_polling3(); - - class Fetch extends polling_js_1.Polling { - doPoll() { - this._fetch().then((res) => { - if (!res.ok) { - return this.onError("fetch read error", res.status, res); - } - res.text().then((data) => this.onData(data)); - }).catch((err) => { - this.onError("fetch read error", err); - }); - } - doWrite(data, callback) { - this._fetch(data).then((res) => { - if (!res.ok) { - return this.onError("fetch write error", res.status, res); - } - callback(); - }).catch((err) => { - this.onError("fetch write error", err); - }); - } - _fetch(data) { - var _a; - const isPost = data !== undefined; - const headers = new Headers(this.opts.extraHeaders); - if (isPost) { - headers.set("content-type", "text/plain;charset=UTF-8"); - } - (_a = this.socket._cookieJar) === null || _a === undefined || _a.appendCookies(headers); - return fetch(this.uri(), { - method: isPost ? "POST" : "GET", - body: isPost ? data : null, - headers, - credentials: this.opts.withCredentials ? "include" : "omit" - }).then((res) => { - var _a2; - (_a2 = this.socket._cookieJar) === null || _a2 === undefined || _a2.parseCookies(res.headers.getSetCookie()); - return res; - }); - } - } - exports2.Fetch = Fetch; -}); - -// node_modules/engine.io-client/build/cjs/index.js -var require_cjs4 = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.WebTransport = exports2.WebSocket = exports2.NodeWebSocket = exports2.XHR = exports2.NodeXHR = exports2.Fetch = exports2.nextTick = exports2.parse = exports2.installTimerFunctions = exports2.transports = exports2.TransportError = exports2.Transport = exports2.protocol = exports2.SocketWithUpgrade = exports2.SocketWithoutUpgrade = exports2.Socket = undefined; - var socket_js_1 = require_socket3(); - Object.defineProperty(exports2, "Socket", { enumerable: true, get: function() { - return socket_js_1.Socket; - } }); - var socket_js_2 = require_socket3(); - Object.defineProperty(exports2, "SocketWithoutUpgrade", { enumerable: true, get: function() { - return socket_js_2.SocketWithoutUpgrade; - } }); - Object.defineProperty(exports2, "SocketWithUpgrade", { enumerable: true, get: function() { - return socket_js_2.SocketWithUpgrade; - } }); - exports2.protocol = socket_js_1.Socket.protocol; - var transport_js_1 = require_transport2(); - Object.defineProperty(exports2, "Transport", { enumerable: true, get: function() { - return transport_js_1.Transport; - } }); - Object.defineProperty(exports2, "TransportError", { enumerable: true, get: function() { - return transport_js_1.TransportError; - } }); - var index_js_1 = require_transports2(); - Object.defineProperty(exports2, "transports", { enumerable: true, get: function() { - return index_js_1.transports; - } }); - var util_js_1 = require_util(); - Object.defineProperty(exports2, "installTimerFunctions", { enumerable: true, get: function() { - return util_js_1.installTimerFunctions; - } }); - var parseuri_js_1 = require_parseuri(); - Object.defineProperty(exports2, "parse", { enumerable: true, get: function() { - return parseuri_js_1.parse; - } }); - var globals_node_js_1 = require_globals_node(); - Object.defineProperty(exports2, "nextTick", { enumerable: true, get: function() { - return globals_node_js_1.nextTick; - } }); - var polling_fetch_js_1 = require_polling_fetch(); - Object.defineProperty(exports2, "Fetch", { enumerable: true, get: function() { - return polling_fetch_js_1.Fetch; - } }); - var polling_xhr_node_js_1 = require_polling_xhr_node(); - Object.defineProperty(exports2, "NodeXHR", { enumerable: true, get: function() { - return polling_xhr_node_js_1.XHR; - } }); - var polling_xhr_js_1 = require_polling_xhr(); - Object.defineProperty(exports2, "XHR", { enumerable: true, get: function() { - return polling_xhr_js_1.XHR; - } }); - var websocket_node_js_1 = require_websocket_node(); - Object.defineProperty(exports2, "NodeWebSocket", { enumerable: true, get: function() { - return websocket_node_js_1.WS; - } }); - var websocket_js_1 = require_websocket4(); - Object.defineProperty(exports2, "WebSocket", { enumerable: true, get: function() { - return websocket_js_1.WS; - } }); - var webtransport_js_1 = require_webtransport2(); - Object.defineProperty(exports2, "WebTransport", { enumerable: true, get: function() { - return webtransport_js_1.WT; - } }); -}); - -// node_modules/socket.io-client/build/cjs/url.js -var require_url = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.url = url; - var engine_io_client_1 = require_cjs4(); - var debug_1 = __importDefault(require_src3()); - var debug = (0, debug_1.default)("socket.io-client:url"); - function url(uri, path = "", loc) { - let obj = uri; - loc = loc || typeof location !== "undefined" && location; - if (uri == null) - uri = loc.protocol + "//" + loc.host; - if (typeof uri === "string") { - if (uri.charAt(0) === "/") { - if (uri.charAt(1) === "/") { - uri = loc.protocol + uri; - } else { - uri = loc.host + uri; - } - } - if (!/^(https?|wss?):\/\//.test(uri)) { - debug("protocol-less url %s", uri); - if (typeof loc !== "undefined") { - uri = loc.protocol + "//" + uri; - } else { - uri = "https://" + uri; - } - } - debug("parse %s", uri); - obj = (0, engine_io_client_1.parse)(uri); - } - if (!obj.port) { - if (/^(http|ws)$/.test(obj.protocol)) { - obj.port = "80"; - } else if (/^(http|ws)s$/.test(obj.protocol)) { - obj.port = "443"; - } - } - obj.path = obj.path || "/"; - const ipv6 = obj.host.indexOf(":") !== -1; - const host = ipv6 ? "[" + obj.host + "]" : obj.host; - obj.id = obj.protocol + "://" + host + ":" + obj.port + path; - obj.href = obj.protocol + "://" + host + (loc && loc.port === obj.port ? "" : ":" + obj.port); - return obj; - } -}); - -// node_modules/socket.io-client/build/cjs/on.js -var require_on = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.on = on2; - function on2(obj, ev, fn) { - obj.on(ev, fn); - return function subDestroy() { - obj.off(ev, fn); - }; - } -}); - -// node_modules/socket.io-client/build/cjs/socket.js -var require_socket4 = __commonJS((exports2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Socket = undefined; - var socket_io_parser_1 = require_cjs3(); - var on_js_1 = require_on(); - var component_emitter_1 = require_cjs2(); - var debug_1 = __importDefault(require_src3()); - var debug = (0, debug_1.default)("socket.io-client:socket"); - var RESERVED_EVENTS = Object.freeze({ - connect: 1, - connect_error: 1, - disconnect: 1, - disconnecting: 1, - newListener: 1, - removeListener: 1 - }); - - class Socket extends component_emitter_1.Emitter { - constructor(io, nsp, opts) { - super(); - this.connected = false; - this.recovered = false; - this.receiveBuffer = []; - this.sendBuffer = []; - this._queue = []; - this._queueSeq = 0; - this.ids = 0; - this.acks = {}; - this.flags = {}; - this.io = io; - this.nsp = nsp; - if (opts && opts.auth) { - this.auth = opts.auth; - } - this._opts = Object.assign({}, opts); - if (this.io._autoConnect) - this.open(); - } - get disconnected() { - return !this.connected; - } - subEvents() { - if (this.subs) - return; - const io = this.io; - this.subs = [ - (0, on_js_1.on)(io, "open", this.onopen.bind(this)), - (0, on_js_1.on)(io, "packet", this.onpacket.bind(this)), - (0, on_js_1.on)(io, "error", this.onerror.bind(this)), - (0, on_js_1.on)(io, "close", this.onclose.bind(this)) - ]; - } - get active() { - return !!this.subs; - } - connect() { - if (this.connected) - return this; - this.subEvents(); - if (!this.io["_reconnecting"]) - this.io.open(); - if (this.io._readyState === "open") - this.onopen(); - return this; - } - open() { - return this.connect(); - } - send(...args) { - args.unshift("message"); - this.emit.apply(this, args); - return this; - } - emit(ev, ...args) { - var _a, _b, _c; - if (RESERVED_EVENTS.hasOwnProperty(ev)) { - throw new Error('"' + ev.toString() + '" is a reserved event name'); - } - args.unshift(ev); - if (this._opts.retries && !this.flags.fromQueue && !this.flags.volatile) { - this._addToQueue(args); - return this; - } - const packet = { - type: socket_io_parser_1.PacketType.EVENT, - data: args - }; - packet.options = {}; - packet.options.compress = this.flags.compress !== false; - if (typeof args[args.length - 1] === "function") { - const id = this.ids++; - debug("emitting packet with ack id %d", id); - const ack = args.pop(); - this._registerAckCallback(id, ack); - packet.id = id; - } - const isTransportWritable = (_b = (_a = this.io.engine) === null || _a === undefined ? undefined : _a.transport) === null || _b === undefined ? undefined : _b.writable; - const isConnected = this.connected && !((_c = this.io.engine) === null || _c === undefined ? undefined : _c._hasPingExpired()); - const discardPacket = this.flags.volatile && !isTransportWritable; - if (discardPacket) { - debug("discard packet as the transport is not currently writable"); - } else if (isConnected) { - this.notifyOutgoingListeners(packet); - this.packet(packet); - } else { - this.sendBuffer.push(packet); - } - this.flags = {}; - return this; - } - _registerAckCallback(id, ack) { - var _a; - const timeout = (_a = this.flags.timeout) !== null && _a !== undefined ? _a : this._opts.ackTimeout; - if (timeout === undefined) { - this.acks[id] = ack; - return; - } - const timer = this.io.setTimeoutFn(() => { - delete this.acks[id]; - for (let i = 0;i < this.sendBuffer.length; i++) { - if (this.sendBuffer[i].id === id) { - debug("removing packet with ack id %d from the buffer", id); - this.sendBuffer.splice(i, 1); - } - } - debug("event with ack id %d has timed out after %d ms", id, timeout); - ack.call(this, new Error("operation has timed out")); - }, timeout); - const fn = (...args) => { - this.io.clearTimeoutFn(timer); - ack.apply(this, args); - }; - fn.withError = true; - this.acks[id] = fn; - } - emitWithAck(ev, ...args) { - return new Promise((resolve, reject) => { - const fn = (arg1, arg2) => { - return arg1 ? reject(arg1) : resolve(arg2); - }; - fn.withError = true; - args.push(fn); - this.emit(ev, ...args); - }); - } - _addToQueue(args) { - let ack; - if (typeof args[args.length - 1] === "function") { - ack = args.pop(); - } - const packet = { - id: this._queueSeq++, - tryCount: 0, - pending: false, - args, - flags: Object.assign({ fromQueue: true }, this.flags) - }; - args.push((err, ...responseArgs) => { - if (packet !== this._queue[0]) { - return debug("packet [%d] already acknowledged", packet.id); - } - const hasError = err !== null; - if (hasError) { - if (packet.tryCount > this._opts.retries) { - debug("packet [%d] is discarded after %d tries", packet.id, packet.tryCount); - this._queue.shift(); - if (ack) { - ack(err); - } - } - } else { - debug("packet [%d] was successfully sent", packet.id); - this._queue.shift(); - if (ack) { - ack(null, ...responseArgs); - } - } - packet.pending = false; - return this._drainQueue(); - }); - this._queue.push(packet); - this._drainQueue(); - } - _drainQueue(force = false) { - debug("draining queue"); - if (!this.connected || this._queue.length === 0) { - return; - } - const packet = this._queue[0]; - if (packet.pending && !force) { - debug("packet [%d] has already been sent and is waiting for an ack", packet.id); - return; - } - packet.pending = true; - packet.tryCount++; - debug("sending packet [%d] (try n°%d)", packet.id, packet.tryCount); - this.flags = packet.flags; - this.emit.apply(this, packet.args); - } - packet(packet) { - packet.nsp = this.nsp; - this.io._packet(packet); - } - onopen() { - debug("transport is open - connecting"); - if (typeof this.auth == "function") { - this.auth((data) => { - this._sendConnectPacket(data); - }); - } else { - this._sendConnectPacket(this.auth); - } - } - _sendConnectPacket(data) { - this.packet({ - type: socket_io_parser_1.PacketType.CONNECT, - data: this._pid ? Object.assign({ pid: this._pid, offset: this._lastOffset }, data) : data - }); - } - onerror(err) { - if (!this.connected) { - this.emitReserved("connect_error", err); - } - } - onclose(reason, description) { - debug("close (%s)", reason); - this.connected = false; - delete this.id; - this.emitReserved("disconnect", reason, description); - this._clearAcks(); - } - _clearAcks() { - Object.keys(this.acks).forEach((id) => { - const isBuffered = this.sendBuffer.some((packet) => String(packet.id) === id); - if (!isBuffered) { - const ack = this.acks[id]; - delete this.acks[id]; - if (ack.withError) { - ack.call(this, new Error("socket has been disconnected")); - } - } - }); - } - onpacket(packet) { - const sameNamespace = packet.nsp === this.nsp; - if (!sameNamespace) - return; - switch (packet.type) { - case socket_io_parser_1.PacketType.CONNECT: - if (packet.data && packet.data.sid) { - this.onconnect(packet.data.sid, packet.data.pid); - } else { - this.emitReserved("connect_error", new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)")); - } - break; - case socket_io_parser_1.PacketType.EVENT: - case socket_io_parser_1.PacketType.BINARY_EVENT: - this.onevent(packet); - break; - case socket_io_parser_1.PacketType.ACK: - case socket_io_parser_1.PacketType.BINARY_ACK: - this.onack(packet); - break; - case socket_io_parser_1.PacketType.DISCONNECT: - this.ondisconnect(); - break; - case socket_io_parser_1.PacketType.CONNECT_ERROR: - this.destroy(); - const err = new Error(packet.data.message); - err.data = packet.data.data; - this.emitReserved("connect_error", err); - break; - } - } - onevent(packet) { - const args = packet.data || []; - debug("emitting event %j", args); - if (packet.id != null) { - debug("attaching ack callback to event"); - args.push(this.ack(packet.id)); - } - if (this.connected) { - this.emitEvent(args); - } else { - this.receiveBuffer.push(Object.freeze(args)); - } - } - emitEvent(args) { - if (this._anyListeners && this._anyListeners.length) { - const listeners = this._anyListeners.slice(); - for (const listener of listeners) { - listener.apply(this, args); - } - } - super.emit.apply(this, args); - if (this._pid && args.length && typeof args[args.length - 1] === "string") { - this._lastOffset = args[args.length - 1]; - } - } - ack(id) { - const self = this; - let sent = false; - return function(...args) { - if (sent) - return; - sent = true; - debug("sending ack %j", args); - self.packet({ - type: socket_io_parser_1.PacketType.ACK, - id, - data: args - }); - }; - } - onack(packet) { - const ack = this.acks[packet.id]; - if (typeof ack !== "function") { - debug("bad ack %s", packet.id); - return; - } - delete this.acks[packet.id]; - debug("calling ack %s with %j", packet.id, packet.data); - if (ack.withError) { - packet.data.unshift(null); - } - ack.apply(this, packet.data); - } - onconnect(id, pid) { - debug("socket connected with id %s", id); - this.id = id; - this.recovered = pid && this._pid === pid; - this._pid = pid; - this.connected = true; - this.emitBuffered(); - this._drainQueue(true); - this.emitReserved("connect"); - } - emitBuffered() { - this.receiveBuffer.forEach((args) => this.emitEvent(args)); - this.receiveBuffer = []; - this.sendBuffer.forEach((packet) => { - this.notifyOutgoingListeners(packet); - this.packet(packet); - }); - this.sendBuffer = []; - } - ondisconnect() { - debug("server disconnect (%s)", this.nsp); - this.destroy(); - this.onclose("io server disconnect"); - } - destroy() { - if (this.subs) { - this.subs.forEach((subDestroy) => subDestroy()); - this.subs = undefined; - } - this.io["_destroy"](this); - } - disconnect() { - if (this.connected) { - debug("performing disconnect (%s)", this.nsp); - this.packet({ type: socket_io_parser_1.PacketType.DISCONNECT }); - } - this.destroy(); - if (this.connected) { - this.onclose("io client disconnect"); - } - return this; - } - close() { - return this.disconnect(); - } - compress(compress) { - this.flags.compress = compress; - return this; - } - get volatile() { - this.flags.volatile = true; - return this; - } - timeout(timeout) { - this.flags.timeout = timeout; - return this; - } - onAny(listener) { - this._anyListeners = this._anyListeners || []; - this._anyListeners.push(listener); - return this; - } - prependAny(listener) { - this._anyListeners = this._anyListeners || []; - this._anyListeners.unshift(listener); - return this; - } - offAny(listener) { - if (!this._anyListeners) { - return this; - } - if (listener) { - const listeners = this._anyListeners; - for (let i = 0;i < listeners.length; i++) { - if (listener === listeners[i]) { - listeners.splice(i, 1); - return this; - } - } - } else { - this._anyListeners = []; - } - return this; - } - listenersAny() { - return this._anyListeners || []; - } - onAnyOutgoing(listener) { - this._anyOutgoingListeners = this._anyOutgoingListeners || []; - this._anyOutgoingListeners.push(listener); - return this; - } - prependAnyOutgoing(listener) { - this._anyOutgoingListeners = this._anyOutgoingListeners || []; - this._anyOutgoingListeners.unshift(listener); - return this; - } - offAnyOutgoing(listener) { - if (!this._anyOutgoingListeners) { - return this; - } - if (listener) { - const listeners = this._anyOutgoingListeners; - for (let i = 0;i < listeners.length; i++) { - if (listener === listeners[i]) { - listeners.splice(i, 1); - return this; - } - } - } else { - this._anyOutgoingListeners = []; - } - return this; - } - listenersAnyOutgoing() { - return this._anyOutgoingListeners || []; - } - notifyOutgoingListeners(packet) { - if (this._anyOutgoingListeners && this._anyOutgoingListeners.length) { - const listeners = this._anyOutgoingListeners.slice(); - for (const listener of listeners) { - listener.apply(this, packet.data); - } - } - } - } - exports2.Socket = Socket; -}); - -// node_modules/socket.io-client/build/cjs/contrib/backo2.js -var require_backo2 = __commonJS((exports2) => { - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Backoff = Backoff; - function Backoff(opts) { - opts = opts || {}; - this.ms = opts.min || 100; - this.max = opts.max || 1e4; - this.factor = opts.factor || 2; - this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; - this.attempts = 0; - } - Backoff.prototype.duration = function() { - var ms = this.ms * Math.pow(this.factor, this.attempts++); - if (this.jitter) { - var rand = Math.random(); - var deviation = Math.floor(rand * this.jitter * ms); - ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; - } - return Math.min(ms, this.max) | 0; - }; - Backoff.prototype.reset = function() { - this.attempts = 0; - }; - Backoff.prototype.setMin = function(min) { - this.ms = min; - }; - Backoff.prototype.setMax = function(max) { - this.max = max; - }; - Backoff.prototype.setJitter = function(jitter) { - this.jitter = jitter; - }; -}); - -// node_modules/socket.io-client/build/cjs/manager.js -var require_manager = __commonJS((exports2) => { - var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { - return m[k]; - } }; - } - Object.defineProperty(o, k2, desc); - } : function(o, m, k, k2) { - if (k2 === undefined) - k2 = k; - o[k2] = m[k]; - }); - var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); - } : function(o, v) { - o["default"] = v; - }); - var __importStar = exports2 && exports2.__importStar || function(mod) { - if (mod && mod.__esModule) - return mod; - var result = {}; - if (mod != null) { - for (var k in mod) - if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) - __createBinding(result, mod, k); - } - __setModuleDefault(result, mod); - return result; - }; - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.Manager = undefined; - var engine_io_client_1 = require_cjs4(); - var socket_js_1 = require_socket4(); - var parser = __importStar(require_cjs3()); - var on_js_1 = require_on(); - var backo2_js_1 = require_backo2(); - var component_emitter_1 = require_cjs2(); - var debug_1 = __importDefault(require_src3()); - var debug = (0, debug_1.default)("socket.io-client:manager"); - - class Manager extends component_emitter_1.Emitter { - constructor(uri, opts) { - var _a; - super(); - this.nsps = {}; - this.subs = []; - if (uri && typeof uri === "object") { - opts = uri; - uri = undefined; - } - opts = opts || {}; - opts.path = opts.path || "/socket.io"; - this.opts = opts; - (0, engine_io_client_1.installTimerFunctions)(this, opts); - this.reconnection(opts.reconnection !== false); - this.reconnectionAttempts(opts.reconnectionAttempts || Infinity); - this.reconnectionDelay(opts.reconnectionDelay || 1000); - this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000); - this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== undefined ? _a : 0.5); - this.backoff = new backo2_js_1.Backoff({ - min: this.reconnectionDelay(), - max: this.reconnectionDelayMax(), - jitter: this.randomizationFactor() - }); - this.timeout(opts.timeout == null ? 20000 : opts.timeout); - this._readyState = "closed"; - this.uri = uri; - const _parser = opts.parser || parser; - this.encoder = new _parser.Encoder; - this.decoder = new _parser.Decoder; - this._autoConnect = opts.autoConnect !== false; - if (this._autoConnect) - this.open(); - } - reconnection(v) { - if (!arguments.length) - return this._reconnection; - this._reconnection = !!v; - if (!v) { - this.skipReconnect = true; - } - return this; - } - reconnectionAttempts(v) { - if (v === undefined) - return this._reconnectionAttempts; - this._reconnectionAttempts = v; - return this; - } - reconnectionDelay(v) { - var _a; - if (v === undefined) - return this._reconnectionDelay; - this._reconnectionDelay = v; - (_a = this.backoff) === null || _a === undefined || _a.setMin(v); - return this; - } - randomizationFactor(v) { - var _a; - if (v === undefined) - return this._randomizationFactor; - this._randomizationFactor = v; - (_a = this.backoff) === null || _a === undefined || _a.setJitter(v); - return this; - } - reconnectionDelayMax(v) { - var _a; - if (v === undefined) - return this._reconnectionDelayMax; - this._reconnectionDelayMax = v; - (_a = this.backoff) === null || _a === undefined || _a.setMax(v); - return this; - } - timeout(v) { - if (!arguments.length) - return this._timeout; - this._timeout = v; - return this; - } - maybeReconnectOnOpen() { - if (!this._reconnecting && this._reconnection && this.backoff.attempts === 0) { - this.reconnect(); - } - } - open(fn) { - debug("readyState %s", this._readyState); - if (~this._readyState.indexOf("open")) - return this; - debug("opening %s", this.uri); - this.engine = new engine_io_client_1.Socket(this.uri, this.opts); - const socket = this.engine; - const self = this; - this._readyState = "opening"; - this.skipReconnect = false; - const openSubDestroy = (0, on_js_1.on)(socket, "open", function() { - self.onopen(); - fn && fn(); - }); - const onError = (err) => { - debug("error"); - this.cleanup(); - this._readyState = "closed"; - this.emitReserved("error", err); - if (fn) { - fn(err); - } else { - this.maybeReconnectOnOpen(); - } - }; - const errorSub = (0, on_js_1.on)(socket, "error", onError); - if (this._timeout !== false) { - const timeout = this._timeout; - debug("connect attempt will timeout after %d", timeout); - const timer = this.setTimeoutFn(() => { - debug("connect attempt timed out after %d", timeout); - openSubDestroy(); - onError(new Error("timeout")); - socket.close(); - }, timeout); - if (this.opts.autoUnref) { - timer.unref(); - } - this.subs.push(() => { - this.clearTimeoutFn(timer); - }); - } - this.subs.push(openSubDestroy); - this.subs.push(errorSub); - return this; - } - connect(fn) { - return this.open(fn); - } - onopen() { - debug("open"); - this.cleanup(); - this._readyState = "open"; - this.emitReserved("open"); - const socket = this.engine; - this.subs.push((0, on_js_1.on)(socket, "ping", this.onping.bind(this)), (0, on_js_1.on)(socket, "data", this.ondata.bind(this)), (0, on_js_1.on)(socket, "error", this.onerror.bind(this)), (0, on_js_1.on)(socket, "close", this.onclose.bind(this)), (0, on_js_1.on)(this.decoder, "decoded", this.ondecoded.bind(this))); - } - onping() { - this.emitReserved("ping"); - } - ondata(data) { - try { - this.decoder.add(data); - } catch (e) { - this.onclose("parse error", e); - } - } - ondecoded(packet) { - (0, engine_io_client_1.nextTick)(() => { - this.emitReserved("packet", packet); - }, this.setTimeoutFn); - } - onerror(err) { - debug("error", err); - this.emitReserved("error", err); - } - socket(nsp, opts) { - let socket = this.nsps[nsp]; - if (!socket) { - socket = new socket_js_1.Socket(this, nsp, opts); - this.nsps[nsp] = socket; - } else if (this._autoConnect && !socket.active) { - socket.connect(); - } - return socket; - } - _destroy(socket) { - const nsps = Object.keys(this.nsps); - for (const nsp of nsps) { - const socket2 = this.nsps[nsp]; - if (socket2.active) { - debug("socket %s is still active, skipping close", nsp); - return; - } - } - this._close(); - } - _packet(packet) { - debug("writing packet %j", packet); - const encodedPackets = this.encoder.encode(packet); - for (let i = 0;i < encodedPackets.length; i++) { - this.engine.write(encodedPackets[i], packet.options); - } - } - cleanup() { - debug("cleanup"); - this.subs.forEach((subDestroy) => subDestroy()); - this.subs.length = 0; - this.decoder.destroy(); - } - _close() { - debug("disconnect"); - this.skipReconnect = true; - this._reconnecting = false; - this.onclose("forced close"); - } - disconnect() { - return this._close(); - } - onclose(reason, description) { - var _a; - debug("closed due to %s", reason); - this.cleanup(); - (_a = this.engine) === null || _a === undefined || _a.close(); - this.backoff.reset(); - this._readyState = "closed"; - this.emitReserved("close", reason, description); - if (this._reconnection && !this.skipReconnect) { - this.reconnect(); - } - } - reconnect() { - if (this._reconnecting || this.skipReconnect) - return this; - const self = this; - if (this.backoff.attempts >= this._reconnectionAttempts) { - debug("reconnect failed"); - this.backoff.reset(); - this.emitReserved("reconnect_failed"); - this._reconnecting = false; - } else { - const delay = this.backoff.duration(); - debug("will wait %dms before reconnect attempt", delay); - this._reconnecting = true; - const timer = this.setTimeoutFn(() => { - if (self.skipReconnect) - return; - debug("attempting reconnect"); - this.emitReserved("reconnect_attempt", self.backoff.attempts); - if (self.skipReconnect) - return; - self.open((err) => { - if (err) { - debug("reconnect attempt error"); - self._reconnecting = false; - self.reconnect(); - this.emitReserved("reconnect_error", err); - } else { - debug("reconnect success"); - self.onreconnect(); - } - }); - }, delay); - if (this.opts.autoUnref) { - timer.unref(); - } - this.subs.push(() => { - this.clearTimeoutFn(timer); - }); - } - } - onreconnect() { - const attempt = this.backoff.attempts; - this._reconnecting = false; - this.backoff.reset(); - this.emitReserved("reconnect", attempt); - } - } - exports2.Manager = Manager; -}); - -// node_modules/socket.io-client/build/cjs/index.js -var require_cjs5 = __commonJS((exports2, module2) => { - var __importDefault = exports2 && exports2.__importDefault || function(mod) { - return mod && mod.__esModule ? mod : { default: mod }; - }; - Object.defineProperty(exports2, "__esModule", { value: true }); - exports2.WebTransport = exports2.WebSocket = exports2.NodeWebSocket = exports2.XHR = exports2.NodeXHR = exports2.Fetch = exports2.Socket = exports2.Manager = exports2.protocol = undefined; - exports2.io = lookup; - exports2.connect = lookup; - exports2.default = lookup; - var url_js_1 = require_url(); - var manager_js_1 = require_manager(); - Object.defineProperty(exports2, "Manager", { enumerable: true, get: function() { - return manager_js_1.Manager; - } }); - var socket_js_1 = require_socket4(); - Object.defineProperty(exports2, "Socket", { enumerable: true, get: function() { - return socket_js_1.Socket; - } }); - var debug_1 = __importDefault(require_src3()); - var debug = (0, debug_1.default)("socket.io-client"); - var cache = {}; - function lookup(uri, opts) { - if (typeof uri === "object") { - opts = uri; - uri = undefined; - } - opts = opts || {}; - const parsed = (0, url_js_1.url)(uri, opts.path || "/socket.io"); - const source2 = parsed.source; - const id = parsed.id; - const path = parsed.path; - const sameNamespace = cache[id] && path in cache[id]["nsps"]; - const newConnection = opts.forceNew || opts["force new connection"] || opts.multiplex === false || sameNamespace; - let io; - if (newConnection) { - debug("ignoring socket cache for %s", source2); - io = new manager_js_1.Manager(source2, opts); - } else { - if (!cache[id]) { - debug("new io instance for %s", source2); - cache[id] = new manager_js_1.Manager(source2, opts); - } - io = cache[id]; - } - if (parsed.query && !opts.query) { - opts.query = parsed.queryKey; - } - return io.socket(parsed.path, opts); - } - Object.assign(lookup, { - Manager: manager_js_1.Manager, - Socket: socket_js_1.Socket, - io: lookup, - connect: lookup - }); - var socket_io_parser_1 = require_cjs3(); - Object.defineProperty(exports2, "protocol", { enumerable: true, get: function() { - return socket_io_parser_1.protocol; - } }); - var engine_io_client_1 = require_cjs4(); - Object.defineProperty(exports2, "Fetch", { enumerable: true, get: function() { - return engine_io_client_1.Fetch; - } }); - Object.defineProperty(exports2, "NodeXHR", { enumerable: true, get: function() { - return engine_io_client_1.NodeXHR; - } }); - Object.defineProperty(exports2, "XHR", { enumerable: true, get: function() { - return engine_io_client_1.XHR; - } }); - Object.defineProperty(exports2, "NodeWebSocket", { enumerable: true, get: function() { - return engine_io_client_1.NodeWebSocket; - } }); - Object.defineProperty(exports2, "WebSocket", { enumerable: true, get: function() { - return engine_io_client_1.WebSocket; - } }); - Object.defineProperty(exports2, "WebTransport", { enumerable: true, get: function() { - return engine_io_client_1.WebTransport; - } }); - module2.exports = lookup; -}); - // client/lib/imbe_vocoder_glue.js var imbe_vocoder_glue_default = `async function ImbeVocoder(moduleArg = {}) { var moduleRtn; @@ -28545,6 +25093,7 @@ var host = ""; var authToken = "radio"; var enableLoopbackTesting = false; var doUpdateCheck = true; +var doHealthCheck = true; global.radioLogger = serverLogger; global.createRadioLogger = (tag) => serverLogger.withTag(tag); var channels = new Map; @@ -28879,7 +25428,7 @@ io.on("connection", (socket) => { dataLength: data?.data ? data.data.length : 0 })}`); } - if (user.speakerChannel && data && data.data) { + if (user.speakerChannel && data?.data) { const channel = channels.get(user.speakerChannel); if (logLevel >= 5) { serverLogger.debug(`Found channel for ${user.speakerChannel}: ${channel ? "YES" : "NO"}`); @@ -29231,7 +25780,6 @@ async function testConnection(url2, retryCount = 0, maxRetries = 3) { const https = require("node:https"); const { URL: URL2 } = require("node:url"); let httpResult = null; - let socketResult = null; try { const parsedUrl = new URL2(url2); const client = parsedUrl.protocol === "https:" ? https : http2; @@ -29258,64 +25806,19 @@ async function testConnection(url2, retryCount = 0, maxRetries = 3) { } catch (err) { httpResult = { success: false, error: err.message }; } - try { - const ioClient = require_cjs5(); - socketResult = await new Promise((socketResolve) => { - const testSocket = ioClient(url2, { - timeout: 8000, - reconnection: false, - auth: { - authToken: "health-check-test", - serverId: -9999 - } - }); - const timeoutId = setTimeout(() => { - testSocket.disconnect(); - socketResolve({ success: false, error: "Socket connection timeout" }); - }, 8000); - testSocket.on("connect", () => { - clearTimeout(timeoutId); - testSocket.disconnect(); - socketResolve({ success: true }); - }); - testSocket.on("connect_error", (err) => { - clearTimeout(timeoutId); - testSocket.disconnect(); - socketResolve({ - success: false, - error: `Socket connection failed: ${err.message || err.toString()}` - }); - }); - }); - } catch (err) { - socketResult = { - success: false, - error: `Socket test failed: ${err.message}` - }; - } - const overallSuccess = httpResult.success && socketResult.success; + const overallSuccess = httpResult.success; if (!overallSuccess && retryCount < maxRetries) { const delay = Math.min(1000 * 2 ** retryCount, 5000); serverLogger.debug(`Health check attempt ${retryCount + 1}/${maxRetries + 1} failed, retrying in ${delay}ms...`); await new Promise((wait) => setTimeout(wait, delay)); return testConnection(url2, retryCount + 1, maxRetries); } - let errorMessage = `Started - Health Checks Failed -`; - if (!httpResult.success) { - errorMessage += `${colors.white("HTTP:")} ${colors.red(httpResult.error)}`; - } - if (!socketResult.success) { - if (errorMessage) - errorMessage += ` -`; - errorMessage += `${colors.white("Socket:")} ${colors.red(socketResult.error)}`; - } + const errorMessage = httpResult.success ? null : `Started - Health Check Failed +${colors.white("HTTP:")} ${colors.red(httpResult.error)}`; return { success: overallSuccess, - error: errorMessage || null, + error: errorMessage, httpResult, - socketResult, attempts: retryCount + 1 }; } @@ -29720,7 +26223,7 @@ function displayServerStatus(updateResult) { if (configItems.length > 0) { boxContent.push(`${colors.white("Config:")} ${configItems.join(", ")}`); } - if (doUpdateCheck && updateResult && updateResult.hasUpdate && updateResult.missingChangelogs && updateResult.missingChangelogs.length > 0) { + if (doUpdateCheck && updateResult?.hasUpdate && updateResult.missingChangelogs && updateResult.missingChangelogs.length > 0) { boxContent.push("", `${colors.white("\uD83D\uDCCB Changelog:")}`, ""); for (const changelogEntry of updateResult.missingChangelogs) { boxContent.push(`${colors.magenta(`${changelogEntry.date} - ${changelogEntry.version}`)}`); @@ -29797,12 +26300,13 @@ on("radio:log", (level, message, tag) => { taggedLogger.log(message); } }); -on("radio:initServer", (hostParam, port, auth, debug, updateCheck) => { +on("radio:initServer", (hostParam, port, auth, debug, updateCheck, healthCheck) => { host = hostParam; logLevel = debug; authToken = auth; serverPort = port; doUpdateCheck = updateCheck !== undefined ? updateCheck : true; + doHealthCheck = healthCheck !== undefined ? healthCheck : true; serverLogger.debug("Server initialization event called"); startupComplete = false; pendingUpdateResult = null; @@ -29830,40 +26334,31 @@ on("radio:initServer", (hostParam, port, auth, debug, updateCheck) => { serverLogger.debug(`Dispatch panel available at: ${serverUrl}`); startupInfo.dispatchUrl = serverUrl; startupInfo.serverStarted = true; - (async () => { - await new Promise((resolve) => setTimeout(resolve, 2000)); - serverLogger.debug("Starting comprehensive health check (HTTP + Socket.IO)..."); - const connectionTest = await testConnection(serverUrl); - if (!connectionTest.success) { - startupInfo.connectionWarning = `${connectionTest.error}`; - const httpGuidance = connectionTest.httpResult && !connectionTest.httpResult.success ? getErrorGuidance(connectionTest.httpResult.error, port) : null; - const socketGuidance = connectionTest.socketResult && !connectionTest.socketResult.success ? getErrorGuidance(connectionTest.socketResult.error, port) : null; - const sameErrorType = httpGuidance && socketGuidance && httpGuidance.errorType === socketGuidance.errorType; - if (sameErrorType) { - serverLogger.error(httpGuidance.userMessage); - serverLogger.error(`Technical Details: HTTP: ${httpGuidance.technicalDetails} | Socket.IO: ${socketGuidance.technicalDetails} (${connectionTest.attempts} attempts)`); - } else { + if (doHealthCheck) { + (async () => { + await new Promise((resolve) => setTimeout(resolve, 2000)); + serverLogger.debug("Starting health check (HTTP)..."); + const connectionTest = await testConnection(serverUrl); + if (!connectionTest.success) { + startupInfo.connectionWarning = `${connectionTest.error}`; + const httpGuidance = connectionTest.httpResult && !connectionTest.httpResult.success ? getErrorGuidance(connectionTest.httpResult.error, port) : null; if (httpGuidance) { serverLogger.error(`HTTP: ${httpGuidance.userMessage}`); serverLogger.error(`Technical Details: ${httpGuidance.technicalDetails} (after ${connectionTest.attempts} attempts)`); - } else if (connectionTest.httpResult) { - serverLogger.debug(`HTTP endpoint test passed (status: ${connectionTest.httpResult.status})`); - } - if (socketGuidance) { - serverLogger.error(`Socket.IO: ${socketGuidance.userMessage}`); - serverLogger.error(`Technical Details: ${socketGuidance.technicalDetails} (after ${connectionTest.attempts} attempts)`); - } else if (connectionTest.socketResult) { - serverLogger.debug("Socket.IO test passed"); } + } else { + const attemptMsg = connectionTest.attempts > 1 ? ` (succeeded on attempt ${connectionTest.attempts})` : ""; + serverLogger.debug(`Health check passed - HTTP (${connectionTest.httpResult.status}) ✓${attemptMsg}`); + serverLogger.debug("Server is ready for client connections"); } - } else { - const attemptMsg = connectionTest.attempts > 1 ? ` (succeeded on attempt ${connectionTest.attempts})` : ""; - serverLogger.debug(`Health check passed - HTTP (${connectionTest.httpResult.status}) + Socket.IO ✓${attemptMsg}`); - serverLogger.debug("Server is ready for client connections"); - } + startupInfo.connectionTested = true; + startDisplayTimer(); + })(); + } else { + serverLogger.debug("Health check skipped (doHealthCheck = false)"); startupInfo.connectionTested = true; startDisplayTimer(); - })(); + } if (doUpdateCheck) { (async () => { const updateResult = await checkForUpdates(); diff --git a/resources/radio/shared.lua b/resources/radio/shared.lua index a09973763..fed80251b 100644 Binary files a/resources/radio/shared.lua and b/resources/radio/shared.lua differ diff --git a/resources/radio/stream/afx1500.ydr b/resources/radio/stream/afx1500.ydr new file mode 100644 index 000000000..d2aa5e30d --- /dev/null +++ b/resources/radio/stream/afx1500.ydr @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23a44fbf9672ea2b29d8de4e19d6c15b39bd4584b9d73457acfd52dfea42a115 +size 12264525 diff --git a/resources/radio/stream/afx1500.ytyp b/resources/radio/stream/afx1500.ytyp new file mode 100644 index 000000000..3e6452dae Binary files /dev/null and b/resources/radio/stream/afx1500.ytyp differ