spessasynth_lib 3.25.6 → 3.25.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -12,10 +12,10 @@ var Fs=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(A,t)=>(
|
|
|
12
12
|
`," ")),this.RMIDInfo.INAM&&(this.rawMidiName=this.RMIDInfo[fA.name],this.midiName=eA(this.rawMidiName,this.rawMidiName.length,void 0,!1).replaceAll(`
|
|
13
13
|
`," ")),this.RMIDInfo.IALB&&!this.RMIDInfo.IPRD&&(this.RMIDInfo.IPRD=this.RMIDInfo.IALB),this.RMIDInfo.IPRD&&!this.RMIDInfo.IALB&&(this.RMIDInfo.IALB=this.RMIDInfo.IPRD),this.bankOffset=1,this.RMIDInfo[fA.bankOffset]&&(this.bankOffset=N(this.RMIDInfo[fA.bankOffset],2))}}this.isDLSRMIDI&&(this.bankOffset=0),this.embeddedSoundFont===void 0&&(this.bankOffset=0)}else o==="XMF_"?s=Ao(this,n):s=n;let r=this.readMIDIChunk(s);if(r.type!=="MThd")throw V(),new SyntaxError(`Invalid MIDI Header! Expected "MThd", got "${r.type}"`);if(r.size!==6)throw V(),new RangeError(`Invalid MIDI header chunk size! Expected 6, got ${r.size}`);this.format=oe(r.data,2),this.tracksAmount=oe(r.data,2),this.timeDivision=oe(r.data,2);for(let E=0;E<this.tracksAmount;E++){let a=[],g=this.readMIDIChunk(s);if(g.type!=="MTrk")throw V(),new SyntaxError(`Invalid track header! Expected "MTrk" got "${g.type}"`);let l,c=0;for(this.format===2&&E>0&&(c+=this.tracks[E-1][this.tracks[E-1].length-1].ticks);g.data.currentIndex<g.size;){c+=yA(g.data);let d=g.data[g.data.currentIndex],B;if(l!==void 0&&d<128)B=l;else{if(l===void 0&&d<128)throw V(),new SyntaxError(`Unexpected byte with no running byte. (${d})`);B=g.data[g.data.currentIndex++]}let u=xs(B),p;switch(u){case-1:p=0;break;case-2:B=g.data[g.data.currentIndex++],p=yA(g.data);break;case-3:p=yA(g.data);break;default:p=Ms[B>>4],l=B;break}let S=new L(p);S.set(g.data.slice(g.data.currentIndex,g.data.currentIndex+p),0);let w=new se(c,B,S);a.push(w),g.data.currentIndex+=p}this.tracks.push(a),m(`%cParsed %c${this.tracks.length}%c / %c${this.tracksAmount}`,I.info,I.value,I.info,I.value)}m("%cAll tracks parsed correctly!",I.recognized),this._parseInternal(),V(),m(`%cMIDI file parsed. Total tick time: %c${this.lastVoiceEventTick}%c, total seconds time: %c${this.duration}`,I.info,I.recognized,I.info,I.recognized)}readMIDIChunk(A){let t={};t.type=eA(A,4),t.size=oe(A,4),t.data=new L(t.size);let n=A.slice(A.currentIndex,A.currentIndex+t.size);return t.data.set(n,0),A.currentIndex+=t.size,t}};function eo(e,A){this.midiData.usedChannelsOnTrack[e].size!==0&&(this.midiPortChannelOffset===0&&(this.midiPortChannelOffset+=16,this.midiPortChannelOffsets[A]=0),this.midiPortChannelOffsets[A]===void 0&&(this.synth.workletProcessorChannels.length<this.midiPortChannelOffset+15&&this._addNewMidiPort(),this.midiPortChannelOffsets[A]=this.midiPortChannelOffset,this.midiPortChannelOffset+=16),this.midiPorts[e]=A)}function to(e,A=!0){if(this.stop(),!e.tracks)throw new Error("This MIDI has no tracks!");if(this.oneTickToSeconds=60/(120*e.timeDivision),this.midiData=e,this.midiData.embeddedSoundFont!==void 0)m("%cEmbedded soundfont detected! Using it.",I.recognized),this.synth.setEmbeddedSoundFont(this.midiData.embeddedSoundFont,this.midiData.bankOffset);else{this.synth.overrideSoundfont&&this.synth.clearSoundFont(!0,!0),FA("%cPreloading samples...",I.info);let t=this.midiData.getUsedProgramsAndKeys(this.synth.soundfontManager);for(let[n,s]of Object.entries(t)){let o=parseInt(n.split(":")[0]),r=parseInt(n.split(":")[1]),E=this.synth.getPreset(o,r);m(`%cPreloading used samples on %c${E.presetName}%c...`,I.info,I.recognized,I.info);for(let a of s){let g=a.split("-");E.preloadSpecific(parseInt(g[0]),parseInt(g[1]))}}V()}if(this.tracks=this.midiData.tracks,this.midiPorts=this.midiData.midiPorts.slice(),this.midiPortChannelOffset=0,this.midiPortChannelOffsets={},this.midiData.midiPorts.forEach((t,n)=>{this.assignMIDIPort(n,t)}),this.duration=this.midiData.duration,this.firstNoteTime=this.midiData.MIDIticksToSeconds(this.midiData.firstNoteOn),m(`%cTotal song time: ${Hn(Math.ceil(this.duration)).time}`,I.recognized),this.post(bA.songChange,[this.songIndex,A]),this.duration<=1&&(Y(`%cVery short song: (${Hn(Math.round(this.duration)).time}). Disabling loop!`,I.warn),this.loop=!1),A)this.play(!0);else{let t=this._skipToFirstNoteOn?this.midiData.firstNoteOn-1:0;this.setTimeTicks(t),this.pause()}}function no(e,A=!0){if(this.songs=e.reduce((n,s)=>{if(s.duration)return n.push(ge.copyFrom(s)),n;try{n.push(new an(s.binary,s.altName||""))}catch(o){return console.error(o),this.post(bA.midiError,o),n}return n},[]),this.songs.length<1)return;this.songIndex=0,this.songs.length>1&&(this.loop=!1),this.shuffleSongIndexes();let t=this.songs.map(n=>new Wt(n));this.post(bA.songListChange,t),this.loadCurrentSong(A)}function so(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex++,this.songIndex%=this.songs.length,this.loadCurrentSong()}function oo(){if(this.songs.length===1){this.currentTime=0;return}this.songIndex--,this.songIndex<0&&(this.songIndex=this.songs.length-1),this.loadCurrentSong()}function ro(e=!0){e&&m("%cResetting all controllers!",I.info),this.callEvent("allcontrollerreset",void 0),this.setSystem($t);for(let A=0;A<this.workletProcessorChannels.length;A++){this.workletProcessorChannels[A].resetControllers();let t=this.workletProcessorChannels[A];t.lockPreset?this.callEvent("drumchange",{channel:A,isDrumChannel:t.drumChannel}):(t.setBankSelect(Xs(this.system)),A%16===9?(t.setPreset(this.drumPreset),t.presetUsesOverride=this.defaultDrumsUsesOverride,t.drumChannel=!0,this.callEvent("drumchange",{channel:A,isDrumChannel:!0})):(t.drumChannel=!1,t.presetUsesOverride=this.defaultDrumsUsesOverride,t.setPreset(this.defaultPreset),this.callEvent("drumchange",{channel:A,isDrumChannel:!1})));let n=t.preset.bank,s=n===128?128:t.presetUsesOverride?n+this.soundfontBankOffset:n;this.callEvent("programchange",{channel:A,program:t.preset.program,bank:s,userCalled:!1});for(let o=0;o<128;o++)this.workletProcessorChannels[A].lockedControllers[o]&&this.callEvent("controllerchange",{channel:A,controllerNumber:o,controllerValue:this.workletProcessorChannels[A].midiControllers[o]>>7});if(this.workletProcessorChannels[A].lockedControllers[xA+j.pitchWheel]===!1){let o=this.workletProcessorChannels[A].midiControllers[xA+j.pitchWheel],r=o>>7,E=o&127;this.callEvent("pitchwheel",{channel:A,MSB:r,LSB:E})}}this.tunings=[],this.tunings=[];for(let A=0;127>A;A++)this.tunings.push([]);this.setMIDIVolume(1)}function io(){this.channelOctaveTuning.fill(0);for(let A=0;A<be.length;A++){if(this.lockedControllers[A])continue;let t=be[A];this.midiControllers[A]!==t&&A<127?A===y.portamentoControl?this.midiControllers[A]=jt:this.controllerChange(A,t>>7):this.midiControllers[A]=t}this.channelVibrato={rate:0,depth:0,delay:0},this.holdPedal=!1,this.randomPan=!1;let e=this.customControllers[hA.channelTransposeFine];this.customControllers.set(qn),this.setCustomController(hA.channelTransposeFine,e),this.resetParameters()}var Wn=new Set([y.bankSelect,y.lsbForControl0BankSelect,y.mainVolume,y.lsbForControl7MainVolume,y.pan,y.lsbForControl10Pan,y.reverbDepth,y.tremoloDepth,y.chorusDepth,y.detuneDepth,y.phaserDepth,y.soundVariation,y.filterResonance,y.releaseTime,y.attackTime,y.brightness,y.decayTime,y.vibratoRate,y.vibratoDepth,y.vibratoDelay,y.soundController10]);function ao(){this.channelOctaveTuning.fill(0),this.pitchWheel(64,0),this.channelVibrato={rate:0,depth:0,delay:0};for(let e=0;e<128;e++){let A=be[e];!Wn.has(e)&&A!==this.midiControllers[e]&&(e===y.portamentoControl?this.midiControllers[e]=jt:this.controllerChange(e,A>>7))}}function Io(){this.dataEntryState=YA.Idle,m("%cResetting Registered and Non-Registered Parameters!",I.info)}var We=be.slice(0,128);function go(e,A=void 0){this.oneTickToSeconds=60/(120*this.midiData.timeDivision),this.synth.resetAllControllers(),this.sendMIDIReset(),this._resetTimers();let t=this.synth.workletProcessorChannels.length,n=Array(t).fill(8192),s=[];for(let a=0;a<t;a++)s.push({program:-1,bank:0,actualBank:0});let o=a=>a===y.dataDecrement||a===y.dataIncrement||a===y.dataEntryMsb||a===y.dataDecrement||a===y.lsbForControl6DataEntry||a===y.RPNLsb||a===y.RPNMsb||a===y.NRPNLsb||a===y.NRPNMsb||a===y.bankSelect||a===y.lsbForControl0BankSelect||a===y.resetAllControllers,r=[];for(let a=0;a<t;a++)r.push(Array.from(We));function E(a){if(n[a]=8192,r?.[a]!==void 0)for(let g=0;g<We.length;g++)Wn.has(g)||(r[a][g]=We[g])}for(;;){let a=this._findFirstEventIndex(),g=this.tracks[a][this.eventIndex[a]];if(A!==void 0){if(g.ticks>=A)break}else if(this.playedTime>=e)break;let l=Zt(g.messageStatusByte),c=l.channel+(this.midiPortChannelOffsets[this.midiPorts[a]]||0);switch(l.status){case F.noteOn:r[c]===void 0&&(r[c]=Array.from(We)),r[c][y.portamentoControl]=g.messageData[0];break;case F.noteOff:break;case F.pitchBend:n[c]=g.messageData[1]<<7|g.messageData[0];break;case F.programChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[a].size===0)break;let B=s[c];B.program=g.messageData[0],B.actualBank=B.bank;break;case F.controllerChange:if(this.midiData.isMultiPort&&this.midiData.usedChannelsOnTrack[a].size===0)break;let u=g.messageData[0];if(o(u)){let p=g.messageData[1];if(u===y.bankSelect){s[c].bank=p;break}else u===y.resetAllControllers&&E(c);this.sendMIDIMessages?this.sendMIDICC(c,u,p):this.synth.controllerChange(c,u,p)}else r[c]===void 0&&(r[c]=Array.from(We)),r[c][u]=g.messageData[1];break;default:this._processEvent(g,a);break}this.eventIndex[a]++,a=this._findFirstEventIndex();let d=this.tracks[a][this.eventIndex[a]];if(d===void 0)return this.stop(),!1;this.playedTime+=this.oneTickToSeconds*(d.ticks-g.ticks)}if(this.sendMIDIMessages){for(let a=0;a<t;a++)if(n[a]!==void 0&&this.sendMIDIPitchWheel(a,n[a]>>7,n[a]&127),r[a]!==void 0&&r[a].forEach((g,l)=>{g!==We[l]&&!o(l)&&this.sendMIDICC(a,l,g)}),s[a].program>=0&&s[a].actualBank>=0){let g=s[a].actualBank;this.sendMIDICC(a,y.bankSelect,g),this.sendMIDIProgramChange(a,s[a].program)}}else for(let a=0;a<t;a++)if(n[a]!==void 0&&this.synth.pitchWheel(a,n[a]>>7,n[a]&127),r[a]!==void 0&&r[a].forEach((g,l)=>{g!==We[l]&&!o(l)&&this.synth.controllerChange(a,l,g)}),s[a].program>=0&&s[a].actualBank>=0){let g=s[a].actualBank;this.synth.controllerChange(a,y.bankSelect,g),this.synth.programChange(a,s[a].program)}return!0}function Co(e=!1){if(this.midiData!==void 0){if(e){this.pausedTime=void 0,this.currentTime=0;return}if(this.currentTime>=this.duration){this.pausedTime=void 0,this.currentTime=0;return}this.paused&&(this._recalculateStartTime(this.pausedTime),this.pausedTime=void 0),this.sendMIDIMessages||this.playingNotes.forEach(A=>{this.synth.noteOn(A.channel,A.midiNote,A.velocity,!1,!0)}),this.setProcessHandler()}}function Eo(e){this.stop(),this.playingNotes=[],this.pausedTime=void 0,this.post(bA.timeChange,currentTime-this.midiData.MIDIticksToSeconds(e));let A=this._playTo(0,e);this._recalculateStartTime(this.playedTime),A&&this.play()}function Bo(e){this.absoluteStartTime=currentTime-e/this._playbackRate}var lA={noteOff:0,noteOn:1,ccChange:2,programChange:3,channelPressure:4,polyPressure:5,killNote:6,ccReset:7,setChannelVibrato:8,soundFontManager:9,stopAll:10,killNotes:11,muteChannel:12,addNewChannel:13,customcCcChange:14,debugMessage:15,systemExclusive:16,setMasterParameter:17,setDrums:18,pitchWheel:19,transpose:20,highPerformanceMode:21,lockController:22,sequencerSpecific:23,requestSynthesizerSnapshot:24,setLogLevel:25,keyModifierManager:26,setEffectsGain:27,destroyWorklet:28},Ue={mainVolume:0,masterPan:1,voicesCap:2,interpolationType:3,midiSystem:4},ie=-1,JA={channelProperties:0,eventCall:1,masterParameterChange:2,sequencerSpecific:3,synthesizerSnapshot:4,ready:5,soundfontError:6};function co(e,A){switch(e){default:break;case zA.loadNewSongList:this.loadNewSongList(A[0],A[1]);break;case zA.pause:this.pause();break;case zA.play:this.play(A);break;case zA.stop:this.stop();break;case zA.setTime:this.currentTime=A;break;case zA.changeMIDIMessageSending:this.sendMIDIMessages=A;break;case zA.setPlaybackRate:this.playbackRate=A;break;case zA.setLoop:let[t,n]=A;this.loop=t,n===ie?this.loopCount=1/0:this.loopCount=n;break;case zA.changeSong:switch(A[0]){case it.forwards:this.nextSong();break;case it.backwards:this.previousSong();break;case it.shuffleOff:this.shuffleMode=!1,this.songIndex=this.shuffledSongIndexes[this.songIndex];break;case it.shuffleOn:this.shuffleMode=!0,this.shuffleSongIndexes(),this.songIndex=0,this.loadCurrentSong();break;case it.index:this.songIndex=A[1],this.loadCurrentSong();break}break;case zA.getMIDI:this.post(bA.getMIDI,this.midiData);break;case zA.setSkipToFirstNote:this._skipToFirstNoteOn=A;break;case zA.setPreservePlaybackState:this.preservePlaybackState=A}}function ho(e,A=void 0){this.synth.enableEventSystem&&this.synth.post({messageType:JA.sequencerSpecific,messageData:{messageType:e,messageData:A}})}function lo(e){this.post(bA.midiEvent,e)}function Qo(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.controllerChange|e,A,t])}function uo(e,A){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.programChange|e,A])}function fo(e,A,t){e%=16,this.sendMIDIMessages&&this.sendMIDIMessage([F.pitchBend|e,t,A])}function mo(){if(this.sendMIDIMessages){this.sendMIDIMessage([F.reset]);for(let e=0;e<16;e++)this.sendMIDIMessage([F.controllerChange|e,y.allSoundOff,0]),this.sendMIDIMessage([F.controllerChange|e,y.resetAllControllers,0])}}var kA=class{songs=[];songIndex=0;shuffledSongIndexes=[];synth;isActive=!1;sendMIDIMessages=!1;loopCount=1/0;eventIndex=[];playedTime=0;pausedTime=void 0;absoluteStartTime=currentTime;playingNotes=[];loop=!0;shuffleMode=!1;midiData=void 0;midiPorts=[];midiPortChannelOffset=0;midiPortChannelOffsets={};_skipToFirstNoteOn=!0;preservePlaybackState=!1;constructor(A){this.synth=A}_playbackRate=1;set playbackRate(A){let t=this.currentTime;this._playbackRate=A,this.currentTime=t}get currentTime(){return this.pausedTime!==void 0?this.pausedTime:(currentTime-this.absoluteStartTime)*this._playbackRate}set currentTime(A){if(A>this.duration||A<0){this._skipToFirstNoteOn?this.setTimeTicks(this.midiData.firstNoteOn-1):this.setTimeTicks(0);return}if(this._skipToFirstNoteOn&&A<this.firstNoteTime){this.setTimeTicks(this.midiData.firstNoteOn-1);return}this.stop(),this.playingNotes=[];let t=this.paused&&this.preservePlaybackState;if(this.pausedTime=void 0,this.post(bA.timeChange,currentTime-A),this.midiData.duration===0){Y("No duration!"),this.post(bA.pause,!0);return}this._playTo(A),this._recalculateStartTime(A),t?this.pause():this.play()}get paused(){return this.pausedTime!==void 0}pause(A=!1){if(this.paused){Y("Already paused");return}this.pausedTime=this.currentTime,this.stop(),this.post(bA.pause,A)}stop(){this.clearProcessHandler();for(let A=0;A<16;A++)this.synth.controllerChange(A,y.sustainPedal,0);if(this.synth.stopAllChannels(),this.sendMIDIMessages){for(let A of this.playingNotes)this.sendMIDIMessage([F.noteOff|A.channel%16,A.midiNote]);for(let A=0;A<16;A++)this.sendMIDICC(A,y.allNotesOff,0)}}loadCurrentSong(A=!0){let t=this.songIndex;this.shuffleMode&&(t=this.shuffledSongIndexes[this.songIndex]),this.loadNewSequence(this.songs[t],A)}_resetTimers(){this.playedTime=0,this.eventIndex=Array(this.tracks.length).fill(0)}setProcessHandler(){this.isActive=!0}clearProcessHandler(){this.isActive=!1}shuffleSongIndexes(){let A=this.songs.map((t,n)=>n);for(this.shuffledSongIndexes=[];A.length>0;){let t=A[Math.floor(Math.random()*A.length)];this.shuffledSongIndexes.push(t),A.splice(A.indexOf(t),1)}}};kA.prototype.sendMIDIMessage=lo;kA.prototype.sendMIDIReset=mo;kA.prototype.sendMIDICC=Qo;kA.prototype.sendMIDIProgramChange=uo;kA.prototype.sendMIDIPitchWheel=fo;kA.prototype.assignMIDIPort=eo;kA.prototype.post=ho;kA.prototype.processMessage=co;kA.prototype._processEvent=vs;kA.prototype._addNewMidiPort=Hs;kA.prototype.processTick=Ys;kA.prototype._findFirstEventIndex=Js;kA.prototype.loadNewSequence=to;kA.prototype.loadNewSongList=no;kA.prototype.nextSong=so;kA.prototype.previousSong=oo;kA.prototype.play=Co;kA.prototype._playTo=go;kA.prototype.setTimeTicks=Eo;kA.prototype._recalculateStartTime=Bo;function li(e,A){let t=0;return e.drumChannel&&(t+=5),A.isInRelease&&(t-=5),t+=A.velocity/25,t-=A.volumeEnvelope.state,A.isInRelease&&(t-=5),t-=A.volumeEnvelope.currentAttenuationDb/50,t}function po(e){let A=[];for(let n of this.workletProcessorChannels)for(let s of n.voices)if(!s.finished){let o=li(n,s);A.push({channel:n,voice:s,priority:o})}A.sort((n,s)=>n.priority-s.priority);let t=A.slice(0,e);for(let{channel:n,voice:s}of t){let o=n.voices.indexOf(s);o>-1&&n.voices.splice(o,1)}}var me=me!==void 0?me:{},yo=!1,So;me.isInitialized=new Promise(e=>So=e);var Qi=function(e){var A,t,n,s,o,r,E,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",g="",l=0;e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");do s=a.indexOf(e.charAt(l++)),o=a.indexOf(e.charAt(l++)),r=a.indexOf(e.charAt(l++)),E=a.indexOf(e.charAt(l++)),A=s<<2|o>>4,t=(15&o)<<4|r>>2,n=(3&r)<<6|E,g+=String.fromCharCode(A),r!==64&&(g+=String.fromCharCode(t)),E!==64&&(g+=String.fromCharCode(n));while(l<e.length);return g};(function(){var e,A,t,n,s,o,r,E,a,g,l,c,d,B,u,p,S,w,k,M,b,G,C=C!==void 0?C:{};C.wasmBinary=Uint8Array.from(Qi("AGFzbQEAAAABpQEYYAJ/fwF/YAF/AGAAAX9gBH9/f38AYAAAYAN/f38Bf2ABfwF/YAJ/fwBgBn9/f39/fwF/YAR/f39/AX9gBX9/f39/AX9gB39/f39/f38Bf2AGf39/f39/AGAIf39/f39/f38Bf2AFf39/f38AYAd/f39/f39/AGADf39/AGABfwF9YAF9AX1gAnx/AXxgAnx/AX9gA3x8fwF8YAJ8fAF8YAF8AXwCngIPA2VudgZtZW1vcnkCAIACA2VudgV0YWJsZQFwAQQEA2Vudgl0YWJsZUJhc2UDfwADZW52DkRZTkFNSUNUT1BfUFRSA38AA2VudghTVEFDS1RPUAN/AANlbnYJU1RBQ0tfTUFYA38ABmdsb2JhbAhJbmZpbml0eQN8AANlbnYFYWJvcnQAAQNlbnYNZW5sYXJnZU1lbW9yeQACA2Vudg5nZXRUb3RhbE1lbW9yeQACA2VudhdhYm9ydE9uQ2Fubm90R3Jvd01lbW9yeQACA2Vudg5fX19hc3NlcnRfZmFpbAADA2VudgtfX19zZXRFcnJObwABA2VudgZfYWJvcnQABANlbnYWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwAFA3d2BgYCAQcHAQIBAQcBCAcFAAkGCQoHBgYGBgEFBgIBBgYKAAgLAAYGBgYGBgYBAAoMDAMGBQANCAoJAAwODA8OAQAGBgcEABAJEAERAAADBQwAAAMHBxIGAQAABwIFEwMOBw8HBgYQFAoVExYXFxcXFgQFBQYFAAYkB38BIwELfwEjAgt/ASMDC38BQQALfwFBAAt8ASMEC38BQQALB9MCFRBfX2dyb3dXYXNtTWVtb3J5AAgRX19fZXJybm9fbG9jYXRpb24AYwVfZnJlZQBfB19tYWxsb2MAXgdfbWVtY3B5AHkHX21lbXNldAB6BV9zYnJrAHsXX3N0Yl92b3JiaXNfanNfY2hhbm5lbHMAJhRfc3RiX3ZvcmJpc19qc19jbG9zZQAlFV9zdGJfdm9yYmlzX2pzX2RlY29kZQAoE19zdGJfdm9yYmlzX2pzX29wZW4AJBpfc3RiX3ZvcmJpc19qc19zYW1wbGVfcmF0ZQAnC2R5bkNhbGxfaWlpAHwTZXN0YWJsaXNoU3RhY2tTcGFjZQAMC2dldFRlbXBSZXQwAA8LcnVuUG9zdFNldHMAeAtzZXRUZW1wUmV0MAAOCHNldFRocmV3AA0Kc3RhY2tBbGxvYwAJDHN0YWNrUmVzdG9yZQALCXN0YWNrU2F2ZQAKCQoBACMACwR9VFl9Csb2A3YGACAAQAALGwEBfyMGIQEjBiAAaiQGIwZBD2pBcHEkBiABCwQAIwYLBgAgACQGCwoAIAAkBiABJAcLEAAjCEUEQCAAJAggASQJCwsGACAAJAsLBAAjCwsRACAABEAgABARIAAgABASCwvvBwEKfyAAQYADaiEHIAcoAgAhBQJAIAUEQCAAQfwBaiEEIAQoAgAhASABQQBKBEAgAEHwAGohCANAIAUgAkEYbGpBEGohCSAJKAIAIQEgAQRAIAgoAgAhAyAFIAJBGGxqQQ1qIQogCi0AACEGIAZB/wFxIQYgAyAGQbAQbGpBBGohAyADKAIAIQMgA0EASgRAQQAhAwNAIAEgA0ECdGohASABKAIAIQEgACABEBIgA0EBaiEDIAgoAgAhASAKLQAAIQYgBkH/AXEhBiABIAZBsBBsakEEaiEBIAEoAgAhBiAJKAIAIQEgAyAGSA0ACwsgACABEBILIAUgAkEYbGpBFGohASABKAIAIQEgACABEBIgAkEBaiECIAQoAgAhASACIAFODQMgBygCACEFDAAACwALCwsgAEHwAGohAyADKAIAIQEgAQRAIABB7ABqIQUgBSgCACECIAJBAEoEQEEAIQIDQAJAIAEgAkGwEGxqQQhqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQRxqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQSBqIQQgBCgCACEEIAAgBBASIAEgAkGwEGxqQaQQaiEEIAQoAgAhBCAAIAQQEiABIAJBsBBsakGoEGohASABKAIAIQEgAUUhBCABQXxqIQFBACABIAQbIQEgACABEBIgAkEBaiECIAUoAgAhASACIAFODQAgAygCACEBDAELCyADKAIAIQELIAAgARASCyAAQfgBaiEBIAEoAgAhASAAIAEQEiAHKAIAIQEgACABEBIgAEGIA2ohAyADKAIAIQEgAQRAIABBhANqIQUgBSgCACECIAJBAEoEQEEAIQIDQCABIAJBKGxqQQRqIQEgASgCACEBIAAgARASIAJBAWohAiAFKAIAIQcgAygCACEBIAIgB0gNAAsLIAAgARASCyAAQQRqIQIgAigCACEBIAFBAEoEQEEAIQEDQCAAQZQGaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQZQHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiAAQdgHaiABQQJ0aiEDIAMoAgAhAyAAIAMQEiABQQFqIQEgAigCACEDIAEgA0ghAyABQRBJIQUgBSADcQ0ACwtBACEBA0AgAEGgCGogAUECdGohAiACKAIAIQIgACACEBIgAEGoCGogAUECdGohAiACKAIAIQIgACACEBIgAEGwCGogAUECdGohAiACKAIAIQIgACACEBIgAEG4CGogAUECdGohAiACKAIAIQIgACACEBIgAEHACGogAUECdGohAiACKAIAIQIgACACEBIgAUEBaiEBIAFBAkcNAAsLGwAgAEHEAGohACAAKAIAIQAgAEUEQCABEF8LC3wBAX8gAEHUB2ohASABQQA2AgAgAEGAC2ohASABQQA2AgAgAEH4CmohASABQQA2AgAgAEGcCGohASABQQA2AgAgAEHVCmohASABQQA6AAAgAEH8CmohASABQQA2AgAgAEHUC2ohASABQQA2AgAgAEHYC2ohACAAQQA2AgAL8AQBB38jBiELIwZBEGokBiALQQhqIQcgC0EEaiEKIAshCCAAQSRqIQYgBiwAACEGAn8gBgR/IABBgAtqIQYgBigCACEGIAZBf0oEQCAFQQA2AgAgACABIAIQFgwCCyAAQRRqIQYgBiABNgIAIAEgAmohAiAAQRxqIQkgCSACNgIAIABB2ABqIQIgAkEANgIAIABBABAXIQkgCUUEQCAFQQA2AgBBAAwCCyAAIAcgCCAKEBghCSAJBEAgBygCACECIAgoAgAhCSAKKAIAIQggACACIAkgCBAaIQogByAKNgIAIABBBGohAiACKAIAIQggCEEASgRAQQAhAgNAIABBlAZqIAJBAnRqIQcgBygCACEHIAcgCUECdGohByAAQdQGaiACQQJ0aiEMIAwgBzYCACACQQFqIQIgAiAISA0ACwsgAwRAIAMgCDYCAAsgBSAKNgIAIABB1AZqIQAgBCAANgIAIAYoAgAhACAAIAFrDAILAkACQAJAAkACQCACKAIAIgNBIGsOBAECAgACCyACQQA2AgAgAEHUAGohAiAAEBkhAwJAIANBf0cEQANAIAIoAgAhAyADDQIgABAZIQMgA0F/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ACECIABBmAhqIQYgBigCACEHIAUgA2shCSAJIAdqIQkgAiAJSSEJIAIgB0khDSACIAdrIQJBACACIA0bIQIgAiADaiECIAIgBUohByAFIAIgBxshAiAJBEAgASACNgIAIAYoAgAhACAAIAJqIQAgBiAANgIAQQEMBgsLCyAAQfQKaiECIAIoAgAhAiADIB9rIQYgBiACaiEGIABBmAhqIQIgAiAGNgIAIAhBATYCAAwBBSAAQZgIaiECIAYNAQsMAQsgBCADayEDIAIoAgAhBCADIARqIQMgAiADNgIACyATKAIAIQIgAgRAIABByABqIQIgAigCACECIABB0ABqIQAgACgCACEAIAIgAEcEQEHTE0HEE0HkGkHnFBAECwsgASAFNgIAQQELIQAgHCQGIAALqAIBBX8gAEHoCmohBSAFKAIAIQICQCACQQBIBEBBACEABSACIAFIBEAgAUEYSgRAIABBGBAsIQIgAUFoaiEBIAAgARAsIQAgAEEYdCEAIAAgAmohACAADwsgAkUEQCAAQeQKaiECIAJBADYCAAsgAEHkCmohAwJAAkACQANAIAAQLiECIAJBf0YNASAFKAIAIQQgAiAEdCECIAMoAgAhBiAGIAJqIQIgAyACNgIAIAUgBEEIaiICNgIAIAIgAUgNAAwCAAsACyAFQX82AgBBACEADAQLIARBeEgEQEEAIQAMBAsLCyAAQeQKaiEEIAQoAgAhA0EBIAF0IQAgAEF/aiEAIAMgAHEhACADIAF2IQMgBCADNgIAIAIgAWshASAFIAE2AgALCyAAC40CAAJAIABBAEgEf0EABSAAQYCAAUgEQCAAQRBIBEAgAEGACGohACAALAAAIQAMAwsgAEGABEgEQCAAQQV2IQAgAEGACGohACAALAAAIQAgAEEFaiEABSAAQQp2IQAgAEGACGohACAALAAAIQAgAEEKaiEACwwCCyAAQYCAgAhIBH8gAEGAgCBIBH8gAEEPdiEAIABBgAhqIQAgACwAACEAIABBD2oFIABBFHYhACAAQYAIaiEAIAAsAAAhACAAQRRqCwUgAEGAgICAAkgEfyAAQRl2IQAgAEGACGohACAALAAAIQAgAEEZagUgAEEediEAIABBgAhqIQAgACwAACEAIABBHmoLCwshAAsgAAuiAQEDfyAAQdQKaiECIAIsAAAhAQJAAkAgAQ0AIABB3ApqIQEgASgCACEBIAEEQEF/IQMFIAAQLyEBIAEEQCACLAAAIQEgAQ0CQaEUQcQTQfYLQbUUEAQFQX8hAwsLDAELIAFBf2pBGHRBGHUhASACIAE6AAAgAEHsCmohASABKAIAIQIgAkEBaiECIAEgAjYCACAAEDAhACAAQf8BcSEDCyADC6wCAQd/IABB3ApqIQIgAigCACEBAkAgAUUEQCAAQdgKaiEEIAQoAgAhASABQX9GBEAgAEHQCGohASABKAIAIQEgAUF/aiEBIABB4ApqIQMgAyABNgIAIAAQMSEBIAFFBEAgAkEBNgIADAMLIABB0wpqIQEgASwAACEBIAFBAXEhASABBH8gBCgCAAUgAEEgEBUMAwshAQsgAUEBaiEHIAQgBzYCACAAQdQIaiABaiEDIAMsAAAhBiAGQf8BcSEDIAZBf0cEQCACQQE2AgAgAEHgCmohAiACIAE2AgALIABB0AhqIQEgASgCACEBIAcgAU4EQCAEQX82AgALIABB1ApqIQAgACwAACEBIAEEQEHFFEHEE0HoC0HaFBAEBSAAIAY6AAAgAyEFCwsLIAULUQEDfyAAQRRqIQMgAygCACEBIABBHGohAiACKAIAIQIgASACSQR/IAFBAWohACADIAA2AgAgASwAAAUgAEHUAGohACAAQQE2AgBBAAshACAACyABAX8gABAyIQEgAQR/IAAQMwUgAEEeEBVBAAshACAAC2ABAX8gABAwIQEgAUH/AXFBzwBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQEgAUH/AXFB5wBGBEAgABAwIQAgAEH/AXFB0wBGIQAFQQAhAAsFQQAhAAsFQQAhAAsgAAvZAwEGfyAAEDAhAQJ/IAFB/wFxBH8gAEEfEBVBAAUgABAwIQEgAEHTCmohAiACIAE6AAAgABAjIQUgABAjIQIgABAjGiAAECMhASAAQcwIaiEDIAMgATYCACAAECMaIAAQMCEBIAFB/wFxIQEgAEHQCGohAyADIAE2AgAgAEHUCGohBCAAIAQgARAiIQEgAUUEQCAAQQoQFUEADAILIABB8ApqIQQgBEF+NgIAIAIgBXEhAQJAIAFBf0cEQCADKAIAIQEgAUEASgRAA0ACQCABQX9qIQIgAEHUCGogAmohBiAGLAAAIQYgBkF/Rw0AIAFBAUwNBCACIQEMAQsLIAQgAjYCACAAQfQKaiEBIAEgBTYCAAsLCyAAQdUKaiEBIAEsAAAhASABBEAgAygCACEDIANBAEoEf0EAIQJBACEBA0AgAEHUCGogAWohBCAELQAAIQQgBEH/AXEhBCACIARqIQIgAUEBaiEBIAEgA0gNAAsgAkEbagVBGwshASAAQShqIQIgAigCACECIAEgA2ohASABIAJqIQEgAEEsaiEDIAMgAjYCACAAQTBqIQIgAiABNgIAIABBNGohASABIAU2AgALIABB2ApqIQAgAEEANgIAQQELCyEAIAALowEBB38gAEHoCmohAyADKAIAIQECQCABQRlIBEAgAEHkCmohBCABRQRAIARBADYCAAsgAEHUCmohBSAAQdwKaiEGA0AgBigCACEBIAEEQCAFLAAAIQEgAUUNAwsgABAuIQIgAkF/Rg0CIAMoAgAhASACIAF0IQIgBCgCACEHIAcgAmohAiAEIAI2AgAgAUEIaiECIAMgAjYCACABQRFIDQALCwsLrQUBCX8gABA0IAFBIGohAiACKAIAIQUCQAJAIAVFIgNFDQAgAUGkEGohAiACKAIAIQIgAg0AQX8hAQwBCyABQQRqIQIgAigCACECAkACQCACQQhKBEAgAUGkEGohAyADKAIAIQMgAw0BBSADDQELDAELIABB5ApqIQggCCgCACEJIAkQOiEHIAFBrBBqIQIgAigCACECIAJBAUoEQCABQaQQaigCACEKQQAhAwNAIAJBAXYhBSAFIANqIQQgCiAEQQJ0aiEGIAYoAgAhBiAGIAdLIQYgAiAFayECIAMgBCAGGyEDIAUgAiAGGyECIAJBAUoNAAsFQQAhAwsgAUEXaiECIAIsAAAhAiACRQRAIAFBqBBqIQIgAigCACECIAIgA0ECdGohAiACKAIAIQMLIAFBCGohASABKAIAIQEgASADaiEBIAEtAAAhASABQf8BcSEBIABB6ApqIQIgAigCACEAIAAgAUgEf0EAIQBBfwUgACABayEAIAkgAXYhASAIIAE2AgAgAwshASACIAA2AgAMAQsgAUEXaiEDIAMsAAAhAyADBEBBgRVBxBNB6gxBjBUQBAsCQCACQQBKBEAgASgCCCEIIABB5ApqIQlBACEBA0ACQCAIIAFqIQMgAywAACEEIARB/wFxIQMgBEF/RwRAIAUgAUECdGohBCAEKAIAIQYgCSgCACEEQQEgA3QhByAHQX9qIQcgBCAHcSEHIAYgB0YNAQsgAUEBaiEBIAEgAkgNAQwDCwsgAEHoCmohACAAKAIAIQIgAiADSARAIABBADYCAEF/IQEFIAggAWohBSAEIAN2IQMgCSADNgIAIAUtAAAhAyADQf8BcSEDIAIgA2shAiAAIAI2AgALDAILCyAAQRUQFSAAQegKaiEAIABBADYCAEF/IQELIAELXgECfyAEIANrIQQgAiABayECIARBf0ohBUEAIARrIQYgBCAGIAUbIQUgACABayEAIAUgAGwhACAAIAJtIQAgBEEASCEBQQAgAGshAiACIAAgARshACAAIANqIQAgAAv7GgEcfyMGIRwjBkEQaiQGIBxBBGohCSAcIRIgAEGAA2ohCiAKKAIAIQ0gAEGAAmogBEEBdGohCiAKLgEAIQogCkH//wNxIRkgDSAEQRhsakENaiEaIBotAAAhDiAOQf8BcSEOIABB8ABqIRUgFSgCACEQIBAgDkGwEGxqIQ4gDigCACEYIApBAkYhDCADIAx0IQogDSAEQRhsaiEWIBYoAgAhDiAOIApJIRAgDiAKIBAbIRAgDSAEQRhsakEEaiEOIA4oAgAhDiAOIApJIRQgDiAKIBQbIQogCiAQayEKIA0gBEEYbGpBCGohFCAUKAIAIQ4gCiAObiEQIABB0ABqIR4gHigCACEfIABBxABqIQogCigCACEKIApFIQ4gAEEEaiETIBMoAgAhCiAQQQJ0IQYgBkEEaiEHIAogB2whByAOBEAjBiEOIwYgB0EPakFwcWokBgUgACAHEDwhDiATKAIAIQoLIA4gCiAGEDsaIAJBAEoiBgRAIANBAnQhE0EAIQoDQCAFIApqIQcgBywAACEHIAdFBEAgASAKQQJ0aiEHIAcoAgAhByAHQQAgExB6GgsgCkEBaiEKIAogAkcNAAsLIAJBAUchCgJAIAogDHEEQAJAIAYEQEEAIQoDQCAFIApqIQwgDCwAACEMIAxFDQIgCkEBaiEKIAogAkgNAAsFQQAhCgsLIAogAkcEQCAQQQBKIREgAEHoCmohDCAYQQBKIQ8gAEHkCmohEyANIARBGGxqQRRqIRkgDSAEQRhsakEQaiEbQQAhCgJAA0ACQAJAAkACQCACQQFrDgIBAAILIBEEQCAKRSEXQQAhBEEAIQ0DQCAWKAIAIQUgFCgCACEGIAYgBGwhBiAGIAVqIQUgBUEBcSEGIAkgBjYCACAFQQF1IQUgEiAFNgIAIBcEQCAVKAIAIQYgGi0AACEFIAVB/wFxIQcgBiAHQbAQbGohCyAMKAIAIQUgBUEKSARAIAAQNAsgEygCACEIIAhB/wdxIQUgBiAHQbAQbGpBJGogBUEBdGohBSAFLgEAIQUgBUF/SgRAIAYgB0GwEGxqQQhqIQsgCygCACELIAsgBWohCyALLQAAIQsgC0H/AXEhCyAIIAt2IQggEyAINgIAIAwoAgAhCCAIIAtrIQggCEEASCELQQAgCCALGyEIQX8gBSALGyEFIAwgCDYCAAUgACALEDUhBQsgBiAHQbAQbGpBF2ohCCAILAAAIQggCARAIAYgB0GwEGxqQagQaiEGIAYoAgAhBiAGIAVBAnRqIQUgBSgCACEFCyAFQX9GDQcgGygCACEGIAYgBUECdGohBSAFKAIAIQUgDigCACEGIAYgDUECdGohBiAGIAU2AgALIAQgEEghBSAFIA9xBEBBACEFA0AgFCgCACEGIA4oAgAhByAHIA1BAnRqIQcgBygCACEHIAcgBWohByAHLQAAIQcgB0H/AXEhByAZKAIAIQggCCAHQQR0aiAKQQF0aiEHIAcuAQAhByAHQX9KBEAgFSgCACEIIAggB0GwEGxqIQcgACAHIAFBAiAJIBIgAyAGED0hBiAGRQ0JBSAWKAIAIQcgBiAEbCEIIAggBmohBiAGIAdqIQYgBkEBcSEHIAkgBzYCACAGQQF1IQYgEiAGNgIACyAFQQFqIQUgBEEBaiEEIAUgGEghBiAEIBBIIQcgByAGcQ0ACwsgDUEBaiENIAQgEEgNAAsLDAILIBEEQCAKRSEXQQAhDUEAIQQDQCAWKAIAIQUgFCgCACEGIAYgBGwhBiAGIAVqIQUgCUEANgIAIBIgBTYCACAXBEAgFSgCACEGIBotAAAhBSAFQf8BcSEHIAYgB0GwEGxqIQsgDCgCACEFIAVBCkgEQCAAEDQLIBMoAgAhCCAIQf8HcSEFIAYgB0GwEGxqQSRqIAVBAXRqIQUgBS4BACEFIAVBf0oEQCAGIAdBsBBsakEIaiELIAsoAgAhCyALIAVqIQsgCy0AACELIAtB/wFxIQsgCCALdiEIIBMgCDYCACAMKAIAIQggCCALayEIIAhBAEghC0EAIAggCxshCEF/IAUgCxshBSAMIAg2AgAFIAAgCxA1IQULIAYgB0GwEGxqQRdqIQggCCwAACEIIAgEQCAGIAdBsBBsakGoEGohBiAGKAIAIQYgBiAFQQJ0aiEFIAUoAgAhBQsgBUF/Rg0GIBsoAgAhBiAGIAVBAnRqIQUgBSgCACEFIA4oAgAhBiAGIA1BAnRqIQYgBiAFNgIACyAEIBBIIQUgBSAPcQRAQQAhBQNAIBQoAgAhBiAOKAIAIQcgByANQQJ0aiEHIAcoAgAhByAHIAVqIQcgBy0AACEHIAdB/wFxIQcgGSgCACEIIAggB0EEdGogCkEBdGohByAHLgEAIQcgB0F/SgRAIBUoAgAhCCAIIAdBsBBsaiEHIAAgByABQQEgCSASIAMgBhA9IQYgBkUNCAUgFigCACEHIAYgBGwhCCAIIAZqIQYgBiAHaiEGIAlBADYCACASIAY2AgALIAVBAWohBSAEQQFqIQQgBSAYSCEGIAQgEEghByAHIAZxDQALCyANQQFqIQ0gBCAQSA0ACwsMAQsgEQRAIApFIRdBACENQQAhBANAIBYoAgAhBSAUKAIAIQYgBiAEbCEGIAYgBWohBSAFIAUgAm0iBSACbGshBiAJIAY2AgAgEiAFNgIAIBcEQCAVKAIAIQYgGi0AACEFIAVB/wFxIQcgBiAHQbAQbGohCyAMKAIAIQUgBUEKSARAIAAQNAsgEygCACEIIAhB/wdxIQUgBiAHQbAQbGpBJGogBUEBdGohBSAFLgEAIQUgBUF/SgRAIAYgB0GwEGxqQQhqIQsgCygCACELIAsgBWohCyALLQAAIQsgC0H/AXEhCyAIIAt2IQggEyAINgIAIAwoAgAhCCAIIAtrIQggCEEASCELQQAgCCALGyEIQX8gBSALGyEFIAwgCDYCAAUgACALEDUhBQsgBiAHQbAQbGpBF2ohCCAILAAAIQggCARAIAYgB0GwEGxqQagQaiEGIAYoAgAhBiAGIAVBAnRqIQUgBSgCACEFCyAFQX9GDQUgGygCACEGIAYgBUECdGohBSAFKAIAIQUgDigCACEGIAYgDUECdGohBiAGIAU2AgALIAQgEEghBSAFIA9xBEBBACEFA0AgFCgCACEGIA4oAgAhByAHIA1BAnRqIQcgBygCACEHIAcgBWohByAHLQAAIQcgB0H/AXEhByAZKAIAIQggCCAHQQR0aiAKQQF0aiEHIAcuAQAhByAHQX9KBEAgFSgCACEIIAggB0GwEGxqIQcgACAHIAEgAiAJIBIgAyAGED0hBiAGRQ0HBSAWKAIAIQcgBiAEbCEIIAggBmohBiAGIAdqIQYgBiAGIAJtIgYgAmxrIQcgCSAHNgIAIBIgBjYCAAsgBUEBaiEFIARBAWohBCAFIBhIIQYgBCAQSCEHIAcgBnENAAsLIA1BAWohDSAEIBBIDQALCwsgCkEBaiEKIApBCEkNAAsLCwUgEEEASiEbIAJBAUghCCAYQQBKIQsgAEHoCmohEyAAQeQKaiEHIA0gBEEYbGpBEGohFyANIARBGGxqQRRqISBBACEKA0AgGwRAIApBAEcgCHIhIUEAIQ1BACEDA0AgIUUEQEEAIRIDQCAFIBJqIQQgBCwAACEEIARFBEAgFSgCACEJIBotAAAhBCAEQf8BcSEMIAkgDEGwEGxqIQ8gEygCACEEIARBCkgEQCAAEDQLIAcoAgAhESARQf8HcSEEIAkgDEGwEGxqQSRqIARBAXRqIQQgBC4BACEEIARBf0oEQCAJIAxBsBBsakEIaiEPIA8oAgAhDyAPIARqIQ8gDy0AACEPIA9B/wFxIQ8gESAPdiERIAcgETYCACATKAIAIREgESAPayERIBFBAEghD0EAIBEgDxshEUF/IAQgDxshBCATIBE2AgAFIAAgDxA1IQQLIAkgDEGwEGxqQRdqIREgESwAACERIBEEQCAJIAxBsBBsakGoEGohCSAJKAIAIQkgCSAEQQJ0aiEEIAQoAgAhBAsgBEF/Rg0HIBcoAgAhCSAJIARBAnRqIQQgBCgCACEEIA4gEkECdGohCSAJKAIAIQkgCSANQQJ0aiEJIAkgBDYCAAsgEkEBaiESIBIgAkgNAAsLIAMgEEghBCAEIAtxBEBBACESA0AgBgRAQQAhBANAIAUgBGohCSAJLAAAIQkgCUUEQCAOIARBAnRqIQkgCSgCACEJIAkgDUECdGohCSAJKAIAIQkgCSASaiEJIAktAAAhCSAJQf8BcSEJICAoAgAhDCAMIAlBBHRqIApBAXRqIQkgCS4BACEJIAlBf0oEQCABIARBAnRqIQwgDCgCACERIBYoAgAhDyAUKAIAIQwgDCADbCEdIB0gD2ohDyAVKAIAIR0gHSAJQbAQbGohCSAAIAkgESAPIAwgGRA+IQkgCUUNCgsLIARBAWohBCAEIAJIDQALCyASQQFqIRIgA0EBaiEDIBIgGEghBCADIBBIIQkgCSAEcQ0ACwsgDUEBaiENIAMgEEgNAAsLIApBAWohCiAKQQhJDQALCwsgHiAfNgIAIBwkBgvPAwIIfwJ9IANBAXUhCSABQQRqIQMgAygCACEDIAMgAkEDbGpBAmohAiACLQAAIQIgAkH/AXEhAiABQQlqIAJqIQEgAS0AACEBIAFB/wFxIQcgAEH4AGogB0EBdGohASABLgEAIQEgAQRAIABB+AFqIQAgACgCACEIIAUuAQAhASAIIAdBvAxsakG0DGohCyALLQAAIQAgAEH/AXEhACAAIAFsIQEgCCAHQbwMbGpBuAxqIQwgDCgCACECIAJBAUoEQEEAIQBBASEKA0AgCCAHQbwMbGpBxgZqIApqIQMgAy0AACEDIANB/wFxIQ0gBSANQQF0aiEDIAMuAQAhBiAGQX9KBEAgCy0AACEDIANB/wFxIQMgAyAGbCEDIAggB0G8DGxqQdICaiANQQF0aiEGIAYvAQAhBiAGQf//A3EhBiAAIAZHBEAgBCAAIAEgBiADIAkQQiAGIQAgDCgCACECCyADIQELIApBAWohAyADIAJIBEAgAyEKDAELCwVBACEACyAAIAlIBEAgAUECdEGgCGoqAgAhDwNAIAQgAEECdGohASABKgIAIQ4gDyAOlCEOIAEgDjgCACAAQQFqIQAgACAJRw0ACwsFIABBFRAVCwuFGgIVfwp9IwYhFiABQQF1IQ8gAUECdSENIAFBA3UhDiACQdAAaiEUIBQoAgAhFyACQcQAaiEIIAgoAgAhCCAIRSEIIA9BAnQhBSAIBEAjBiEMIwYgBUEPakFwcWokBgUgAiAFEDwhDAsgAkGgCGogA0ECdGohCCAIKAIAIQggD0F+aiEGIAwgBkECdGohBiAAIA9BAnRqIRUgDwR/IAVBcGohBSAFQQR2IQcgB0EDdCEEIAUgBGshBSAMIAVqIQQgB0EBdCEFIAVBAmohCyAGIQcgACEGIAghBQNAIAYqAgAhGSAFKgIAIRogGSAalCEZIAZBCGohCiAKKgIAIRogBUEEaiEJIAkqAgAhGyAaIBuUIRogGSAakyEZIAdBBGohECAQIBk4AgAgBioCACEZIAkqAgAhGiAZIBqUIRkgCioCACEaIAUqAgAhGyAaIBuUIRogGSAakiEZIAcgGTgCACAHQXhqIQcgBUEIaiEFIAZBEGohBiAGIBVHDQALIAQhBiAIIAtBAnRqBSAICyEHIAYgDE8EQCAPQX1qIQQgBiEFIAAgBEECdGohBCAHIQYDQCAEQQhqIQcgByoCACEZIAYqAgAhGiAZIBqUIRkgBCoCACEaIAZBBGohCiAKKgIAIRsgGiAblCEaIBogGZMhGSAFQQRqIQkgCSAZOAIAIAcqAgAhGSAKKgIAIRogGSAalCEZIAQqAgAhGiAGKgIAIRsgGiAblCEaIBqMIRogGiAZkyEZIAUgGTgCACAFQXhqIQUgBkEIaiEGIARBcGohBCAFIAxPDQALCyABQRBOBEAgD0F4aiEGIAggBkECdGohBiAAIA1BAnRqIQcgACEEIAwgDUECdGohCiAMIQUDQCAKQQRqIQkgCSoCACEZIAVBBGohCSAJKgIAIRogGSAakyEbIAoqAgAhHCAFKgIAIR0gHCAdkyEcIBkgGpIhGSAHQQRqIQkgCSAZOAIAIAoqAgAhGSAFKgIAIRogGSAakiEZIAcgGTgCACAGQRBqIQkgCSoCACEZIBsgGZQhGSAGQRRqIQsgCyoCACEaIBwgGpQhGiAZIBqTIRkgBEEEaiEQIBAgGTgCACAJKgIAIRkgHCAZlCEZIAsqAgAhGiAbIBqUIRogGSAakiEZIAQgGTgCACAKQQxqIQkgCSoCACEZIAVBDGohCSAJKgIAIRogGSAakyEbIApBCGohCSAJKgIAIRwgBUEIaiELIAsqAgAhHSAcIB2TIRwgGSAakiEZIAdBDGohECAQIBk4AgAgCSoCACEZIAsqAgAhGiAZIBqSIRkgB0EIaiEJIAkgGTgCACAGKgIAIRkgGyAZlCEZIAZBBGohCSAJKgIAIRogHCAalCEaIBkgGpMhGSAEQQxqIQsgCyAZOAIAIAYqAgAhGSAcIBmUIRkgCSoCACEaIBsgGpQhGiAZIBqSIRkgBEEIaiEJIAkgGTgCACAGQWBqIQYgB0EQaiEHIARBEGohBCAKQRBqIQogBUEQaiEFIAYgCE8NAAsLIAEQLSEHIAFBBHUhBiAPQX9qIQlBACAOayEFIAYgACAJIAUgCBBDIAkgDWshBCAGIAAgBCAFIAgQQyABQQV1IQtBACAGayEGIAsgACAJIAYgCEEQEEQgCSAOayEFIAsgACAFIAYgCEEQEEQgDkEBdCEFIAkgBWshBSALIAAgBSAGIAhBEBBEIA5BfWwhBSAJIAVqIQUgCyAAIAUgBiAIQRAQRCAHQXxqIQYgBkEBdSEOIAdBCUoEQEECIQUDQCAFQQJqIQYgASAGdSEEIAVBAWohBkECIAV0IQogCkEASgRAIAEgBUEEanUhEEEAIARBAXVrIRJBCCAFdCETQQAhBQNAIAUgBGwhESAJIBFrIREgECAAIBEgEiAIIBMQRCAFQQFqIQUgBSAKRw0ACwsgBiAOSARAIAYhBQwBCwsFQQIhBgsgB0F5aiEOIAYgDkgEQANAIAZBAmohBSABIAV1IRBBCCAGdCESIAZBBmohBSABIAV1IQcgBkEBaiEEQQIgBnQhEyAHQQBKBEBBACAQQQF1ayERIBJBAnQhGCAIIQYgCSEFA0AgEyAAIAUgESAGIBIgEBBFIAYgGEECdGohBiAFQXhqIQUgB0F/aiEKIAdBAUoEQCAKIQcMAQsLCyAEIA5HBEAgBCEGDAELCwsgCyAAIAkgCCABEEYgDUF8aiEIIAwgCEECdGohBiAPQXxqIQkgBiAMTwRAIAwgCUECdGohCCACQcAIaiADQQJ0aiEFIAUoAgAhBQNAIAUvAQAhByAHQf//A3EhByAAIAdBAnRqIQQgBCgCACEEIAhBDGohCiAKIAQ2AgAgB0EBaiEEIAAgBEECdGohBCAEKAIAIQQgCEEIaiEKIAogBDYCACAHQQJqIQQgACAEQQJ0aiEEIAQoAgAhBCAGQQxqIQogCiAENgIAIAdBA2ohByAAIAdBAnRqIQcgBygCACEHIAZBCGohBCAEIAc2AgAgBUECaiEHIAcvAQAhByAHQf//A3EhByAAIAdBAnRqIQQgBCgCACEEIAhBBGohCiAKIAQ2AgAgB0EBaiEEIAAgBEECdGohBCAEKAIAIQQgCCAENgIAIAdBAmohBCAAIARBAnRqIQQgBCgCACEEIAZBBGohCiAKIAQ2AgAgB0EDaiEHIAAgB0ECdGohByAHKAIAIQcgBiAHNgIAIAZBcGohBiAIQXBqIQggBUEEaiEFIAYgDE8NAAsLIAwgD0ECdGoiB0FwaiEIIAggDEsEQCACQbAIaiADQQJ0aiEGIAwhBSAGKAIAIQQgByEGA0AgBSoCACEZIAZBeGohCiAKKgIAIRogGSAakyEbIAVBBGohCyALKgIAIRwgBkF8aiENIA0qAgAhHSAcIB2SIR4gBEEEaiEOIA4qAgAhICAbICCUIR8gBCoCACEhIB4gIZQhIiAfICKSIR8gICAelCEeIBsgIZQhGyAeIBuTIRsgGSAakiEZIBwgHZMhGiAZIB+SIRwgBSAcOAIAIBogG5IhHCALIBw4AgAgGSAfkyEZIAogGTgCACAbIBqTIRkgDSAZOAIAIAVBCGohCiAKKgIAIRkgCCoCACEaIBkgGpMhGyAFQQxqIQsgCyoCACEcIAZBdGohBiAGKgIAIR0gHCAdkiEeIARBDGohDSANKgIAISAgGyAglCEfIARBCGohDSANKgIAISEgHiAhlCEiIB8gIpIhHyAgIB6UIR4gGyAhlCEbIB4gG5MhGyAZIBqSIRkgHCAdkyEaIBkgH5IhHCAKIBw4AgAgGiAbkiEcIAsgHDgCACAZIB+TIRkgCCAZOAIAIBsgGpMhGSAGIBk4AgAgBEEQaiEKIAVBEGohBSAIQXBqIQQgBSAESQRAIAghBiAEIQggCiEEDAELCwsgB0FgaiEIIAggDE8EQCACQagIaiADQQJ0aiECIAIoAgAhAiACIA9BAnRqIQIgAUF8aiEBIAAgAUECdGohAyAIIQEgFSEIIAAgCUECdGohBSAAIQYgByEAA0AgAkFgaiEHIABBeGohBCAEKgIAIRkgAkF8aiEEIAQqAgAhGiAZIBqUIR0gAEF8aiEEIAQqAgAhGyACQXhqIQQgBCoCACEcIBsgHJQhHiAdIB6TIR0gGSAclCEZIBmMIRkgGiAblCEaIBkgGpMhGSAGIB04AgAgHYwhGiAFQQxqIQQgBCAaOAIAIAggGTgCACADQQxqIQQgBCAZOAIAIABBcGohBCAEKgIAIRkgAkF0aiEEIAQqAgAhGiAZIBqUIR0gAEF0aiEEIAQqAgAhGyACQXBqIQQgBCoCACEcIBsgHJQhHiAdIB6TIR0gGSAclCEZIBmMIRkgGiAblCEaIBkgGpMhGSAGQQRqIQQgBCAdOAIAIB2MIRogBUEIaiEEIAQgGjgCACAIQQRqIQQgBCAZOAIAIANBCGohBCAEIBk4AgAgAEFoaiEEIAQqAgAhGSACQWxqIQQgBCoCACEaIBkgGpQhHSAAQWxqIQQgBCoCACEbIAJBaGohBCAEKgIAIRwgGyAclCEeIB0gHpMhHSAZIByUIRkgGYwhGSAaIBuUIRogGSAakyEZIAZBCGohBCAEIB04AgAgHYwhGiAFQQRqIQQgBCAaOAIAIAhBCGohBCAEIBk4AgAgA0EEaiEEIAQgGTgCACABKgIAIRkgAkFkaiECIAIqAgAhGiAZIBqUIR0gAEFkaiEAIAAqAgAhGyAHKgIAIRwgGyAclCEeIB0gHpMhHSAZIByUIRkgGYwhGSAaIBuUIRogGSAakyEZIAZBDGohACAAIB04AgAgHYwhGiAFIBo4AgAgCEEMaiEAIAAgGTgCACADIBk4AgAgBkEQaiEGIAhBEGohCCAFQXBqIQUgA0FwaiEDIAFBYGohAiACIAxPBEAgASEAIAIhASAHIQIMAQsLCyAUIBc2AgAgFiQGC8UBAQF/IABBAXYhASABQdWq1aoFcSEBIABBAXQhACAAQarVqtV6cSEAIAEgAHIhACAAQQJ2IQEgAUGz5syZA3EhASAAQQJ0IQAgAEHMmbPmfHEhACABIAByIQAgAEEEdiEBIAFBj568+ABxIQEgAEEEdCEAIABB8OHDh39xIQAgASAAciEAIABBCHYhASABQf+B/AdxIQEgAEEIdCEAIABBgP6DeHEhACABIAByIQAgAEEQdiEBIABBEHQhACABIAByIQAgAAtBAQN/IAFBAEoEQCAAIAFBAnRqIQQDQCAAIANBAnRqIQUgBSAENgIAIAQgAmohBCADQQFqIQMgAyABRw0ACwsgAAtrAQN/IAFBA2ohASABQXxxIQEgAEHEAGohAiACKAIAIQIgAgR/IABB0ABqIQMgAygCACEEIAQgAWshASAAQcwAaiEAIAAoAgAhACABIABIBH9BAAUgAyABNgIAIAIgAWoLBSABEF4LIQAgAAvaBgIPfwJ9IAFBFWohDCAMLAAAIQwCfyAMBH8gBSgCACEJIAQoAgAhCgJAIAdBAEoEfyAAQegKaiEOIABB5ApqIRAgAUEIaiETIAFBF2ohFCABQawQaiEVIAYgA2whESABQRZqIRYgAUEcaiESIAchDCAKIQYgASgCACEKIAkhBwJAAkADQAJAIA4oAgAhCSAJQQpIBEAgABA0CyAQKAIAIQsgC0H/B3EhCSABQSRqIAlBAXRqIQkgCS4BACEJIAlBf0oEQCATKAIAIQggCCAJaiEIIAgtAAAhCCAIQf8BcSEIIAsgCHYhCyAQIAs2AgAgDigCACELIAsgCGshCyALQQBIIQhBACALIAgbIQ1BfyAJIAgbIQsgDiANNgIABSAAIAEQNSELCyAULAAAIQkgCQRAIBUoAgAhCSALIAlODQMLIAtBAEgNACAHIANsIQkgCiAJaiEIIAggBmohCCAIIBFKIQggESAJayEJIAkgBmohCSAJIAogCBshCSABKAIAIQogCiALbCELIBYsAAAhCCAJQQBKIQogCARAIAoEQCASKAIAIQ1DAAAAACEXQQAhCgNAIAogC2ohCCANIAhBAnRqIQggCCoCACEYIBcgGJIhFyACIAZBAnRqIQggCCgCACEIIAhFIQ8gCCAHQQJ0aiEIIA9FBEAgCCoCACEYIBcgGJIhGCAIIBg4AgALIAZBAWohBiAGIANGIQggByAIaiEHQQAgBiAIGyEGIApBAWohCiAKIAlHDQALCwUgCgRAQQAhCgNAIAIgBkECdGohCCAIKAIAIQggCARAIBIoAgAhDSAKIAtqIQ8gDSAPQQJ0aiENIA0qAgAhFyAXQwAAAACSIRcgCCAHQQJ0aiEIIAgqAgAhGCAYIBeSIRcgCCAXOAIACyAGQQFqIQYgBiADRiEIIAcgCGohB0EAIAYgCBshBiAKQQFqIQogCiAJRw0ACwsLIAwgCWshDCAMQQBMDQUgCSEKDAELCwwBC0GnFUHEE0GgDkHLFRAECyAAQdQKaiEBIAEsAAAhASABRQRAIABB3ApqIQEgASgCACEBQQAgAQ0EGgsgAEEVEBVBAAwDBSAJIQcgCgshBgsgBCAGNgIAIAUgBzYCAEEBBSAAQRUQFUEACwshACAAC+ABAQJ/AkAgBQRAIARBAEoEQEEAIQUDQCACIANBAnRqIQYgBCAFayEHIAAgASAGIAcQQCEGIAZFBEBBACEADAQLIAEoAgAhBiAGIAVqIQUgBiADaiEDIAUgBEgNAAtBASEABUEBIQALBSABKAIAIQUgBCAFbSEFIAIgA0ECdGohBiAFQQBKBEAgBCADayEDQQAhAgNAIAYgAkECdGohBCADIAJrIQcgACABIAQgByAFED8hBCAERSEEIAQEQEEAIQAMBAsgAkEBaiECIAIgBUgNAAtBASEABUEBIQALCwsgAAu+AQIDfwN9IAAgARBBIQUgBUEASARAQQAhAAUgASgCACEAIAAgA0ghBiAAIAMgBhshAyAAIAVsIQUgA0EASgRAIAEoAhwhBiABLAAWRSEHQQAhAANAIAAgBWohASAGIAFBAnRqIQEgASoCACEIIAkgCJIhCCAAIARsIQEgAiABQQJ0aiEBIAEqAgAhCiAKIAiSIQogASAKOAIAIAkgCCAHGyEJIABBAWohACAAIANIDQALQQEhAAVBASEACwsgAAvFAgIDfwJ9IAAgARBBIQUCQCAFQQBIBEBBACEABSABKAIAIQAgACADSCEEIAAgAyAEGyEDIAAgBWwhBSABQRZqIQAgACwAACEEIANBAEohACAEBEAgAEUEQEEBIQAMAwsgASgCHCEEIAFBDGohBkEAIQADQCAAIAVqIQEgBCABQQJ0aiEBIAEqAgAhCCAHIAiSIQcgAiAAQQJ0aiEBIAEqAgAhCCAIIAeSIQggASAIOAIAIAYqAgAhCCAHIAiSIQcgAEEBaiEAIAAgA0gNAAtBASEABSAARQRAQQEhAAwDCyABKAIcIQRBACEAA0AgACAFaiEBIAQgAUECdGohASABKgIAIQcgB0MAAAAAkiEHIAIgAEECdGohASABKgIAIQggCCAHkiEHIAEgBzgCACAAQQFqIQAgACADSA0AC0EBIQALCwsgAAvMAgEFfyABQRVqIQIgAiwAACECAkAgAgRAIABB6ApqIQUgBSgCACECIAJBCkgEQCAAEDQLIABB5ApqIQQgBCgCACEGIAZB/wdxIQIgAUEkaiACQQF0aiECIAIuAQAhAiACQX9KBEAgAUEIaiEDIAMoAgAhAyADIAJqIQMgAy0AACEDIANB/wFxIQMgBiADdiEGIAQgBjYCACAFKAIAIQQgBCADayEEIARBAEghBkEAIAQgBhshBEF/IAIgBhshAiAFIAQ2AgAFIAAgARA1IQILIAFBF2ohBSAFLAAAIQUgBQRAIAFBrBBqIQEgASgCACEBIAIgAU4EQEHvFUHEE0HCDUGFFhAECwsgAkEASARAIABB1ApqIQEgASwAACEBIAFFBEAgAEHcCmohASABKAIAIQEgAQ0DCyAAQRUQFQsFIABBFRAVQX8hAgsLIAILtAICBX8CfSAEIAJrIQQgAyABayEIIARBf0ohBkEAIARrIQcgBCAHIAYbIQcgBCAIbSEGIARBH3UhBCAEQQFyIQogBkF/SiEEQQAgBmshCSAGIAkgBBshBCAEIAhsIQQgByAEayEHIAMgBUohBCAFIAMgBBshBCAEIAFKBEAgAkECdEGgCGohAyADKgIAIQsgACABQQJ0aiEDIAMqAgAhDCALIAyUIQsgAyALOAIAIAFBAWohASABIARIBEBBACEDA0AgAyAHaiEDIAMgCEghBUEAIAogBRshCUEAIAggBRshBSADIAVrIQMgAiAGaiAJaiECIAJBAnRBoAhqIQUgBSoCACELIAAgAUECdGohBSAFKgIAIQwgCyAMlCELIAUgCzgCACABQQFqIQEgASAESA0ACwsLC4sHAgR/Bn0gASACQQJ0aiEBIABBA3EhAiACBEBBmxZBxBNB4BJBqBYQBAsgAEEDSgRAIABBAnYhACABIANBAnRqIQMDQCABKgIAIQsgAyoCACEMIAsgDJMhDSABQXxqIQIgAioCACEKIANBfGohBSAFKgIAIQkgCiAJkyEOIAsgDJIhCSABIAk4AgAgBSoCACEJIAogCZIhCSACIAk4AgAgBCoCACEJIA0gCZQhCiAEQQRqIQIgAioCACEJIA4gCZQhCSAKIAmTIQkgAyAJOAIAIAQqAgAhCSAOIAmUIQogAioCACEJIA0gCZQhCSAKIAmSIQkgBSAJOAIAIARBIGohByABQXhqIQggCCoCACELIANBeGohBSAFKgIAIQwgCyAMkyENIAFBdGohAiACKgIAIQogA0F0aiEGIAYqAgAhCSAKIAmTIQ4gCyAMkiEJIAggCTgCACAGKgIAIQkgCiAJkiEJIAIgCTgCACAHKgIAIQkgDSAJlCEKIARBJGohAiACKgIAIQkgDiAJlCEJIAogCZMhCSAFIAk4AgAgByoCACEJIA4gCZQhCiACKgIAIQkgDSAJlCEJIAogCZIhCSAGIAk4AgAgBEFAayEHIAFBcGohCCAIKgIAIQsgA0FwaiEFIAUqAgAhDCALIAyTIQ0gAUFsaiECIAIqAgAhCiADQWxqIQYgBioCACEJIAogCZMhDiALIAySIQkgCCAJOAIAIAYqAgAhCSAKIAmSIQkgAiAJOAIAIAcqAgAhCSANIAmUIQogBEHEAGohAiACKgIAIQkgDiAJlCEJIAogCZMhCSAFIAk4AgAgByoCACEJIA4gCZQhCiACKgIAIQkgDSAJlCEJIAogCZIhCSAGIAk4AgAgBEHgAGohByABQWhqIQggCCoCACELIANBaGohBSAFKgIAIQwgCyAMkyENIAFBZGohAiACKgIAIQogA0FkaiEGIAYqAgAhCSAKIAmTIQ4gCyAMkiEJIAggCTgCACAGKgIAIQkgCiAJkiEJIAIgCTgCACAHKgIAIQkgDSAJlCEKIARB5ABqIQIgAioCACEJIA4gCZQhCSAKIAmTIQkgBSAJOAIAIAcqAgAhCSAOIAmUIQogAioCACEJIA0gCZQhCSAKIAmSIQkgBiAJOAIAIARBgAFqIQQgAUFgaiEBIANBYGohAyAAQX9qIQIgAEEBSgRAIAIhAAwBCwsLC4EHAgN/BX0gASACQQJ0aiEBIABBA0oEQCAAQQJ2IQYgASADQQJ0aiECIAEhACAGIQEDQCAAKgIAIQkgAioCACEKIAkgCpMhDCAAQXxqIQYgBioCACENIAJBfGohAyADKgIAIQsgDSALkyELIAkgCpIhCSAAIAk4AgAgAyoCACEJIA0gCZIhCSAGIAk4AgAgBCoCACEJIAwgCZQhCSAEQQRqIQYgBioCACEKIAsgCpQhCiAJIAqTIQkgAiAJOAIAIAQqAgAhCSALIAmUIQkgBioCACEKIAwgCpQhCiAJIAqSIQkgAyAJOAIAIAQgBUECdGohAyAAQXhqIQYgBioCACEJIAJBeGohByAHKgIAIQogCSAKkyEMIABBdGohCCAIKgIAIQ0gAkF0aiEEIAQqAgAhCyANIAuTIQsgCSAKkiEJIAYgCTgCACAEKgIAIQkgDSAJkiEJIAggCTgCACADKgIAIQkgDCAJlCEJIANBBGohBiAGKgIAIQogCyAKlCEKIAkgCpMhCSAHIAk4AgAgAyoCACEJIAsgCZQhCSAGKgIAIQogDCAKlCEKIAkgCpIhCSAEIAk4AgAgAyAFQQJ0aiEDIABBcGohBiAGKgIAIQkgAkFwaiEHIAcqAgAhCiAJIAqTIQwgAEFsaiEIIAgqAgAhDSACQWxqIQQgBCoCACELIA0gC5MhCyAJIAqSIQkgBiAJOAIAIAQqAgAhCSANIAmSIQkgCCAJOAIAIAMqAgAhCSAMIAmUIQkgA0EEaiEGIAYqAgAhCiALIAqUIQogCSAKkyEJIAcgCTgCACADKgIAIQkgCyAJlCEJIAYqAgAhCiAMIAqUIQogCSAKkiEJIAQgCTgCACADIAVBAnRqIQMgAEFoaiEGIAYqAgAhCSACQWhqIQcgByoCACEKIAkgCpMhDCAAQWRqIQggCCoCACENIAJBZGohBCAEKgIAIQsgDSALkyELIAkgCpIhCSAGIAk4AgAgBCoCACEJIA0gCZIhCSAIIAk4AgAgAyoCACEJIAwgCZQhCSADQQRqIQYgBioCACEKIAsgCpQhCiAJIAqTIQkgByAJOAIAIAMqAgAhCSALIAmUIQkgBioCACEKIAwgCpQhCiAJIAqSIQkgBCAJOAIAIABBYGohACACQWBqIQIgAyAFQQJ0aiEEIAFBf2ohAyABQQFKBEAgAyEBDAELCwsL6QYCAn8OfSAEKgIAIQ8gBEEEaiEHIAcqAgAhECAEIAVBAnRqIQcgByoCACERIAVBAWohByAEIAdBAnRqIQcgByoCACESIAVBAXQhCCAEIAhBAnRqIQcgByoCACETIAhBAXIhByAEIAdBAnRqIQcgByoCACEUIAVBA2whByAEIAdBAnRqIQUgBSoCACEVIAdBAWohBSAEIAVBAnRqIQQgBCoCACEWIAEgAkECdGohASAAQQBKBEBBACAGayEGIAEgA0ECdGohAwNAIAEqAgAhCyADKgIAIQwgCyAMkyENIAFBfGohAiACKgIAIQogA0F8aiEEIAQqAgAhCSAKIAmTIQ4gCyAMkiEJIAEgCTgCACAEKgIAIQkgCiAJkiEJIAIgCTgCACAPIA2UIQogECAOlCEJIAogCZMhCSADIAk4AgAgDyAOlCEKIBAgDZQhCSAJIAqSIQkgBCAJOAIAIAFBeGohBSAFKgIAIQsgA0F4aiEEIAQqAgAhDCALIAyTIQ0gAUF0aiECIAIqAgAhCiADQXRqIQcgByoCACEJIAogCZMhDiALIAySIQkgBSAJOAIAIAcqAgAhCSAKIAmSIQkgAiAJOAIAIBEgDZQhCiASIA6UIQkgCiAJkyEJIAQgCTgCACARIA6UIQogEiANlCEJIAkgCpIhCSAHIAk4AgAgAUFwaiEFIAUqAgAhCyADQXBqIQQgBCoCACEMIAsgDJMhDSABQWxqIQIgAioCACEKIANBbGohByAHKgIAIQkgCiAJkyEOIAsgDJIhCSAFIAk4AgAgByoCACEJIAogCZIhCSACIAk4AgAgEyANlCEKIBQgDpQhCSAKIAmTIQkgBCAJOAIAIBMgDpQhCiAUIA2UIQkgCSAKkiEJIAcgCTgCACABQWhqIQUgBSoCACELIANBaGohBCAEKgIAIQwgCyAMkyENIAFBZGohAiACKgIAIQogA0FkaiEHIAcqAgAhCSAKIAmTIQ4gCyAMkiEJIAUgCTgCACAHKgIAIQkgCiAJkiEJIAIgCTgCACAVIA2UIQogFiAOlCEJIAogCZMhCSAEIAk4AgAgFSAOlCEKIBYgDZQhCSAJIAqSIQkgByAJOAIAIAEgBkECdGohASADIAZBAnRqIQMgAEF/aiECIABBAUoEQCACIQAMAQsLCwvWBAICfwd9IARBA3UhBCADIARBAnRqIQMgAyoCACENIAEgAkECdGohASAAQQR0IQBBACAAayEAIAEgAEECdGohBiAAQQBIBEAgASEAA0AgACoCACEHIABBYGohASABKgIAIQggByAIkyELIABBfGohAiACKgIAIQkgAEFcaiEDIAMqAgAhCiAJIAqTIQwgByAIkiEHIAAgBzgCACAJIAqSIQcgAiAHOAIAIAEgCzgCACADIAw4AgAgAEF4aiECIAIqAgAhByAAQVhqIQMgAyoCACEIIAcgCJMhCSAAQXRqIQQgBCoCACEKIABBVGohBSAFKgIAIQsgCiALkyEMIAcgCJIhByACIAc4AgAgCiALkiEHIAQgBzgCACAJIAySIQcgDSAHlCEHIAMgBzgCACAMIAmTIQcgDSAHlCEHIAUgBzgCACAAQVBqIQIgAioCACEHIABBcGohAyADKgIAIQggByAIkyELIABBbGohBCAEKgIAIQkgAEFMaiEFIAUqAgAhCiAJIAqTIQwgByAIkiEHIAMgBzgCACAJIAqSIQcgBCAHOAIAIAIgDDgCACAFIAs4AgAgAEFIaiECIAIqAgAhByAAQWhqIQMgAyoCACEIIAcgCJMhCSAAQWRqIQQgBCoCACEKIABBRGohBSAFKgIAIQsgCiALkyEMIAcgCJIhByADIAc4AgAgCiALkiEHIAQgBzgCACAJIAySIQcgDSAHlCEHIAIgBzgCACAJIAyTIQcgDSAHlCEHIAUgBzgCACAAEEcgARBHIABBQGohACAAIAZLDQALCwuXAgIEfwZ9IAAqAgAhBSAAQXBqIQEgASoCACEIIAUgCJMhBiAFIAiSIQUgAEF4aiECIAIqAgAhCCAAQWhqIQMgAyoCACEHIAggB5IhCSAIIAeTIQggBSAJkiEHIAAgBzgCACAFIAmTIQUgAiAFOAIAIABBdGohAiACKgIAIQUgAEFkaiEEIAQqAgAhByAFIAeTIQkgBiAJkiEKIAEgCjgCACAGIAmTIQYgAyAGOAIAIABBfGohASABKgIAIQYgAEFsaiEAIAAqAgAhCSAGIAmTIQogBiAJkiEGIAUgB5IhBSAFIAaSIQcgASAHOAIAIAYgBZMhBSACIAU4AgAgCiAIkyEFIAAgBTgCACAIIAqSIQUgBCAFOAIAC2IBAn8gAUEBdCEBIABB5ABqIQIgAigCACECIAEgAkYEQCAAQbgIaiEDBSAAQegAaiECIAIoAgAhAiABIAJGBEAgAEG8CGohAwVBvxZBxBNB6xdBwRYQBAsLIAMoAgAhACAACxQAIABBkhdBBhBkIQAgAEUhACAAC6oBAQN/IABB2ApqIQEgASgCACEDAn8CQCADQX9HDQAgAEHTCmohAwNAAkAgABAxIQJBACACRQ0DGiADLAAAIQIgAkEBcSECIAINACABKAIAIQIgAkF/Rg0BDAILCyAAQSAQFUEADAELIABB3ApqIQEgAUEANgIAIABB6ApqIQEgAUEANgIAIABB7ApqIQEgAUEANgIAIABB1ApqIQAgAEEAOgAAQQELIQAgAAtFAQJ/IABBFGohAiACKAIAIQMgAyABaiEBIAIgATYCACAAQRxqIQIgAigCACECIAEgAk8EQCAAQdQAaiEAIABBATYCAAsLagEEfwNAQQAhACACQRh0IQEDQCABQQF0IQMgAUEfdSEBIAFBt7uEJnEhASABIANzIQEgAEEBaiEAIABBCEcNAAsgAkECdEHQGWohACAAIAE2AgAgAkEBaiEAIABBgAJHBEAgACECDAELCwuTAQEDfyABQQNqIQEgAUF8cSEBIABBCGohAiACKAIAIQMgAyABaiEDIAIgAzYCACAAQcQAaiECIAIoAgAhAiACBEAgAEHMAGohAyADKAIAIQQgBCABaiEBIABB0ABqIQAgACgCACEAIAEgAEoEQEEAIQAFIAIgBGohACADIAE2AgALBSABBH8gARBeBUEACyEACyAAC0gBAX8gAEHEAGohAyADKAIAIQMgAwRAIAJBA2ohASABQXxxIQEgAEHQAGohACAAKAIAIQIgAiABaiEBIAAgATYCAAUgARBfCwvGBQELfyMGIQ0jBkGAAWokBiANIgdCADcDACAHQgA3AwggB0IANwMQIAdCADcDGCAHQgA3AyAgB0IANwMoIAdCADcDMCAHQgA3AzggB0FAa0IANwMAIAdCADcDSCAHQgA3A1AgB0IANwNYIAdCADcDYCAHQgA3A2ggB0IANwNwIAdCADcDeAJAIAJBAEoEQANAIAEgBmohBCAELAAAIQQgBEF/Rw0CIAZBAWohBiAGIAJIDQALCwsCQCAGIAJGBEAgAEGsEGohACAAKAIAIQAgAARAQZgXQcQTQZ0IQa8XEAQFQQEhCwsFIAEgBmohBCAELQAAIQUgBUH/AXEhBSAAQQAgBkEAIAUgAxBXIAQsAAAhBCAEBEAgBEH/AXEhCkEBIQQDQEEgIARrIQVBASAFdCEFIAcgBEECdGohCCAIIAU2AgAgBEEBaiEFIAQgCkkEQCAFIQQMAQsLCyAGQQFqIQogCiACSARAQQEhBQJAAkACQAJAA0AgASAKaiEJIAksAAAhBiAGQX9GBEAgBSEGBSAGQf8BcSEIIAZFDQggCCEEA0ACQCAHIARBAnRqIQYgBigCACEMIAwNACAEQX9qIQYgBEEBTA0KIAYhBAwBCwsgBEEgTw0CIAZBADYCACAMEDohDiAFQQFqIQYgACAOIAogBSAIIAMQVyAJLQAAIQggCEH/AXEhBSAEIAVHBEAgCEH/AXFBIE4NBCAEIAVIBEADQCAHIAVBAnRqIQggCCgCACEJIAkNB0EgIAVrIQlBASAJdCEJIAkgDGohCSAIIAk2AgAgBUF/aiEFIAUgBEoNAAsLCwsgCkEBaiEKIAogAkgEQCAGIQUMAQVBASELDAgLAAALAAtBwRdBxBNBtAhBrxcQBAwCC0HSF0HEE0G5CEGvFxAEDAELQe0XQcQTQbsIQa8XEAQLBUEBIQsLCwsgDSQGIAsLtQYBEH8gAEEXaiEKIAosAAAhBCAEBEAgAEGsEGohCCAIKAIAIQMgA0EASgRAIAAoAiAhBiAAQaQQaigCACEFQQAhBANAIAYgBEECdGohAyADKAIAIQMgAxA6IQMgBSAEQQJ0aiEHIAcgAzYCACAEQQFqIQQgCCgCACEDIAQgA0gNAAsLBSAAQQRqIQcgBygCACEEIARBAEoEQCAAQSBqIQsgAEGkEGohDEEAIQQDQCABIAZqIQUgBSwAACEFIAAgBRBYIQUgBQRAIAsoAgAhBSAFIAZBAnRqIQUgBSgCACEFIAUQOiENIAwoAgAhDiAEQQFqIQUgDiAEQQJ0aiEEIAQgDTYCACAFIQQLIAZBAWohBiAHKAIAIQUgBiAFSA0ACwVBACEECyAAQawQaiEGIAYoAgAhBSAEIAVGBEAgBiEIIAQhAwVB/xdBxBNB/ghBlhgQBAsLIABBpBBqIQUgBSgCACEEIAQgA0EEQQIQZiAFKAIAIQQgCCgCACEDIAQgA0ECdGohBCAEQX82AgAgCiwAACEDIANFIQQgAEEEaiEGIAYgCCAEGyEEIAQoAgAhCwJAIAtBAEoEQCAAQSBqIREgAEGoEGohDCAAQQhqIRJBACEEA0ACQCADQf8BcQR/IAIgBEECdGohAyADKAIABSAECyEDIAEgA2osAAAhDSAAIA0QWCEDIAMEQCARKAIAIQMgAyAEQQJ0aiEDIAMoAgAhAyADEDohDiAIKAIAIQMgBSgCACEPIANBAUoEQEEAIQYDQCADQQF2IQcgByAGaiEQIA8gEEECdGohCSAJKAIAIQkgCSAOSyEJIAMgB2shAyAGIBAgCRshBiAHIAMgCRshAyADQQFKDQALBUEAIQYLIA8gBkECdGohAyADKAIAIQMgAyAORw0BIAosAAAhAyADBEAgAiAEQQJ0aiEDIAMoAgAhAyAMKAIAIQcgByAGQQJ0aiEHIAcgAzYCACASKAIAIQMgAyAGaiEDIAMgDToAAAUgDCgCACEDIAMgBkECdGohAyADIAQ2AgALCyAEQQFqIQQgBCALTg0DIAosAAAhAwwBCwtBrRhBxBNBnAlBlhgQBAsLC7cCAQp/IABBJGohASABQX9BgBAQehogAEEXaiEBIAEsAAAhASABRSEEIABBrBBqIQEgAEEEaiECIAIgASAEGyEBIAEoAgAhASABQf//AUghAiABQf//ASACGyEGIAFBAEoEQCAAQQhqIQEgAEEgaiEHIABBpBBqIQggASgCACEJQQAhAgNAIAkgAmohBSAFLQAAIQEgAUH/AXFBC0gEQCAEBH8gBygCACEBIAEgAkECdGohASABKAIABSAIKAIAIQEgASACQQJ0aiEBIAEoAgAhASABEDoLIQEgAUGACEkEQCACQf//A3EhCgNAIABBJGogAUEBdGohAyADIAo7AQAgBS0AACEDIANB/wFxIQNBASADdCEDIAMgAWohASABQYAISQ0ACwsLIAJBAWohAiACIAZIDQALCwtcAwJ/AX0CfCAAQf///wBxIQIgAEEVdiEBIAFB/wdxIQEgAEEASCEAIAK4IQQgBJohBSAFIAQgABshBCAEtiEDIAO7IQQgAUHseWohACAEIAAQcSEEIAS2IQMgAwviAQMBfwJ9A3wgALIhAyADuyEFIAUQdiEFIAW2IQMgAbIhBCADIASVIQMgA7shBSAFEHUhBSAFnCEFIAWqIQIgArIhAyADQwAAgD+SIQMgA7shBiABtyEFIAYgBRB3IQYgBpwhBiAGqiEBIAEgAEwhASABIAJqIQEgAbIhAyADQwAAgD+SIQQgBLshBiAGIAUQdyEGIAC3IQcgBiAHZEUEQEHrGEHEE0G1CUGLGRAECyADuyEGIAYgBRB3IQUgBZwhBSAFqiECIAIgAEoEQEGaGUHEE0G2CUGLGRAEBSABDwtBAAs/AQF/IAAvAQAhACABLwEAIQEgAEH//wNxIAFB//8DcUghAiAAQf//A3EgAUH//wNxSiEAQX8gACACGyEAIAALigEBB38gAUEASgRAIAAgAUEBdGohCEGAgAQhCUF/IQoDQCAAIARBAXRqIQUgBS8BACEGIAYhBSAKIAVIBEAgCC8BACEHIAYgB0gEQCACIAQ2AgAgBSEKCwsgCSAFSgRAIAgvAQAhByAGIAdKBEAgAyAENgIAIAUhCQsLIARBAWohBCAEIAFHDQALCwumAgEHfyACQQF2IQMgAkF8cSEEIAJBA3UhCCADQQJ0IQMgACADEE0hBSAAQaAIaiABQQJ0aiEGIAYgBTYCACAAIAMQTSEHIABBqAhqIAFBAnRqIQUgBSAHNgIAIAAgBBBNIQQgAEGwCGogAUECdGohByAHIAQ2AgAgBigCACEGAn8CQCAGRQ0AIAUoAgAhBSAFRSEHIARFIQkgCSAHcg0AIAIgBiAFIAQQWiAAIAMQTSEDIABBuAhqIAFBAnRqIQQgBCADNgIAIANFBEAgAEEDEBVBAAwCCyACIAMQWyAIQQF0IQMgACADEE0hAyAAQcAIaiABQQJ0aiEBIAEgAzYCACADBH8gAiADEFxBAQUgAEEDEBVBAAsMAQsgAEEDEBVBAAshACAAC28BAn8gAEEXaiEGIAYsAAAhByAAKAIgIQYgBwR/IAYgA0ECdGohBiAGIAE2AgAgBEH/AXEhASAAQQhqIQAgACgCACEAIAAgA2ohACAAIAE6AAAgAiEBIAUgA0ECdGoFIAYgAkECdGoLIgAgATYCAAtZAQF/IABBF2ohACAALAAAIQIgAUH/AXFB/wFGIQAgAkUEQCABQf8BcUEKSiEBIAAgAXMhACAAQQFxIQAgAA8LIAAEQEHMGEHEE0HqCEHbGBAEBUEBDwtBAAsrAQF/IAAoAgAhACABKAIAIQEgACABSSECIAAgAUshAEF/IAAgAhshACAAC6YDAwZ/AX0DfCAAQQJ1IQggAEEDdSEJIABBA0oEQCAAtyENA0AgBkECdCEEIAS3IQsgC0QYLURU+yEJQKIhCyALIA2jIQwgDBBzIQsgC7YhCiABIAVBAnRqIQQgBCAKOAIAIAwQdCELIAu2IQogCowhCiAFQQFyIQcgASAHQQJ0aiEEIAQgCjgCACAHtyELIAtEGC1EVPshCUCiIQsgCyANoyELIAtEAAAAAAAA4D+iIQwgDBBzIQsgC7YhCiAKQwAAAD+UIQogAiAFQQJ0aiEEIAQgCjgCACAMEHQhCyALtiEKIApDAAAAP5QhCiACIAdBAnRqIQQgBCAKOAIAIAZBAWohBiAFQQJqIQUgBiAISA0ACyAAQQdKBEAgALchDEEAIQFBACEAA0AgAEEBciEFIAVBAXQhAiACtyELIAtEGC1EVPshCUCiIQsgCyAMoyENIA0QcyELIAu2IQogAyAAQQJ0aiECIAIgCjgCACANEHQhCyALtiEKIAqMIQogAyAFQQJ0aiECIAIgCjgCACABQQFqIQEgAEECaiEAIAEgCUgNAAsLCwunAQMCfwF9AnwgAEEBdSECIABBAUoEQCACtyEGQQAhAANAIAC3IQUgBUQAAAAAAADgP6AhBSAFIAajIQUgBUQAAAAAAADgP6IhBSAFRBgtRFT7IQlAoiEFIAUQdCEFIAW2IQQgBBBdIQQgBLshBSAFRBgtRFT7Ifk/oiEFIAUQdCEFIAW2IQQgASAAQQJ0aiEDIAMgBDgCACAAQQFqIQAgACACSA0ACwsLXwEEfyAAQQN1IQMgAEEHSgRAQSQgABAtayEEQQAhAANAIAAQOiECIAIgBHYhAiACQQJ0IQIgAkH//wNxIQIgASAAQQF0aiEFIAUgAjsBACAAQQFqIQAgACADSA0ACwsLDQEBfSAAIACUIQEgAQvyOgEXfwJAAkAjBiEOIwZBEGokBiAOIRcCfyAAQfUBSQR/QdAhKAIAIgdBECAAQQtqQXhxIABBC0kbIgJBA3YiAHYiA0EDcQRAIANBAXFBAXMgAGoiAUEDdEH4IWoiAkEIaiIEKAIAIgBBCGoiBigCACIDIAJGBEBB0CEgB0EBIAF0QX9zcTYCAAVB4CEoAgAgA0sEQBAGCyADQQxqIgUoAgAgAEYEQCAFIAI2AgAgBCADNgIABRAGCwsgACABQQN0IgNBA3I2AgQgACADakEEaiIAIAAoAgBBAXI2AgAgDiQGIAYPCyACQdghKAIAIg1LBH8gAwRAIAMgAHRBAiAAdCIAQQAgAGtycSIAQQAgAGtxQX9qIgNBDHZBEHEhACADIAB2IgNBBXZBCHEiASAAciADIAF2IgBBAnZBBHEiA3IgACADdiIAQQF2QQJxIgNyIAAgA3YiAEEBdkEBcSIDciAAIAN2aiIBQQN0QfghaiIFQQhqIgkoAgAiAEEIaiIKKAIAIgMgBUYEQEHQISAHQQEgAXRBf3NxIgQ2AgAFQeAhKAIAIANLBEAQBgsgA0EMaiILKAIAIABGBEAgCyAFNgIAIAkgAzYCACAHIQQFEAYLCyAAIAJBA3I2AgQgACACaiIHIAFBA3QiAyACayIFQQFyNgIEIAAgA2ogBTYCACANBEBB5CEoAgAhAiANQQN2IgNBA3RB+CFqIQAgBEEBIAN0IgNxBEBB4CEoAgAgAEEIaiIDKAIAIgFLBEAQBgUgASEGIAMhDAsFQdAhIAQgA3I2AgAgACEGIABBCGohDAsgDCACNgIAIAYgAjYCDCACIAY2AgggAiAANgIMC0HYISAFNgIAQeQhIAc2AgAgDiQGIAoPC0HUISgCACIMBH8gDEEAIAxrcUF/aiIDQQx2QRBxIQAgAyAAdiIDQQV2QQhxIgQgAHIgAyAEdiIAQQJ2QQRxIgNyIAAgA3YiAEEBdkECcSIDciAAIAN2IgBBAXZBAXEiA3IgACADdmpBAnRBgCRqKAIAIgQhAyAEKAIEQXhxIAJrIQoDQAJAIAMoAhAiAEUEQCADKAIUIgBFDQELIAAhAyAAIAQgACgCBEF4cSACayIAIApJIgYbIQQgACAKIAYbIQoMAQsLQeAhKAIAIg8gBEsEQBAGCyAEIAJqIgggBE0EQBAGCyAEKAIYIQsCQCAEKAIMIgAgBEYEQCAEQRRqIgMoAgAiAEUEQCAEQRBqIgMoAgAiAEUNAgsDQAJAIABBFGoiBigCACIJRQRAIABBEGoiBigCACIJRQ0BCyAGIQMgCSEADAELCyAPIANLBEAQBgUgA0EANgIAIAAhAQsFIA8gBCgCCCIDSwRAEAYLIANBDGoiBigCACAERwRAEAYLIABBCGoiCSgCACAERgRAIAYgADYCACAJIAM2AgAgACEBBRAGCwsLAkAgCwRAIAQgBCgCHCIAQQJ0QYAkaiIDKAIARgRAIAMgATYCACABRQRAQdQhIAxBASAAdEF/c3E2AgAMAwsFQeAhKAIAIAtLBEAQBgUgC0EQaiIAIAtBFGogACgCACAERhsgATYCACABRQ0DCwtB4CEoAgAiAyABSwRAEAYLIAEgCzYCGCAEKAIQIgAEQCADIABLBEAQBgUgASAANgIQIAAgATYCGAsLIAQoAhQiAARAQeAhKAIAIABLBEAQBgUgASAANgIUIAAgATYCGAsLCwsgCkEQSQRAIAQgCiACaiIAQQNyNgIEIAQgAGpBBGoiACAAKAIAQQFyNgIABSAEIAJBA3I2AgQgCCAKQQFyNgIEIAggCmogCjYCACANBEBB5CEoAgAhAiANQQN2IgNBA3RB+CFqIQBBASADdCIDIAdxBEBB4CEoAgAgAEEIaiIDKAIAIgFLBEAQBgUgASEFIAMhEAsFQdAhIAMgB3I2AgAgACEFIABBCGohEAsgECACNgIAIAUgAjYCDCACIAU2AgggAiAANgIMC0HYISAKNgIAQeQhIAg2AgALIA4kBiAEQQhqDwUgAgsFIAILBSAAQb9/SwR/QX8FIABBC2oiAEF4cSEEQdQhKAIAIgYEfyAAQQh2IgAEfyAEQf///wdLBH9BHwUgBEEOIAAgAEGA/j9qQRB2QQhxIgB0IgFBgOAfakEQdkEEcSICIAByIAEgAnQiAEGAgA9qQRB2QQJxIgFyayAAIAF0QQ92aiIAQQdqdkEBcSAAQQF0cgsFQQALIRJBACAEayECAkACQCASQQJ0QYAkaigCACIABEBBACEBIARBAEEZIBJBAXZrIBJBH0YbdCEMA0AgACgCBEF4cSAEayIQIAJJBEAgEAR/IBAhAiAABSAAIQFBACECDAQLIQELIAUgACgCFCIFIAVFIAUgAEEQaiAMQR92QQJ0aigCACIARnIbIQUgDEEBdCEMIAANAAsgASEABUEAIQALIAUgAHJFBEAgBEECIBJ0IgBBACAAa3IgBnEiAEUNBhogAEEAIABrcUF/aiIFQQx2QRBxIQFBACEAIAUgAXYiBUEFdkEIcSIMIAFyIAUgDHYiAUECdkEEcSIFciABIAV2IgFBAXZBAnEiBXIgASAFdiIBQQF2QQFxIgVyIAEgBXZqQQJ0QYAkaigCACEFCyAFBH8gACEBIAUhAAwBBSAACyEFDAELIAEhBSACIQEDQCAAKAIEIQwgACgCECICRQRAIAAoAhQhAgsgDEF4cSAEayIQIAFJIQwgECABIAwbIQEgACAFIAwbIQUgAgR/IAIhAAwBBSABCyECCwsgBQR/IAJB2CEoAgAgBGtJBH9B4CEoAgAiESAFSwRAEAYLIAUgBGoiCCAFTQRAEAYLIAUoAhghDwJAIAUoAgwiACAFRgRAIAVBFGoiASgCACIARQRAIAVBEGoiASgCACIARQ0CCwNAAkAgAEEUaiIJKAIAIgtFBEAgAEEQaiIJKAIAIgtFDQELIAkhASALIQAMAQsLIBEgAUsEQBAGBSABQQA2AgAgACEHCwUgESAFKAIIIgFLBEAQBgsgAUEMaiIJKAIAIAVHBEAQBgsgAEEIaiILKAIAIAVGBEAgCSAANgIAIAsgATYCACAAIQcFEAYLCwsCQCAPBEAgBSAFKAIcIgBBAnRBgCRqIgEoAgBGBEAgASAHNgIAIAdFBEBB1CEgBkEBIAB0QX9zcSIDNgIADAMLBUHgISgCACAPSwRAEAYFIA9BEGoiACAPQRRqIAAoAgAgBUYbIAc2AgAgB0UEQCAGIQMMBAsLC0HgISgCACIBIAdLBEAQBgsgByAPNgIYIAUoAhAiAARAIAEgAEsEQBAGBSAHIAA2AhAgACAHNgIYCwsgBSgCFCIABEBB4CEoAgAgAEsEQBAGBSAHIAA2AhQgACAHNgIYIAYhAwsFIAYhAwsFIAYhAwsLAkAgAkEQSQRAIAUgAiAEaiIAQQNyNgIEIAUgAGpBBGoiACAAKAIAQQFyNgIABSAFIARBA3I2AgQgCCACQQFyNgIEIAggAmogAjYCACACQQN2IQEgAkGAAkkEQCABQQN0QfghaiEAQdAhKAIAIgNBASABdCIBcQRAQeAhKAIAIABBCGoiAygCACIBSwRAEAYFIAEhDSADIRMLBUHQISADIAFyNgIAIAAhDSAAQQhqIRMLIBMgCDYCACANIAg2AgwgCCANNgIIIAggADYCDAwCCyACQQh2IgAEfyACQf///wdLBH9BHwUgAkEOIAAgAEGA/j9qQRB2QQhxIgB0IgFBgOAfakEQdkEEcSIEIAByIAEgBHQiAEGAgA9qQRB2QQJxIgFyayAAIAF0QQ92aiIAQQdqdkEBcSAAQQF0cgsFQQALIgFBAnRBgCRqIQAgCCABNgIcIAhBEGoiBEEANgIEIARBADYCACADQQEgAXQiBHFFBEBB1CEgAyAEcjYCACAAIAg2AgAgCCAANgIYIAggCDYCDCAIIAg2AggMAgsCQCAAKAIAIgAoAgRBeHEgAkYEQCAAIQoFIAJBAEEZIAFBAXZrIAFBH0YbdCEBA0AgAEEQaiABQR92QQJ0aiIEKAIAIgMEQCABQQF0IQEgAygCBEF4cSACRgRAIAMhCgwEBSADIQAMAgsACwtB4CEoAgAgBEsEQBAGBSAEIAg2AgAgCCAANgIYIAggCDYCDCAIIAg2AggMBAsLC0HgISgCACIDIApBCGoiASgCACIATSADIApNcQRAIAAgCDYCDCABIAg2AgAgCCAANgIIIAggCjYCDCAIQQA2AhgFEAYLCwsgDiQGIAVBCGoPBSAECwUgBAsFIAQLCwsLIQNB2CEoAgAiASADTwRAQeQhKAIAIQAgASADayICQQ9LBEBB5CEgACADaiIENgIAQdghIAI2AgAgBCACQQFyNgIEIAAgAWogAjYCACAAIANBA3I2AgQFQdghQQA2AgBB5CFBADYCACAAIAFBA3I2AgQgACABakEEaiIDIAMoAgBBAXI2AgALDAILQdwhKAIAIgEgA0sEQEHcISABIANrIgE2AgAMAQtBqCUoAgAEf0GwJSgCAAVBsCVBgCA2AgBBrCVBgCA2AgBBtCVBfzYCAEG4JUF/NgIAQbwlQQA2AgBBjCVBADYCAEGoJSAXQXBxQdiq1aoFczYCAEGAIAsiACADQS9qIgZqIgVBACAAayIHcSIEIANNBEAgDiQGQQAPC0GIJSgCACIABEBBgCUoAgAiAiAEaiIKIAJNIAogAEtyBEAgDiQGQQAPCwsgA0EwaiEKAkACQEGMJSgCAEEEcQRAQQAhAQUCQAJAAkBB6CEoAgAiAEUNAEGQJSECA0ACQCACKAIAIg0gAE0EQCANIAIoAgRqIABLDQELIAIoAggiAg0BDAILCyAFIAFrIAdxIgFB/////wdJBEAgARB7IgAgAigCACACKAIEakYEQCAAQX9HDQYFDAMLBUEAIQELDAILQQAQeyIAQX9GBH9BAAVBrCUoAgAiAUF/aiICIABqQQAgAWtxIABrQQAgAiAAcRsgBGoiAUGAJSgCACIFaiECIAEgA0sgAUH/////B0lxBH9BiCUoAgAiBwRAIAIgBU0gAiAHS3IEQEEAIQEMBQsLIAEQeyICIABGDQUgAiEADAIFQQALCyEBDAELIAogAUsgAUH/////B0kgAEF/R3FxRQRAIABBf0YEQEEAIQEMAgUMBAsACyAGIAFrQbAlKAIAIgJqQQAgAmtxIgJB/////wdPDQJBACABayEGIAIQe0F/RgR/IAYQexpBAAUgAiABaiEBDAMLIQELQYwlQYwlKAIAQQRyNgIACyAEQf////8HSQRAIAQQeyEAQQAQeyICIABrIgYgA0EoakshBCAGIAEgBBshASAAQX9GIARBAXNyIAAgAkkgAEF/RyACQX9HcXFBAXNyRQ0BCwwBC0GAJUGAJSgCACABaiICNgIAIAJBhCUoAgBLBEBBhCUgAjYCAAsCQEHoISgCACIGBEBBkCUhAgJAAkADQCAAIAIoAgAiBCACKAIEIgVqRg0BIAIoAggiAg0ACwwBCyACQQRqIQcgAigCDEEIcUUEQCAAIAZLIAQgBk1xBEAgByAFIAFqNgIAIAZBACAGQQhqIgBrQQdxQQAgAEEHcRsiAmohAEHcISgCACABaiIEIAJrIQFB6CEgADYCAEHcISABNgIAIAAgAUEBcjYCBCAGIARqQSg2AgRB7CFBuCUoAgA2AgAMBAsLCyAAQeAhKAIAIgJJBEBB4CEgADYCACAAIQILIAAgAWohBUGQJSEEAkACQANAIAQoAgAgBUYNASAEKAIIIgQNAAsMAQsgBCgCDEEIcUUEQCAEIAA2AgAgBEEEaiIEIAQoAgAgAWo2AgAgAEEAIABBCGoiAGtBB3FBACAAQQdxG2oiCCADaiEHIAVBACAFQQhqIgBrQQdxQQAgAEEHcRtqIgEgCGsgA2shBCAIIANBA3I2AgQCQCAGIAFGBEBB3CFB3CEoAgAgBGoiADYCAEHoISAHNgIAIAcgAEEBcjYCBAVB5CEoAgAgAUYEQEHYIUHYISgCACAEaiIANgIAQeQhIAc2AgAgByAAQQFyNgIEIAcgAGogADYCAAwCCyABKAIEIgBBA3FBAUYEfyAAQXhxIQ0gAEEDdiEFAkAgAEGAAkkEQCABKAIMIQMCQCABKAIIIgYgBUEDdEH4IWoiAEcEQCACIAZLBEAQBgsgBigCDCABRg0BEAYLCyADIAZGBEBB0CFB0CEoAgBBASAFdEF/c3E2AgAMAgsCQCADIABGBEAgA0EIaiEUBSACIANLBEAQBgsgA0EIaiIAKAIAIAFGBEAgACEUDAILEAYLCyAGIAM2AgwgFCAGNgIABSABKAIYIQoCQCABKAIMIgAgAUYEQCABQRBqIgNBBGoiBigCACIABEAgBiEDBSADKAIAIgBFDQILA0ACQCAAQRRqIgYoAgAiBUUEQCAAQRBqIgYoAgAiBUUNAQsgBiEDIAUhAAwBCwsgAiADSwRAEAYFIANBADYCACAAIQkLBSACIAEoAggiA0sEQBAGCyADQQxqIgIoAgAgAUcEQBAGCyAAQQhqIgYoAgAgAUYEQCACIAA2AgAgBiADNgIAIAAhCQUQBgsLCyAKRQ0BAkAgASgCHCIAQQJ0QYAkaiIDKAIAIAFGBEAgAyAJNgIAIAkNAUHUIUHUISgCAEEBIAB0QX9zcTYCAAwDBUHgISgCACAKSwRAEAYFIApBEGoiACAKQRRqIAAoAgAgAUYbIAk2AgAgCUUNBAsLC0HgISgCACIDIAlLBEAQBgsgCSAKNgIYIAFBEGoiAigCACIABEAgAyAASwRAEAYFIAkgADYCECAAIAk2AhgLCyACKAIEIgBFDQFB4CEoAgAgAEsEQBAGBSAJIAA2AhQgACAJNgIYCwsLIAEgDWohASANIARqBSAECyECIAFBBGoiACAAKAIAQX5xNgIAIAcgAkEBcjYCBCAHIAJqIAI2AgAgAkEDdiEDIAJBgAJJBEAgA0EDdEH4IWohAAJAQdAhKAIAIgFBASADdCIDcQRAQeAhKAIAIABBCGoiAygCACIBTQRAIAEhDyADIRUMAgsQBgVB0CEgASADcjYCACAAIQ8gAEEIaiEVCwsgFSAHNgIAIA8gBzYCDCAHIA82AgggByAANgIMDAILAn8gAkEIdiIABH9BHyACQf///wdLDQEaIAJBDiAAIABBgP4/akEQdkEIcSIAdCIDQYDgH2pBEHZBBHEiASAAciADIAF0IgBBgIAPakEQdkECcSIDcmsgACADdEEPdmoiAEEHanZBAXEgAEEBdHIFQQALCyIDQQJ0QYAkaiEAIAcgAzYCHCAHQRBqIgFBADYCBCABQQA2AgBB1CEoAgAiAUEBIAN0IgRxRQRAQdQhIAEgBHI2AgAgACAHNgIAIAcgADYCGCAHIAc2AgwgByAHNgIIDAILAkAgACgCACIAKAIEQXhxIAJGBEAgACELBSACQQBBGSADQQF2ayADQR9GG3QhAQNAIABBEGogAUEfdkECdGoiBCgCACIDBEAgAUEBdCEBIAMoAgRBeHEgAkYEQCADIQsMBAUgAyEADAILAAsLQeAhKAIAIARLBEAQBgUgBCAHNgIAIAcgADYCGCAHIAc2AgwgByAHNgIIDAQLCwtB4CEoAgAiAyALQQhqIgEoAgAiAE0gAyALTXEEQCAAIAc2AgwgASAHNgIAIAcgADYCCCAHIAs2AgwgB0EANgIYBRAGCwsLIA4kBiAIQQhqDwsLQZAlIQIDQAJAIAIoAgAiBCAGTQRAIAQgAigCBGoiBSAGSw0BCyACKAIIIQIMAQsLIAVBUWoiBEEIaiECIAYgBEEAIAJrQQdxQQAgAkEHcRtqIgIgAiAGQRBqIglJGyICQQhqIQRB6CEgAEEAIABBCGoiB2tBB3FBACAHQQdxGyIHaiIKNgIAQdwhIAFBWGoiCyAHayIHNgIAIAogB0EBcjYCBCAAIAtqQSg2AgRB7CFBuCUoAgA2AgAgAkEEaiIHQRs2AgAgBEGQJSkCADcCACAEQZglKQIANwIIQZAlIAA2AgBBlCUgATYCAEGcJUEANgIAQZglIAQ2AgAgAkEYaiEAA0AgAEEEaiIBQQc2AgAgAEEIaiAFSQRAIAEhAAwBCwsgAiAGRwRAIAcgBygCAEF+cTYCACAGIAIgBmsiBEEBcjYCBCACIAQ2AgAgBEEDdiEBIARBgAJJBEAgAUEDdEH4IWohAEHQISgCACICQQEgAXQiAXEEQEHgISgCACAAQQhqIgEoAgAiAksEQBAGBSACIREgASEWCwVB0CEgAiABcjYCACAAIREgAEEIaiEWCyAWIAY2AgAgESAGNgIMIAYgETYCCCAGIAA2AgwMAwsgBEEIdiIABH8gBEH///8HSwR/QR8FIARBDiAAIABBgP4/akEQdkEIcSIAdCIBQYDgH2pBEHZBBHEiAiAAciABIAJ0IgBBgIAPakEQdkECcSIBcmsgACABdEEPdmoiAEEHanZBAXEgAEEBdHILBUEACyIBQQJ0QYAkaiEAIAYgATYCHCAGQQA2AhQgCUEANgIAQdQhKAIAIgJBASABdCIFcUUEQEHUISACIAVyNgIAIAAgBjYCACAGIAA2AhggBiAGNgIMIAYgBjYCCAwDCwJAIAAoAgAiACgCBEF4cSAERgRAIAAhCAUgBEEAQRkgAUEBdmsgAUEfRht0IQIDQCAAQRBqIAJBH3ZBAnRqIgUoAgAiAQRAIAJBAXQhAiABKAIEQXhxIARGBEAgASEIDAQFIAEhAAwCCwALC0HgISgCACAFSwRAEAYFIAUgBjYCACAGIAA2AhggBiAGNgIMIAYgBjYCCAwFCwsLQeAhKAIAIgEgCEEIaiICKAIAIgBNIAEgCE1xBEAgACAGNgIMIAIgBjYCACAGIAA2AgggBiAINgIMIAZBADYCGAUQBgsLBUHgISgCACICRSAAIAJJcgRAQeAhIAA2AgALQZAlIAA2AgBBlCUgATYCAEGcJUEANgIAQfQhQaglKAIANgIAQfAhQX82AgBBhCJB+CE2AgBBgCJB+CE2AgBBjCJBgCI2AgBBiCJBgCI2AgBBlCJBiCI2AgBBkCJBiCI2AgBBnCJBkCI2AgBBmCJBkCI2AgBBpCJBmCI2AgBBoCJBmCI2AgBBrCJBoCI2AgBBqCJBoCI2AgBBtCJBqCI2AgBBsCJBqCI2AgBBvCJBsCI2AgBBuCJBsCI2AgBBxCJBuCI2AgBBwCJBuCI2AgBBzCJBwCI2AgBByCJBwCI2AgBB1CJByCI2AgBB0CJByCI2AgBB3CJB0CI2AgBB2CJB0CI2AgBB5CJB2CI2AgBB4CJB2CI2AgBB7CJB4CI2AgBB6CJB4CI2AgBB9CJB6CI2AgBB8CJB6CI2AgBB/CJB8CI2AgBB+CJB8CI2AgBBhCNB+CI2AgBBgCNB+CI2AgBBjCNBgCM2AgBBiCNBgCM2AgBBlCNBiCM2AgBBkCNBiCM2AgBBnCNBkCM2AgBBmCNBkCM2AgBBpCNBmCM2AgBBoCNBmCM2AgBBrCNBoCM2AgBBqCNBoCM2AgBBtCNBqCM2AgBBsCNBqCM2AgBBvCNBsCM2AgBBuCNBsCM2AgBBxCNBuCM2AgBBwCNBuCM2AgBBzCNBwCM2AgBByCNBwCM2AgBB1CNByCM2AgBB0CNByCM2AgBB3CNB0CM2AgBB2CNB0CM2AgBB5CNB2CM2AgBB4CNB2CM2AgBB7CNB4CM2AgBB6CNB4CM2AgBB9CNB6CM2AgBB8CNB6CM2AgBB/CNB8CM2AgBB+CNB8CM2AgBB6CEgAEEAIABBCGoiAmtBB3FBACACQQdxGyICaiIENgIAQdwhIAFBWGoiASACayICNgIAIAQgAkEBcjYCBCAAIAFqQSg2AgRB7CFBuCUoAgA2AgALC0HcISgCACIAIANLBEBB3CEgACADayIBNgIADAILCxBjQQw2AgAgDiQGQQAPC0HoIUHoISgCACIAIANqIgI2AgAgAiABQQFyNgIEIAAgA0EDcjYCBAsgDiQGIABBCGoLrRIBEX8gAEUEQA8LIABBeGoiBEHgISgCACIMSQRAEAYLIABBfGooAgAiAEEDcSILQQFGBEAQBgsgBCAAQXhxIgJqIQcCQCAAQQFxBEAgAiEBIAQiAyEFBSAEKAIAIQkgC0UEQA8LIAQgCWsiACAMSQRAEAYLIAkgAmohBEHkISgCACAARgRAIAdBBGoiASgCACIDQQNxQQNHBEAgACEDIAQhASAAIQUMAwtB2CEgBDYCACABIANBfnE2AgAgACAEQQFyNgIEIAAgBGogBDYCAA8LIAlBA3YhAiAJQYACSQRAIAAoAgwhAyAAKAIIIgUgAkEDdEH4IWoiAUcEQCAMIAVLBEAQBgsgBSgCDCAARwRAEAYLCyADIAVGBEBB0CFB0CEoAgBBASACdEF/c3E2AgAgACEDIAQhASAAIQUMAwsgAyABRgRAIANBCGohBgUgDCADSwRAEAYLIANBCGoiASgCACAARgRAIAEhBgUQBgsLIAUgAzYCDCAGIAU2AgAgACEDIAQhASAAIQUMAgsgACgCGCENAkAgACgCDCICIABGBEAgAEEQaiIGQQRqIgkoAgAiAgRAIAkhBgUgBigCACICRQ0CCwNAAkAgAkEUaiIJKAIAIgtFBEAgAkEQaiIJKAIAIgtFDQELIAkhBiALIQIMAQsLIAwgBksEQBAGBSAGQQA2AgAgAiEICwUgDCAAKAIIIgZLBEAQBgsgBkEMaiIJKAIAIABHBEAQBgsgAkEIaiILKAIAIABGBEAgCSACNgIAIAsgBjYCACACIQgFEAYLCwsgDQRAIAAoAhwiAkECdEGAJGoiBigCACAARgRAIAYgCDYCACAIRQRAQdQhQdQhKAIAQQEgAnRBf3NxNgIAIAAhAyAEIQEgACEFDAQLBUHgISgCACANSwRAEAYFIA1BEGoiAiANQRRqIAIoAgAgAEYbIAg2AgAgCEUEQCAAIQMgBCEBIAAhBQwFCwsLQeAhKAIAIgYgCEsEQBAGCyAIIA02AhggAEEQaiIJKAIAIgIEQCAGIAJLBEAQBgUgCCACNgIQIAIgCDYCGAsLIAkoAgQiAgRAQeAhKAIAIAJLBEAQBgUgCCACNgIUIAIgCDYCGCAAIQMgBCEBIAAhBQsFIAAhAyAEIQEgACEFCwUgACEDIAQhASAAIQULCwsgBSAHTwRAEAYLIAdBBGoiBCgCACIAQQFxRQRAEAYLIABBAnEEfyAEIABBfnE2AgAgAyABQQFyNgIEIAUgAWogATYCACABBUHoISgCACAHRgRAQdwhQdwhKAIAIAFqIgA2AgBB6CEgAzYCACADIABBAXI2AgQgA0HkISgCAEcEQA8LQeQhQQA2AgBB2CFBADYCAA8LQeQhKAIAIAdGBEBB2CFB2CEoAgAgAWoiADYCAEHkISAFNgIAIAMgAEEBcjYCBCAFIABqIAA2AgAPCyAAQXhxIAFqIQQgAEEDdiEGAkAgAEGAAkkEQCAHKAIMIQEgBygCCCICIAZBA3RB+CFqIgBHBEBB4CEoAgAgAksEQBAGCyACKAIMIAdHBEAQBgsLIAEgAkYEQEHQIUHQISgCAEEBIAZ0QX9zcTYCAAwCCyABIABGBEAgAUEIaiEQBUHgISgCACABSwRAEAYLIAFBCGoiACgCACAHRgRAIAAhEAUQBgsLIAIgATYCDCAQIAI2AgAFIAcoAhghCAJAIAcoAgwiACAHRgRAIAdBEGoiAUEEaiICKAIAIgAEQCACIQEFIAEoAgAiAEUNAgsDQAJAIABBFGoiAigCACIGRQRAIABBEGoiAigCACIGRQ0BCyACIQEgBiEADAELC0HgISgCACABSwRAEAYFIAFBADYCACAAIQoLBUHgISgCACAHKAIIIgFLBEAQBgsgAUEMaiICKAIAIAdHBEAQBgsgAEEIaiIGKAIAIAdGBEAgAiAANgIAIAYgATYCACAAIQoFEAYLCwsgCARAIAcoAhwiAEECdEGAJGoiASgCACAHRgRAIAEgCjYCACAKRQRAQdQhQdQhKAIAQQEgAHRBf3NxNgIADAQLBUHgISgCACAISwRAEAYFIAhBEGoiACAIQRRqIAAoAgAgB0YbIAo2AgAgCkUNBAsLQeAhKAIAIgEgCksEQBAGCyAKIAg2AhggB0EQaiICKAIAIgAEQCABIABLBEAQBgUgCiAANgIQIAAgCjYCGAsLIAIoAgQiAARAQeAhKAIAIABLBEAQBgUgCiAANgIUIAAgCjYCGAsLCwsLIAMgBEEBcjYCBCAFIARqIAQ2AgAgA0HkISgCAEYEf0HYISAENgIADwUgBAsLIgVBA3YhASAFQYACSQRAIAFBA3RB+CFqIQBB0CEoAgAiBUEBIAF0IgFxBEBB4CEoAgAgAEEIaiIBKAIAIgVLBEAQBgUgBSEPIAEhEQsFQdAhIAUgAXI2AgAgACEPIABBCGohEQsgESADNgIAIA8gAzYCDCADIA82AgggAyAANgIMDwsgBUEIdiIABH8gBUH///8HSwR/QR8FIAVBDiAAIABBgP4/akEQdkEIcSIAdCIBQYDgH2pBEHZBBHEiBCAAciABIAR0IgBBgIAPakEQdkECcSIBcmsgACABdEEPdmoiAEEHanZBAXEgAEEBdHILBUEACyIBQQJ0QYAkaiEAIAMgATYCHCADQQA2AhQgA0EANgIQAkBB1CEoAgAiBEEBIAF0IgJxBEACQCAAKAIAIgAoAgRBeHEgBUYEQCAAIQ4FIAVBAEEZIAFBAXZrIAFBH0YbdCEEA0AgAEEQaiAEQR92QQJ0aiICKAIAIgEEQCAEQQF0IQQgASgCBEF4cSAFRgRAIAEhDgwEBSABIQAMAgsACwtB4CEoAgAgAksEQBAGBSACIAM2AgAgAyAANgIYIAMgAzYCDCADIAM2AggMBAsLC0HgISgCACIBIA5BCGoiBSgCACIATSABIA5NcQRAIAAgAzYCDCAFIAM2AgAgAyAANgIIIAMgDjYCDCADQQA2AhgFEAYLBUHUISAEIAJyNgIAIAAgAzYCACADIAA2AhggAyADNgIMIAMgAzYCCAsLQfAhQfAhKAIAQX9qIgA2AgAgAARADwtBmCUhAANAIAAoAgAiAUEIaiEAIAENAAtB8CFBfzYCAAuAAQECfyAARQRAIAEQXg8LIAFBv39LBEAQY0EMNgIAQQAPCyAAQXhqQRAgAUELakF4cSABQQtJGxBhIgIEQCACQQhqDwsgARBeIgJFBEBBAA8LIAIgACAAQXxqKAIAIgNBeHFBBEEIIANBA3EbayIDIAEgAyABSRsQeRogABBfIAILmAkBDH8CQCAAIABBBGoiCigCACIIQXhxIgJqIQUgCEEDcSIJQQFHQeAhKAIAIgsgAE1xIAUgAEtxRQRAEAYLIAVBBGoiBygCACIEQQFxRQRAEAYLIAlFBEAgAUGAAkkNASACIAFBBGpPBEAgAiABa0GwJSgCAEEBdE0EQCAADwsLDAELIAIgAU8EQCACIAFrIgNBD00EQCAADwsgCiAIQQFxIAFyQQJyNgIAIAAgAWoiASADQQNyNgIEIAcgBygCAEEBcjYCACABIAMQYiAADwtB6CEoAgAgBUYEQEHcISgCACACaiIDIAFNDQEgCiAIQQFxIAFyQQJyNgIAIAAgAWoiAiADIAFrIgFBAXI2AgRB6CEgAjYCAEHcISABNgIAIAAPC0HkISgCACAFRgRAQdghKAIAIAJqIgIgAUkNASACIAFrIgNBD0sEQCAKIAhBAXEgAXJBAnI2AgAgACABaiIBIANBAXI2AgQgACACaiICIAM2AgAgAkEEaiICIAIoAgBBfnE2AgAFIAogCEEBcSACckECcjYCACAAIAJqQQRqIgEgASgCAEEBcjYCAEEAIQFBACEDC0HYISADNgIAQeQhIAE2AgAgAA8LIARBAnENACAEQXhxIAJqIgwgAUkNACAMIAFrIQ0gBEEDdiECAkAgBEGAAkkEQCAFKAIMIQYgBSgCCCIEIAJBA3RB+CFqIgdHBEAgCyAESwRAEAYLIAQoAgwgBUcEQBAGCwsgBiAERgRAQdAhQdAhKAIAQQEgAnRBf3NxNgIADAILIAYgB0YEQCAGQQhqIQMFIAsgBksEQBAGCyAGQQhqIgIoAgAgBUYEQCACIQMFEAYLCyAEIAY2AgwgAyAENgIABSAFKAIYIQkCQCAFKAIMIgMgBUYEQCAFQRBqIgJBBGoiBCgCACIDBEAgBCECBSACKAIAIgNFDQILA0ACQCADQRRqIgQoAgAiB0UEQCADQRBqIgQoAgAiB0UNAQsgBCECIAchAwwBCwsgCyACSwRAEAYFIAJBADYCACADIQYLBSALIAUoAggiAksEQBAGCyACQQxqIgQoAgAgBUcEQBAGCyADQQhqIgcoAgAgBUYEQCAEIAM2AgAgByACNgIAIAMhBgUQBgsLCyAJBEAgBSgCHCIDQQJ0QYAkaiICKAIAIAVGBEAgAiAGNgIAIAZFBEBB1CFB1CEoAgBBASADdEF/c3E2AgAMBAsFQeAhKAIAIAlLBEAQBgUgCUEQaiIDIAlBFGogAygCACAFRhsgBjYCACAGRQ0ECwtB4CEoAgAiAiAGSwRAEAYLIAYgCTYCGCAFQRBqIgQoAgAiAwRAIAIgA0sEQBAGBSAGIAM2AhAgAyAGNgIYCwsgBCgCBCIDBEBB4CEoAgAgA0sEQBAGBSAGIAM2AhQgAyAGNgIYCwsLCwsgDUEQSQRAIAogCEEBcSAMckECcjYCACAAIAxqQQRqIgEgASgCAEEBcjYCAAUgCiAIQQFxIAFyQQJyNgIAIAAgAWoiASANQQNyNgIEIAAgDGpBBGoiAyADKAIAQQFyNgIAIAEgDRBiCyAADwtBAAvxEAEOfwJAIAAgAWohBgJAIAAoAgQiB0EBcQRAIAAhAiABIQQFIAAoAgAhBSAHQQNxRQRADwsgACAFayIAQeAhKAIAIgxJBEAQBgsgBSABaiEBQeQhKAIAIABGBEAgBkEEaiIEKAIAIgJBA3FBA0cEQCAAIQIgASEEDAMLQdghIAE2AgAgBCACQX5xNgIAIAAgAUEBcjYCBCAGIAE2AgAPCyAFQQN2IQcgBUGAAkkEQCAAKAIMIQIgACgCCCIFIAdBA3RB+CFqIgRHBEAgDCAFSwRAEAYLIAUoAgwgAEcEQBAGCwsgAiAFRgRAQdAhQdAhKAIAQQEgB3RBf3NxNgIAIAAhAiABIQQMAwsgAiAERgRAIAJBCGohAwUgDCACSwRAEAYLIAJBCGoiBCgCACAARgRAIAQhAwUQBgsLIAUgAjYCDCADIAU2AgAgACECIAEhBAwCCyAAKAIYIQoCQCAAKAIMIgMgAEYEQCAAQRBqIgVBBGoiBygCACIDBEAgByEFBSAFKAIAIgNFDQILA0ACQCADQRRqIgcoAgAiC0UEQCADQRBqIgcoAgAiC0UNAQsgByEFIAshAwwBCwsgDCAFSwRAEAYFIAVBADYCACADIQgLBSAMIAAoAggiBUsEQBAGCyAFQQxqIgcoAgAgAEcEQBAGCyADQQhqIgsoAgAgAEYEQCAHIAM2AgAgCyAFNgIAIAMhCAUQBgsLCyAKBEAgACgCHCIDQQJ0QYAkaiIFKAIAIABGBEAgBSAINgIAIAhFBEBB1CFB1CEoAgBBASADdEF/c3E2AgAgACECIAEhBAwECwVB4CEoAgAgCksEQBAGBSAKQRBqIgMgCkEUaiADKAIAIABGGyAINgIAIAhFBEAgACECIAEhBAwFCwsLQeAhKAIAIgUgCEsEQBAGCyAIIAo2AhggAEEQaiIHKAIAIgMEQCAFIANLBEAQBgUgCCADNgIQIAMgCDYCGAsLIAcoAgQiAwRAQeAhKAIAIANLBEAQBgUgCCADNgIUIAMgCDYCGCAAIQIgASEECwUgACECIAEhBAsFIAAhAiABIQQLCwsgBkHgISgCACIHSQRAEAYLIAZBBGoiASgCACIAQQJxBEAgASAAQX5xNgIAIAIgBEEBcjYCBCACIARqIAQ2AgAFQeghKAIAIAZGBEBB3CFB3CEoAgAgBGoiADYCAEHoISACNgIAIAIgAEEBcjYCBCACQeQhKAIARwRADwtB5CFBADYCAEHYIUEANgIADwtB5CEoAgAgBkYEQEHYIUHYISgCACAEaiIANgIAQeQhIAI2AgAgAiAAQQFyNgIEIAIgAGogADYCAA8LIABBeHEgBGohBCAAQQN2IQUCQCAAQYACSQRAIAYoAgwhASAGKAIIIgMgBUEDdEH4IWoiAEcEQCAHIANLBEAQBgsgAygCDCAGRwRAEAYLCyABIANGBEBB0CFB0CEoAgBBASAFdEF/c3E2AgAMAgsgASAARgRAIAFBCGohDgUgByABSwRAEAYLIAFBCGoiACgCACAGRgRAIAAhDgUQBgsLIAMgATYCDCAOIAM2AgAFIAYoAhghCAJAIAYoAgwiACAGRgRAIAZBEGoiAUEEaiIDKAIAIgAEQCADIQEFIAEoAgAiAEUNAgsDQAJAIABBFGoiAygCACIFRQRAIABBEGoiAygCACIFRQ0BCyADIQEgBSEADAELCyAHIAFLBEAQBgUgAUEANgIAIAAhCQsFIAcgBigCCCIBSwRAEAYLIAFBDGoiAygCACAGRwRAEAYLIABBCGoiBSgCACAGRgRAIAMgADYCACAFIAE2AgAgACEJBRAGCwsLIAgEQCAGKAIcIgBBAnRBgCRqIgEoAgAgBkYEQCABIAk2AgAgCUUEQEHUIUHUISgCAEEBIAB0QX9zcTYCAAwECwVB4CEoAgAgCEsEQBAGBSAIQRBqIgAgCEEUaiAAKAIAIAZGGyAJNgIAIAlFDQQLC0HgISgCACIBIAlLBEAQBgsgCSAINgIYIAZBEGoiAygCACIABEAgASAASwRAEAYFIAkgADYCECAAIAk2AhgLCyADKAIEIgAEQEHgISgCACAASwRAEAYFIAkgADYCFCAAIAk2AhgLCwsLCyACIARBAXI2AgQgAiAEaiAENgIAIAJB5CEoAgBGBEBB2CEgBDYCAA8LCyAEQQN2IQEgBEGAAkkEQCABQQN0QfghaiEAQdAhKAIAIgRBASABdCIBcQRAQeAhKAIAIABBCGoiASgCACIESwRAEAYFIAQhDSABIQ8LBUHQISAEIAFyNgIAIAAhDSAAQQhqIQ8LIA8gAjYCACANIAI2AgwgAiANNgIIIAIgADYCDA8LIARBCHYiAAR/IARB////B0sEf0EfBSAEQQ4gACAAQYD+P2pBEHZBCHEiAHQiAUGA4B9qQRB2QQRxIgMgAHIgASADdCIAQYCAD2pBEHZBAnEiAXJrIAAgAXRBD3ZqIgBBB2p2QQFxIABBAXRyCwVBAAsiAUECdEGAJGohACACIAE2AhwgAkEANgIUIAJBADYCEEHUISgCACIDQQEgAXQiBXFFBEBB1CEgAyAFcjYCACAAIAI2AgAMAQsCQCAAKAIAIgAoAgRBeHEgBEYEfyAABSAEQQBBGSABQQF2ayABQR9GG3QhAwNAIABBEGogA0EfdkECdGoiBSgCACIBBEAgA0EBdCEDIAEoAgRBeHEgBEYNAyABIQAMAQsLQeAhKAIAIAVLBEAQBgsgBSACNgIADAILIQELQeAhKAIAIgQgAUEIaiIDKAIAIgBNIAQgAU1xRQRAEAYLIAAgAjYCDCADIAI2AgAgAiAANgIIIAIgATYCDCACQQA2AhgPCyACIAA2AhggAiACNgIMIAIgAjYCCAsFAEHAJQtQAQJ/An8gAgR/A0AgACwAACIDIAEsAAAiBEYEQCAAQQFqIQAgAUEBaiEBQQAgAkF/aiICRQ0DGgwBCwsgA0H/AXEgBEH/AXFrBUEACwsiAAupAQECfyABQf8HSgRAIABEAAAAAAAA4H+iIgBEAAAAAAAA4H+iIAAgAUH+D0oiAhshACABQYJwaiIDQf8HIANB/wdIGyABQYF4aiACGyEBBSABQYJ4SARAIABEAAAAAAAAEACiIgBEAAAAAAAAEACiIAAgAUGEcEgiAhshACABQfwPaiIDQYJ4IANBgnhKGyABQf4HaiACGyEBCwsgACABQf8Haq1CNIa/oguaBAEIfyMGIQojBkHQAWokBiAKIgdBwAFqIgRCATcDAAJAIAIgAWwiCwRAQQAgAmshCSAHIAI2AgQgByACNgIAQQIhBiACIQUgAiEBA0AgByAGQQJ0aiAFIAJqIAFqIgg2AgAgBkEBaiEGIAggC0kEQCABIQUgCCEBDAELCyAAIAtqIAlqIgYgAEsEQCAGIQhBASEBQQEhBQNAIAVBA3FBA0YEfyAAIAIgAyABIAcQZyAEQQIQaCABQQJqBSAHIAFBf2oiBUECdGooAgAgCCAAa0kEQCAAIAIgAyABIAcQZwUgACACIAMgBCABQQAgBxBpCyABQQFGBH8gBEEBEGpBAAUgBCAFEGpBAQsLIQEgBCAEKAIAQQFyIgU2AgAgACACaiIAIAZJDQALIAEhBgVBASEGQQEhBQsgACACIAMgBCAGQQAgBxBpIARBBGohCCAAIQEgBiEAA0ACfwJAIABBAUYgBUEBRnEEfyAIKAIARQ0FDAEFIABBAkgNASAEQQIQaiAEIAQoAgBBB3M2AgAgBEEBEGggASAHIABBfmoiBUECdGooAgBrIAlqIAIgAyAEIABBf2pBASAHEGkgBEEBEGogBCAEKAIAQQFyIgY2AgAgASAJaiIBIAIgAyAEIAVBASAHEGkgBSEAIAYLDAELIAQgBBBrIgUQaCABIAlqIQEgBSAAaiEAIAQoAgALIQUMAAALAAsLIAokBgvgAQEIfyMGIQojBkHwAWokBiAKIgggADYCAAJAIANBAUoEQEEAIAFrIQwgACEGIAMhCUEBIQMgACEFA0AgBSAGIAxqIgcgBCAJQX5qIgZBAnRqKAIAayIAIAJBA3ERAABBf0oEQCAFIAcgAkEDcREAAEF/Sg0DCyAAIAcgAkEDcREAAEF/SiEFIAggA0ECdGohCyADQQFqIQMgBQR/IAsgADYCACAJQX9qBSALIAc2AgAgByEAIAYLIglBAUoEQCAAIQYgCCgCACEFDAELCwVBASEDCwsgASAIIAMQbSAKJAYLWQEDfyAAQQRqIQIgACABQR9LBH8gACACKAIAIgM2AgAgAkEANgIAIAFBYGohAUEABSAAKAIAIQMgAigCAAsiBEEgIAFrdCADIAF2cjYCACACIAQgAXY2AgALjQMBB38jBiEKIwZB8AFqJAYgCkHoAWoiCSADKAIAIgc2AgAgCUEEaiIMIAMoAgQiAzYCACAKIgsgADYCAAJAAkAgB0EBRyADcgRAQQAgAWshDSAAIAYgBEECdGooAgBrIgggACACQQNxEQAAQQFIBEBBASEDBUEBIQcgBUUhBSAAIQMgCCEAA0AgBSAEQQFKcQRAIAYgBEF+akECdGooAgAhBSADIA1qIgggACACQQNxEQAAQX9KBEAgByEFDAULIAggBWsgACACQQNxEQAAQX9KBEAgByEFDAULCyAHQQFqIQUgCyAHQQJ0aiAANgIAIAkgCRBrIgMQaCADIARqIQQgCSgCAEEBRyAMKAIAQQBHckUEQCAAIQMMBAsgACAGIARBAnRqKAIAayIIIAsoAgAgAkEDcREAAEEBSAR/IAUhA0EABSAAIQMgBSEHQQEhBSAIIQAMAQshBQsLBUEBIQMLIAVFBEAgAyEFIAAhAwwBCwwBCyABIAsgBRBtIAMgASACIAQgBhBnCyAKJAYLVwEDfyAAQQRqIgIgAUEfSwR/IAIgACgCACIDNgIAIABBADYCACABQWBqIQFBAAUgAigCACEDIAAoAgALIgRBICABa3YgAyABdHI2AgAgACAEIAF0NgIACycBAX8gACgCAEF/ahBsIgEEfyABBSAAKAIEEGwiAEEgakEAIAAbCws5AQJ/IAAEQCAAQQFxRQRAA0AgAUEBaiEBIABBAXYhAiAAQQJxRQRAIAIhAAwBCwsLBUEgIQELIAELpAEBBX8jBiEFIwZBgAJqJAYgBSEDAkAgAkECTgRAIAEgAkECdGoiByADNgIAIAAEQANAIAMgASgCACAAQYACIABBgAJJGyIEEHkaQQAhAwNAIAEgA0ECdGoiBigCACABIANBAWoiA0ECdGooAgAgBBB5GiAGIAYoAgAgBGo2AgAgAyACRw0ACyAAIARrIgBFDQMgBygCACEDDAAACwALCwsgBSQGC/4IAwd/AX4EfCMGIQcjBkEwaiQGIAdBEGohBCAHIQUgAL0iCUI/iKchBgJ/AkAgCUIgiKciAkH/////B3EiA0H71L2ABEkEfyACQf//P3FB+8MkRg0BIAZBAEchAiADQf2yi4AESQR/IAIEfyABIABEAABAVPsh+T+gIgBEMWNiGmG00D2gIgo5AwAgASAAIAqhRDFjYhphtNA9oDkDCEF/BSABIABEAABAVPsh+b+gIgBEMWNiGmG00L2gIgo5AwAgASAAIAqhRDFjYhphtNC9oDkDCEEBCwUgAgR/IAEgAEQAAEBU+yEJQKAiAEQxY2IaYbTgPaAiCjkDACABIAAgCqFEMWNiGmG04D2gOQMIQX4FIAEgAEQAAEBU+yEJwKAiAEQxY2IaYbTgvaAiCjkDACABIAAgCqFEMWNiGmG04L2gOQMIQQILCwUgA0G8jPGABEkEQCADQb3714AESQRAIANB/LLLgARGDQMgBgRAIAEgAEQAADB/fNkSQKAiAETKlJOnkQ7pPaAiCjkDACABIAAgCqFEypSTp5EO6T2gOQMIQX0MBQUgASAARAAAMH982RLAoCIARMqUk6eRDum9oCIKOQMAIAEgACAKoUTKlJOnkQ7pvaA5AwhBAwwFCwAFIANB+8PkgARGDQMgBgRAIAEgAEQAAEBU+yEZQKAiAEQxY2IaYbTwPaAiCjkDACABIAAgCqFEMWNiGmG08D2gOQMIQXwMBQUgASAARAAAQFT7IRnAoCIARDFjYhphtPC9oCIKOQMAIAEgACAKoUQxY2IaYbTwvaA5AwhBBAwFCwALAAsgA0H7w+SJBEkNASADQf//v/8HSwRAIAEgACAAoSIAOQMIIAEgADkDAEEADAMLIAlC/////////weDQoCAgICAgICwwQCEvyEAQQAhAgNAIAQgAkEDdGogAKq3Igo5AwAgACAKoUQAAAAAAABwQaIhACACQQFqIgJBAkcNAAsgBCAAOQMQIABEAAAAAAAAAABhBEBBASECA0AgAkF/aiEIIAQgAkEDdGorAwBEAAAAAAAAAABhBEAgCCECDAELCwVBAiECCyAEIAUgA0EUdkHqd2ogAkEBakEBEG8hAiAFKwMAIQAgBgR/IAEgAJo5AwAgASAFKwMImjkDCEEAIAJrBSABIAA5AwAgASAFKwMIOQMIIAILCwwBCyAARIPIyW0wX+Q/okQAAAAAAAA4Q6BEAAAAAAAAOMOgIguqIQIgASAAIAtEAABAVPsh+T+ioSIKIAtEMWNiGmG00D2iIgChIgw5AwAgA0EUdiIIIAy9QjSIp0H/D3FrQRBKBEAgC0RzcAMuihmjO6IgCiAKIAtEAABgGmG00D2iIgChIgqhIAChoSEAIAEgCiAAoSIMOQMAIAtEwUkgJZqDezmiIAogCiALRAAAAC6KGaM7oiINoSILoSANoaEhDSAIIAy9QjSIp0H/D3FrQTFKBEAgASALIA2hIgw5AwAgDSEAIAshCgsLIAEgCiAMoSAAoTkDCCACCyEBIAckBiABC/8QAhZ/A3wjBiEPIwZBsARqJAYgD0HAAmohECACQX1qQRhtIgVBACAFQQBKGyESIARBAnRBoBBqKAIAIg0gA0F/aiIHakEATgRAIA0gA2ohCSASIAdrIQUDQCAQIAZBA3RqIAVBAEgEfEQAAAAAAAAAAAUgBUECdEGwEGooAgC3CyIbOQMAIAVBAWohBSAGQQFqIgYgCUcNAAsLIA9B4ANqIQwgD0GgAWohCiAPIQ4gAkFoaiASQWhsIhZqIQkgA0EASiEIQQAhBQNAIAgEQCAFIAdqIQtEAAAAAAAAAAAhG0EAIQYDQCAbIAAgBkEDdGorAwAgECALIAZrQQN0aisDAKKgIRsgBkEBaiIGIANHDQALBUQAAAAAAAAAACEbCyAOIAVBA3RqIBs5AwAgBUEBaiEGIAUgDUgEQCAGIQUMAQsLIAlBAEohE0EYIAlrIRRBFyAJayEXIAlFIRggA0EASiEZIA0hBQJAAkACQANAIA4gBUEDdGorAwAhGyAFQQBKIgsEQCAFIQZBACEHA0AgDCAHQQJ0aiAbIBtEAAAAAAAAcD6iqrciG0QAAAAAAABwQaKhqjYCACAOIAZBf2oiCEEDdGorAwAgG6AhGyAHQQFqIQcgBkEBSgRAIAghBgwBCwsLIBsgCRBlIhsgG0QAAAAAAADAP6KcRAAAAAAAACBAoqEiG6ohBiAbIAa3oSEbAkACQAJAIBMEfyAMIAVBf2pBAnRqIggoAgAiESAUdSEHIAggESAHIBR0ayIINgIAIAggF3UhCCAHIAZqIQYMAQUgGAR/IAwgBUF/akECdGooAgBBF3UhCAwCBSAbRAAAAAAAAOA/ZgR/QQIhCAwEBUEACwsLIQgMAgsgCEEASg0ADAELIAYhByALBEBBACEGQQAhCwNAIAwgC0ECdGoiGigCACERAkACQCAGBH9B////ByEVDAEFIBEEf0EBIQZBgICACCEVDAIFQQALCyEGDAELIBogFSARazYCAAsgC0EBaiILIAVHDQALIAYhCwVBACELCyAHQQFqIQYCQCATBEACQAJAAkAgCUEBaw4CAAECCyAMIAVBf2pBAnRqIgcgBygCAEH///8DcTYCAAwDCyAMIAVBf2pBAnRqIgcgBygCAEH///8BcTYCAAsLCyAIQQJGBEBEAAAAAAAA8D8gG6EhGyALBEAgG0QAAAAAAADwPyAJEGWhIRsLQQIhCAsLIBtEAAAAAAAAAABiDQIgBSANSgRAQQAhCyAFIQcDQCAMIAdBf2oiB0ECdGooAgAgC3IhCyAHIA1KDQALIAsNAgtBASEGA0AgBkEBaiEHIAwgDSAGa0ECdGooAgBFBEAgByEGDAELCyAGIAVqIQcDQCAQIAUgA2oiCEEDdGogBUEBaiIGIBJqQQJ0QbAQaigCALc5AwAgGQRARAAAAAAAAAAAIRtBACEFA0AgGyAAIAVBA3RqKwMAIBAgCCAFa0EDdGorAwCioCEbIAVBAWoiBSADRw0ACwVEAAAAAAAAAAAhGwsgDiAGQQN0aiAbOQMAIAYgB0gEQCAGIQUMAQsLIAchBQwAAAsACyAJIQADQCAAQWhqIQAgDCAFQX9qIgVBAnRqKAIARQ0ACyAAIQIgBSEADAELIAwgG0EAIAlrEGUiG0QAAAAAAABwQWYEfyAMIAVBAnRqIBsgG0QAAAAAAABwPqKqIgO3RAAAAAAAAHBBoqGqNgIAIBYgAmohAiAFQQFqBSAJIQIgG6ohAyAFCyIAQQJ0aiADNgIAC0QAAAAAAADwPyACEGUhGyAAQX9KIgcEQCAAIQIDQCAOIAJBA3RqIBsgDCACQQJ0aigCALeiOQMAIBtEAAAAAAAAcD6iIRsgAkF/aiEDIAJBAEoEQCADIQIMAQsLIAcEQCAAIQIDQCAAIAJrIQlBACEDRAAAAAAAAAAAIRsDQCAbIANBA3RBwBJqKwMAIA4gAyACakEDdGorAwCioCEbIANBAWohBSADIA1OIAMgCU9yRQRAIAUhAwwBCwsgCiAJQQN0aiAbOQMAIAJBf2ohAyACQQBKBEAgAyECDAELCwsLAkACQAJAAkAgBA4EAAEBAgMLIAcEQEQAAAAAAAAAACEbA0AgGyAKIABBA3RqKwMAoCEbIABBf2ohAiAAQQBKBEAgAiEADAELCwVEAAAAAAAAAAAhGwsgASAbmiAbIAgbOQMADAILIAcEQEQAAAAAAAAAACEbIAAhAgNAIBsgCiACQQN0aisDAKAhGyACQX9qIQMgAkEASgRAIAMhAgwBCwsFRAAAAAAAAAAAIRsLIAEgGyAbmiAIRSIEGzkDACAKKwMAIBuhIRsgAEEBTgRAQQEhAgNAIBsgCiACQQN0aisDAKAhGyACQQFqIQMgAiAARwRAIAMhAgwBCwsLIAEgGyAbmiAEGzkDCAwBCyAAQQBKBEAgCiAAIgJBA3RqKwMAIRsDQCAKIAJBf2oiA0EDdGoiBCsDACIdIBugIRwgCiACQQN0aiAbIB0gHKGgOQMAIAQgHDkDACACQQFKBEAgAyECIBwhGwwBCwsgAEEBSiIEBEAgCiAAIgJBA3RqKwMAIRsDQCAKIAJBf2oiA0EDdGoiBSsDACIdIBugIRwgCiACQQN0aiAbIB0gHKGgOQMAIAUgHDkDACACQQJKBEAgAyECIBwhGwwBCwsgBARARAAAAAAAAAAAIRsDQCAbIAogAEEDdGorAwCgIRsgAEF/aiECIABBAkoEQCACIQAMAQsLBUQAAAAAAAAAACEbCwVEAAAAAAAAAAAhGwsFRAAAAAAAAAAAIRsLIAorAwAhHCAIBEAgASAcmjkDACABIAorAwiaOQMIIAEgG5o5AxAFIAEgHDkDACABIAorAwg5AwggASAbOQMQCwsgDyQGIAZBB3ELlwEBA3wgACAAoiIDIAMgA6KiIANEfNXPWjrZ5T2iROucK4rm5Vq+oKIgAyADRH3+sVfjHcc+okTVYcEZoAEqv6CiRKb4EBEREYE/oKAhBSADIACiIQQgACAERElVVVVVVcU/oiADIAFEAAAAAAAA4D+iIAQgBaKhoiABoaChIAQgAyAFokRJVVVVVVXFv6CiIACgIAIbIgALCAAgACABEGULlAEBBHwgACAAoiICIAKiIQNEAAAAAAAA8D8gAkQAAAAAAADgP6IiBKEiBUQAAAAAAADwPyAFoSAEoSACIAIgAiACRJAVyxmgAfo+okR3UcEWbMFWv6CiRExVVVVVVaU/oKIgAyADoiACRMSxtL2e7iE+IAJE1DiIvun6qD2ioaJErVKcgE9+kr6goqCiIAAgAaKhoKALxAEBA38jBiECIwZBEGokBiACIQECfCAAvUIgiKdB/////wdxIgNB/MOk/wNJBHwgA0GewZryA0kEfEQAAAAAAADwPwUgAEQAAAAAAAAAABByCwUgACAAoSADQf//v/8HSw0BGgJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwgQcgwECyABKwMAIAErAwhBARBwmgwDCyABKwMAIAErAwgQcpoMAgsgASsDACABKwMIQQEQcAsLIQAgAiQGIAALywEBA38jBiECIwZBEGokBiACIQECQCAAvUIgiKdB/////wdxIgNB/MOk/wNJBEAgA0GAgMDyA08EQCAARAAAAAAAAAAAQQAQcCEACwUgA0H//7//B0sEQCAAIAChIQAMAgsCQAJAAkACQAJAIAAgARBuQQNxDgMAAQIDCyABKwMAIAErAwhBARBwIQAMBQsgASsDACABKwMIEHIhAAwECyABKwMAIAErAwhBARBwmiEADAMLIAErAwAgASsDCBBymiEACwsLIAIkBiAAC5sDAwJ/AX4CfCAAvSIDQj+IpyEBAnwCfwJAIANCIIinQf////8HcSICQarGmIQESwR8IANC////////////AINCgICAgICAgPj/AFYEQCAADwsgAETvOfr+Qi6GQGQEQCAARAAAAAAAAOB/og8FIABE0rx63SsjhsBjIABEUTAt1RBJh8BjcUUNAkQAAAAAAAAAACIADwsABSACQcLc2P4DSwRAIAJBscXC/wNLDQIgAUEBcyABawwDCyACQYCAwPEDSwR8QQAhASAABSAARAAAAAAAAPA/oA8LCwwCCyAARP6CK2VHFfc/oiABQQN0QYATaisDAKCqCyEBIAAgAbciBEQAAOD+Qi7mP6KhIgAgBER2PHk17znqPaIiBaELIQQgACAEIAQgBCAEoiIAIAAgACAAIABE0KS+cmk3Zj6iRPFr0sVBvbu+oKJELN4lr2pWET+gokSTvb4WbMFmv6CiRD5VVVVVVcU/oKKhIgCiRAAAAAAAAABAIAChoyAFoaBEAAAAAAAA8D+gIQAgAUUEQCAADwsgACABEGULnwMDAn8BfgV8IAC9IgNCIIinIQECfyADQgBTIgIgAUGAgMAASXIEfyADQv///////////wCDQgBRBEBEAAAAAAAA8L8gACAAoqMPCyACRQRAIABEAAAAAAAAUEOi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mgDjqR0AXmGRAAgb5gCFmWUAoBRfAI1AaACA2P8AJ3NNAAYGMQDKVhUAyahzAHviYABrjMAAQcMSC11A+yH5PwAAAAAtRHQ+AAAAgJhG+DwAAABgUcx4OwAAAICDG/A5AAAAQCAlejgAAACAIoLjNgAAAAAd82k1AAAAAAAA4D8AAAAAAADgvwAAAAAAAPA/AAAAAAAA+D8AQagTCwgG0M9D6/1MPgBBuxMLigZAA7jiP09nZ1MuL3N0Yl92b3JiaXMuYwBmLT5hbGxvYy5hbGxvY19idWZmZXJfbGVuZ3RoX2luX2J5dGVzID09IGYtPnRlbXBfb2Zmc2V0AHZvcmJpc19kZWNvZGVfaW5pdGlhbABmLT5ieXRlc19pbl9zZWcgPiAwAGdldDhfcGFja2V0X3JhdwBmLT5ieXRlc19pbl9zZWcgPT0gMABuZXh0X3NlZ21lbnQAdm9yYmlzX2RlY29kZV9wYWNrZXRfcmVzdAAhYy0+c3BhcnNlAGNvZGVib29rX2RlY29kZV9zY2FsYXJfcmF3ACFjLT5zcGFyc2UgfHwgeiA8IGMtPnNvcnRlZF9lbnRyaWVzAGNvZGVib29rX2RlY29kZV9kZWludGVybGVhdmVfcmVwZWF0AHogPCBjLT5zb3J0ZWRfZW50cmllcwBjb2RlYm9va19kZWNvZGVfc3RhcnQAKG4gJiAzKSA9PSAwAGltZGN0X3N0ZXAzX2l0ZXIwX2xvb3AAMABnZXRfd2luZG93AGYtPnRlbXBfb2Zmc2V0ID09IGYtPmFsbG9jLmFsbG9jX2J1ZmZlcl9sZW5ndGhfaW5fYnl0ZXMAc3RhcnRfZGVjb2RlcgB2b3JiaXNjLT5zb3J0ZWRfZW50cmllcyA9PSAwAGNvbXB1dGVfY29kZXdvcmRzAHogPj0gMCAmJiB6IDwgMzIAbGVuW2ldID49IDAgJiYgbGVuW2ldIDwgMzIAYXZhaWxhYmxlW3ldID09IDAAayA9PSBjLT5zb3J0ZWRfZW50cmllcwBjb21wdXRlX3NvcnRlZF9odWZmbWFuAGMtPnNvcnRlZF9jb2Rld29yZHNbeF0gPT0gY29kZQBsZW4gIT0gTk9fQ09ERQBpbmNsdWRlX2luX3NvcnQAcG93KChmbG9hdCkgcisxLCBkaW0pID4gZW50cmllcwBsb29rdXAxX3ZhbHVlcwAoaW50KSBmbG9vcihwb3coKGZsb2F0KSByLCBkaW0pKSA8PSBlbnRyaWVzAOoPBG5hbWUB4g9+AAVhYm9ydAENZW5sYXJnZU1lbW9yeQIOZ2V0VG90YWxNZW1vcnkDF2Fib3J0T25DYW5ub3RHcm93TWVtb3J5BA5fX19hc3NlcnRfZmFpbAULX19fc2V0RXJyTm8GBl9hYm9ydAcWX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZwgQX19ncm93V2FzbU1lbW9yeQkKc3RhY2tBbGxvYwoJc3RhY2tTYXZlCwxzdGFja1Jlc3RvcmUME2VzdGFibGlzaFN0YWNrU3BhY2UNCHNldFRocmV3DgtzZXRUZW1wUmV0MA8LZ2V0VGVtcFJldDAQEV9zdGJfdm9yYmlzX2Nsb3NlEQ5fdm9yYmlzX2RlaW5pdBILX3NldHVwX2ZyZWUTGl9zdGJfdm9yYmlzX2ZsdXNoX3B1c2hkYXRhFCFfc3RiX3ZvcmJpc19kZWNvZGVfZnJhbWVfcHVzaGRhdGEVBl9lcnJvchYgX3ZvcmJpc19zZWFyY2hfZm9yX3BhZ2VfcHVzaGRhdGEXGF9pc193aG9sZV9wYWNrZXRfcHJlc2VudBgVX3ZvcmJpc19kZWNvZGVfcGFja2V0GQxfZ2V0OF9wYWNrZXQaFF92b3JiaXNfZmluaXNoX2ZyYW1lGxlfc3RiX3ZvcmJpc19vcGVuX3B1c2hkYXRhHAxfdm9yYmlzX2luaXQdDl9zdGFydF9kZWNvZGVyHg1fdm9yYmlzX2FsbG9jHxtfc3RiX3ZvcmJpc19nZXRfZmlsZV9vZmZzZXQgE19tYXliZV9zdGFydF9wYWNrZXQhDV9mbHVzaF9wYWNrZXQiBV9nZXRuIwZfZ2V0MzIkE19zdGJfdm9yYmlzX2pzX29wZW4lFF9zdGJfdm9yYmlzX2pzX2Nsb3NlJhdfc3RiX3ZvcmJpc19qc19jaGFubmVscycaX3N0Yl92b3JiaXNfanNfc2FtcGxlX3JhdGUoFV9zdGJfdm9yYmlzX2pzX2RlY29kZSkNX2NyYzMyX3VwZGF0ZSoWX3ZvcmJpc19kZWNvZGVfaW5pdGlhbCsaX3ZvcmJpc19kZWNvZGVfcGFja2V0X3Jlc3QsCV9nZXRfYml0cy0FX2lsb2cuEF9nZXQ4X3BhY2tldF9yYXcvDV9uZXh0X3NlZ21lbnQwBV9nZXQ4MQtfc3RhcnRfcGFnZTIQX2NhcHR1cmVfcGF0dGVybjMdX3N0YXJ0X3BhZ2Vfbm9fY2FwdHVyZXBhdHRlcm40DV9wcmVwX2h1ZmZtYW41G19jb2RlYm9va19kZWNvZGVfc2NhbGFyX3JhdzYOX3ByZWRpY3RfcG9pbnQ3D19kZWNvZGVfcmVzaWR1ZTgJX2RvX2Zsb29yOQ1faW52ZXJzZV9tZGN0OgxfYml0X3JldmVyc2U7EV9tYWtlX2Jsb2NrX2FycmF5PBJfc2V0dXBfdGVtcF9tYWxsb2M9JF9jb2RlYm9va19kZWNvZGVfZGVpbnRlcmxlYXZlX3JlcGVhdD4PX3Jlc2lkdWVfZGVjb2RlPxVfY29kZWJvb2tfZGVjb2RlX3N0ZXBAEF9jb2RlYm9va19kZWNvZGVBFl9jb2RlYm9va19kZWNvZGVfc3RhcnRCCl9kcmF3X2xpbmVDF19pbWRjdF9zdGVwM19pdGVyMF9sb29wRBlfaW1kY3Rfc3RlcDNfaW5uZXJfcl9sb29wRRlfaW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wRh9faW1kY3Rfc3RlcDNfaW5uZXJfc19sb29wX2xkNjU0RwhfaXRlcl81NEgLX2dldF93aW5kb3dJEF92b3JiaXNfdmFsaWRhdGVKDV9zdGFydF9wYWNrZXRLBV9za2lwTAtfY3JjMzJfaW5pdE0NX3NldHVwX21hbGxvY04QX3NldHVwX3RlbXBfZnJlZU8SX2NvbXB1dGVfY29kZXdvcmRzUBdfY29tcHV0ZV9zb3J0ZWRfaHVmZm1hblEcX2NvbXB1dGVfYWNjZWxlcmF0ZWRfaHVmZm1hblIPX2Zsb2F0MzJfdW5wYWNrUw9fbG9va3VwMV92YWx1ZXNUDl9wb2ludF9jb21wYXJlVQpfbmVpZ2hib3JzVg9faW5pdF9ibG9ja3NpemVXCl9hZGRfZW50cnlYEF9pbmNsdWRlX2luX3NvcnRZD191aW50MzJfY29tcGFyZVoYX2NvbXB1dGVfdHdpZGRsZV9mYWN0b3JzWw9fY29tcHV0ZV93aW5kb3dcE19jb21wdXRlX2JpdHJldmVyc2VdB19zcXVhcmVeB19tYWxsb2NfBV9mcmVlYAhfcmVhbGxvY2ESX3RyeV9yZWFsbG9jX2NodW5rYg5fZGlzcG9zZV9jaHVua2MRX19fZXJybm9fbG9jYXRpb25kB19tZW1jbXBlB19zY2FsYm5mBl9xc29ydGcFX3NpZnRoBF9zaHJpCF90cmlua2xlagRfc2hsawVfcG50emwIX2FfY3R6X2xtBl9jeWNsZW4LX19fcmVtX3BpbzJvEV9fX3JlbV9waW8yX2xhcmdlcAZfX19zaW5xBl9sZGV4cHIGX19fY29zcwRfY29zdARfc2ludQRfZXhwdgRfbG9ndwRfcG93eAtydW5Qb3N0U2V0c3kHX21lbWNweXoHX21lbXNldHsFX3Nicmt8C2R5bkNhbGxfaWlpfQJiMA=="),function(h){return h.charCodeAt(0)});var C=C!==void 0?C:{},x={};for(e in C)C.hasOwnProperty(e)&&(x[e]=C[e]);C.arguments=[],C.thisProgram="./this.program",C.quit=function(h,Q){throw Q},C.preRun=[],C.postRun=[];var q=!1,gA=!1,tA=!1,T=!1;q=typeof window=="object",gA=typeof importScripts=="function",tA=typeof process=="object"&&typeof Fs=="function"&&!q&&!gA,T=!q&&!tA&&!gA;var $="";function BA(h){return C.locateFile?C.locateFile(h,$):$+h}tA?($=__dirname+"/",C.read=function(Q,f){var D;return A||(A=void 0),t||(t=void 0),Q=t.normalize(Q),D=A.readFileSync(Q),f?D:D.toString()},C.readBinary=function(Q){var f=C.read(Q,!0);return f.buffer||(f=new Uint8Array(f)),XA(f.buffer),f},process.argv.length>1&&(C.thisProgram=process.argv[1].replace(/\\/g,"/")),C.arguments=process.argv.slice(2),typeof module<"u",process.on("uncaughtException",function(h){if(!(h instanceof Dt))throw h}),process.on("unhandledRejection",function(h,Q){process.exit(1)}),C.quit=function(h){process.exit(h)},C.inspect=function(){return"[Emscripten Module object]"}):T?(typeof read<"u"&&(C.read=function(Q){return read(Q)}),C.readBinary=function(Q){var f;return typeof readbuffer=="function"?new Uint8Array(readbuffer(Q)):(XA(typeof(f=read(Q,"binary"))=="object"),f)},typeof scriptArgs<"u"?C.arguments=scriptArgs:typeof arguments<"u"&&(C.arguments=arguments),typeof quit=="function"&&(C.quit=function(h){quit(h)})):(q||gA)&&(q?document.currentScript&&($=document.currentScript.src):$=self.location.href,$=$.indexOf("blob:")!==0?$.split("/").slice(0,-1).join("/")+"/":"",C.read=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.send(null),f.responseText},gA&&(C.readBinary=function(Q){var f=new XMLHttpRequest;return f.open("GET",Q,!1),f.responseType="arraybuffer",f.send(null),new Uint8Array(f.response)}),C.readAsync=function(Q,f,D){var K=new XMLHttpRequest;K.open("GET",Q,!0),K.responseType="arraybuffer",K.onload=function(){if(K.status==200||K.status==0&&K.response){f(K.response);return}D()},K.onerror=D,K.send(null)},C.setWindowTitle=function(h){document.title=h});var sA=C.print||(typeof console<"u"?console.log.bind(console):typeof print<"u"?print:null),oA=C.printErr||(typeof printErr<"u"?printErr:typeof console<"u"&&console.warn.bind(console)||sA);for(e in x)x.hasOwnProperty(e)&&(C[e]=x[e]);function EA(h){var Q=B;return B=B+h+15&-16,Q}function v(h){var Q=a[M>>2],f=Q+h+15&-16;return a[M>>2]=f,f>=NA&&!pt()?(a[M>>2]=Q,0):Q}function J(h,Q){return Q||(Q=16),h=Math.ceil(h/Q)*Q}function W(h){switch(h){case"i1":case"i8":return 1;case"i16":return 2;case"i32":case"float":return 4;case"i64":case"double":return 8;default:if(h[h.length-1]==="*")return 4;if(h[0]!=="i")return 0;var Q=parseInt(h.substr(1));return XA(Q%8==0),Q/8}}function O(h){O.shown||(O.shown={}),O.shown[h]||(O.shown[h]=1,oA(h))}x=void 0;var rA={"f64-rem":function(h,Q){return h%Q},debugger:function(){}},KA=[];function Ie(h,Q){for(var f=0,D=f;D<f+0;D++)if(!KA[D])return KA[D]=h,1+D;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS."}function he(h){KA[h-1]=null}var le={};function $e(h,Q){if(h){XA(Q),le[Q]||(le[Q]={});var f=le[Q];return f[h]||(Q.length===1?f[h]=function(){return aA(Q,h)}:Q.length===2?f[h]=function(K){return aA(Q,h,[K])}:f[h]=function(){return aA(Q,h,Array.prototype.slice.call(arguments))}),f[h]}}function pe(h,Q,f){return f?+(h>>>0)+4294967296*+(Q>>>0):+(h>>>0)+4294967296*+(0|Q)}function aA(h,Q,f){return f&&f.length?C["dynCall_"+h].apply(null,[Q].concat(f)):C["dynCall_"+h].call(null,Q)}var QA=0,Qe=0;function XA(h,Q){h||ke("Assertion failed: "+Q)}function Re(h){var Q=C["_"+h];return XA(Q,"Cannot call unknown function "+h+", make sure it is exported"),Q}var Ge={stackSave:function(){Ln()},stackRestore:function(){bn()},arrayToC:function(h){var Q,f,D=Pt(h.length);return Q=h,f=D,s.set(Q,f),D},stringToC:function(h){var Q=0;if(h!=null&&h!==0){var f=(h.length<<2)+1;Q=Pt(f),ft(h,Q,f)}return Q}},dt={string:Ge.stringToC,array:Ge.arrayToC};function At(h,Q,f,D,K){var iA=Re(h),CA=[],Z=0;if(D)for(var UA=0;UA<D.length;UA++){var mA=dt[f[UA]];mA?(Z===0&&(Z=Ln()),CA[UA]=mA(D[UA])):CA[UA]=D[UA]}var pA,dA=iA.apply(null,CA);return dA=(pA=dA,Q==="string"?xe(pA):Q==="boolean"?!!pA:pA),Z!==0&&bn(Z),dA}function ut(h,Q,f,D){switch((f=f||"i8").charAt(f.length-1)==="*"&&(f="i32"),f){case"i1":case"i8":s[h>>0]=Q;break;case"i16":r[h>>1]=Q;break;case"i32":a[h>>2]=Q;break;case"i64":tempI64=[Q>>>0,+ri(tempDouble=Q)>=1?tempDouble>0?(0|ai(+ys(tempDouble/4294967296),4294967295))>>>0:~~+ii((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0],a[h>>2]=tempI64[0],a[h+4>>2]=tempI64[1];break;case"float":l[h>>2]=Q;break;case"double":c[h>>3]=Q;break;default:ke("invalid type for setValue: "+f)}}function kn(h,Q,f){switch((Q=Q||"i8").charAt(Q.length-1)==="*"&&(Q="i32"),Q){case"i1":case"i8":return s[h>>0];case"i16":return r[h>>1];case"i32":case"i64":return a[h>>2];case"float":return l[h>>2];case"double":return c[h>>3];default:ke("invalid type for getValue: "+Q)}return null}function wn(h,Q,f,D){typeof h=="number"?(iA=!0,CA=h):(iA=!1,CA=h.length);var K=typeof Q=="string"?Q:null;if(Z=f==4?D:[typeof Ot=="function"?Ot:EA,Pt,EA,v][f===void 0?2:f](Math.max(CA,K?1:Q.length)),iA){for(D=Z,XA((3&Z)==0),UA=Z+(-4&CA);D<UA;D+=4)a[D>>2]=0;for(UA=Z+CA;D<UA;)s[D++>>0]=0;return Z}if(K==="i8")return h.subarray||h.slice?o.set(h,Z):o.set(new Uint8Array(h),Z),Z;for(var iA,CA,Z,UA,mA,pA,dA,nA=0;nA<CA;){var PA=h[nA];if((mA=K||Q[nA])===0){nA++;continue}mA=="i64"&&(mA="i32"),ut(Z+nA,PA,mA),dA!==mA&&(pA=W(mA),dA=mA),nA+=pA}return Z}function et(h){return u?Mn?Ot(h):v(h):EA(h)}function xe(h,Q){if(Q===0||!h)return"";for(var f,D,K,iA=0,CA=0;iA|=D=o[h+CA>>0],(D!=0||Q)&&(CA++,!Q||CA!=Q););Q||(Q=CA);var Z="";if(iA<128){for(;Q>0;)K=String.fromCharCode.apply(String,o.subarray(h,h+Math.min(Q,1024))),Z=Z?Z+K:K,h+=1024,Q-=1024;return Z}return f=h,function(mA,pA){for(var dA=pA;mA[dA];)++dA;if(dA-pA>16&&mA.subarray&&vt)return vt.decode(mA.subarray(pA,dA));for(var nA,PA,Ae,ee,te,Ze,ne="";;){if(!(nA=mA[pA++]))return ne;if(!(128&nA)){ne+=String.fromCharCode(nA);continue}if(PA=63&mA[pA++],(224&nA)==192){ne+=String.fromCharCode((31&nA)<<6|PA);continue}if(Ae=63&mA[pA++],(240&nA)==224?nA=(15&nA)<<12|PA<<6|Ae:(ee=63&mA[pA++],(248&nA)==240?nA=(7&nA)<<18|PA<<12|Ae<<6|ee:(te=63&mA[pA++],nA=(252&nA)==248?(3&nA)<<24|PA<<18|Ae<<12|ee<<6|te:(1&nA)<<30|PA<<24|Ae<<18|ee<<12|te<<6|(Ze=63&mA[pA++]))),nA<65536)ne+=String.fromCharCode(nA);else{var kt=nA-65536;ne+=String.fromCharCode(55296|kt>>10,56320|1023&kt)}}}(o,f)}function WA(h){for(var Q="";;){var f=s[h++>>0];if(!f)return Q;Q+=String.fromCharCode(f)}}function Fn(h,Q){return function(D,K,iA){for(var CA=0;CA<D.length;++CA)s[K++>>0]=D.charCodeAt(CA);iA||(s[K>>0]=0)}(h,Q,!1)}var vt=typeof TextDecoder<"u"?new TextDecoder("utf8"):void 0;function tt(h,Q,f,D){if(!(D>0))return 0;for(var K=f,iA=f+D-1,CA=0;CA<h.length;++CA){var Z=h.charCodeAt(CA);if(Z>=55296&&Z<=57343&&(Z=65536+((1023&Z)<<10)|1023&h.charCodeAt(++CA)),Z<=127){if(f>=iA)break;Q[f++]=Z}else if(Z<=2047){if(f+1>=iA)break;Q[f++]=192|Z>>6,Q[f++]=128|63&Z}else if(Z<=65535){if(f+2>=iA)break;Q[f++]=224|Z>>12,Q[f++]=128|Z>>6&63,Q[f++]=128|63&Z}else if(Z<=2097151){if(f+3>=iA)break;Q[f++]=240|Z>>18,Q[f++]=128|Z>>12&63,Q[f++]=128|Z>>6&63,Q[f++]=128|63&Z}else if(Z<=67108863){if(f+4>=iA)break;Q[f++]=248|Z>>24,Q[f++]=128|Z>>18&63,Q[f++]=128|Z>>12&63,Q[f++]=128|Z>>6&63,Q[f++]=128|63&Z}else{if(f+5>=iA)break;Q[f++]=252|Z>>30,Q[f++]=128|Z>>24&63,Q[f++]=128|Z>>18&63,Q[f++]=128|Z>>12&63,Q[f++]=128|Z>>6&63,Q[f++]=128|63&Z}}return Q[f]=0,f-K}function ft(h,Q,f){return tt(h,o,Q,f)}function qA(h){for(var Q=0,f=0;f<h.length;++f){var D=h.charCodeAt(f);D>=55296&&D<=57343&&(D=65536+((1023&D)<<10)|1023&h.charCodeAt(++f)),D<=127?++Q:D<=2047?Q+=2:D<=65535?Q+=3:D<=2097151?Q+=4:D<=67108863?Q+=5:Q+=6}return Q}var ye=typeof TextDecoder<"u"?new TextDecoder("utf-16le"):void 0;function mt(h){for(var Q=h,f=Q>>1;r[f];)++f;if((Q=f<<1)-h>32&&ye)return ye.decode(o.subarray(h,Q));for(var D=0,K="";;){var iA=r[h+2*D>>1];if(iA==0)return K;++D,K+=String.fromCharCode(iA)}}function Rn(h,Q,f){if(f===void 0&&(f=2147483647),f<2)return 0;for(var D=Q,K=(f-=2)<2*h.length?f/2:h.length,iA=0;iA<K;++iA){var CA=h.charCodeAt(iA);r[Q>>1]=CA,Q+=2}return r[Q>>1]=0,Q-D}function Se(h){return 2*h.length}function Ht(h){for(var Q=0,f="";;){var D=a[h+4*Q>>2];if(D==0)return f;if(++Q,D>=65536){var K=D-65536;f+=String.fromCharCode(55296|K>>10,56320|1023&K)}else f+=String.fromCharCode(D)}}function Yt(h,Q,f){if(f===void 0&&(f=2147483647),f<4)return 0;for(var D=Q,K=D+f-4,iA=0;iA<h.length;++iA){var CA=h.charCodeAt(iA);if(CA>=55296&&CA<=57343&&(CA=65536+((1023&CA)<<10)|1023&h.charCodeAt(++iA)),a[Q>>2]=CA,(Q+=4)+4>K)break}return a[Q>>2]=0,Q-D}function ds(h){for(var Q=0,f=0;f<h.length;++f){var D=h.charCodeAt(f);D>=55296&&D<=57343&&++f,Q+=4}return Q}function us(h){var Q=qA(h)+1,f=Ot(Q);return f&&tt(h,s,f,Q),f}function Jt(h){var Q=qA(h)+1,f=Pt(Q);return tt(h,s,f,Q),f}function Oe(h){return h}function Gn(){var h,Q=function(){var D=Error();if(!D.stack){try{throw Error(0)}catch(K){D=K}if(!D.stack)return"(no stack trace available)"}return D.stack.toString()}();return C.extraStackTrace&&(Q+=`
|
|
14
14
|
`+C.extraStackTrace()),(h=Q).replace(/__Z[\w\d_]+/g,function(f){var D,K=D=f;return f===K?f:f+" ["+K+"]"})}function De(h,Q){return h%Q>0&&(h+=Q-h%Q),h}function nt(h){C.buffer=n=h}function Pe(){C.HEAP8=s=new Int8Array(n),C.HEAP16=r=new Int16Array(n),C.HEAP32=a=new Int32Array(n),C.HEAPU8=o=new Uint8Array(n),C.HEAPU16=E=new Uint16Array(n),C.HEAPU32=g=new Uint32Array(n),C.HEAPF32=l=new Float32Array(n),C.HEAPF64=c=new Float64Array(n)}function pt(){var h=C.usingWasm?65536:16777216,Q=2147483648-h;if(a[M>>2]>Q)return!1;var f=NA;for(NA=Math.max(NA,16777216);NA<a[M>>2];)NA=NA<=536870912?De(2*NA,h):Math.min(De((3*NA+2147483648)/4,h),Q);var D=C.reallocBuffer(NA);return D&&D.byteLength==NA?(nt(D),Pe(),!0):(NA=f,!1)}d=B=p=S=w=k=M=0,u=!1,C.reallocBuffer||(C.reallocBuffer=function(h){try{if(ArrayBuffer.transfer)Q=ArrayBuffer.transfer(n,h);else{var Q,f=s;Q=new ArrayBuffer(h),new Int8Array(Q).set(f)}}catch{return!1}return!!Ii(Q)&&Q});try{(b=Function.prototype.call.bind(Object.getOwnPropertyDescriptor(ArrayBuffer.prototype,"byteLength").get))(new ArrayBuffer(4))}catch{b=function(Q){return Q.byteLength}}var st=C.TOTAL_STACK||5242880,NA=C.TOTAL_MEMORY||16777216;function Kt(){return NA}function Me(h){for(;h.length>0;){var Q=h.shift();if(typeof Q=="function"){Q();continue}var f=Q.func;typeof f=="number"?Q.arg===void 0?C.dynCall_v(f):C.dynCall_vi(f,Q.arg):f(Q.arg===void 0?null:Q.arg)}}NA<st&&oA("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+NA+"! (TOTAL_STACK="+st+")"),C.buffer?n=C.buffer:(typeof WebAssembly=="object"&&typeof WebAssembly.Memory=="function"?(C.wasmMemory=new WebAssembly.Memory({initial:NA/65536}),n=C.wasmMemory.buffer):n=new ArrayBuffer(NA),C.buffer=n),Pe();var yt=[],xn=[],fs=[],ms=[],ps=[],Mn=!1,ni=!1;function si(h){yt.unshift(h)}function Ti(h){xn.unshift(h)}function vi(h){fs.unshift(h)}function Hi(h){ms.unshift(h)}function oi(h){ps.unshift(h)}function Yi(h,Q,f){var D,K;O("writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!"),f&&(D=s[K=Q+qA(h)]),ft(h,Q,1/0),f&&(s[K]=D)}function Ji(h,Q,f){return h>=0?h:Q<=32?2*Math.abs(1<<Q-1)+h:Math.pow(2,Q)+h}function Ki(h,Q,f){if(h<=0)return h;var D=Q<=32?Math.abs(1<<Q-1):Math.pow(2,Q-1);return h>=D&&(Q<=32||h>D)&&(h=-2*D+h),h}var ri=Math.abs,ii=Math.ceil,ys=Math.floor,ai=Math.min,Ve=0,Nn=null,St=null;function qi(h){return h}C.preloadedImages={},C.preloadedAudios={};var Ss="data:application/octet-stream;base64,";function qt(h){return String.prototype.startsWith?h.startsWith(Ss):h.indexOf(Ss)===0}(function(){var Q="main.wast",f="main.wasm",D="main.temp.asm.js";qt(Q)||(Q=BA(Q)),qt(f)||(f=BA(f)),qt(D)||(D=BA(D));var K={global:null,env:null,asm2wasm:rA,parent:C},iA=null;function CA(dA){return dA}function Z(){try{if(C.wasmBinary)return new Uint8Array(C.wasmBinary);if(C.readBinary)return C.readBinary(f);throw"both async and sync fetching of the wasm failed"}catch(dA){ke(dA)}}C.asmPreload=C.asm;var UA=C.reallocBuffer,mA=function(dA){dA=De(dA,C.usingWasm?65536:16777216);var nA=C.buffer.byteLength;if(C.usingWasm)try{var PA=C.wasmMemory.grow((dA-nA)/65536);return PA!==-1?C.buffer=C.wasmMemory.buffer:null}catch{return null}};C.reallocBuffer=function(dA){return pA==="asmjs"?UA(dA):mA(dA)};var pA="";C.asm=function(dA,nA,PA){var Ae;if(!(nA=Ae=nA).table){var ee,te=C.wasmTableSize;te===void 0&&(te=1024);var Ze=C.wasmMaxTableSize;typeof WebAssembly=="object"&&typeof WebAssembly.Table=="function"?Ze!==void 0?nA.table=new WebAssembly.Table({initial:te,maximum:Ze,element:"anyfunc"}):nA.table=new WebAssembly.Table({initial:te,element:"anyfunc"}):nA.table=Array(te),C.wasmTable=nA.table}return nA.memoryBase||(nA.memoryBase=C.STATIC_BASE),nA.tableBase||(nA.tableBase=0),ee=function(kt,ot,Tn){if(typeof WebAssembly!="object")return oA("no native wasm support detected"),!1;if(!(C.wasmMemory instanceof WebAssembly.Memory))return oA("no native wasm Memory in use"),!1;function Vt(de,ue){if((iA=de.exports).memory){var wt,vn,ws;wt=iA.memory,vn=C.buffer,wt.byteLength<vn.byteLength&&oA("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here"),ws=new Int8Array(vn),new Int8Array(wt).set(ws),nt(wt),Pe()}C.asm=iA,C.usingWasm=!0,function(_i){if(Ve--,C.monitorRunDependencies&&C.monitorRunDependencies(Ve),Ve==0&&(Nn!==null&&(clearInterval(Nn),Nn=null),St)){var gi=St;St=null,gi()}}("wasm-instantiate")}if(ot.memory=C.wasmMemory,K.global={NaN:NaN,Infinity:1/0},K["global.Math"]=Math,K.env=ot,Ve++,C.monitorRunDependencies&&C.monitorRunDependencies(Ve),C.instantiateWasm)try{return C.instantiateWasm(K,Vt)}catch(de){return oA("Module.instantiateWasm callback failed with error: "+de),!1}function rt(de){Vt(de.instance,de.module)}function ks(de){(!C.wasmBinary&&(q||gA)&&typeof fetch=="function"?fetch(f,{credentials:"same-origin"}).then(function(ue){if(!ue.ok)throw"failed to load wasm binary file at '"+f+"'";return ue.arrayBuffer()}).catch(function(){return Z()}):new Promise(function(ue,wt){ue(Z())})).then(function(ue){return WebAssembly.instantiate(ue,K)}).then(de).catch(function(ue){oA("failed to asynchronously prepare wasm: "+ue),ke(ue)})}return C.wasmBinary||typeof WebAssembly.instantiateStreaming!="function"||qt(f)||typeof fetch!="function"?ks(rt):WebAssembly.instantiateStreaming(fetch(f,{credentials:"same-origin"}),K).then(rt).catch(function(de){oA("wasm streaming compile failed: "+de),oA("falling back to ArrayBuffer instantiation"),ks(rt)}),{}}(dA,nA,PA),XA(ee,"no binaryen method succeeded."),ee},C.asm})(),B=(d=1024)+4816,xn.push(),C.STATIC_BASE=d,C.STATIC_BUMP=4816;var _A=B;function Oi(h){s[_A]=s[h],s[_A+1]=s[h+1],s[_A+2]=s[h+2],s[_A+3]=s[h+3]}function Pi(h){s[_A]=s[h],s[_A+1]=s[h+1],s[_A+2]=s[h+2],s[_A+3]=s[h+3],s[_A+4]=s[h+4],s[_A+5]=s[h+5],s[_A+6]=s[h+6],s[_A+7]=s[h+7]}function Vi(h,Q,f){var D=f>0?f:qA(h)+1,K=Array(D),iA=tt(h,K,0,K.length);return Q&&(K.length=iA),K}function Zi(h){for(var Q=[],f=0;f<h.length;f++){var D=h[f];D>255&&(D&=255),Q.push(String.fromCharCode(D))}return Q.join("")}B+=16,M=EA(4),w=(p=S=J(B))+st,k=J(w),a[M>>2]=k,u=!0,C.wasmTableSize=4,C.wasmMaxTableSize=4,C.asmGlobalArg={},C.asmLibraryArg={abort:ke,assert:XA,enlargeMemory:pt,getTotalMemory:Kt,abortOnCannotGrowMemory:function(){ke("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value "+NA+", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")},invoke_iii:function(Q,f,D){var K=Ln();try{return C.dynCall_iii(Q,f,D)}catch(iA){if(bn(K),typeof iA!="number"&&iA!=="longjmp")throw iA;C.setThrew(1,0)}},___assert_fail:function(Q,f,D,K){ke("Assertion failed: "+xe(Q)+", at: "+[f?xe(f):"unknown filename",D,K?xe(K):"unknown function"])},___setErrNo:function(Q){return C.___errno_location&&(a[C.___errno_location()>>2]=Q),Q},_abort:function(){C.abort()},_emscripten_memcpy_big:function(Q,f,D){return o.set(o.subarray(f,f+D),Q),Q},_llvm_floor_f64:ys,DYNAMICTOP_PTR:M,tempDoublePtr:_A,ABORT:QA,STACKTOP:S,STACK_MAX:w};var Ds=C.asm(C.asmGlobalArg,C.asmLibraryArg,n);C.asm=Ds,C.___errno_location=function(){return C.asm.___errno_location.apply(null,arguments)};var Ii=C._emscripten_replace_memory=function(){return C.asm._emscripten_replace_memory.apply(null,arguments)};C._free=function(){return C.asm._free.apply(null,arguments)};var Ot=C._malloc=function(){return C.asm._malloc.apply(null,arguments)};C._memcpy=function(){return C.asm._memcpy.apply(null,arguments)},C._memset=function(){return C.asm._memset.apply(null,arguments)},C._sbrk=function(){return C.asm._sbrk.apply(null,arguments)},C._stb_vorbis_js_channels=function(){return C.asm._stb_vorbis_js_channels.apply(null,arguments)},C._stb_vorbis_js_close=function(){return C.asm._stb_vorbis_js_close.apply(null,arguments)},C._stb_vorbis_js_decode=function(){return C.asm._stb_vorbis_js_decode.apply(null,arguments)},C._stb_vorbis_js_open=function(){return C.asm._stb_vorbis_js_open.apply(null,arguments)},C._stb_vorbis_js_sample_rate=function(){return C.asm._stb_vorbis_js_sample_rate.apply(null,arguments)},C.establishStackSpace=function(){return C.asm.establishStackSpace.apply(null,arguments)},C.getTempRet0=function(){return C.asm.getTempRet0.apply(null,arguments)},C.runPostSets=function(){return C.asm.runPostSets.apply(null,arguments)},C.setTempRet0=function(){return C.asm.setTempRet0.apply(null,arguments)},C.setThrew=function(){return C.asm.setThrew.apply(null,arguments)};var Pt=C.stackAlloc=function(){return C.asm.stackAlloc.apply(null,arguments)},bn=C.stackRestore=function(){return C.asm.stackRestore.apply(null,arguments)},Ln=C.stackSave=function(){return C.asm.stackSave.apply(null,arguments)};function Dt(h){this.name="ExitStatus",this.message="Program terminated with exit("+h+")",this.status=h}function Un(h){h=h||C.arguments,!(Ve>0)&&(function(){if(C.preRun)for(typeof C.preRun=="function"&&(C.preRun=[C.preRun]);C.preRun.length;)si(C.preRun.shift());Me(yt)}(),!(Ve>0)&&(C.calledRun||(C.setStatus?(C.setStatus("Running..."),setTimeout(function(){setTimeout(function(){C.setStatus("")},1),Q()},1)):Q())));function Q(){!C.calledRun&&(C.calledRun=!0,QA||(Mn||(Mn=!0,Me(xn)),Me(fs),C.onRuntimeInitialized&&C.onRuntimeInitialized(),function(){if(C.postRun)for(typeof C.postRun=="function"&&(C.postRun=[C.postRun]);C.postRun.length;)oi(C.postRun.shift());Me(ps)}()))}}function Xi(h,Q){(!Q||!C.noExitRuntime||h!==0)&&(C.noExitRuntime||(QA=!0,Qe=h,S=G,Me(ms),ni=!0,C.onExit&&C.onExit(h)),C.quit(h,new Dt(h)))}function ke(h){throw C.onAbort&&C.onAbort(h),h!==void 0?(sA(h),oA(h),h=JSON.stringify(h)):h="",QA=!0,Qe=1,"abort("+h+"). Build with -s ASSERTIONS=1 for more info."}if(C.dynCall_iii=function(){return C.asm.dynCall_iii.apply(null,arguments)},C.asm=Ds,C.ccall=At,C.cwrap=function(Q,f,D,K){var iA=(D=D||[]).every(function(CA){return CA==="number"});return f!=="string"&&iA&&!K?Re(Q):function(){return At(Q,f,D,arguments,K)}},Dt.prototype=Error(),Dt.prototype.constructor=Dt,St=function h(){C.calledRun||Un(),C.calledRun||(St=h)},C.run=Un,C.abort=ke,C.preInit)for(typeof C.preInit=="function"&&(C.preInit=[C.preInit]);C.preInit.length>0;)C.preInit.pop()();C.noExitRuntime=!0,Un(),C.onRuntimeInitialized=()=>{yo=!0,So()},me.decode=function(h){return function(f){if(!yo)throw Error("Not initialized");var D={};function K(ot){return new Int32Array(C.HEAPU8.buffer,ot,1)[0]}function iA(ot,Tn){var Vt=new ArrayBuffer(Tn*Float32Array.BYTES_PER_ELEMENT),rt=new Float32Array(Vt);return rt.set(new Float32Array(C.HEAPU8.buffer,ot,Tn)),rt}D.open=C.cwrap("stb_vorbis_js_open","number",[]),D.close=C.cwrap("stb_vorbis_js_close","void",["number"]),D.channels=C.cwrap("stb_vorbis_js_channels","number",["number"]),D.sampleRate=C.cwrap("stb_vorbis_js_sample_rate","number",["number"]),D.decode=C.cwrap("stb_vorbis_js_decode","number",["number","number","number","number","number"]);var CA,Z,UA,mA,pA=D.open(),dA=(CA=f,Z=f.byteLength,UA=C._malloc(Z),(mA=new Uint8Array(C.HEAPU8.buffer,UA,Z)).set(new Uint8Array(CA,0,Z)),mA),nA=C._malloc(4),PA=C._malloc(4),Ae=D.decode(pA,dA.byteOffset,dA.byteLength,nA,PA);if(C._free(dA.byteOffset),Ae<0)throw D.close(pA),C._free(nA),Error("stbvorbis decode failed: "+Ae);for(var ee=D.channels(pA),te=Array(ee),Ze=new Int32Array(C.HEAPU32.buffer,K(nA),ee),ne=0;ne<ee;ne++)te[ne]=iA(Ze[ne],Ae),C._free(Ze[ne]);var kt=D.sampleRate(pA);return D.close(pA),C._free(K(nA)),C._free(nA),{data:te,sampleRate:kt,eof:!0,error:null}}(h)}})();var zn=new Float32Array(30001);for(let e=0;e<zn.length;e++){let A=-15e3+e;zn[e]=Math.pow(2,A/1200)}function Ce(e){return e<=-32767?0:zn[e- -15e3]}var In=-2e4,Do=16500,jn=new Float32Array(Do-In+1);for(let e=0;e<jn.length;e++){let A=In+e;jn[e]=440*Math.pow(2,(A-6900)/1200)}function Rt(e){return e<In||e>Do?440*Math.pow(2,(e-6900)/1200):jn[~~e-In]}var As=-1660,di=1600,$n=new Float32Array((di-As)*100+1);for(let e=0;e<$n.length;e++){let A=(As*100+e)/100;$n[e]=Math.pow(10,-A/20)}function ae(e){return $n[Math.floor((e-As)*100)]}var ko=.01,$A=100,es=90,ui=15e-6,Ee=class e{currentSampleTime=0;sampleRate;currentAttenuationDb=$A;state=0;releaseStartDb=$A;releaseStartTimeSamples=0;currentReleaseGain=1;attackDuration=0;decayDuration=0;releaseDuration=0;attenuation=0;attenuationTargetGain=0;attenuationTarget=0;sustainDbRelative=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;constructor(A,t){this.sampleRate=A,this.canEndOnSilentSustain=t/10>=es}static startRelease(A){A.volumeEnvelope.releaseStartTimeSamples=A.volumeEnvelope.currentSampleTime,A.volumeEnvelope.currentReleaseGain=ae(A.volumeEnvelope.currentAttenuationDb),e.recalculate(A)}static recalculate(A){let t=A.volumeEnvelope,n=g=>Math.max(0,Math.floor(Ce(g)*t.sampleRate));t.attenuationTarget=Math.max(0,Math.min(A.modulatedGenerators[i.initialAttenuation],1440))/10,t.attenuationTargetGain=ae(t.attenuationTarget),t.sustainDbRelative=Math.min($A,A.modulatedGenerators[i.sustainVolEnv]/10);let s=Math.min($A,t.sustainDbRelative);t.attackDuration=n(A.modulatedGenerators[i.attackVolEnv]);let o=A.modulatedGenerators[i.decayVolEnv],r=(60-A.targetKey)*A.modulatedGenerators[i.keyNumToVolEnvDecay],E=s/$A;t.decayDuration=n(o+r)*E,t.releaseDuration=n(A.modulatedGenerators[i.releaseVolEnv]),t.delayEnd=n(A.modulatedGenerators[i.delayVolEnv]),t.attackEnd=t.attackDuration+t.delayEnd;let a=(60-A.targetKey)*A.modulatedGenerators[i.keyNumToVolEnvHold];if(t.holdEnd=n(A.modulatedGenerators[i.holdVolEnv]+a)+t.attackEnd,t.decayEnd=t.decayDuration+t.holdEnd,t.state===0&&t.attackEnd===0&&(t.state=2),A.isInRelease){let g=Math.max(0,Math.min($A,t.sustainDbRelative)),l=g/$A;switch(t.decayDuration=n(o+r)*l,t.state){case 0:t.releaseStartDb=$A;break;case 1:let d=1-(t.attackEnd-t.releaseStartTimeSamples)/t.attackDuration;t.releaseStartDb=20*Math.log10(d)*-1;break;case 2:t.releaseStartDb=0;break;case 3:t.releaseStartDb=(1-(t.decayEnd-t.releaseStartTimeSamples)/t.decayDuration)*g;break;case 4:t.releaseStartDb=g;break}t.releaseStartDb=Math.max(0,Math.min(t.releaseStartDb,$A)),t.releaseStartDb>=es&&(A.finished=!0),t.currentReleaseGain=ae(t.releaseStartDb);let c=($A-t.releaseStartDb)/$A;t.releaseDuration*=c}}static apply(A,t,n,s){let o=A.volumeEnvelope,r=n/10,E=s;if(A.isInRelease){let g=o.currentSampleTime-o.releaseStartTimeSamples;if(g>=o.releaseDuration){for(let c=0;c<t.length;c++)t[c]=0;A.finished=!0;return}let l=$A-o.releaseStartDb;for(let c=0;c<t.length;c++){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E;let d=g/o.releaseDuration*l+o.releaseStartDb;o.currentReleaseGain=o.attenuation*ae(d+r),t[c]*=o.currentReleaseGain,o.currentSampleTime++,g++}o.currentReleaseGain<=ui&&(A.finished=!0);return}let a=0;switch(o.state){case 0:for(;o.currentSampleTime<o.delayEnd;)if(o.currentAttenuationDb=$A,t[a]=0,o.currentSampleTime++,++a>=t.length)return;o.state++;case 1:for(;o.currentSampleTime<o.attackEnd;){o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E;let g=1-(o.attackEnd-o.currentSampleTime)/o.attackDuration;if(t[a]*=g*o.attenuation*ae(r),o.currentAttenuationDb=0,o.currentSampleTime++,++a>=t.length)return}o.state++;case 2:for(;o.currentSampleTime<o.holdEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,t[a]*=o.attenuation*ae(r),o.currentAttenuationDb=0,o.currentSampleTime++,++a>=t.length)return;o.state++;case 3:for(;o.currentSampleTime<o.decayEnd;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,o.currentAttenuationDb=(1-(o.decayEnd-o.currentSampleTime)/o.decayDuration)*o.sustainDbRelative,t[a]*=o.attenuation*ae(o.currentAttenuationDb+r),o.currentSampleTime++,++a>=t.length)return;o.state++;case 4:for(o.canEndOnSilentSustain&&o.sustainDbRelative>=es&&(A.finished=!0);;)if(o.attenuation+=(o.attenuationTargetGain-o.attenuation)*E,t[a]*=o.attenuation*ae(o.sustainDbRelative+r),o.currentAttenuationDb=o.sustainDbRelative,o.currentSampleTime++,++a>=t.length)return}}};function wo(e){let A=e.messageData,t=e.channelNumber,n;if(t>=0&&(n=this.workletProcessorChannels[t],n===void 0)){Y(`Trying to access channel ${t} which does not exist... ignoring!`);return}switch(e.messageType){case lA.noteOn:n.noteOn(...A);break;case lA.noteOff:n.noteOff(A);break;case lA.pitchWheel:n.pitchWheel(...A);break;case lA.ccChange:n.controllerChange(...A);break;case lA.customcCcChange:n.setCustomController(A[0],A[1]),n.updateChannelTuning();break;case lA.killNote:n.killNote(A);break;case lA.programChange:this.programChange(t,A[0],A[1]);break;case lA.channelPressure:n.channelPressure(A);break;case lA.polyPressure:n.polyPressure(...A);break;case lA.ccReset:t===ie?this.resetAllControllers():n.resetControllers();break;case lA.systemExclusive:this.systemExclusive(A[0],A[1]);break;case lA.setChannelVibrato:if(t===ie)for(let r=0;r<this.workletProcessorChannels.length;r++){let E=this.workletProcessorChannels[r];A.rate===-1?E.disableAndLockGSNRPN():E.setVibrato(A.depth,A.rate,A.delay)}else A.rate===-1?n.disableAndLockGSNRPN():n.setVibrato(A.depth,A.rate,A.delay);break;case lA.stopAll:t===ie?this.stopAllChannels(A===1):n.stopAllNotes(A===1);break;case lA.killNotes:this.voiceKilling(A);break;case lA.muteChannel:n.muteChannel(A);break;case lA.addNewChannel:this.createWorkletChannel(!0);break;case lA.debugMessage:this.debugMessage();break;case lA.setMasterParameter:let s=A[0],o=A[1];switch(s){case Ue.masterPan:this.setMasterPan(o);break;case Ue.mainVolume:this.setMasterGain(o);break;case Ue.voicesCap:this.voiceCap=o;break;case Ue.interpolationType:this.interpolationType=o;break;case Ue.midiSystem:this.setSystem(o)}break;case lA.setDrums:n.setDrums(A);break;case lA.transpose:t===ie?this.transposeAllChannels(A[0],A[1]):n.transposeChannel(A[0],A[1]);break;case lA.highPerformanceMode:this.highPerformanceMode=A;break;case lA.lockController:A[0]===ie?n.setPresetLock(A[1]):n.lockedControllers[A[0]]=A[1];break;case lA.sequencerSpecific:this.sequencer.processMessage(A.messageType,A.messageData);break;case lA.soundFontManager:try{this.soundfontManager.handleMessage(A[0],A[1])}catch(r){this.post({messageType:JA.soundfontError,messageData:r})}this.clearSoundFont(!0,!1);break;case lA.keyModifierManager:this.keyModifierManager.handleMessage(A[0],A[1]);break;case lA.requestSynthesizerSnapshot:this.sendSynthesizerSnapshot();break;case lA.setLogLevel:Us(A[0],A[1],A[2],A[3]);break;case lA.setEffectsGain:this.reverbGain=A[0],this.chorusGain=A[1];break;case lA.destroyWorklet:this.alive=!1,this.destroyWorkletProcessor();break;default:Y("Unrecognized event:",A);break}}function Fo(e,A){this.enableEventSystem&&this.post({messageType:JA.eventCall,messageData:{eventName:e,eventData:A}})}function Ro(){if(!this.enableEventSystem)return;let e=this.workletProcessorChannels.map(A=>({voicesAmount:A.voices.length,pitchBend:A.midiControllers[xA+j.pitchWheel],pitchBendRangeSemitones:A.midiControllers[xA+j.pitchWheelRange]/128,isMuted:A.isMuted,isDrum:A.drumChannel,transposition:A.channelTransposeKeyShift+A.customControllers[hA.channelTransposeFine]/100}));this.post({messageType:JA.channelProperties,messageData:e})}function fi(e,A,t){let n=e,s=A<<7|t;return e===127&&A===127&&t===127?{midiNote:-1,centTuning:null}:{midiNote:n,centTuning:s*.0061}}var ts={SoundCanvasText:0,XGText:1,SoundCanvasDotDisplay:2};function Go(e,A=0){let t=e[0];if(!(this.deviceID!==ie&&e[1]!==127&&this.deviceID!==e[1]))switch(t){default:Y(`%cUnrecognized SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break;case 126:case 127:switch(e[2]){case 4:let s;switch(e[3]){case 1:let o=e[5]<<7|e[4];this.setMIDIVolume(o/16384),m(`%cMaster Volume. Volume: %c${o}`,I.info,I.value);break;case 2:let E=((e[5]<<7|e[4])-8192)/8192;this.setMasterPan(E),m(`%cMaster Pan. Pan: %c${E}`,I.info,I.value);break;case 3:let a=(e[5]<<7|e[6])-8192;s=Math.floor(a/81.92),this.setMasterTuning(s),m(`%cMaster Fine Tuning. Cents: %c${s}`,I.info,I.value);break;case 4:s=(e[5]-64)*100,this.setMasterTuning(s),m(`%cMaster Coarse Tuning. Cents: %c${s}`,I.info,I.value);break;default:Y(`%cUnrecognized MIDI Device Control Real-time message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 9:e[3]===1?(m("%cGM1 system on",I.info),this.setSystem("gm")):e[3]===3?(m("%cGM2 system on",I.info),this.setSystem("gm2")):(m("%cGM system off, defaulting to GS",I.info),this.setSystem("gs"));break;case 8:switch(e[3]){case 2:case 7:let o=4;e[3]===7&&o++;let r=e[o++],E=e[o++];for(let g=0;g<E;g++)this.tunings[r][e[o++]]=fi(e[o++],e[o++],e[o++]);m(`%cSingle Note Tuning. Program: %c${r}%c Keys affected: %c${E}`,I.info,I.recognized,I.info,I.recognized);break;case 9:case 8:let a=new Int8Array(12);if(e[3]===8)for(let g=0;g<12;g++)a[g]=e[7+g]-64;else for(let g=0;g<24;g+=2){let l=(e[7+g]<<7|e[8+g])-8192;a[g/2]=Math.floor(l/81.92)}(e[4]&1)===1&&this.workletProcessorChannels[14+A].setOctaveTuning(a),(e[4]>>1&1)===1&&this.workletProcessorChannels[15+A].setOctaveTuning(a);for(let g=0;g<7;g++)(e[5]>>g&1)===1&&this.workletProcessorChannels[7+g+A].setOctaveTuning(a);for(let g=0;g<7;g++)(e[6]>>g&1)===1&&this.workletProcessorChannels[g+A].setOctaveTuning(a);m(`%cMIDI Octave Scale ${e[3]===8?"(1 byte)":"(2 bytes)"} tuning via Tuning: %c${a.join(" ")}`,I.info,I.value);break;default:Y(`%cUnrecognized MIDI Tuning standard message: %c${HA(e)}`,I.warn,I.unrecognized);break}break;default:Y(`%cUnrecognized MIDI Realtime/non realtime message: %c${HA(e)}`,I.warn,I.unrecognized)}break;case 65:let n=function(){Y(`%cUnrecognized Roland %cGS %cSysEx: %c${HA(e)}`,I.warn,I.recognized,I.warn,I.unrecognized)};if(e[2]===66&&e[3]===18){let s=e[7];if(e[6]===127){s===0?(m("%cGS Reset received!",I.info),this.resetAllControllers(!1),this.setSystem("gs")):s===127&&(m("%cGS system off, switching to GM2",I.info),this.resetAllControllers(!1),this.setSystem("gm2"));return}else if(e[4]===64){if((e[5]&16)>0){let o=[9,0,1,2,3,4,5,6,7,8,10,11,12,13,14,15][e[5]&15]+A,r=this.workletProcessorChannels[o];switch(e[6]){default:n();break;case 21:let E=s>0&&e[5]>>4;r.setDrums(E),m(`%cChannel %c${o}%c ${E?"is now a drum channel":"now isn't a drum channel"}%c via: %c${HA(e)}`,I.info,I.value,I.recognized,I.info,I.value);return;case 22:let a=s-64;r.transposeChannel(a),m(`%cChannel %c${o}%c pitch shift. Semitones %c${a}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value);return;case 28:let g=s;g===0?(r.randomPan=!0,m(`%cRandom pan is set to %cON%c for %c${o}`,I.info,I.recognized,I.info,I.value)):(r.randomPan=!1,r.controllerChange(y.pan,g));break;case 33:r.controllerChange(y.chorusDepth,s);break;case 34:r.controllerChange(y.reverbDepth,s);break;case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:let l=e.length-9,c=new Int8Array(12);for(let B=0;B<l;B++)c[B]=e[B+7]-64;r.setOctaveTuning(c);let d=s-64;m(`%cChannel %c${o}%c octave scale tuning. Cents %c${c.join(" ")}%c, with %c${HA(e)}`,I.info,I.recognized,I.info,I.value,I.info,I.value),r.setTuning(d);break}return}else if(e[5]===0&&e[6]===6){m(`%cRoland GS Master Pan set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterPan((s-64)/64);return}else if(e[5]===0&&e[6]===5){let o=s-64;m(`%cRoland GS Master Key-Shift set to: %c${o}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMasterTuning(o*100);return}else if(e[5]===0&&e[6]===4){m(`%cRoland GS Master Volume set to: %c${s}%c with: %c${HA(e)}`,I.info,I.value,I.info,I.value),this.setMIDIVolume(s/127);return}}n();return}else if(e[2]===69&&e[3]===18){if(e[4]===16&&e[6]===0)if(e[5]===0){let s=new Uint8Array(e.slice(7,e.length-2));this.callEvent("synthdisplay",{displayData:s,displayType:ts.SoundCanvasText})}else if(e[5]===1){let s=new Uint8Array(e.slice(7,e.length-3));this.callEvent("synthdisplay",{displayData:s,displayType:ts.SoundCanvasDotDisplay}),m(`%cRoland SC Display Dot Matrix via: %c${HA(e)}`,I.info,I.value)}else n()}else if(e[2]===22&&e[3]===18&&e[4]===16){this.setMIDIVolume(e[7]/100),m(`%cRoland Master Volume control set to: %c${e[7]}%c via: %c${HA(e)}`,I.info,I.value,I.info,I.value);return}else{Y(`%cUnrecognized Roland SysEx: %c${HA(e)}`,I.warn,I.unrecognized);return}break;case 67:if(e[2]===76)if(e[3]===0&&e[4]===0)switch(e[5]){case 4:let s=e[6];this.setMIDIVolume(s/127),m(`%cXG master volume. Volume: %c${s}`,I.info,I.recognized);break;case 6:let o=e[6]-64;this.transposeAllChannels(o),m(`%cXG master transpose. Volume: %c${o}`,I.info,I.recognized);break;case 126:m("%cXG system on",I.info),this.resetAllControllers(!1),this.setSystem("xg");break}else if(e[3]===8){if(!RA(this.system))return;let s=e[4]+A;if(s>=this.workletProcessorChannels.length)return;let o=this.workletProcessorChannels[s],r=e[6];switch(e[5]){case 1:o.controllerChange(y.bankSelect,r);break;case 2:o.controllerChange(y.lsbForControl0BankSelect,r);break;case 3:o.programChange(r);break;case 8:if(o.drumChannel)return;let E=r-64;o.channelTransposeKeyShift=E;break;case 11:o.controllerChange(y.mainVolume,r);break;case 14:let a=r;a===0?(o.randomPan=!0,m(`%cRandom pan is set to %cON%c for %c${s}`,I.info,I.recognized,I.info,I.value)):o.controllerChange(y.pan,a);break;case 19:o.controllerChange(y.reverbDepth,r);break;case 18:o.controllerChange(y.chorusDepth,r);break;default:Y(`%cUnrecognized Yamaha XG Part Setup: %c${e[5].toString(16).toUpperCase()}`,I.warn,I.unrecognized)}}else if(e[3]===6&&e[4]===0){let s=new Uint8Array(e.slice(5,e.length-1));this.callEvent("synthdisplay",{displayData:s,displayType:ts.XGText})}else RA(this.system)&&Y(`%cUnrecognized Yamaha XG SysEx: %c${HA(e)}`,I.warn,I.unrecognized);else RA(this.system)&&Y(`%cUnrecognized Yamaha SysEx: %c${HA(e)}`,I.warn,I.unrecognized);break}}function xo(e){this.midiVolume=Math.pow(e,Math.E),this.setMasterPan(this.pan)}function Mo(e){this.masterGain=e*ns,this.setMasterPan(this.pan)}function No(e){this.pan=e,e=e/2+.5,this.panLeft=1-e,this.panRight=e}var Gt={reloadSoundFont:0,addNewSoundFont:2,deleteSoundFont:3,rearrangeSoundFonts:4};function bo(){let e=4;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==i.sampleID&&r.generatorType!==i.keyRange&&r.generatorType!==i.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(i.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(i.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(i.sampleID,this.samples.indexOf(o.sample),!1)),o.generators.length*4+s),0);let A=new L(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.generatorZoneStartIndex=t;for(let o of s.generators)H(A,o.generatorType),H(A,o.generatorValue),t++}return AA(A,0),uA(new cA("igen",A.length,A))}function Lo(e,A,t,n,s){let o=this.samples.map((g,l)=>{t&&g.compressSample(n,s);let c=g.getRawData();return m(`%cEncoded sample %c${l}. ${g.sampleName}%c of %c${this.samples.length}%c. Compressed: %c${g.isCompressed}%c.`,I.info,I.recognized,I.info,I.recognized,I.info,g.isCompressed?I.recognized:I.unrecognized,I.info),c}),r=this.samples.reduce((g,l,c)=>g+o[c].length+46,0),E=new L(r);this.samples.forEach((g,l)=>{let c=o[l],d,B,u=c.length;g.isCompressed?(d=E.currentIndex,B=d+c.length):(d=E.currentIndex/2,B=d+c.length/2,u+=46),e.push(d),E.set(c,E.currentIndex),E.currentIndex+=u,A.push(B)});let a=uA(new cA("smpl",E.length,E),new L([115,100,116,97]));return uA(new cA("LIST",a.length,a))}function Uo(e,A){let n=new L(46*(this.samples.length+1));return this.samples.forEach((s,o)=>{TA(n,s.sampleName,20);let r=e[o];AA(n,r);let E=A[o];AA(n,E);let a=s.sampleLoopStartIndex+r,g=s.sampleLoopEndIndex+r;s.isCompressed&&(a-=r,g-=r),AA(n,a),AA(n,g),AA(n,s.sampleRate),n[n.currentIndex++]=s.samplePitch,n[n.currentIndex++]=s.samplePitchCorrection,H(n,s.sampleLink),H(n,s.sampleType)}),TA(n,"EOS",46),uA(new cA("shdr",n.length,n))}function To(){let e=10;for(let n of this.instruments)e+=n.instrumentZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new L(e),t=0;for(let n of this.instruments)for(let s of n.instrumentZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)H(A,o.sourceEnum),H(A,o.modulatorDestination),H(A,o.transformAmount),H(A,o.secondarySourceEnum),H(A,o.transformType),t++}return Xe(A,0,10),uA(new cA("imod",A.length,A))}function vo(){let e=this.instruments.reduce((o,r)=>r.instrumentZones.length*4+o,4),A=new L(e),t=0,n=0,s=0;for(let o of this.instruments){o.instrumentZoneIndex=t;for(let r of o.instrumentZones)r.zoneID=t,H(A,n),H(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return H(A,n),H(A,s),uA(new cA("ibag",A.length,A))}function Ho(){let e=this.instruments.length*22+22,A=new L(e),t=0,n=0;for(let s of this.instruments)TA(A,s.instrumentName,20),H(A,t),t+=s.instrumentZones.length,s.instrumentID=n,n++;return TA(A,"EOI",20),H(A,t),uA(new cA("inst",A.length,A))}function Yo(){let e=4;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>(o.generators=o.generators.filter(r=>r.generatorType!==i.instrument&&r.generatorType!==i.keyRange&&r.generatorType!==i.velRange),(o.velRange.max!==127||o.velRange.min!==0)&&o.generators.unshift(new U(i.velRange,o.velRange.max<<8|Math.max(o.velRange.min,0),!1)),(o.keyRange.max!==127||o.keyRange.min!==0)&&o.generators.unshift(new U(i.keyRange,o.keyRange.max<<8|Math.max(o.keyRange.min,0),!1)),o.isGlobal||o.generators.push(new U(i.instrument,this.instruments.indexOf(o.instrument),!1)),o.generators.length*4+s),0);let A=new L(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.generatorZoneStartIndex=t;for(let o of s.generators)H(A,o.generatorType),H(A,o.generatorValue);t+=s.generators.length}return H(A,0),H(A,0),uA(new cA("pgen",A.length,A))}function Jo(){let e=10;for(let n of this.presets)e+=n.presetZones.reduce((s,o)=>o.modulators.length*10+s,0);let A=new L(e),t=0;for(let n of this.presets)for(let s of n.presetZones){s.modulatorZoneStartIndex=t;for(let o of s.modulators)H(A,o.sourceEnum),H(A,o.modulatorDestination),H(A,o.transformAmount),H(A,o.secondarySourceEnum),H(A,o.transformType),t++}return Xe(A,0,10),uA(new cA("pmod",A.length,A))}function Ko(){let e=this.presets.reduce((o,r)=>r.presetZones.length*4+o,4),A=new L(e),t=0,n=0,s=0;for(let o of this.presets){o.presetZoneStartIndex=t;for(let r of o.presetZones)r.zoneID=t,H(A,n),H(A,s),n+=r.generators.length,s+=r.modulators.length,t++}return H(A,n),H(A,s),uA(new cA("pbag",A.length,A))}function qo(){let e=this.presets.length*38+38,A=new L(e),t=0;for(let n of this.presets)TA(A,n.presetName,20),H(A,n.program),H(A,n.bank),H(A,t),AA(A,n.library),AA(A,n.genre),AA(A,n.morphology),t+=n.presetZones.length;return TA(A,"EOP",20),H(A,0),H(A,0),H(A,t),AA(A,0),AA(A,0),AA(A,0),uA(new cA("phdr",A.length,A))}var mi={compress:!1,compressionQuality:.5,compressionFunction:void 0};function Oo(e=mi){if(e.compress&&typeof e.compressionFunction!="function")throw new TypeError("No compression function supplied but compression enabled.");FA("%cSaving soundfont...",I.info),m(`%cCompression: %c${e?.compress||"false"}%c quality: %c${e?.compressionQuality||"none"}`,I.info,I.recognized,I.info,I.recognized),m("%cWriting INFO...",I.info);let A=[];this.soundFontInfo.ISFT="SpessaSynth",e?.compress&&(this.soundFontInfo.ifil="3.0");for(let[b,G]of Object.entries(this.soundFontInfo))if(b==="ifil"||b==="iver"){let C=parseInt(G.split(".")[0]),x=parseInt(G.split(".")[1]),q=new L(4);H(q,C),H(q,x),A.push(uA(new cA(b,4,q)))}else if(b==="DMOD")A.push(uA(new cA(b,G.length,G)));else{let C=new L(G.length);TA(C,G),A.push(uA(new cA(b,G.length,C)))}let t=wA([new L([73,78,70,79]),...A]),n=uA(new cA("LIST",t.length,t));m("%cWriting SDTA...",I.info);let s=[],o=[],r=Lo.call(this,s,o,e?.compress,e?.compressionQuality??.5,e.compressionFunction);m("%cWriting PDTA...",I.info),m("%cWriting SHDR...",I.info);let E=Uo.call(this,s,o);m("%cWriting IGEN...",I.info);let a=bo.call(this);m("%cWriting IMOD...",I.info);let g=To.call(this);m("%cWriting IBAG...",I.info);let l=vo.call(this);m("%cWriting INST...",I.info);let c=Ho.call(this),d=Yo.call(this);m("%cWriting PMOD...",I.info);let B=Jo.call(this);m("%cWriting PBAG...",I.info);let u=Ko.call(this);m("%cWriting PHDR...",I.info);let p=qo.call(this),S=wA([new L([112,100,116,97]),p,u,B,d,c,l,g,a,E]),w=uA(new cA("LIST",S.length,S));m("%cWriting the output file...",I.info);let k=wA([new L([115,102,98,107]),n,r,w]),M=uA(new cA("RIFF",k.length,k));return m(`%cSaved succesfully! Final file size: %c${M.length}`,I.info,I.recognized),V(),M}var xt=class{velRange={min:-1,max:127};keyRange={min:-1,max:127};isGlobal=!1;generators=[];modulators=[];get hasKeyRange(){return this.keyRange.min!==-1}get hasVelRange(){return this.velRange.min!==-1}getGeneratorValue(A,t){return this.generators.find(n=>n.generatorType===A)?.generatorValue??t}};var OA=class extends xt{sample=void 0;useCount=0;deleteZone(){this.useCount--,!this.isGlobal&&this.sample.useCount--}},Te=class extends xt{instrument=void 0;deleteZone(){this.isGlobal||this.instrument.removeUseCount()}};var pi=new Set([i.velRange,i.keyRange,i.instrument,i.exclusiveClass,i.endOper,i.sampleModes,i.startloopAddrsOffset,i.startloopAddrsCoarseOffset,i.endloopAddrsOffset,i.endloopAddrsCoarseOffset,i.startAddrsOffset,i.startAddrsCoarseOffset,i.endAddrOffset,i.endAddrsCoarseOffset,i.initialAttenuation,i.fineTune,i.coarseTune,i.keyNumToVolEnvHold,i.keyNumToVolEnvDecay,i.keyNumToModEnvHold,i.keyNumToModEnvDecay]);function Po(e,A=!0){function t(c,d){c.push(...d.filter(B=>!c.find(u=>u.generatorType===B.generatorType)))}function n(c,d){return{min:Math.max(c.min,d.min),max:Math.min(c.max,d.max)}}function s(c,d){c.push(...d.filter(B=>!c.find(u=>_.isIdentical(B,u))))}let o=[],r=[],E=[],a={min:0,max:127},g={min:0,max:127},l=e.presetZones.find(c=>c.isGlobal);l&&(r.push(...l.generators),E.push(...l.modulators),a=l.keyRange,g=l.velRange);for(let c of e.presetZones){if(c.isGlobal)continue;let d=c.keyRange;c.hasKeyRange||(d=a);let B=c.velRange;c.hasVelRange||(B=g);let u=c.generators.map(C=>new U(C.generatorType,C.generatorValue));t(u,r);let p=[...c.modulators];s(p,E);let S=c.instrument.instrumentZones,w=[],k=[],M={min:0,max:127},b={min:0,max:127},G=S.find(C=>C.isGlobal);G&&(w.push(...G.generators),k.push(...G.modulators),M=G.keyRange,b=G.velRange);for(let C of S){if(C.isGlobal)continue;let x=C.keyRange;C.hasKeyRange||(x=M);let q=C.velRange;if(C.hasVelRange||(q=b),x=n(x,d),q=n(q,B),x.max<x.min||q.max<q.min)continue;let gA=C.generators.map(sA=>new U(sA.generatorType,sA.generatorValue));t(gA,w);let tA=[...C.modulators];s(tA,k);let T=[...tA];for(let sA of p){let oA=T.findIndex(EA=>_.isIdentical(sA,EA));oA!==-1?T[oA]=T[oA].sumTransform(sA):T.push(sA)}let $=gA.map(sA=>new U(sA.generatorType,sA.generatorValue));for(let sA of u){if(sA.generatorType===i.velRange||sA.generatorType===i.keyRange||sA.generatorType===i.instrument||sA.generatorType===i.endOper||sA.generatorType===i.sampleModes)continue;let oA=gA.findIndex(EA=>EA.generatorType===sA.generatorType);if(oA!==-1){let EA=$[oA].generatorValue+sA.generatorValue;$[oA]=new U(sA.generatorType,EA)}else{let EA=X[sA.generatorType].def+sA.generatorValue;$.push(new U(sA.generatorType,EA))}}$=$.filter(sA=>sA.generatorType!==i.sampleID&&sA.generatorType!==i.keyRange&&sA.generatorType!==i.velRange&&sA.generatorType!==i.endOper&&sA.generatorType!==i.instrument&&sA.generatorValue!==X[sA.generatorType].def);let BA=new OA;BA.keyRange=x,BA.velRange=q,BA.keyRange.min===0&&BA.keyRange.max===127&&(BA.keyRange.min=-1),BA.velRange.min===0&&BA.velRange.max===127&&(BA.velRange.min=-1),BA.isGlobal=!1,BA.sample=C.sample,BA.generators=$,BA.modulators=T,o.push(BA)}}if(A){let c=new OA;c.isGlobal=!0;for(let u=0;u<58;u++){if(pi.has(u))continue;let p={},S=X[u]?.def||0;p[S]=0;for(let w of o){let k=w.generators.find(G=>G.generatorType===u);if(k){let G=k.generatorValue;p[G]===void 0?p[G]=1:p[G]++}else p[S]++;let M;switch(u){default:continue;case i.decayVolEnv:M=i.keyNumToVolEnvDecay;break;case i.holdVolEnv:M=i.keyNumToVolEnvHold;break;case i.decayModEnv:M=i.keyNumToModEnvDecay;break;case i.holdModEnv:M=i.keyNumToModEnvHold}if(w.generators.find(G=>G.generatorType===M)!==void 0){p={};break}}if(Object.keys(p).length>0){let w=Object.entries(p).reduce((M,b)=>M[1]<b[1]?b:M,[0,0]),k=parseInt(w[0]);k!==S&&c.generators.push(new U(u,k)),o.forEach(M=>{let b=M.generators.findIndex(G=>G.generatorType===u);b!==-1?M.generators[b].generatorValue===k&&M.generators.splice(b,1):k!==S&&M.generators.push(new U(u,S))})}}let B=o.find(u=>!u.isGlobal).modulators.map(u=>_.copy(u));for(let u of B){let p=!0;for(let S of o){if(S.isGlobal||!p)continue;S.modulators.find(k=>_.isIdentical(k,u))||(p=!1)}if(p===!0){c.modulators.push(_.copy(u));for(let S of o){let w=S.modulators.find(k=>_.isIdentical(k,u));w.transformAmount===u.transformAmount&&S.modulators.splice(S.modulators.indexOf(w),1)}}}o.splice(0,0,c)}return o}var Vo=20;function gn(e,A,t,n,s,o,r){let E=r===0?0:1,a=new L(Vo+E*16);AA(a,Vo),H(a,A),H(a,t);let g=n*.4,l=Math.floor(g*-65536);AA(a,l),AA(a,2);let c=o-s,d=0;switch(r){default:case 0:E=0;break;case 1:d=0,E=1;break;case 3:d=1,E=1}return AA(a,E),E===1&&(AA(a,16),AA(a,d),AA(a,s),AA(a,c)),z("wsmp",a)}var P={none:0,modLfo:1,velocity:2,keyNum:3,volEnv:4,modEnv:5,pitchWheel:6,polyPressure:7,channelPressure:8,vibratoLfo:9,modulationWheel:129,volume:135,pan:138,expression:139,chorus:221,reverb:219,pitchWheelRange:256,fineTune:257,coarseTune:258},Cn=new _(219,0,i.reverbEffectsSend,1e3,0),En=new _(221,0,i.chorusEffectsSend,1e3,0),Bn=new _(129,0,i.vibLfoToPitch,0,0),cn=new _(13,0,i.vibLfoToPitch,0,0);var R={none:0,gain:1,reserved:2,pitch:3,pan:4,keyNum:5,chorusSend:128,reverbSend:129,modLfoFreq:260,modLfoDelay:261,vibLfoFreq:276,vibLfoDelay:277,volEnvAttack:518,volEnvDecay:519,volEnvRelease:521,volEnvSustain:522,volEnvDelay:523,volEnvHold:524,modEnvAttack:778,modEnvDecay:779,modEnvRelease:781,modEnvSustain:782,modEnvDelay:783,modEnvHold:784,filterCutoff:1280,filterQ:1281};var Mt=class{source;control;destination;scale;transform;constructor(A,t,n,s,o){this.source=A,this.control=t,this.destination=n,this.scale=s,this.transform=o}writeArticulator(){let A=new L(12);return H(A,this.source),H(A,this.control),H(A,this.destination),H(A,this.transform),AA(A,this.scale<<16),A}};function Zo(e,A){if(e)switch(A){default:return;case y.modulationWheel:return P.modulationWheel;case y.mainVolume:return P.volume;case y.pan:return P.pan;case y.expressionController:return P.expression;case y.chorusDepth:return P.chorus;case y.reverbDepth:return P.reverb}else switch(A){default:return;case j.noteOnKeyNum:return P.keyNum;case j.noteOnVelocity:return P.velocity;case j.noController:return P.none;case j.polyPressure:return P.polyPressure;case j.channelPressure:return P.channelPressure;case j.pitchWheel:return P.pitchWheel;case j.pitchWheelRange:return P.pitchWheelRange}}function Xo(e,A){switch(e){default:return;case i.initialAttenuation:return{dest:R.gain,amount:-A};case i.fineTune:return R.pitch;case i.pan:return R.pan;case i.keyNum:return R.keyNum;case i.reverbEffectsSend:return R.reverbSend;case i.chorusEffectsSend:return R.chorusSend;case i.freqModLFO:return R.modLfoFreq;case i.delayModLFO:return R.modLfoDelay;case i.delayVibLFO:return R.vibLfoDelay;case i.freqVibLFO:return R.vibLfoFreq;case i.delayVolEnv:return R.volEnvDelay;case i.attackVolEnv:return R.volEnvAttack;case i.holdVolEnv:return R.volEnvHold;case i.decayVolEnv:return R.volEnvDecay;case i.sustainVolEnv:return{dest:R.volEnvSustain,amount:1e3-A};case i.releaseVolEnv:return R.volEnvRelease;case i.delayModEnv:return R.modEnvDelay;case i.attackModEnv:return R.modEnvAttack;case i.holdModEnv:return R.modEnvHold;case i.decayModEnv:return R.modEnvDecay;case i.sustainModEnv:return{dest:R.modEnvSustain,amount:1e3-A};case i.releaseModEnv:return R.modEnvRelease;case i.initialFilterFc:return R.filterCutoff;case i.initialFilterQ:return R.filterQ}}function Wo(e,A){switch(e){default:return;case i.modEnvToFilterFc:return{source:P.modEnv,dest:R.filterCutoff,amt:A,isBipolar:!1};case i.modEnvToPitch:return{source:P.modEnv,dest:R.pitch,amt:A,isBipolar:!1};case i.modLfoToFilterFc:return{source:P.modLfo,dest:R.filterCutoff,amt:A,isBipolar:!0};case i.modLfoToVolume:return{source:P.modLfo,dest:R.gain,amt:A,isBipolar:!0};case i.modLfoToPitch:return{source:P.modLfo,dest:R.pitch,amt:A,isBipolar:!0};case i.vibLfoToPitch:return{source:P.vibratoLfo,dest:R.pitch,amt:A,isBipolar:!0};case i.keyNumToVolEnvHold:return{source:P.keyNum,dest:R.volEnvHold,amt:A,isBipolar:!0};case i.keyNumToVolEnvDecay:return{source:P.keyNum,dest:R.volEnvDecay,amt:A,isBipolar:!0};case i.keyNumToModEnvHold:return{source:P.keyNum,dest:R.modEnvHold,amt:A,isBipolar:!0};case i.keyNumToModEnvDecay:return{source:P.keyNum,dest:R.modEnvDecay,amt:A,isBipolar:!0};case i.scaleTuning:return{source:P.keyNum,dest:R.pitch,amt:A*128,isBipolar:!1}}}function _o(e){let A=Xo(e.generatorType,e.generatorValue),t=A,n=0,s=e.generatorValue;A?.amount!==void 0&&(s=A.amount,t=A.dest);let o=Wo(e.generatorType,e.generatorValue);if(o!==void 0)s=o.amt,t=o.dest,n=o.source;else if(t===void 0){Y(`Invalid generator type: ${e.generatorType}`);return}return new Mt(n,0,t,s,0)}function zo(e){if(e.transformType!==0){Y("Other transform types are not supported.");return}let A=Zo(e.sourceUsesCC,e.sourceIndex),t=e.sourceCurveType,n=e.sourcePolarity,s=e.sourceDirection;if(A===void 0){Y(`Invalid source: ${e.sourceIndex}, CC: ${e.sourceUsesCC}`);return}e.modulatorDestination===i.initialAttenuation&&(s=s===1?0:1);let o=Zo(e.secSrcUsesCC,e.secSrcIndex),r=e.secSrcCurveType,E=e.secSrcPolarity,a=e.secSrcDirection;if(o===void 0){Y(`Invalid secondary source: ${e.secSrcIndex}, CC: ${e.secSrcUsesCC}`);return}let g=Xo(e.modulatorDestination,e.transformAmount),l=g,c=e.transformAmount;g?.dest!==void 0&&(l=g.dest,c=g.amount);let d=Wo(e.modulatorDestination,e.transformAmount);if(d!==void 0)c=d.amt,o=A,r=t,E=n,a=s,t=GA.linear,n=d.isBipolar?1:0,s=0,A=d.source,l=d.dest;else if(l===void 0){Y(`Invalid destination: ${e.modulatorDestination}`);return}let B=0;return B|=r<<4,B|=E<<8,B|=a<<9,B|=t,B|=n<<14,B|=s<<15,new Mt(A,o,l,c,B)}var yi=new Set([i.sampleModes,i.initialAttenuation,i.keyRange,i.velRange,i.sampleID,i.fineTune,i.coarseTune,i.startAddrsOffset,i.startAddrsCoarseOffset,i.endAddrOffset,i.endAddrsCoarseOffset,i.startloopAddrsOffset,i.startloopAddrsCoarseOffset,i.endloopAddrsOffset,i.endloopAddrsCoarseOffset,i.overridingRootKey,i.exclusiveClass]);function hn(e){for(let o=0;o<e.generators.length;o++){let r=e.generators[o];(r.generatorType===i.delayVolEnv||r.generatorType===i.attackVolEnv||r.generatorType===i.holdVolEnv||r.generatorType===i.decayVolEnv||r.generatorType===i.releaseVolEnv||r.generatorType===i.delayModEnv||r.generatorType===i.attackModEnv||r.generatorType===i.holdModEnv||r.generatorType===i.decayModEnv)&&(e.generators[o]=new U(r.generatorType,Math.min(r.generatorValue,6386),!1))}for(let o=0;o<e.generators.length;o++){let r=e.generators[o],E;switch(r.generatorType){default:continue;case i.keyNumToVolEnvDecay:E=i.decayVolEnv;break;case i.keyNumToVolEnvHold:E=i.holdVolEnv;break;case i.keyNumToModEnvDecay:E=i.decayModEnv;break;case i.keyNumToModEnvHold:E=i.holdModEnv}let a=e.generators.find(u=>u.generatorType===E);if(a===void 0)continue;let g=r.generatorValue*-128,l=60/128*g,c=a.generatorValue-l,d=e.generators.indexOf(r),B=e.generators.indexOf(a);e.generators[B]=new U(E,c,!1),e.generators[d]=new U(r.generatorType,g,!1)}let A=e.generators.reduce((o,r)=>{if(yi.has(r.generatorType))return o;let E=_o(r);return E!==void 0?(o.push(E),m("%cSucceeded converting to DLS Articulator!",I.recognized)):Y("Failed converting to DLS Articulator!"),o},[]),t=e.modulators.reduce((o,r)=>{if(_.isIdentical(r,En,!0)||_.isIdentical(r,Cn,!0)||_.isIdentical(r,Bn,!0)||_.isIdentical(r,cn,!0))return o;let E=zo(r);return E!==void 0?(o.push(E),m("%cSucceeded converting to DLS Articulator!",I.recognized)):Y("Failed converting to DLS Articulator!"),o},[]);A.push(...t);let n=new L(8);AA(n,8),AA(n,A.length);let s=A.map(o=>o.writeArticulator());return z("art2",wA([n,...s]))}function jo(e,A){let t=new L(12);H(t,Math.max(e.keyRange.min,0)),H(t,e.keyRange.max),H(t,Math.max(e.velRange.min,0)),H(t,e.velRange.max),H(t,0);let n=e.getGeneratorValue(i.exclusiveClass,0);H(t,n),H(t,0);let s=z("rgnh",t),o=e.getGeneratorValue(i.overridingRootKey,e.sample.samplePitch);e.getGeneratorValue(i.scaleTuning,A.getGeneratorValue(i.scaleTuning,100))===0&&e.keyRange.max-e.keyRange.min===0&&(o=e.keyRange.min);let E=gn(e.sample,o,e.getGeneratorValue(i.fineTune,0)+e.getGeneratorValue(i.coarseTune,0)*100+e.sample.samplePitchCorrection,e.getGeneratorValue(i.initialAttenuation,0),e.sample.sampleLoopStartIndex+e.getGeneratorValue(i.startloopAddrsOffset,0)+e.getGeneratorValue(i.startloopAddrsCoarseOffset,0)*32768,e.sample.sampleLoopEndIndex+e.getGeneratorValue(i.endloopAddrsOffset,0)+e.getGeneratorValue(i.endloopAddrsCoarseOffset,0)*32768,e.getGeneratorValue(i.sampleModes,0)),a=new L(12);H(a,0),H(a,0),AA(a,1),AA(a,this.samples.indexOf(e.sample));let g=z("wlnk",a),l=new L(0);if(e.modulators.length+e.generators.length>0){let c=hn(e);l=z("lar2",c,!1,!0)}return z("rgn2",wA([s,E,g,l]),!1,!0)}function $o(e){FA(`%cWriting %c${e.presetName}%c...`,I.info,I.recognized,I.info);let A=Po(e),t=A.reduce((d,B)=>B.isGlobal?d:d+1,0),n=new L(12);AA(n,t);let s=(e.bank&127)<<8;e.bank===128&&(s|=1<<31),AA(n,s),AA(n,e.program&127);let o=z("insh",n),r=new L(0),E=A.find(d=>d.isGlobal===!0);if(E){let d=hn(E);r=z("lar2",d,!1,!0)}let a=wA(A.reduce((d,B)=>(B.isGlobal||d.push(jo.apply(this,[B,E])),d),[])),g=z("lrgn",a,!1,!0),l=z("INAM",fe(e.presetName)),c=z("INFO",l,!1,!0);return V(),z("ins ",wA([o,g,r,c]),!1,!0)}function Ar(){let e=wA(this.presets.map(A=>$o.apply(this,[A])));return z("lins",e,!1,!0)}function er(e){let A=new L(18);H(A,1),H(A,1),AA(A,e.sampleRate),AA(A,e.sampleRate*2),H(A,2),H(A,16);let t=z("fmt ",A),n=1;e.sampleLoopStartIndex+Math.abs(e.getAudioData().length-e.sampleLoopEndIndex)<2&&(n=0);let s=gn(e,e.samplePitch,e.samplePitchCorrection,0,e.sampleLoopStartIndex,e.sampleLoopEndIndex,n),o=e.getAudioData(),r;if(e.isCompressed){let g=new Int16Array(o.length);for(let l=0;l<o.length;l++)g[l]=o[l]*32767;r=z("data",new L(g.buffer))}else r=z("data",e.getRawData());let E=z("INAM",fe(e.sampleName)),a=z("INFO",E,!1,!0);return m(`%cSaved %c${e.sampleName}%c succesfully!`,I.recognized,I.value,I.recognized),z("wave",wA([t,s,r,a]),!1,!0)}function tr(){let e=0,A=[],t=this.samples.map(n=>{let s=er(n);return A.push(e),e+=s.length,s});return{data:z("wvpl",wA(t),!1,!0),indexes:A}}function nr(){FA("%cSaving DLS...",I.info);let e=new L(4);AA(e,this.presets.length);let A=z("colh",e);FA("%cWriting instruments...",I.info);let t=Ar.apply(this);m("%cSuccess!",I.recognized),V(),FA("%cWriting WAVE samples...",I.info);let n=tr.apply(this),s=n.data,o=n.indexes;m("%cSucceeded!",I.recognized),V();let r=new L(8+4*o.length);AA(r,8),AA(r,o.length);for(let c of o)AA(r,c);let E=z("ptbl",r);this.soundFontInfo.ICMT=(this.soundFontInfo.ICMT||"Soundfont")+`
|
|
15
|
-
Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let a=[];for(let[c,d]of Object.entries(this.soundFontInfo))c!=="ICMT"&&c!=="INAM"&&c!=="ICRD"&&c!=="IENG"&&c!=="ICOP"&&c!=="ISFT"&&c!=="ISBJ"||a.push(z(c,fe(d),!0));let g=z("INFO",wA(a),!1,!0),l=new L(A.length+t.length+E.length+s.length+g.length+4);return TA(l,"DLS "),l.set(wA([A,t,E,s,g]),4),m("%cSaved succesfully!",I.recognized),V(),z("RIFF",l)}var Si=48e3,ve=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;sampleLink;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;useCount=0;sampleData=void 0;constructor(A,t,n,s,o,r,E,a){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLink=o,this.sampleType=r,this.sampleLoopStartIndex=E,this.sampleLoopEndIndex=a,this.isCompressed=(r&16)>0}getRawData(){let A=new Uint8Array(this.sampleData.length*2);for(let t=0;t<this.sampleData.length;t++){let n=Math.floor(this.sampleData[t]*32768);A[t*2]=n&255,A[t*2+1]=n>>8&255}return A}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let o=0;o<s.length;o++)s[o]=t[Math.floor(o*(1/n))];t=s,this.sampleRate=A,this.sampleLoopStartIndex=Math.floor(this.sampleLoopStartIndex*n),this.sampleLoopEndIndex=Math.floor(this.sampleLoopEndIndex*n),this.sampleData=t}compressSample(A,t){if(!this.isCompressed)try{let n=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Si),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.sampleType|=16,this.isCompressed=!0}catch{Y(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),this.isCompressed=!1,this.compressedData=void 0,this.sampleType&=239}}getAudioData(){return this.sampleData}};var He=class{instrumentName="";instrumentZones=[];_useCount=0;get useCount(){return this._useCount}addUseCount(){this._useCount++,this.instrumentZones.forEach(A=>A.useCount++)}removeUseCount(){this._useCount--;for(let A=0;A<this.instrumentZones.length;A++)this.safeDeleteZone(A)&&A--}deleteInstrument(){this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}safeDeleteZone(A){return this.instrumentZones[A].useCount--,this.instrumentZones[A].useCount<1?(this.deleteZone(A),!0):!1}deleteZone(A){this.instrumentZones[A].deleteZone(),this.instrumentZones.splice(A,1)}};var Ye=class{parentSoundBank;presetName="";program=0;bank=0;presetZones=[];foundSamplesAndGenerators=[];library=0;genre=0;morphology=0;constructor(A){this.parentSoundBank=A;for(let t=0;t<128;t++)this.foundSamplesAndGenerators[t]=[]}isDrumPreset(A,t=!1){let n=A&&this.parentSoundBank.isXGBank;return
|
|
15
|
+
Converted from SF2 to DLS using SpessaSynth`,this.soundFontInfo.ISFT="SpessaSynth";let a=[];for(let[c,d]of Object.entries(this.soundFontInfo))c!=="ICMT"&&c!=="INAM"&&c!=="ICRD"&&c!=="IENG"&&c!=="ICOP"&&c!=="ISFT"&&c!=="ISBJ"||a.push(z(c,fe(d),!0));let g=z("INFO",wA(a),!1,!0),l=new L(A.length+t.length+E.length+s.length+g.length+4);return TA(l,"DLS "),l.set(wA([A,t,E,s,g]),4),m("%cSaved succesfully!",I.recognized),V(),z("RIFF",l)}var Si=48e3,ve=class{sampleName;sampleRate;samplePitch;samplePitchCorrection;sampleLink;sampleType;sampleLoopStartIndex;sampleLoopEndIndex;isCompressed;compressedData=void 0;useCount=0;sampleData=void 0;constructor(A,t,n,s,o,r,E,a){this.sampleName=A,this.sampleRate=t,this.samplePitch=n,this.samplePitchCorrection=s,this.sampleLink=o,this.sampleType=r,this.sampleLoopStartIndex=E,this.sampleLoopEndIndex=a,this.isCompressed=(r&16)>0}getRawData(){let A=new Uint8Array(this.sampleData.length*2);for(let t=0;t<this.sampleData.length;t++){let n=Math.floor(this.sampleData[t]*32768);A[t*2]=n&255,A[t*2+1]=n>>8&255}return A}resampleData(A){let t=this.getAudioData(),n=A/this.sampleRate,s=new Float32Array(Math.floor(t.length*n));for(let o=0;o<s.length;o++)s[o]=t[Math.floor(o*(1/n))];t=s,this.sampleRate=A,this.sampleLoopStartIndex=Math.floor(this.sampleLoopStartIndex*n),this.sampleLoopEndIndex=Math.floor(this.sampleLoopEndIndex*n),this.sampleData=t}compressSample(A,t){if(!this.isCompressed)try{let n=this.getAudioData();(this.sampleRate<8e3||this.sampleRate>96e3)&&(this.resampleData(Si),n=this.getAudioData()),this.compressedData=t([n],1,this.sampleRate,A),this.sampleType|=16,this.isCompressed=!0}catch{Y(`Failed to compress ${this.sampleName}. Leaving as uncompressed!`),this.isCompressed=!1,this.compressedData=void 0,this.sampleType&=239}}getAudioData(){return this.sampleData}};var He=class{instrumentName="";instrumentZones=[];_useCount=0;get useCount(){return this._useCount}addUseCount(){this._useCount++,this.instrumentZones.forEach(A=>A.useCount++)}removeUseCount(){this._useCount--;for(let A=0;A<this.instrumentZones.length;A++)this.safeDeleteZone(A)&&A--}deleteInstrument(){this.instrumentZones.forEach(A=>A.deleteZone()),this.instrumentZones.length=0}safeDeleteZone(A){return this.instrumentZones[A].useCount--,this.instrumentZones[A].useCount<1?(this.deleteZone(A),!0):!1}deleteZone(A){this.instrumentZones[A].deleteZone(),this.instrumentZones.splice(A,1)}};var Ye=class{parentSoundBank;presetName="";program=0;bank=0;presetZones=[];foundSamplesAndGenerators=[];library=0;genre=0;morphology=0;constructor(A){this.parentSoundBank=A;for(let t=0;t<128;t++)this.foundSamplesAndGenerators[t]=[]}isDrumPreset(A,t=!1){let n=A&&this.parentSoundBank.isXGBank;return this.bank===128||n&&jA(this.bank)&&(this.bank!==126||t)}deletePreset(){this.presetZones.forEach(A=>A.deleteZone()),this.presetZones.length=0}deleteZone(A){this.presetZones[A].deleteZone(),this.presetZones.splice(A,1)}preload(A,t){for(let n=A;n<t+1;n++)for(let s=0;s<128;s++)this.getSamplesAndGenerators(n,s).forEach(o=>{o.sample.isSampleLoaded||o.sample.getAudioData()})}preloadSpecific(A,t){this.getSamplesAndGenerators(A,t).forEach(n=>{n.sample.isSampleLoaded||n.sample.getAudioData()})}getSamplesAndGenerators(A,t){let n=this.foundSamplesAndGenerators[A][t];if(n)return n;if(this.presetZones.length<1)return[];function s(B,u){return u>=B.min&&u<=B.max}function o(B,u){B.push(...u.filter(p=>!B.find(S=>S.generatorType===p.generatorType)))}function r(B,u){B.push(...u.filter(p=>!B.find(S=>_.isIdentical(p,S))))}let E=[],a=this.presetZones[0].isGlobal?[...this.presetZones[0].generators]:[],g=this.presetZones[0].isGlobal?[...this.presetZones[0].modulators]:[],l=this.presetZones[0].isGlobal?this.presetZones[0].keyRange:{min:0,max:127},c=this.presetZones[0].isGlobal?this.presetZones[0].velRange:{min:0,max:127};return this.presetZones.filter(B=>s(B.hasKeyRange?B.keyRange:l,A)&&s(B.hasVelRange?B.velRange:c,t)&&!B.isGlobal).forEach(B=>{if(B.instrument.instrumentZones.length<1)return;let u=B.generators,p=B.modulators,S=B.instrument.instrumentZones[0],w=S.isGlobal?[...S.generators]:[],k=S.isGlobal?[...S.modulators]:[],M=S.isGlobal?S.keyRange:{min:0,max:127},b=S.isGlobal?S.velRange:{min:0,max:127};B.instrument.instrumentZones.filter(C=>s(C.hasKeyRange?C.keyRange:M,A)&&s(C.hasVelRange?C.velRange:b,t)&&!C.isGlobal).forEach(C=>{let x=[...C.generators],q=[...C.modulators];o(u,a),o(x,w),r(p,g),r(q,k),r(q,this.parentSoundBank.defaultModulators);let gA=[...q];for(let tA=0;tA<p.length;tA++){let T=p[tA],$=gA.findIndex(BA=>_.isIdentical(T,BA));$!==-1?gA[$]=gA[$].sumTransform(T):gA.push(T)}E.push({instrumentGenerators:x,presetGenerators:u,modulators:gA,sample:C.sample,sampleID:C.generators.find(tA=>tA.generatorType===i.sampleID).generatorValue})})}),this.foundSamplesAndGenerators[A][t]=E,E}};var Je=class e{soundFontInfo={};presets=[];samples=[];instruments=[];defaultModulators=Os.map(A=>_.copy(A));isXGBank=!1;constructor(A=void 0){A?.presets&&(this.presets.push(...A.presets),this.soundFontInfo=A.info)}static mergeSoundBanks(...A){let t=A.shift(),n=t.presets;for(;A.length;)A.shift().presets.forEach(o=>{n.find(r=>r.bank===o.bank&&r.program===o.program)===void 0&&n.push(o)});return new e({presets:n,info:t.soundFontInfo})}static getDummySoundfontFile(){let A=new e,t=new ve("Saw",44100,65,20,0,0,0,127);t.sampleData=new Float32Array(128);for(let g=0;g<128;g++)t.sampleData[g]=g/128*2-1;A.samples.push(t);let n=new OA;n.isGlobal=!0,n.generators.push(new U(i.initialAttenuation,375)),n.generators.push(new U(i.releaseVolEnv,-1e3)),n.generators.push(new U(i.sampleModes,1));let s=new OA;s.sample=t;let o=new OA;o.sample=t,o.generators.push(new U(i.fineTune,-9));let r=new He;r.instrumentName="Saw Wave",r.instrumentZones.push(n),r.instrumentZones.push(s),r.instrumentZones.push(o),A.instruments.push(r);let E=new Te;E.instrument=r;let a=new Ye(A);return a.presetName="Saw Wave",a.presetZones.push(E),A.presets.push(a),A.soundFontInfo.ifil="2.1",A.soundFontInfo.isng="EMU8000",A.soundFontInfo.INAM="Dummy",A._parseInternal(),A.write().buffer}_parseInternal(){this.isXGBank=!1;let A=new Set([0,1,2,3,4,5,6,7,8,9,16,17,24,25,27,28,29,30,31,32,33,40,41,48,64,65,66,126,127]);for(let t of this.presets)if(jA(t.bank)&&(this.isXGBank=!0,!A.has(t.program))){this.isXGBank=!1;break}}trimSoundBank(A){let t=this;function n(o,r){let E=0;for(let a=0;a<o.instrumentZones.length;a++){let g=o.instrumentZones[a];if(g.isGlobal)continue;let l=g.keyRange,c=g.velRange,d=!1;for(let B of r)if(B.key>=l.min&&B.key<=l.max&&B.velocity>=c.min&&B.velocity<=c.max){d=!0;break}d||(m(`%c${g.sample.sampleName} %cremoved from %c${o.instrumentName}%c. Use count: %c${g.useCount-1}`,I.recognized,I.info,I.recognized,I.info,I.recognized),o.safeDeleteZone(a)&&(E++,a--,m(`%c${g.sample.sampleName} %cdeleted`,I.recognized,I.info)),g.sample.useCount<1&&t.deleteSample(g.sample))}return E}VA("%cTrimming soundfont...",I.info);let s=A.getUsedProgramsAndKeys(t);FA("%cModifying soundfont...",I.info),m("Detected keys for midi:",s);for(let o=0;o<t.presets.length;o++){let r=t.presets[o],E=r.bank+":"+r.program,a=s[E];if(a===void 0)m(`%cDeleting preset %c${r.presetName}%c and its zones`,I.info,I.recognized,I.info),t.deletePreset(r),o--;else{let g=[...a].map(c=>{let d=c.split("-");return{key:parseInt(d[0]),velocity:parseInt(d[1])}});FA(`%cTrimming %c${r.presetName}`,I.info,I.recognized),m(`Keys for ${r.presetName}:`,g);let l=0;for(let c=0;c<r.presetZones.length;c++){let d=r.presetZones[c];if(d.isGlobal)continue;let B=d.keyRange,u=d.velRange,p=!1;for(let S of g)if(S.key>=B.min&&S.key<=B.max&&S.velocity>=u.min&&S.velocity<=u.max){p=!0;let w=n(d.instrument,g);m(`%cTrimmed off %c${w}%c zones from %c${d.instrument.instrumentName}`,I.info,I.recognized,I.info,I.recognized);break}p||(l++,r.deleteZone(c),d.instrument.useCount<1&&t.deleteInstrument(d.instrument),c--)}m(`%cTrimmed off %c${l}%c zones from %c${r.presetName}`,I.info,I.recognized,I.info,I.recognized),V()}}t.removeUnusedElements(),t.soundFontInfo.ICMT=`NOTE: This soundfont was trimmed by SpessaSynth to only contain presets used in "${A.midiName}"
|
|
16
16
|
|
|
17
17
|
`+t.soundFontInfo.ICMT,m("%cSoundfont modified!",I.recognized),V(),V()}removeUnusedElements(){this.instruments.forEach(A=>{A.useCount<1&&A.instrumentZones.forEach(t=>{t.isGlobal||t.sample.useCount--})}),this.instruments=this.instruments.filter(A=>A.useCount>0),this.samples=this.samples.filter(A=>A.useCount>0)}deleteInstrument(A){if(A.useCount>0)throw new Error(`Cannot delete an instrument that has ${A.useCount} usages.`);this.instruments.splice(this.instruments.indexOf(A),1),A.deleteInstrument(),this.removeUnusedElements()}deletePreset(A){A.deletePreset(),this.presets.splice(this.presets.indexOf(A),1),this.removeUnusedElements()}deleteSample(A){if(A.useCount>0)throw new Error(`Cannot delete sample that has ${A.useCount} usages.`);this.samples.splice(this.samples.indexOf(A),1),this.removeUnusedElements()}getPresetNoFallback(A,t,n=!1){let s=A===128||n&&jA(A),o;if(s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o)return o;if(s&&n){let r=this.presets.find(E=>E.isDrumPreset(n)&&E.program===t);if(r)return r}}getPreset(A,t,n=!1){let s=A===128||n&&jA(A),o;return s?o=this.presets.find(r=>r.bank===A&&r.isDrumPreset(n)&&r.program===t):o=this.presets.find(r=>r.bank===A&&r.program===t),o||(s?(o=this.presets.find(r=>r.isDrumPreset(n)&&r.program===t),o||(o=this.presets.find(r=>r.isDrumPreset(n)))):o=this.presets.find(r=>r.program===t&&!r.isDrumPreset(n)),o&&Y(`%cPreset ${A}.${t} not found. Replaced with %c${o.presetName} (${o.bank}.${o.program})`,I.warn,I.recognized),o||(Y(`Preset ${t} not found. Defaulting to`,this.presets[0].presetName),o=this.presets[0]),o)}getPresetByName(A){let t=this.presets.find(n=>n.presetName===A);return t||(Y("Preset not found. Defaulting to:",this.presets[0].presetName),t=this.presets[0]),t}parsingError(A){throw new Error(`SF parsing error: ${A} The file may be corrupted.`)}destroySoundBank(){delete this.presets,delete this.instruments,delete this.samples}};Je.prototype.write=Oo;Je.prototype.writeDLS=nr;function sr(e){FA("%cLoading instruments...",I.info);for(let A=0;A<this.instrumentAmount;A++)this.readDLSInstrument(IA(e.chunkData));V()}var ln=class extends Ye{constructor(A,t,n){super(A),this.program=n&127;let s=t>>8&127,o=t&127;s>0?this.bank=s:this.bank=o,t>>31&&(this.bank=128),this.DLSInstrument=new He,this.DLSInstrument.addUseCount();let E=new Te;E.instrument=this.DLSInstrument,this.presetZones=[E]}};function or(e){this.verifyHeader(e,"LIST"),this.verifyText(eA(e.chunkData,4),"ins ");let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(B=>B.header==="insh");if(!t)throw V(),new Error("No instrument header!");let n=N(t.chunkData,4),s=N(t.chunkData,4),o=N(t.chunkData,4),r=new ln(this,s,o),E="unnamedPreset",a=ZA(A,"INFO");if(a){let B=IA(a.chunkData);for(;B.header!=="INAM";)B=IA(a.chunkData);E=eA(B.chunkData,B.chunkData.length).trim()}r.presetName=E,r.DLSInstrument.instrumentName=E,VA(`%cParsing %c"${E}"%c...`,I.info,I.recognized,I.info);let g=ZA(A,"lrgn");if(!g)throw V(),new Error("No region list!");let l=new OA;l.isGlobal=!0;let c=ZA(A,"lart"),d=ZA(A,"lar2");(d!==void 0||c!==void 0)&&this.readLart(c,d,l),l.generators=l.generators.filter(B=>B.generatorValue!==X[B.generatorType].def),l.modulators.find(B=>B.modulatorDestination===i.reverbEffectsSend)===void 0&&l.modulators.push(_.copy(Cn)),l.modulators.find(B=>B.modulatorDestination===i.chorusEffectsSend)===void 0&&l.modulators.push(_.copy(En)),r.DLSInstrument.instrumentZones.push(l);for(let B=0;B<n;B++){let u=IA(g.chunkData);this.verifyHeader(u,"LIST");let p=eA(u.chunkData,4);p!=="rgn "&&p!=="rgn2"&&(V(),this.parsingError(`Invalid DLS region! Expected "rgn " or "rgn2" got "${p}"`));let S=this.readRegion(u);S&&r.DLSInstrument.instrumentZones.push(S)}this.presets.push(r),this.instruments.push(r.DLSInstrument),V()}function rr(e){let A,t=!1;switch(e){default:case P.modLfo:case P.vibratoLfo:case P.coarseTune:case P.fineTune:case P.modEnv:return;case P.keyNum:A=j.noteOnKeyNum;break;case P.none:A=j.noController;break;case P.modulationWheel:A=y.modulationWheel,t=!0;break;case P.pan:A=y.pan,t=!0;break;case P.reverb:A=y.reverbDepth,t=!0;break;case P.chorus:A=y.chorusDepth,t=!0;break;case P.expression:A=y.expressionController,t=!0;break;case P.volume:A=y.mainVolume,t=!0;break;case P.velocity:A=j.noteOnVelocity;break;case P.polyPressure:A=j.polyPressure;break;case P.channelPressure:A=j.channelPressure;break;case P.pitchWheel:A=j.pitchWheel;break;case P.pitchWheelRange:A=j.pitchWheelRange;break}if(A===void 0)throw new Error(`Unknown DLS Source: ${e}`);return{enum:A,isCC:t}}function Di(e,A){switch(e){default:case R.none:return;case R.pan:return i.pan;case R.gain:return{gen:i.initialAttenuation,newAmount:A*-1};case R.pitch:return i.fineTune;case R.keyNum:return i.overridingRootKey;case R.volEnvDelay:return i.delayVolEnv;case R.volEnvAttack:return i.attackVolEnv;case R.volEnvHold:return i.holdVolEnv;case R.volEnvDecay:return i.decayVolEnv;case R.volEnvSustain:return{gen:i.sustainVolEnv,newAmount:1e3-A};case R.volEnvRelease:return i.releaseVolEnv;case R.modEnvDelay:return i.delayModEnv;case R.modEnvAttack:return i.attackModEnv;case R.modEnvHold:return i.holdModEnv;case R.modEnvDecay:return i.decayModEnv;case R.modEnvSustain:return{gen:i.sustainModEnv,newAmount:(1e3-A)/10};case R.modEnvRelease:return i.releaseModEnv;case R.filterCutoff:return i.initialFilterFc;case R.filterQ:return i.initialFilterQ;case R.chorusSend:return i.chorusEffectsSend;case R.reverbSend:return i.reverbEffectsSend;case R.modLfoFreq:return i.freqModLFO;case R.modLfoDelay:return i.delayModLFO;case R.vibLfoFreq:return i.freqVibLFO;case R.vibLfoDelay:return i.delayVibLFO}}function ki(e,A){return e===P.vibratoLfo&&A===R.pitch?i.vibLfoToPitch:e===P.modLfo&&A===R.pitch?i.modLfoToPitch:e===P.modLfo&&A===R.filterCutoff?i.modLfoToFilterFc:e===P.modLfo&&A===R.gain?i.modLfoToVolume:e===P.modEnv&&A===R.filterCutoff?i.modEnvToFilterFc:e===P.modEnv&&A===R.pitch?i.modEnvToPitch:void 0}function ir(e,A,t,n,s){let o=ki(e,t),r,E,a=!1,g=!1,l=s;if(o===void 0){let w=Di(t,s);if(w===void 0){Y(`Invalid destination: ${t}`);return}if(r=w,w.newAmount!==void 0&&(l=w.newAmount,r=w.gen),E=rr(e),E===void 0){Y(`Invalid source: ${e}`);return}}else r=o,a=!0,E={enum:j.noController,isCC:!1},g=!0;let c=rr(A);if(c===void 0){Y(`Invalid control: ${A}`);return}let d;if(g)d=0;else{let w=n&15,k=n>>10&15;k===GA.linear&&w!==GA.linear&&(k=w);let M=n>>14&1,b=n>>15&1;r===i.initialAttenuation&&s<0&&(b=1),d=re(k,M,b,E.isCC,E.enum)}r===i.initialAttenuation&&(l=Math.max(960,Math.min(0,l)));let B=n>>4&15,u=n>>8&1,p=n>>9&1,S=re(B,u,p,c.isCC,c.enum);if(a){let w=S;S=d,d=w}return new _(d,S,r,l,0)}function ss(e,A){let t=e.chunkData,n=[],s=[];N(t,4);let o=N(t,4);for(let r=0;r<o;r++){let E=N(t,2),a=N(t,2),g=N(t,2),l=N(t,2),d=(N(t,4)|0)>>16;if(E===0&&a===0&&l===0){let B;switch(g){case R.pan:B=new U(i.pan,d);break;case R.gain:B=new U(i.initialAttenuation,-d*10/.4);break;case R.filterCutoff:B=new U(i.initialFilterFc,d);break;case R.filterQ:B=new U(i.initialFilterQ,d);break;case R.modLfoFreq:B=new U(i.freqModLFO,d);break;case R.modLfoDelay:B=new U(i.delayModLFO,d);break;case R.vibLfoFreq:B=new U(i.freqVibLFO,d);break;case R.vibLfoDelay:B=new U(i.delayVibLFO,d);break;case R.volEnvDelay:B=new U(i.delayVolEnv,d);break;case R.volEnvAttack:B=new U(i.attackVolEnv,d);break;case R.volEnvHold:B=new U(i.holdVolEnv,d,!1);break;case R.volEnvDecay:B=new U(i.decayVolEnv,d,!1);break;case R.volEnvRelease:B=new U(i.releaseVolEnv,d);break;case R.volEnvSustain:let u=1e3-d;B=new U(i.sustainVolEnv,u);break;case R.modEnvDelay:B=new U(i.delayModEnv,d);break;case R.modEnvAttack:B=new U(i.attackModEnv,d);break;case R.modEnvHold:B=new U(i.holdModEnv,d,!1);break;case R.modEnvDecay:B=new U(i.decayModEnv,d,!1);break;case R.modEnvRelease:B=new U(i.releaseModEnv,d);break;case R.modEnvSustain:let p=1e3-d;B=new U(i.sustainModEnv,p);break;case R.reverbSend:B=new U(i.reverbEffectsSend,d);break;case R.chorusSend:B=new U(i.chorusEffectsSend,d);break;case R.pitch:let S=Math.floor(d/100),w=Math.floor(d-S*100);B=new U(i.fineTune,w),n.push(new U(i.coarseTune,S));break}B&&n.push(B)}else{let B=!0;if(a===P.none)if(E===P.modLfo&&g===R.pitch)n.push(new U(i.modLfoToPitch,d));else if(E===P.modLfo&&g===R.gain)n.push(new U(i.modLfoToVolume,d));else if(E===P.modLfo&&g===R.filterCutoff)n.push(new U(i.modLfoToFilterFc,d));else if(E===P.vibratoLfo&&g===R.pitch)n.push(new U(i.vibLfoToPitch,d));else if(E===P.modEnv&&g===R.pitch)n.push(new U(i.modEnvToPitch,d));else if(E===P.modEnv&&g===R.filterCutoff)n.push(new U(i.modEnvToFilterFc,d));else if(E===P.keyNum&&g===R.pitch)n.push(new U(i.scaleTuning,d/128));else if(E===P.keyNum&&g===R.volEnvHold){n.push(new U(i.keyNumToVolEnvHold,d/-128));let u=Math.round(60/128*d);n.forEach(p=>{p.generatorType===i.holdVolEnv&&(p.generatorValue+=u)})}else if(E===P.keyNum&&g===R.volEnvDecay){n.push(new U(i.keyNumToVolEnvDecay,d/-128));let u=Math.round(60/128*d);n.forEach(p=>{p.generatorType===i.decayVolEnv&&(p.generatorValue+=u)})}else if(E===P.keyNum&&g===R.modEnvHold){n.push(new U(i.keyNumToModEnvHold,d/-128));let u=Math.round(60/128*d);n.forEach(p=>{p.generatorType===i.holdModEnv&&(p.generatorValue+=u)})}else if(E===P.keyNum&&g===R.modEnvDecay){n.push(new U(i.keyNumToModEnvDecay,d/-128));let u=Math.round(60/128*d);n.forEach(p=>{p.generatorType===i.decayModEnv&&(p.generatorValue+=u)})}else B=!1;else B=!1;if(B===!1){let u=ir(E,a,g,l,d);u?(s.push(u),m("%cSucceeded converting to SF2 Modulator!",I.recognized)):Y("Failed converting to SF2 Modulator!")}}}return A&&s.push(_.copy(Bn),_.copy(cn)),{modulators:s,generators:n}}function ar(e,A,t){if(e)for(;e.chunkData.currentIndex<e.chunkData.length;){let n=IA(e.chunkData);this.verifyHeader(n,"art1","art2");let s=ss(n,!0);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}if(A)for(;A.chunkData.currentIndex<A.chunkData.length;){let n=IA(A.chunkData);this.verifyHeader(n,"art2","art1");let s=ss(n,!1);t.generators.push(...s.generators),t.modulators.push(...s.modulators)}}var Qn=class extends OA{constructor(A,t){super(),this.keyRange=A,this.velRange=t,this.isGlobal=!0}setWavesample(A,t,n,s,o,r,E){t!==0&&this.generators.push(new U(i.sampleModes,t)),this.generators.push(new U(i.initialAttenuation,A)),this.isGlobal=!1,E-=o.samplePitchCorrection;let a=Math.trunc(E/100);a!==0&&this.generators.push(new U(i.coarseTune,a));let g=E-a*100;if(g!==0&&this.generators.push(new U(i.fineTune,g)),t!==0){let l=n.start-o.sampleLoopStartIndex,c=n.end-o.sampleLoopEndIndex;if(l!==0){let d=l%32768;this.generators.push(new U(i.startloopAddrsOffset,d));let B=Math.trunc(l/32768);B!==0&&this.generators.push(new U(i.startloopAddrsCoarseOffset,B))}if(c!==0){let d=c%32768;this.generators.push(new U(i.endloopAddrsOffset,d));let B=Math.trunc(c/32768);B!==0&&this.generators.push(new U(i.endloopAddrsCoarseOffset,B))}}s!==o.samplePitch&&this.generators.push(new U(i.overridingRootKey,s)),this.generators.push(new U(i.sampleID,r)),this.sample=o,o.useCount++}};function Ir(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(IA(e.chunkData));let t=A.find(q=>q.header==="rgnh"),n=N(t.chunkData,2),s=N(t.chunkData,2),o=N(t.chunkData,2),r=N(t.chunkData,2);o===0&&r===0&&(r=127,o=0),n===0&&s===0&&(s=127,n=0);let E=new Qn({min:n,max:s},{min:o,max:r});N(t.chunkData,2);let a=N(t.chunkData,2);a!==0&&E.generators.push(new U(i.exclusiveClass,a));let g=ZA(A,"lart"),l=ZA(A,"lar2");this.readLart(g,l,E),E.isGlobal=!1;let c=A.find(q=>q.header==="wsmp");N(c.chunkData,4);let d=N(c.chunkData,2),B=Ne(c.chunkData[c.chunkData.currentIndex++],c.chunkData[c.chunkData.currentIndex++]),p=(N(c.chunkData,4)|0)/-655360;N(c.chunkData,4);let S=N(c.chunkData,4),w,k={start:0,end:0};if(S===0)w=0;else{N(c.chunkData,4),N(c.chunkData,4)===0?w=1:w=3,k.start=N(c.chunkData,4);let gA=N(c.chunkData,4);k.end=k.start+gA}let M=A.find(q=>q.header==="wlnk");if(M===void 0)return;N(M.chunkData,2),N(M.chunkData,2),N(M.chunkData,4);let b=N(M.chunkData,4),G=this.samples[b];if(G===void 0)throw new Error("Invalid sample ID!");let x=(p||G.sampleDbAttenuation)*10/.4;return E.setWavesample(x,w,k,d,G,b,B),E}var dn=class extends ve{sampleDbAttenuation;sampleData;constructor(A,t,n,s,o,r,E,a){super(A,t,n,s,0,1,o,r),this.sampleData=E,this.sampleDbAttenuation=a}getAudioData(){return this.sampleData}getRawData(){if(this.isCompressed){if(!this.compressedData)throw new Error("Compressed but no data?? This shouldn't happen!!");return this.compressedData}return super.getRawData()}};var gr={PCM:1,ALAW:6};function wi(e,A){let t=Math.pow(2,A*8-1),n=Math.pow(2,A*8),s,o=!1;A===1?(s=255,o=!0):s=t;let r=e.size/A,E=new Float32Array(r);for(let a=0;a<E.length;a++){let g=N(e.chunkData,A);o?E[a]=g/s-.5:(g>=t&&(g-=n),E[a]=g/s)}return E}function Fi(e,A){let t=e.size/A,n=new Float32Array(t);for(let s=0;s<n.length;s++){let o=N(e.chunkData,A),r=o^85;r&=127;let E=r>>4,a=r&15;E>0&&(a+=16),a=(a<<4)+8,E>1&&(a=a<<E-1);let g=o>127?a:-a;n[s]=g/32678}return n}function Cr(e){FA("%cLoading Wave samples...",I.recognized);let A=0;for(;e.chunkData.currentIndex<e.chunkData.length;){let t=IA(e.chunkData);this.verifyHeader(t,"LIST"),this.verifyText(eA(t.chunkData,4),"wave");let n=[];for(;t.chunkData.currentIndex<t.chunkData.length;)n.push(IA(t.chunkData));let s=n.find(G=>G.header==="fmt ");if(!s)throw new Error("No fmt chunk in the wave file!");let o=N(s.chunkData,2),r=N(s.chunkData,2);if(r!==1)throw new Error(`Only mono samples are supported. Fmt reports ${r} channels`);let E=N(s.chunkData,4);N(s.chunkData,4),N(s.chunkData,2);let g=N(s.chunkData,2)/8,l=!1,c=n.find(G=>G.header==="data");c||this.parsingError("No data chunk in the WAVE chunk!");let d;switch(o){default:l=!0,d=new Float32Array(c.size/g);break;case gr.PCM:d=wi(c,g);break;case gr.ALAW:d=Fi(c,g);break}let B=ZA(n,"INFO"),u=`Unnamed ${A}`;if(B){let G=IA(B.chunkData);for(;G.header!=="INAM"&&B.chunkData.currentIndex<B.chunkData.length;)G=IA(B.chunkData);G.header==="INAM"&&(u=eA(G.chunkData,G.size).trim())}let p=60,S=0,w=0,k=d.length-1,M=0,b=n.find(G=>G.header==="wsmp");if(b){N(b.chunkData,4),p=N(b.chunkData,2),S=Ne(b.chunkData[b.chunkData.currentIndex++],b.chunkData[b.chunkData.currentIndex++]);let G=Math.trunc(S/100);if(p+=G,S-=G*100,M=(N(b.chunkData,4)|0)/-655360,N(b.chunkData,4),N(b.chunkData,4)===1){N(b.chunkData,8),w=N(b.chunkData,4);let q=N(b.chunkData,4);k=w+q}}else Y("No wsmp chunk in wave... using sane defaults.");l&&console.error(`Failed to load '${u}': Unsupported format: (${o})`),this.samples.push(new dn(u,E,p,S,w,k,d,M)),A++,m(`%cLoaded sample %c${u}`,I.info,I.recognized)}V()}var we=class extends Je{constructor(A){super(),this.dataArray=new L(A),VA("%cParsing DLS...",I.info),this.dataArray||(V(),this.parsingError("No data provided!"));let t=IA(this.dataArray,!1);this.verifyHeader(t,"riff"),this.verifyText(eA(this.dataArray,4).toLowerCase(),"dls ");let n=[];for(;this.dataArray.currentIndex<this.dataArray.length;)n.push(IA(this.dataArray));this.soundFontInfo.ifil="2.1",this.soundFontInfo.isng="EMU8000",this.soundFontInfo.INAM="Unnamed DLS",this.soundFontInfo.IENG="Unknown",this.soundFontInfo.IPRD="SpessaSynth DLS",this.soundFontInfo.ICRD=new Date().toDateString();let s=ZA(n,"INFO");if(s)for(;s.chunkData.currentIndex<s.chunkData.length;){let a=IA(s.chunkData);this.soundFontInfo[a.header]=eA(a.chunkData,a.size)}this.soundFontInfo.ICMT=this.soundFontInfo.ICMT||"(No description)",this.soundFontInfo.ISBJ&&(this.soundFontInfo.ICMT+=`
|
|
18
18
|
`+this.soundFontInfo.ISBJ,delete this.soundFontInfo.ISBJ),this.soundFontInfo.ICMT+=`
|
|
19
19
|
Converted from DLS to SF2 with SpessaSynth`;for(let[a,g]of Object.entries(this.soundFontInfo))m(`%c"${a}": %c"${g}"`,I.info,I.recognized);let o=n.find(a=>a.header==="colh");o||(V(),this.parsingError("No colh chunk!")),this.instrumentAmount=N(o.chunkData,4),m(`%cInstruments amount: %c${this.instrumentAmount}`,I.info,I.recognized);let r=ZA(n,"wvpl");r||(V(),this.parsingError("No wvpl chunk!")),this.readDLSSamples(r);let E=ZA(n,"lins");E||(V(),this.parsingError("No lins chunk!")),this.readDLSInstrumentList(E),this.presets.sort((a,g)=>a.program-g.program+(a.bank-g.bank)),this._parseInternal(),m(`%cParsing finished! %c"${this.soundFontInfo.INAM||"UNNAMED"}"%c has %c${this.presets.length} %cpresets,
|
|
20
20
|
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),V()}verifyHeader(A,...t){for(let n of t)if(A.header.toLowerCase()===n.toLowerCase())return;V(),this.parsingError(`Invalid DLS chunk header! Expected "${t.toString()}" got "${A.header.toLowerCase()}"`)}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`FourCC error: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"`))}parsingError(A){throw new Error(`DLS parse error: ${A} The file may be corrupted.`)}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};we.prototype.readDLSInstrumentList=sr;we.prototype.readDLSInstrument=or;we.prototype.readRegion=Ir;we.prototype.readLart=ar;we.prototype.readDLSSamples=Cr;var os=class extends ve{constructor(A,t,n,s,o,r,E,a,g,l,c,d,B){super(A,r,E,a,g,l,s-t/2,o-t/2),this.sampleName=A,this.sampleStartIndex=t,this.sampleEndIndex=n,this.isSampleLoaded=!1,this.sampleID=d,this.sampleLength=this.sampleEndIndex-this.sampleStartIndex,this.sampleDataArray=c,this.sampleData=new Float32Array(0),this.isCompressed&&(this.sampleLoopStartIndex+=this.sampleStartIndex/2,this.sampleLoopEndIndex+=this.sampleStartIndex/2,this.sampleLength=99999999),this.isDataRaw=B}getRawData(){let A=this.sampleDataArray;if(this.isCompressed){if(this.compressedData)return this.compressedData;let t=A.currentIndex;return A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t)}else{this.isDataRaw||super.getRawData();let t=A.currentIndex;return A.slice(t+this.sampleStartIndex,t+this.sampleEndIndex)}}decodeVorbis(){if(this.sampleLength<1)return;let A=this.sampleDataArray,t=A.currentIndex,n=A.slice(this.sampleStartIndex/2+t,this.sampleEndIndex/2+t);this.sampleData=new Float32Array(0);try{let s=me.decode(n.buffer);this.sampleData=s.data[0],this.sampleData===void 0&&Y(`Error decoding sample ${this.sampleName}: Vorbis decode returned undefined.`)}catch(s){Y(`Error decoding sample ${this.sampleName}: ${s}`),this.sampleData=new Float32Array(this.sampleLoopEndIndex+1)}}getAudioData(){return this.isSampleLoaded?this.sampleData:this.sampleLength<1?(Y(`Invalid sample ${this.sampleName}! Invalid length: ${this.sampleLength}`),new Float32Array(1)):this.isCompressed?(this.decodeVorbis(),this.isSampleLoaded=!0,this.sampleData):this.isDataRaw?this.loadUncompressedData():this.getUncompressedReadyData()}loadUncompressedData(){if(this.isCompressed)return Y("Trying to load a compressed sample via loadUncompressedData()... aborting!"),new Float32Array(0);let A=new Float32Array(this.sampleLength/2),t=this.sampleDataArray.currentIndex,n=new Int16Array(this.sampleDataArray.slice(t+this.sampleStartIndex,t+this.sampleEndIndex).buffer);for(let s=0;s<n.length;s++)A[s]=n[s]/32768;return this.sampleData=A,this.isSampleLoaded=!0,A}getUncompressedReadyData(){let A=this.sampleDataArray.slice(this.sampleStartIndex/2,this.sampleEndIndex/2);return this.sampleData=A,this.isSampleLoaded=!0,A}};function Er(e,A,t=!0){let n=[],s=0;for(;e.chunkData.length>e.chunkData.currentIndex;){let o=Ri(s,e.chunkData,A,t);n.push(o),s++}return n.length>1&&n.pop(),n}function Ri(e,A,t,n){let s=eA(A,20),o=N(A,4)*2,r=N(A,4)*2,E=N(A,4),a=N(A,4),g=N(A,4),l=A[A.currentIndex++];l===255&&(l=60);let c=Ks(A[A.currentIndex++]),d=N(A,2),B=N(A,2);return new os(s,o,r,E,a,g,l,c,d,B,t,e,n)}var rs=class extends U{constructor(A){super();let t=A.currentIndex;this.generatorType=A[t+1]<<8|A[t],this.generatorValue=Ne(A[t+2],A[t+3]),A.currentIndex+=4}};function is(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new rs(e.chunkData));return A.length>1&&A.pop(),A}var as=class extends OA{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getSample(A){let t=this.generators.find(n=>n.generatorType===i.sampleID);t&&(this.sample=A[t.generatorValue],this.isGlobal=!1,this.sample.useCount++)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===i.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===i.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function Br(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new as(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,E=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,E),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getSample(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var Is=class extends Te{constructor(A){super(),this.generatorZoneStartIndex=N(A,2),this.modulatorZoneStartIndex=N(A,2),this.modulatorZoneSize=0,this.generatorZoneSize=0,this.isGlobal=!0}setZoneSize(A,t){this.modulatorZoneSize=A,this.generatorZoneSize=t}getGenerators(A){for(let t=this.generatorZoneStartIndex;t<this.generatorZoneStartIndex+this.generatorZoneSize;t++)this.generators.push(A[t])}getModulators(A){for(let t=this.modulatorZoneStartIndex;t<this.modulatorZoneStartIndex+this.modulatorZoneSize;t++)this.modulators.push(A[t])}getInstrument(A){let t=this.generators.find(n=>n.generatorType===i.instrument);t&&(this.instrument=A[t.generatorValue],this.instrument.addUseCount(),this.isGlobal=!1)}getKeyRange(){let A=this.generators.find(t=>t.generatorType===i.keyRange);A&&(this.keyRange.min=A.generatorValue&127,this.keyRange.max=A.generatorValue>>8&127)}getVelRange(){let A=this.generators.find(t=>t.generatorType===i.velRange);A&&(this.velRange.min=A.generatorValue&127,this.velRange.max=A.generatorValue>>8&127)}};function cr(e,A,t,n){let s=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let o=new Is(e.chunkData);if(s.length>0){let r=o.modulatorZoneStartIndex-s[s.length-1].modulatorZoneStartIndex,E=o.generatorZoneStartIndex-s[s.length-1].generatorZoneStartIndex;s[s.length-1].setZoneSize(r,E),s[s.length-1].getGenerators(A),s[s.length-1].getModulators(t),s[s.length-1].getInstrument(n),s[s.length-1].getKeyRange(),s[s.length-1].getVelRange()}s.push(o)}return s.length>1&&s.pop(),s}var gs=class extends Ye{constructor(A,t){super(t),this.presetName=eA(A.chunkData,20).trim().replace(/\d{3}:\d{3}/,""),this.program=N(A.chunkData,2),this.bank=N(A.chunkData,2),this.presetZoneStartIndex=N(A.chunkData,2),this.library=N(A.chunkData,4),this.genre=N(A.chunkData,4),this.morphology=N(A.chunkData,4),this.presetZonesAmount=0}getPresetZones(A,t){this.presetZonesAmount=A;for(let n=this.presetZoneStartIndex;n<this.presetZonesAmount+this.presetZoneStartIndex;n++)this.presetZones.push(t[n])}};function hr(e,A,t){let n=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let s=new gs(e,t);if(n.length>0){let o=s.presetZoneStartIndex-n[n.length-1].presetZoneStartIndex;n[n.length-1].getPresetZones(o,A)}n.push(s)}return n.length>1&&n.pop(),n}var Cs=class extends He{constructor(A){super(),this.instrumentName=eA(A.chunkData,20).trim(),this.instrumentZoneIndex=N(A.chunkData,2),this.instrumentZonesAmount=0}getInstrumentZones(A,t){this.instrumentZonesAmount=A;for(let n=this.instrumentZoneIndex;n<this.instrumentZonesAmount+this.instrumentZoneIndex;n++)this.instrumentZones.push(t[n])}};function lr(e,A){let t=[];for(;e.chunkData.length>e.chunkData.currentIndex;){let n=new Cs(e);if(t.length>0){let s=n.instrumentZoneIndex-t[t.length-1].instrumentZoneIndex;t[t.length-1].getInstrumentZones(s,A)}t.push(n)}return t.length>1&&t.pop(),t}var Es=class extends _{constructor(A){let t=N(A,2),n=N(A,2),s=Ne(A[A.currentIndex++],A[A.currentIndex++]),o=N(A,2),r=N(A,2);super(t,o,n,s,r)}};function un(e){let A=[];for(;e.chunkData.length>e.chunkData.currentIndex;)A.push(new Es(e.chunkData));return A}var fn=class extends Je{constructor(A,t=!0){super(),t&&console.warn("Using the constructor directly is deprecated. Use loadSoundFont instead."),this.dataArray=new L(A),VA("%cParsing SoundFont...",I.info),this.dataArray||(V(),this.parsingError("No data provided!"));let n=IA(this.dataArray,!1);this.verifyHeader(n,"riff");let s=eA(this.dataArray,4).toLowerCase();if(s!=="sfbk"&&s!=="sfpk")throw V(),new SyntaxError(`Invalid soundFont! Expected "sfbk" or "sfpk" got "${s}"`);let o=s==="sfpk",r=IA(this.dataArray);for(this.verifyHeader(r,"list"),eA(r.chunkData,4);r.chunkData.length>r.chunkData.currentIndex;){let tA=IA(r.chunkData),T;switch(tA.header.toLowerCase()){case"ifil":case"iver":T=`${N(tA.chunkData,2)}.${N(tA.chunkData,2)}`,this.soundFontInfo[tA.header]=T;break;case"icmt":T=eA(tA.chunkData,tA.chunkData.length,void 0,!1),this.soundFontInfo[tA.header]=T;break;case"dmod":let $=un(tA);$.pop(),T=`Modulators: ${$.length}`;let BA=this.defaultModulators;this.defaultModulators=$,this.defaultModulators.push(...BA.filter(sA=>!this.defaultModulators.find(oA=>_.isIdentical(sA,oA)))),this.soundFontInfo[tA.header]=tA.chunkData;break;default:T=eA(tA.chunkData,tA.chunkData.length),this.soundFontInfo[tA.header]=T}m(`%c"${tA.header}": %c"${T}"`,I.info,I.recognized)}let E=IA(this.dataArray,!1);this.verifyHeader(E,"list"),this.verifyText(eA(this.dataArray,4),"sdta"),m("%cVerifying smpl chunk...",I.warn);let a=IA(this.dataArray,!1);this.verifyHeader(a,"smpl");let g;if(o){m("%cSF2Pack detected, attempting to decode the smpl chunk...",I.info);try{g=me.decode(this.dataArray.buffer.slice(this.dataArray.currentIndex,this.dataArray.currentIndex+E.size-12)).data[0]}catch(tA){throw V(),new Error(`SF2Pack Ogg Vorbis decode error: ${tA}`)}m(`%cDecoded the smpl chunk! Length: %c${g.length}`,I.info,I.value)}else g=this.dataArray,this.sampleDataStartIndex=this.dataArray.currentIndex;m(`%cSkipping sample chunk, length: %c${E.size-12}`,I.info,I.value),this.dataArray.currentIndex+=E.size-12,m("%cLoading preset data chunk...",I.warn);let l=IA(this.dataArray);this.verifyHeader(l,"list"),eA(l.chunkData,4);let c=IA(l.chunkData);this.verifyHeader(c,"phdr");let d=IA(l.chunkData);this.verifyHeader(d,"pbag");let B=IA(l.chunkData);this.verifyHeader(B,"pmod");let u=IA(l.chunkData);this.verifyHeader(u,"pgen");let p=IA(l.chunkData);this.verifyHeader(p,"inst");let S=IA(l.chunkData);this.verifyHeader(S,"ibag");let w=IA(l.chunkData);this.verifyHeader(w,"imod");let k=IA(l.chunkData);this.verifyHeader(k,"igen");let M=IA(l.chunkData);this.verifyHeader(M,"shdr"),this.dataArray.currentIndex=this.sampleDataStartIndex,this.samples.push(...Er(M,g,!o));let b=is(k),G=un(w),C=Br(S,b,G,this.samples);this.instruments=lr(p,C);let x=is(u),q=un(B),gA=cr(d,x,q,this.instruments);this.presets.push(...hr(c,gA,this)),this.presets.sort((tA,T)=>tA.program-T.program+(tA.bank-T.bank)),this._parseInternal(),m(`%cParsing finished! %c"${this.soundFontInfo.INAM}"%c has %c${this.presets.length} %cpresets,
|
|
21
|
-
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),V(),o&&delete this.dataArray}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};function Nt(e){let A=e.slice(8,12),t=new L(A);return eA(t,4,void 0,!1).toLowerCase()==="dls "?new we(e):new fn(e,!1)}var mn=class{constructor(A,t){this.ready=t,this.reloadManager(A)}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let o of n.soundfont.presets){let r=`${o.bank+n.bankOffset}-${o.program}`;s.has(r)||(s.add(r),A[r]=o.presetName)}}this.presetList=[];for(let[t,n]of Object.entries(A)){let s=t.split("-");this.presetList.push({presetName:n,program:parseInt(s[1]),bank:parseInt(s[0])})}}handleMessage(A,t){switch(A){case Gt.addNewSoundFont:this.addNewSoundFont(t[0],t[1],t[2]);break;case Gt.reloadSoundFont:this.reloadManager(t);break;case Gt.deleteSoundFont:this.deleteSoundFont(t);break;case Gt.rearrangeSoundFonts:this.rearrangeSoundFonts(t)}}getPresetList(){return this.presetList.slice()}reloadManager(A){let t=Nt(A);this.soundfontList=[],this.soundfontList.push({id:"main",bankOffset:0,soundfont:t}),this.generatePresetList(),this.ready()}deleteSoundFont(A){if(this.soundfontList.length===0){Y("1 soundfont left. Aborting!");return}let t=this.soundfontList.findIndex(n=>n.id===A);if(t===-1){Y(`No soundfont with id of "${A}" found. Aborting!`);return}delete this.soundfontList[t].soundfont.presets,delete this.soundfontList[t].soundfont.instruments,delete this.soundfontList[t].soundfont.samples,this.soundfontList.splice(t,1),this.generatePresetList()}addNewSoundFont(A,t,n){if(this.soundfontList.find(s=>s.id===t)!==void 0)throw new Error("Cannot overwrite the existing soundfont. Use soundfontManager.delete(id) instead.");this.soundfontList.push({id:t,soundfont:Nt(A),bankOffset:n}),this.generatePresetList(),this.ready()}rearrangeSoundFonts(A){this.soundfontList.sort((t,n)=>A.indexOf(t.id)-A.indexOf(n.id)),this.generatePresetList()}getPreset(A,t,n=!1){if(this.soundfontList.length<1)throw new Error("No soundfonts! This should never happen.");for(let o of this.soundfontList){let r=o.soundfont.getPresetNoFallback(A-o.bankOffset,t,n);if(r!==void 0)return r}if(A===128||n&&jA(A)){for(let o of this.soundfontList){let r=o.soundfont.presets.find(a=>a.isDrumPreset(n)&&a.program===t);if(r)return r;let E=o.soundfont.presets.find(a=>a.isDrumPreset(n));if(E)return E}return this.soundfontList[0].soundfont.presets[0]}else{for(let o of this.soundfontList){let r=o.soundfont.presets.find(E=>E.program===t&&!E.isDrumPreset(n));if(r)return r}return this.soundfontList[0].soundfont.presets[0]}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var lt={linear:0,nearestNeighbor:1,fourthOrder:2},ht=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let a=~~s,g=a+1;for(;g>=n.loopEnd;)g-=r;let l=s-a,c=o[g],d=o[a];t[E]=d+(c-d)*l,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,a=E+1;if(a>=n.end){A.finished=!0;return}let g=s-E,l=o[a],c=o[E];t[r]=c+(l-c)*g,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,o=n.loopEnd-n.loopStart,r=n.sampleData;if(A.sample.isLooping)for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=o;let a=~~s+1;for(;a>=n.loopEnd;)a-=o;t[E]=r[a],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let E=0;E<t.length;E++){let a=~~s+1;if(a>=n.end){A.finished=!0;return}t[E]=r[a],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let a=~~s,g=a+1,l=g+1,c=l+1,d=s-a;g>=n.loopEnd&&(g-=r),l>=n.loopEnd&&(l-=r),c>=n.loopEnd&&(c-=r);let B=o[a],u=o[g],p=o[l],S=o[c],w=.5*(p-B),k=B-2.5*u+2*p-.5*S,M=.5*(S-B)+1.5*(u-p);t[E]=((M*d+k)*d+w)*d+u,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,a=E+1,g=a+1,l=g+1,c=s-E;if(a>=n.end||g>=n.end||l>=n.end){A.finished=!0;return}let d=o[E],B=o[a],u=o[g],p=o[l],S=.5*(u-d),w=d-2.5*B+2*u-.5*p,k=.5*(p-d)+1.5*(B-u);t[r]=((k*c+w)*c+S)*c+B,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};var Bs={addMapping:0,deleteMapping:1,clearMappings:2},pn=class{_keyMappings=[];handleMessage(A,t){switch(A){default:return;case Bs.addMapping:this.addMapping(...t);break;case Bs.clearMappings:this.clearMappings();break;case Bs.deleteMapping:this.deleteMapping(...t)}}addMapping(A,t,n){this._keyMappings[A]===void 0&&(this._keyMappings[A]=[]),this._keyMappings[A][t]=n}deleteMapping(A,t){this._keyMappings[A]?.[t]!==void 0&&(this._keyMappings[A][t]=void 0)}clearMappings(){this._keyMappings=[]}setMappings(A){this._keyMappings=A}getMappings(){return this._keyMappings}getVelocity(A,t){let n=this._keyMappings[A]?.[t];return n?n.velocity:-1}hasOverridePatch(A,t){let n=this._keyMappings[A]?.[t]?.patch?.bank;return n!==void 0&&n>=0}getPatch(A,t){let n=this._keyMappings[A]?.[t];if(n)return n.patch;throw new Error("No modifier.")}};var Qr=.1,Ke=class e{static cachedCoefficients=[];a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;resonanceCb=0;currentInitialFc=13500;lastTargetCutoff=1/0;initialized=!1;static apply(A,t,n,s){let o=A.modulatedGenerators[i.initialFilterFc],r=A.filter;r.initialized?r.currentInitialFc+=(o-r.currentInitialFc)*s:(r.initialized=!0,r.currentInitialFc=o);let E=r.currentInitialFc+n,a=A.modulatedGenerators[i.initialFilterQ];if(r.currentInitialFc>13499&&E>13499&&a===0){r.currentInitialFc=13500;return}(Math.abs(r.lastTargetCutoff-E)>1||r.resonanceCb!==a)&&(r.lastTargetCutoff=E,r.resonanceCb=a,e.calculateCoefficients(r,E));for(let g=0;g<t.length;g++){let l=t[g],c=r.a0*l+r.a1*r.x1+r.a2*r.x2-r.a3*r.y1-r.a4*r.y2;r.x2=r.x1,r.x1=l,r.y2=r.y1,r.y1=c,t[g]=c}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=e.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let o=Rt(t);o=Math.min(o,.45*sampleRate);let r=n/10,E=ae(-(r-3.01)),a=1/Math.sqrt(ae(-r)),g=2*Math.PI*o/sampleRate,l=Math.cos(g),c=Math.sin(g)/(2*E),d=(1-l)*a,B=d/2,u=B,p=1+c,S=-2*l,w=1-c,k={};k.a0=B/p,k.a1=d/p,k.a2=u/p,k.a3=S/p,k.a4=w/p,A.a0=k.a0,A.a1=k.a1,A.a2=k.a2,A.a3=k.a3,A.a4=k.a4,e.cachedCoefficients[n]===void 0&&(e.cachedCoefficients[n]=[]),e.cachedCoefficients[n][t]=k}},cs=new Ke;cs.resonanceCb=0;for(let e=1500;e<13500;e++)cs.currentInitialFc=e,Ke.calculateCoefficients(cs,e);var LA=16384,Fe=new Float32Array(LA+1),_e=new Float32Array(LA+1);Fe[0]=0;Fe[Fe.length-1]=1;_e[0]=0;_e[_e.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(Fe.length-1))/Math.LN10;_e[e]=1-A,Fe[Fe.length-1-e]=A}function ze(e,A,t,n){switch(e&&(t=1-t),A){case GA.linear:return n?t*2-1:t;case GA.switch:return t=t>.5?1:0,n?t*2-1:t;case GA.concave:return n?(t=t*2-1,t<0?-Fe[~~(t*-LA)]:Fe[~~(t*LA)]):Fe[~~(t*LA)];case GA.convex:return n?(t=t*2-1,t<0?-_e[~~(t*-LA)]:_e[~~(t*LA)]):_e[~~(t*LA)]}}var hs=1,ls=new Float32Array(1e3);for(let e=0;e<ls.length;e++)ls[e]=ze(0,GA.convex,e/1e3,0);var Be=class e{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){e.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=e.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[i.sustainModEnv]/1e3,t.attackDuration=Ce(A.modulatedGenerators[i.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvDecay],s=Ce(A.modulatedGenerators[i.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let o=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvHold];t.holdDuration=Ce(o+A.modulatedGenerators[i.holdModEnv]);let r=Ce(A.modulatedGenerators[i.releaseModEnv]);t.releaseDuration=r*t.releaseStartLevel,t.delayEnd=A.startTime+Ce(A.modulatedGenerators[i.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=ls[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=hs:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-hs)+hs:s.currentValue=s.sustainLevel,s.currentValue)}};var Gi=-2320,xi=-1130,yn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,o,r,E,a){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=o,this.loopEnd=r,this.end=E,this.loopingMode=a,this.isLooping=this.loopingMode===1||this.loopingMode===3}},bt=class e{sample;filter=new Ke;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;channelNumber=0;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new Be;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,o,r,E,a,g,l){this.sample=t,this.generators=g,this.exclusiveClass=this.generators[i.exclusiveClass],this.modulatedGenerators=new Int16Array(g),this.modulators=l,this.velocity=s,this.midiNote=n,this.channelNumber=o,this.startTime=r,this.targetKey=E,this.realKey=a,this.volumeEnvelope=new Ee(A,g[i.sustainVolEnv])}static copy(A,t){let n=A.sample,s=new yn(n.sampleData,n.playbackStep,n.cursor,n.rootKey,n.loopStart,n.loopEnd,n.end,n.loopingMode);return new e(A.volumeEnvelope.sampleRate,s,A.midiNote,A.velocity,A.channelNumber,t,A.targetKey,A.realKey,A.generators,A.modulators.map(o=>_.copy(o)))}exclusiveRelease(){this.release(fr),this.modulatedGenerators[i.releaseVolEnv]=Gi,this.modulatedGenerators[i.releaseModEnv]=xi,Ee.recalculate(this),Be.recalculate(this)}release(A=ur){this.releaseStartTime=currentTime,this.releaseStartTime-this.startTime<A&&(this.releaseStartTime=this.startTime+A)}};function dr(e,A,t,n,s,o=!1){let r,E=this.workletProcessorChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),g=E.getBankSelect(),l=E.preset.program;if(a){let B=this.keyModifierManager.getPatch(e,A);g=B.bank,l=B.program}let c=this.getCachedVoice(g,l,A,t);if(c!==void 0)return c.map(B=>bt.copy(B,n));let d=E.preset;return a&&(d=this.soundfontManager.getPreset(g,l,RA(this.system))),r=d.getSamplesAndGenerators(A,t).reduce((B,u)=>{if(u.sample.getAudioData()===void 0)return Y(`Discarding invalid sample: ${u.sample.sampleName}`),B;let p=new Int16Array(60);for(let C=0;C<60;C++)p[C]=qs(C,u.presetGenerators,u.instrumentGenerators);p[i.initialAttenuation]=Math.floor(p[i.initialAttenuation]*.4);let S=u.sample.samplePitch;p[i.overridingRootKey]>-1&&(S=p[i.overridingRootKey]);let w=A;p[i.keyNum]>-1&&(w=p[i.keyNum]);let k=u.sample.sampleLoopStartIndex,M=u.sample.sampleLoopEndIndex,b=p[i.sampleModes],G=new yn(u.sample.sampleData,u.sample.sampleRate/sampleRate*Math.pow(2,u.sample.samplePitchCorrection/1200),0,S,k,M,Math.floor(u.sample.sampleData.length)-1,b);return p[i.velocity]>-1&&(t=p[i.velocity]),o&&Ts([{Sample:u.sample.sampleName,Generators:p,Modulators:u.modulators.map(C=>_.debugString(C)),Velocity:t,TargetKey:w,MidiNote:A,WorkletSample:G}]),B.push(new bt(sampleRate,G,A,t,e,n,w,s,p,u.modulators.map(C=>_.copy(C)))),B},[]),this.setCachedVoice(g,l,A,t,r.map(B=>bt.copy(B,n))),r}var pr=.05,Mi=4600,Ni=2e3,mr=Math.PI/2,Sn=-500,yr=500,Qs=yr-Sn,Sr=new Float32Array(Qs+1),Dr=new Float32Array(Qs+1);for(let e=Sn;e<=yr;e++){let A=(e-Sn)/Qs,t=e-Sn;Sr[t]=Math.cos(mr*A),Dr[t]=Math.sin(mr*A)}function kr(e,A,t,n,s,o,r,E){if(isNaN(A[0]))return;let a;e.overridePan?a=e.overridePan:(e.currentPan+=(e.modulatedGenerators[i.pan]-e.currentPan)*this.synth.panSmoothingFactor,a=e.currentPan);let g=this.synth.currentGain,l=~~(a+500),c=Sr[l]*g*this.synth.panLeft,d=Dr[l]*g*this.synth.panRight;if(!this.synth.oneOutputMode){let B=e.modulatedGenerators[i.reverbEffectsSend];if(B>0){let p=this.synth.reverbGain*g*(B/Mi);for(let S=0;S<A.length;S++)s[S]+=p*A[S];o.set(s)}let u=e.modulatedGenerators[i.chorusEffectsSend];if(u>0){let p=this.synth.chorusGain*u/Ni,S=c*p,w=d*p;for(let k=0;k<A.length;k++)r[k]+=S*A[k],E[k]+=w*A[k]}}if(c>0)for(let B=0;B<A.length;B++)t[B]+=c*A[B];if(d>0)for(let B=0;B<A.length;B++)n[B]+=d*A[B]}function wr(e=!1){m("%cStop all received!",I.info);for(let A=0;A<this.workletProcessorChannels.length;A++)this.workletProcessorChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function Fr(e,A){this.soundfontBankOffset=A,this.reloadSoundFont(e,!0),this.overrideSoundfont.samples.forEach(t=>t.getAudioData()),this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers())}function Rr(e,A=!1){this.clearSoundFont(!1,A);try{A?this.overrideSoundfont=Nt(e):this.soundfontManager.reloadManager(e)}catch(t){this.post({messageType:JA.soundfontError,messageData:t});return}this.getDefaultPresets(),this.workletProcessorChannels.forEach(t=>t.programChange(t.preset.program)),this.post({messageType:JA.ready,messageData:void 0}),this.sendPresetList(),m("%cSpessaSynth is ready!",I.recognized)}function Gr(e=!0,A=!0){this.stopAllChannels(!0),A&&(delete this.overrideSoundfont,this.overrideSoundfont=void 0),this.getDefaultPresets(),this.cachedVoices=[];for(let t=0;t<this.workletProcessorChannels.length;t++){let n=this.workletProcessorChannels[t];(!A||A&&n.presetUsesOverride)&&n.setPresetLock(!1),n.programChange(n.preset.program)}e&&this.sendPresetList()}function xr(){let e=this.soundfontManager.getPresetList();this.overrideSoundfont!==void 0&&this.overrideSoundfont.presets.forEach(A=>{let t=A.bank===128?128:A.bank+this.soundfontBankOffset,n=e.find(s=>s.bank===t&&s.program===A.program);n!==void 0?n.presetName=A.presetName:e.push({presetName:A.presetName,bank:t,program:A.program})}),this.callEvent("presetlistchange",e)}function Mr(e,A){if(this.overrideSoundfont){let t=e===128?128:e-this.soundfontBankOffset,n=this.overrideSoundfont.getPresetNoFallback(t,A,RA(this.system));if(n)return n}return this.soundfontManager.getPreset(e,A,RA(this.system))}function Nr(e,A=!1){this.transposition=0;for(let t=0;t<this.workletProcessorChannels.length;t++)this.workletProcessorChannels[t].transposeChannel(e,A);this.transposition=e}function br(e){e=Math.round(e);for(let A=0;A<this.workletProcessorChannels.length;A++)this.workletProcessorChannels[A].setCustomController(hA.masterTuning,e)}var Lt=class e{program;bank;isBankLSB;patchName;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;velocityOverride;drumChannel;static getChannelSnapshot(A,t){let n=A.workletProcessorChannels[t],s=new e;return s.program=n.preset.program,s.bank=n.getBankSelect(),s.isBankLSB=s.bank!==n.bank,s.lockPreset=n.lockPreset,s.lockedSystem=n.lockedSystem,s.patchName=n.preset.presetName,s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.channelVibrato=n.channelVibrato,s.lockVibrato=n.lockGSNRPNParams,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.isMuted=n.isMuted,s.velocityOverride=n.velocityOverride,s.drumChannel=n.drumChannel,s}static applyChannelSnapshot(A,t,n){let s=A.workletProcessorChannels[t];s.muteChannel(n.isMuted),s.setDrums(n.drumChannel),s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.updateChannelTuning(),s.channelVibrato=n.channelVibrato,s.lockGSNRPNParams=n.lockVibrato,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.velocityOverride=n.velocityOverride,s.setPresetLock(!1),s.setBankSelect(n.bank,n.isBankLSB),s.programChange(n.program),s.setPresetLock(n.lockPreset),s.lockedSystem=n.lockedSystem}};var Qt=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;effectsConfig;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.workletProcessorChannels.map((n,s)=>Lt.getChannelSnapshot(A,s)),t.keyMappings=A.keyModifierManager.getMappings(),t.mainVolume=A.midiVolume,t.pan=A.pan,t.system=A.system,t.interpolation=A.interpolationType,t.transposition=A.transposition,t.effectsConfig={},t}static applySnapshot(A,t){for(A.setSystem(t.system),A.setMasterGain(t.mainVolume),A.setMasterPan(t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.workletProcessorChannels.length<t.channelSnapshots.length;)A.createWorkletChannel();t.channelSnapshots.forEach((n,s)=>{Lt.applyChannelSnapshot(A,s,n)}),m("%cFinished restoring controllers!",I.info)}};function Lr(){this.post({messageType:JA.synthesizerSnapshot,messageData:Qt.createSynthesizerSnapshot(this)})}function Ur(e){Qt.applySnapshot(this,e),m("%cFinished applying snapshot!",I.info)}function Dn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}function Tr(e,A,t,n,s,o,r){let E=currentTime;if(e.isInRelease||E>=e.releaseStartTime&&(e.isInRelease=!0,Ee.startRelease(e),Be.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[i.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let a=e.targetKey,g=e.modulatedGenerators[i.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,l=e.modulatedGenerators[i.coarseTune],c=this.synth.tunings[this.preset.program]?.[e.realKey];if(c!==void 0&&c?.midiNote>=0&&(a=c.midiNote,g+=c.centTuning),e.portamentoFromKey>-1){let C=Math.min((E-e.startTime)/e.portamentoDuration,1),x=a-e.portamentoFromKey;l-=x*(1-C)}g+=(a-e.sample.rootKey)*e.modulatedGenerators[i.scaleTuning];let d=e.modulatedGenerators[i.vibLfoToPitch];if(d!==0){let C=e.startTime+Ce(e.modulatedGenerators[i.delayVibLFO]),x=Rt(e.modulatedGenerators[i.freqVibLFO]),q=Dn(C,x,E);g+=q*(d*this.customControllers[hA.modulationMultiplier])}let B=0,u=e.modulatedGenerators[i.modLfoToPitch],p=e.modulatedGenerators[i.modLfoToVolume],S=e.modulatedGenerators[i.modLfoToFilterFc],w=0;if(u!==0||S!==0||p!==0){let C=e.startTime+Ce(e.modulatedGenerators[i.delayModLFO]),x=Rt(e.modulatedGenerators[i.freqModLFO]),q=Dn(C,x,E);g+=q*(u*this.customControllers[hA.modulationMultiplier]),w=-q*p,B+=q*S}if(this.channelVibrato.depth>0){let C=Dn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,E);C&&(g+=C*this.channelVibrato.depth)}let k=e.modulatedGenerators[i.modEnvToPitch],M=e.modulatedGenerators[i.modEnvToFilterFc];if(M!==0||k!==0){let C=Be.getValue(e,E);B+=C*M,g+=C*k}let b=~~(g+l*100);b!==e.currentTuningCents&&(e.currentTuningCents=b,e.currentTuningCalculated=Math.pow(2,b/1200));let G=new Float32Array(A.length);switch(this.synth.interpolationType){case lt.fourthOrder:ht.getSampleCubic(e,G);break;case lt.linear:default:ht.getSampleLinear(e,G);break;case lt.nearestNeighbor:ht.getSampleNearest(e,G);break}return Ke.apply(e,G,B,this.synth.filterSmoothingFactor),Ee.apply(e,G,w,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,G,A,t,n,s,o,r),e.finished}function vr(e,A=-12e3){this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[i.releaseVolEnv]=A,t.release())})}function Hr(e,A=!0){e=Math.round(e),this.setCustomController(hA.channelTuning,e),A&&m(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,I.info,I.recognized,I.info,I.value,I.info)}function Yr(e){e=Math.round(e),m(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,I.info,I.value),this.setCustomController(hA.modulationMultiplier,e/50)}function Jr(e){switch(this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:switch(this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7){default:break;case 0:if(e===0)break;this.midiControllers[xA+j.pitchWheelRange]|=e;let t=(this.midiControllers[xA+j.pitchWheelRange]>>7)+e/128;m(`%cChannel ${this.channelNumber} bend range. Semitones: %c${t}`,I.info,I.value);break;case 1:let s=this.customControllers[hA.channelTuning]<<7|e;this.setTuning(s*.01220703125);break;case 5:let r=this.customControllers[hA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(r);break;case 16383:this.resetParameters();break}}}var bi=1e3/200;function Kr(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let g=A.sourceIndex+xA;switch(A.sourceIndex){case j.noController:n=16383;break;case j.noteOnKeyNum:n=t.midiNote<<7;break;case j.noteOnVelocity:n=t.velocity<<7;break;case j.polyPressure:n=t.pressure<<7;break;default:n=e[g];break}}let s=je[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],o;if(A.secSrcUsesCC)o=e[A.secSrcIndex];else{let g=A.secSrcIndex+xA;switch(A.secSrcIndex){case j.noController:o=16383;break;case j.noteOnKeyNum:o=t.midiNote<<7;break;case j.noteOnVelocity:o=t.velocity<<7;break;case j.polyPressure:o=t.pressure<<7;break;default:o=e[g]}}let r=je[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][o],E=A.transformAmount;A.isEffectModulator&&E<=1e3&&(E*=bi,E=Math.min(E,1e3));let a=s*r*E;return A.transformType===2&&(a=Math.abs(a)),A.currentValue=a,a}function ce(e,A,t=-1,n=0){let s=e.modulators,o=e.generators,r=e.modulatedGenerators;if(t===-1){r.set(o),s.forEach(g=>{let l=X[g.modulatorDestination],c=r[g.modulatorDestination]+Kr(A,g,e);r[g.modulatorDestination]=Math.max(l.min,Math.min(c,l.max))}),Ee.recalculate(e),Be.recalculate(e);return}let E=new Set([i.initialAttenuation,i.delayVolEnv,i.attackVolEnv,i.holdVolEnv,i.decayVolEnv,i.sustainVolEnv,i.releaseVolEnv,i.keyNumToVolEnvHold,i.keyNumToVolEnvDecay]),a=new Set;s.forEach(g=>{if(g.sourceUsesCC===t&&g.sourceIndex===n||g.secSrcUsesCC===t&&g.secSrcIndex===n){let l=g.modulatorDestination;a.has(l)||(r[l]=o[l],Kr(A,g,e),s.forEach(c=>{if(c.modulatorDestination===l){let d=X[g.modulatorDestination],B=r[g.modulatorDestination]+c.currentValue;r[g.modulatorDestination]=Math.max(d.min,Math.min(B,d.max))}}),a.add(l))}}),[...a].some(g=>E.has(g))&&Ee.recalculate(e),Be.recalculate(e)}var je=[];for(let e=0;e<4;e++){je[e]=[[new Float32Array(LA),new Float32Array(LA)],[new Float32Array(LA),new Float32Array(LA)]];for(let A=0;A<LA;A++)je[e][0][0][A]=ze(0,e,A/LA,0),je[e][1][0][A]=ze(0,e,A/LA,1),je[e][0][1][A]=ze(1,e,A/LA,0),je[e][1][1][A]=ze(1,e,A/LA,1)}function qr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case Ps.velocityOverride:this.velocityOverride=A}}if(e>=y.lsbForControl1ModulationWheel&&e<=y.lsbForControl13EffectControl2&&e!==y.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>ce(s,this.midiControllers,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case y.allNotesOff:this.stopAllNotes();break;case y.allSoundOff:this.stopAllNotes(!0);break;case y.bankSelect:this.setBankSelect(A);break;case y.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case y.RPNLsb:this.dataEntryState=YA.RPFine;break;case y.RPNMsb:this.dataEntryState=YA.RPCoarse;break;case y.NRPNMsb:this.dataEntryState=YA.NRPCoarse;break;case y.NRPNLsb:this.dataEntryState=YA.NRPFine;break;case y.dataEntryMsb:this.dataEntryCoarse(A);break;case y.lsbForControl6DataEntry:this.dataEntryFine(A);break;case y.resetAllControllers:this.resetControllersRP15Compliant();break;case y.sustainPedal:A>=64?this.holdPedal=!0:(this.holdPedal=!1,this.sustainedVoices.forEach(n=>{n.release()}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>ce(n,this.midiControllers,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function Or(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.synth.sendChannelProperties()):(this.voices.forEach(A=>{A.isInRelease||A.release()}),this.sustainedVoices.forEach(A=>{A.release()}))}function Pr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.synth.sendChannelProperties(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Vr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[hA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(y.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(hA.channelTransposeFine,(e-t)*100),this.synth.sendChannelProperties())}var Ut={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},qe={partParameter:1,vibratoRate:8,vibratoDepth:9,vibratoDelay:10,EGAttackTime:100,EGReleaseTime:102,TVFFilterCutoff:32,drumReverb:29};function Zr(e){let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,o)=>{o.length>0&&(o=" "+o),m(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${o}.`,I.info,I.recognized,I.info,I.value,I.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[y.NRPNMsb]>>7,s=this.midiControllers[y.NRPNLsb]>>7;switch(n){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.partParameter:switch(s){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(y.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(y.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(y.releaseTime,e),t("EG release time",e.toString(),"");break}break;case qe.drumReverb:let r=e;this.controllerChange(y.reverbDepth,r),t("GS Drum reverb",r.toString(),"percent");break}break;case YA.RPCoarse:case YA.RPFine:let o=this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7;switch(o){default:Y(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${o.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case Ut.pitchBendRange:this.midiControllers[xA+j.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case Ut.coarseTuning:let r=e-64;this.setCustomController(hA.channelTuningSemitones,r),t("Coarse tuning",r.toString(),"semitones");break;case Ut.fineTuning:this.setTuning(e-64,!1);break;case Ut.modulationDepth:this.setModulationDepth(e*100);break;case Ut.resetParameters:this.resetParameters();break}}}var Tt={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function Li(e){if(Tt[e]!==void 0)return Tt[e];let A=null,t=null;for(let n of Object.keys(Tt))n=parseInt(n),n<e&&(A===null||n>A)&&(A=n),n>e&&(t===null||n<t)&&(t=n);if(A!==null&&t!==null){let n=Tt[A],s=Tt[t];return n+(e-A)*(s-n)/(t-A)}return 0}function Xr(e,A){return Li(e)*(A/30)}function Wr(e,A,t=!1,n=!0,s=currentTime){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synth.highPerformanceMode&&this.synth.totalVoicesAmount>200&&A<40||this.synth.highPerformanceMode&&A<10||this.isMuted)return;let o=e+this.channelTransposeKeyShift,r=o;if(o>127||o<0)return;let E=this.preset.program;this.synth.tunings[E]?.[o]?.midiNote>=0&&(r=this.synth.tunings[E]?.[o].midiNote),this.velocityOverride>0&&(A=this.velocityOverride);let a=this.synth.keyModifierManager.getVelocity(this.channelNumber,o);a>-1&&(A=a);let g=-1,l=0,c=this.midiControllers[y.portamentoTime]>>7,d=this.midiControllers[y.portamentoControl],B=d>>7;if(!this.drumChannel&&B!==r&&this.midiControllers[y.portamentoOnOff]>=8192&&c>0){if(d!==1){let w=Math.abs(r-B);l=Xr(c,w),g=B}this.controllerChange(y.portamentoControl,r)}let u=this.synth.getWorkletVoices(this.channelNumber,r,A,s,o,t),p=0;this.randomPan&&(p=Math.round(Math.random()*1e3-500));let S=this.voices;u.forEach(w=>{w.portamentoFromKey=g,w.portamentoDuration=l,w.overridePan=p;let k=w.exclusiveClass;k!==0&&S.forEach(gA=>{gA.exclusiveClass===k&&gA.exclusiveRelease()}),ce(w,this.midiControllers);let M=w.modulatedGenerators[i.startAddrsOffset]+w.modulatedGenerators[i.startAddrsCoarseOffset]*32768,b=w.modulatedGenerators[i.endAddrOffset]+w.modulatedGenerators[i.endAddrsCoarseOffset]*32768,G=w.modulatedGenerators[i.startloopAddrsOffset]+w.modulatedGenerators[i.startloopAddrsCoarseOffset]*32768,C=w.modulatedGenerators[i.endloopAddrsOffset]+w.modulatedGenerators[i.endloopAddrsCoarseOffset]*32768,x=w.sample,q=gA=>Math.max(0,Math.min(x.sampleData.length-1,gA));if(x.cursor=q(x.cursor+M),x.end=q(x.end+b),x.loopStart=q(x.loopStart+G),x.loopEnd=q(x.loopEnd+C),x.loopEnd<x.loopStart){let gA=x.loopStart;x.loopStart=x.loopEnd,x.loopEnd=gA}x.loopEnd-x.loopStart<1&&(x.loopingMode=0,x.isLooping=!1),w.volumeEnvelope.attenuation=w.volumeEnvelope.attenuationTargetGain,w.currentPan=Math.max(-500,Math.min(500,w.modulatedGenerators[i.pan]))}),this.synth.totalVoicesAmount+=u.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(u.length),S.push(...u),n&&(this.synth.sendChannelProperties(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A}))}function _r(e){if(e>127||e<0){Y("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift;if(this.synth.highPerformanceMode&&!this.drumChannel){this.killNote(A,-6950),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease===!0||(this.holdPedal?this.sustainedVoices.push(n):n.release())}),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber})}function zr(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,ce(t,this.midiControllers,0,j.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function jr(e){this.midiControllers[xA+j.channelPressure]=e<<7,this.voices.forEach(A=>ce(A,this.midiControllers,0,j.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function $r(e,A){if(this.lockedControllers[xA+j.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[xA+j.pitchWheel]=t,this.voices.forEach(n=>ce(n,this.midiControllers,0,j.pitchWheel)),this.synth.sendChannelProperties()}function Ai(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}function ei(e,A=!1){if(this.lockPreset)return;let t=this.getBankSelect(),n,s,o=this.isXGChannel;if(this.synth.overrideSoundfont){let r=t===128?128:t-this.synth.soundfontBankOffset,E=this.synth.overrideSoundfont.getPresetNoFallback(r,e,o);E?(n=E.bank===128?128:E.bank+this.synth.soundfontBankOffset,s=E,this.presetUsesOverride=!0):(s=this.synth.soundfontManager.getPreset(t,e,o),n=s.bank,this.presetUsesOverride=!1)}else s=this.synth.soundfontManager.getPreset(t,e,o),n=s.bank,this.presetUsesOverride=!1;this.setPreset(s),console.log(s.presetName,this.isXGChannel,this.drumChannel,t),this.synth.callEvent("programchange",{channel:this.channelNumber,program:s.program,bank:n,userCalled:A})}var SA=class{midiControllers=new Int16Array(zt);lockedControllers=Array(zt).fill(!1);customControllers=new Float32Array(Kn);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=YA.Idle;bank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";presetUsesOverride=!1;lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};isMuted=!1;voices=[];sustainedVoices=[];channelNumber;synth;constructor(A,t,n){this.synth=A,this.preset=t,this.channelNumber=n}get isXGChannel(){return RA(this.synth.system)||this.lockPreset&&RA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[hA.channelTuning]+this.customControllers[hA.channelTransposeFine]+this.customControllers[hA.masterTuning]+this.customControllers[hA.channelTuningSemitones]*100}renderAudio(A,t,n,s,o,r){this.voices=this.voices.filter(E=>!this.renderVoice(E,A,t,n,s,o,r))}setPresetLock(A){this.lockPreset=A,A&&(this.lockedSystem=this.synth.system)}setBankSelect(A,t=!1){if(!this.lockPreset)if(t)this.bankLSB=A;else switch(this.bank=A,Ct(this.getBankSelect(),A,this.synth.system,!1,this.drumChannel,this.channelNumber).drumsStatus){default:case 0:break;case 1:this.channelNumber%16===9&&(this.bank=127);break;case 2:this.setDrums(!0);break}}getBankSelect(){return Et(this.bank,this.bankLSB,this.drumChannel,this.isXGChannel)}setPreset(A){this.lockPreset||(delete this.preset,this.preset=A)}setDrums(A){this.lockPreset||this.drumChannel!==A&&(A?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.presetUsesOverride=!1,this.synth.callEvent("drumchange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}),this.programChange(this.preset.program),this.synth.sendChannelProperties())}setVibrato(A,t,n){this.lockGSNRPNParams||(this.channelVibrato.rate=t,this.channelVibrato.delay=n,this.channelVibrato.depth=A)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}};SA.prototype.renderVoice=Tr;SA.prototype.panVoice=kr;SA.prototype.killNote=vr;SA.prototype.stopAllNotes=Or;SA.prototype.muteChannel=Pr;SA.prototype.noteOn=Wr;SA.prototype.noteOff=_r;SA.prototype.polyPressure=zr;SA.prototype.channelPressure=jr;SA.prototype.pitchWheel=$r;SA.prototype.programChange=ei;SA.prototype.setTuning=Hr;SA.prototype.setOctaveTuning=Ai;SA.prototype.setModulationDepth=Yr;SA.prototype.transposeChannel=Vr;SA.prototype.controllerChange=qr;SA.prototype.resetControllers=io;SA.prototype.resetControllersRP15Compliant=ao;SA.prototype.resetParameters=Io;SA.prototype.dataEntryFine=Jr;SA.prototype.dataEntryCoarse=Zr;function ti(e=!1){let A=new SA(this,this.defaultPreset,this.workletProcessorChannels.length);this.workletProcessorChannels.push(A),A.resetControllers(),this.sendChannelProperties(),e&&this.callEvent("newchannel",void 0),A.channelNumber%16===9&&this.workletProcessorChannels[this.workletProcessorChannels.length-1].setDrums(!0)}var ur=.03,fr=.07,ns=1,DA=class extends AudioWorkletProcessor{cachedVoices=[];alive=!0;deviceID=ie;interpolationType=lt.fourthOrder;sequencer=new kA(this);transposition=0;tunings=[];soundfontBankOffset=0;masterGain=ns;midiVolume=1;reverbGain=1;chorusGain=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new pn;overrideSoundfont=void 0;workletProcessorChannels=[];system=$t;totalVoicesAmount=0;defaultPreset;defaultPresetUsesOverride=!1;drumPreset;defaultDrumsUsesOverride=!1;constructor(A){super(),this.oneOutputMode=A.processorOptions?.startRenderingData?.oneOutput===!0,this._outputsAmount=this.oneOutputMode?1:A.processorOptions.midiChannels,this.enableEventSystem=A.processorOptions.enableEventSystem;for(let t=0;t<127;t++)this.tunings.push([]);try{this.soundfontManager=new mn(A.processorOptions.soundfont,this.postReady.bind(this))}catch(t){throw this.post({messageType:JA.soundfontError,messageData:t}),t}this.sendPresetList(),this.getDefaultPresets();for(let t=0;t<A.processorOptions.midiChannels;t++)this.createWorkletChannel(!1);this.workletProcessorChannels[9].preset=this.drumPreset,this.workletProcessorChannels[9].drumChannel=!0,this.volumeEnvelopeSmoothingFactor=ko*(44100/sampleRate),this.panSmoothingFactor=pr*(44100/sampleRate),this.filterSmoothingFactor=Qr*(44100/sampleRate),this._snapshot=A.processorOptions?.startRenderingData?.snapshot,this.port.onmessage=t=>this.handleMessage(t.data),A.processorOptions.startRenderingData&&(this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers()),m("%cRendering enabled! Starting render.",I.info),A.processorOptions.startRenderingData.parsedMIDI&&(A.processorOptions.startRenderingData?.loopCount!==void 0?(this.sequencer.loopCount=A.processorOptions.startRenderingData?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.voiceCap=1/0,this.sequencer.loadNewSongList([A.processorOptions.startRenderingData.parsedMIDI]))),me.isInitialized.then(()=>{this.postReady(),m("%cSpessaSynth is ready!",I.recognized)})}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.defaultPresetUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.defaultPreset)>=0,this.system=A,this.drumPreset=this.getPreset(128,0),this.defaultDrumsUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.drumPreset)>=0}setSystem(A){this.system=A,this.post({messageType:JA.masterParameterChange,messageData:[Ue.midiSystem,this.system]})}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,o){this.cachedVoices||(this.cachedVoices=[]),this.cachedVoices[A]||(this.cachedVoices[A]=[]),this.cachedVoices[A][t]||(this.cachedVoices[A][t]=[]),this.cachedVoices[A][t][n]||(this.cachedVoices[A][t][n]=[]),this.cachedVoices[A][t][n][s]=o}post(A){this.enableEventSystem&&this.port.postMessage(A)}postReady(){this.enableEventSystem&&this.port.postMessage({messageType:JA.ready,messageData:void 0})}debugMessage(){m({channels:this.workletProcessorChannels,voicesAmount:this.totalVoicesAmount,outputAmount:this._outputsAmount,dumpedSamples:this.workletDumpedSamplesList})}process(A,t){if(!this.alive)return!1;this.sequencer.processTick();let n=0;return this.workletProcessorChannels.forEach((s,o)=>{if(s.voices.length<1||s.isMuted)return;let r,E,a,g,l,c,d;if(this.oneOutputMode){let B=t[0];r=o%16*2,E=B[r],a=B[r+1]}else r=o%this._outputsAmount+2,E=t[r][0],a=t[r][1],g=t[0][0],l=t[0][1],c=t[1][0],d=t[1][1];s.renderAudio(E,a,g,l,c,d),n+=s.voices.length}),n!==this.totalVoicesAmount&&(this.totalVoicesAmount=n,this.sendChannelProperties()),!0}destroyWorkletProcessor(){this.alive=!1,this.workletProcessorChannels.forEach(A=>{delete A.midiControllers,delete A.voices,delete A.sustainedVoices,delete A.lockedControllers,delete A.preset,delete A.customControllers}),delete this.cachedVoices,delete this.workletProcessorChannels,delete this.sequencer.midiData,delete this.sequencer,this.soundfontManager.destroyManager(),delete this.soundfontManager}controllerChange(A,t,n,s=!1){this.workletProcessorChannels[A].controllerChange(t,n,s)}noteOn(A,t,n,s=!1,o=!0){this.workletProcessorChannels[A].noteOn(t,n,s,o)}noteOff(A,t){this.workletProcessorChannels[A].noteOff(t)}polyPressure(A,t,n){this.workletProcessorChannels[A].polyPressure(t,n)}channelPressure(A,t){this.workletProcessorChannels[A].channelPressure(t)}pitchWheel(A,t,n){this.workletProcessorChannels[A].pitchWheel(t,n)}programChange(A,t,n=!1){this.workletProcessorChannels[A].programChange(t,n)}};DA.prototype.voiceKilling=po;DA.prototype.getWorkletVoices=dr;DA.prototype.handleMessage=wo;DA.prototype.sendChannelProperties=Ro;DA.prototype.callEvent=Fo;DA.prototype.systemExclusive=Go;DA.prototype.stopAllChannels=wr;DA.prototype.createWorkletChannel=ti;DA.prototype.resetAllControllers=ro;DA.prototype.setMasterGain=Mo;DA.prototype.setMasterPan=No;DA.prototype.setMIDIVolume=xo;DA.prototype.transposeAllChannels=Nr;DA.prototype.setMasterTuning=br;DA.prototype.getPreset=Mr;DA.prototype.reloadSoundFont=Rr;DA.prototype.clearSoundFont=Gr;DA.prototype.setEmbeddedSoundFont=Fr;DA.prototype.sendPresetList=xr;DA.prototype.sendSynthesizerSnapshot=Lr;DA.prototype.applySynthesizerSnapshot=Ur;registerProcessor(Vs,DA);m("%cProcessor succesfully registered!",I.recognized);
|
|
21
|
+
%c${this.instruments.length}%c instruments and %c${this.samples.length}%c samples.`,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info,I.recognized,I.info),V(),o&&delete this.dataArray}verifyHeader(A,t){A.header.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid chunk header! Expected "${t.toLowerCase()}" got "${A.header.toLowerCase()}"`))}verifyText(A,t){A.toLowerCase()!==t.toLowerCase()&&(V(),this.parsingError(`Invalid FourCC: Expected "${t.toLowerCase()}" got "${A.toLowerCase()}"\``))}destroySoundBank(){super.destroySoundBank(),delete this.dataArray}};function Nt(e){let A=e.slice(8,12),t=new L(A);return eA(t,4,void 0,!1).toLowerCase()==="dls "?new we(e):new fn(e,!1)}var mn=class{constructor(A,t){this.ready=t,this.reloadManager(A)}generatePresetList(){let A={};for(let t=this.soundfontList.length-1;t>=0;t--){let n=this.soundfontList[t],s=new Set;for(let o of n.soundfont.presets){let r=`${o.bank+n.bankOffset}-${o.program}`;s.has(r)||(s.add(r),A[r]=o.presetName)}}this.presetList=[];for(let[t,n]of Object.entries(A)){let s=t.split("-");this.presetList.push({presetName:n,program:parseInt(s[1]),bank:parseInt(s[0])})}}handleMessage(A,t){switch(A){case Gt.addNewSoundFont:this.addNewSoundFont(t[0],t[1],t[2]);break;case Gt.reloadSoundFont:this.reloadManager(t);break;case Gt.deleteSoundFont:this.deleteSoundFont(t);break;case Gt.rearrangeSoundFonts:this.rearrangeSoundFonts(t)}}getPresetList(){return this.presetList.slice()}reloadManager(A){let t=Nt(A);this.soundfontList=[],this.soundfontList.push({id:"main",bankOffset:0,soundfont:t}),this.generatePresetList(),this.ready()}deleteSoundFont(A){if(this.soundfontList.length===0){Y("1 soundfont left. Aborting!");return}let t=this.soundfontList.findIndex(n=>n.id===A);if(t===-1){Y(`No soundfont with id of "${A}" found. Aborting!`);return}delete this.soundfontList[t].soundfont.presets,delete this.soundfontList[t].soundfont.instruments,delete this.soundfontList[t].soundfont.samples,this.soundfontList.splice(t,1),this.generatePresetList()}addNewSoundFont(A,t,n){if(this.soundfontList.find(s=>s.id===t)!==void 0)throw new Error("Cannot overwrite the existing soundfont. Use soundfontManager.delete(id) instead.");this.soundfontList.push({id:t,soundfont:Nt(A),bankOffset:n}),this.generatePresetList(),this.ready()}rearrangeSoundFonts(A){this.soundfontList.sort((t,n)=>A.indexOf(t.id)-A.indexOf(n.id)),this.generatePresetList()}getPreset(A,t,n=!1){if(this.soundfontList.length<1)throw new Error("No soundfonts! This should never happen.");for(let o of this.soundfontList){let r=o.soundfont.getPresetNoFallback(A-o.bankOffset,t,n);if(r!==void 0)return r}if(A===128||n&&jA(A)){for(let o of this.soundfontList){let r=o.soundfont.presets.find(a=>a.isDrumPreset(n)&&a.program===t);if(r)return r;let E=o.soundfont.presets.find(a=>a.isDrumPreset(n));if(E)return E}return this.soundfontList[0].soundfont.presets[0]}else{for(let o of this.soundfontList){let r=o.soundfont.presets.find(E=>E.program===t&&!E.isDrumPreset(n));if(r)return r}return this.soundfontList[0].soundfont.presets[0]}}destroyManager(){this.soundfontList.forEach(A=>{A.soundfont.destroySoundBank()}),delete this.soundfontList}};var lt={linear:0,nearestNeighbor:1,fourthOrder:2},ht=class{static getSampleLinear(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let a=~~s,g=a+1;for(;g>=n.loopEnd;)g-=r;let l=s-a,c=o[g],d=o[a];t[E]=d+(c-d)*l,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,a=E+1;if(a>=n.end){A.finished=!0;return}let g=s-E,l=o[a],c=o[E];t[r]=c+(l-c)*g,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}static getSampleNearest(A,t){let n=A.sample,s=n.cursor,o=n.loopEnd-n.loopStart,r=n.sampleData;if(A.sample.isLooping)for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=o;let a=~~s+1;for(;a>=n.loopEnd;)a-=o;t[E]=r[a],s+=n.playbackStep*A.currentTuningCalculated}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let E=0;E<t.length;E++){let a=~~s+1;if(a>=n.end){A.finished=!0;return}t[E]=r[a],s+=n.playbackStep*A.currentTuningCalculated}}n.cursor=s}static getSampleCubic(A,t){let n=A.sample,s=n.cursor,o=n.sampleData;if(n.isLooping){let r=n.loopEnd-n.loopStart;for(let E=0;E<t.length;E++){for(;s>=n.loopEnd;)s-=r;let a=~~s,g=a+1,l=g+1,c=l+1,d=s-a;g>=n.loopEnd&&(g-=r),l>=n.loopEnd&&(l-=r),c>=n.loopEnd&&(c-=r);let B=o[a],u=o[g],p=o[l],S=o[c],w=.5*(p-B),k=B-2.5*u+2*p-.5*S,M=.5*(S-B)+1.5*(u-p);t[E]=((M*d+k)*d+w)*d+u,s+=n.playbackStep*A.currentTuningCalculated}}else{if(n.loopingMode===2&&!A.isInRelease)return;for(let r=0;r<t.length;r++){let E=~~s,a=E+1,g=a+1,l=g+1,c=s-E;if(a>=n.end||g>=n.end||l>=n.end){A.finished=!0;return}let d=o[E],B=o[a],u=o[g],p=o[l],S=.5*(u-d),w=d-2.5*B+2*u-.5*p,k=.5*(p-d)+1.5*(B-u);t[r]=((k*c+w)*c+S)*c+B,s+=n.playbackStep*A.currentTuningCalculated}}A.sample.cursor=s}};var Bs={addMapping:0,deleteMapping:1,clearMappings:2},pn=class{_keyMappings=[];handleMessage(A,t){switch(A){default:return;case Bs.addMapping:this.addMapping(...t);break;case Bs.clearMappings:this.clearMappings();break;case Bs.deleteMapping:this.deleteMapping(...t)}}addMapping(A,t,n){this._keyMappings[A]===void 0&&(this._keyMappings[A]=[]),this._keyMappings[A][t]=n}deleteMapping(A,t){this._keyMappings[A]?.[t]!==void 0&&(this._keyMappings[A][t]=void 0)}clearMappings(){this._keyMappings=[]}setMappings(A){this._keyMappings=A}getMappings(){return this._keyMappings}getVelocity(A,t){let n=this._keyMappings[A]?.[t];return n?n.velocity:-1}hasOverridePatch(A,t){let n=this._keyMappings[A]?.[t]?.patch?.bank;return n!==void 0&&n>=0}getPatch(A,t){let n=this._keyMappings[A]?.[t];if(n)return n.patch;throw new Error("No modifier.")}};var Qr=.1,Ke=class e{static cachedCoefficients=[];a0=0;a1=0;a2=0;a3=0;a4=0;x1=0;x2=0;y1=0;y2=0;resonanceCb=0;currentInitialFc=13500;lastTargetCutoff=1/0;initialized=!1;static apply(A,t,n,s){let o=A.modulatedGenerators[i.initialFilterFc],r=A.filter;r.initialized?r.currentInitialFc+=(o-r.currentInitialFc)*s:(r.initialized=!0,r.currentInitialFc=o);let E=r.currentInitialFc+n,a=A.modulatedGenerators[i.initialFilterQ];if(r.currentInitialFc>13499&&E>13499&&a===0){r.currentInitialFc=13500;return}(Math.abs(r.lastTargetCutoff-E)>1||r.resonanceCb!==a)&&(r.lastTargetCutoff=E,r.resonanceCb=a,e.calculateCoefficients(r,E));for(let g=0;g<t.length;g++){let l=t[g],c=r.a0*l+r.a1*r.x1+r.a2*r.x2-r.a3*r.y1-r.a4*r.y2;r.x2=r.x1,r.x1=l,r.y2=r.y1,r.y1=c,t[g]=c}}static calculateCoefficients(A,t){t=~~t;let n=A.resonanceCb,s=e.cachedCoefficients?.[n]?.[t];if(s!==void 0){A.a0=s.a0,A.a1=s.a1,A.a2=s.a2,A.a3=s.a3,A.a4=s.a4;return}let o=Rt(t);o=Math.min(o,.45*sampleRate);let r=n/10,E=ae(-(r-3.01)),a=1/Math.sqrt(ae(-r)),g=2*Math.PI*o/sampleRate,l=Math.cos(g),c=Math.sin(g)/(2*E),d=(1-l)*a,B=d/2,u=B,p=1+c,S=-2*l,w=1-c,k={};k.a0=B/p,k.a1=d/p,k.a2=u/p,k.a3=S/p,k.a4=w/p,A.a0=k.a0,A.a1=k.a1,A.a2=k.a2,A.a3=k.a3,A.a4=k.a4,e.cachedCoefficients[n]===void 0&&(e.cachedCoefficients[n]=[]),e.cachedCoefficients[n][t]=k}},cs=new Ke;cs.resonanceCb=0;for(let e=1500;e<13500;e++)cs.currentInitialFc=e,Ke.calculateCoefficients(cs,e);var LA=16384,Fe=new Float32Array(LA+1),_e=new Float32Array(LA+1);Fe[0]=0;Fe[Fe.length-1]=1;_e[0]=0;_e[_e.length-1]=1;for(let e=1;e<LA-1;e++){let A=-.4166666666666667*Math.log(e/(Fe.length-1))/Math.LN10;_e[e]=1-A,Fe[Fe.length-1-e]=A}function ze(e,A,t,n){switch(e&&(t=1-t),A){case GA.linear:return n?t*2-1:t;case GA.switch:return t=t>.5?1:0,n?t*2-1:t;case GA.concave:return n?(t=t*2-1,t<0?-Fe[~~(t*-LA)]:Fe[~~(t*LA)]):Fe[~~(t*LA)];case GA.convex:return n?(t=t*2-1,t<0?-_e[~~(t*-LA)]:_e[~~(t*LA)]):_e[~~(t*LA)]}}var hs=1,ls=new Float32Array(1e3);for(let e=0;e<ls.length;e++)ls[e]=ze(0,GA.convex,e/1e3,0);var Be=class e{attackDuration=0;decayDuration=0;holdDuration=0;releaseDuration=0;sustainLevel=0;delayEnd=0;attackEnd=0;holdEnd=0;decayEnd=0;releaseStartLevel=0;currentValue=0;static startRelease(A){e.recalculate(A)}static recalculate(A){let t=A.modulationEnvelope;A.isInRelease&&(t.releaseStartLevel=e.getValue(A,A.releaseStartTime,!0)),t.sustainLevel=1-A.modulatedGenerators[i.sustainModEnv]/1e3,t.attackDuration=Ce(A.modulatedGenerators[i.attackModEnv]);let n=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvDecay],s=Ce(A.modulatedGenerators[i.decayModEnv]+n);t.decayDuration=s*(1-t.sustainLevel);let o=(60-A.midiNote)*A.modulatedGenerators[i.keyNumToModEnvHold];t.holdDuration=Ce(o+A.modulatedGenerators[i.holdModEnv]);let r=Ce(A.modulatedGenerators[i.releaseModEnv]);t.releaseDuration=r*t.releaseStartLevel,t.delayEnd=A.startTime+Ce(A.modulatedGenerators[i.delayModEnv]),t.attackEnd=t.delayEnd+t.attackDuration,t.holdEnd=t.attackEnd+t.holdDuration,t.decayEnd=t.holdEnd+t.decayDuration}static getValue(A,t,n=!1){let s=A.modulationEnvelope;return A.isInRelease&&!n?s.releaseStartLevel===0?0:Math.max(0,(1-(t-A.releaseStartTime)/s.releaseDuration)*s.releaseStartLevel):(t<s.delayEnd?s.currentValue=0:t<s.attackEnd?s.currentValue=ls[~~((1-(s.attackEnd-t)/s.attackDuration)*1e3)]:t<s.holdEnd?s.currentValue=hs:t<s.decayEnd?s.currentValue=(1-(s.decayEnd-t)/s.decayDuration)*(s.sustainLevel-hs)+hs:s.currentValue=s.sustainLevel,s.currentValue)}};var Gi=-2320,xi=-1130,yn=class{sampleData;playbackStep=0;cursor=0;rootKey=0;loopStart=0;loopEnd=0;end=0;loopingMode=0;isLooping=!1;constructor(A,t,n,s,o,r,E,a){this.sampleData=A,this.playbackStep=t,this.cursor=n,this.rootKey=s,this.loopStart=o,this.loopEnd=r,this.end=E,this.loopingMode=a,this.isLooping=this.loopingMode===1||this.loopingMode===3}},bt=class e{sample;filter=new Ke;generators;modulators=[];modulatedGenerators;finished=!1;isInRelease=!1;channelNumber=0;velocity=0;midiNote=0;pressure=0;targetKey=0;modulationEnvelope=new Be;volumeEnvelope;startTime=0;releaseStartTime=1/0;currentTuningCents=0;currentTuningCalculated=1;currentPan=0;realKey;portamentoFromKey=-1;portamentoDuration=0;overridePan=0;exclusiveClass=0;constructor(A,t,n,s,o,r,E,a,g,l){this.sample=t,this.generators=g,this.exclusiveClass=this.generators[i.exclusiveClass],this.modulatedGenerators=new Int16Array(g),this.modulators=l,this.velocity=s,this.midiNote=n,this.channelNumber=o,this.startTime=r,this.targetKey=E,this.realKey=a,this.volumeEnvelope=new Ee(A,g[i.sustainVolEnv])}static copy(A,t){let n=A.sample,s=new yn(n.sampleData,n.playbackStep,n.cursor,n.rootKey,n.loopStart,n.loopEnd,n.end,n.loopingMode);return new e(A.volumeEnvelope.sampleRate,s,A.midiNote,A.velocity,A.channelNumber,t,A.targetKey,A.realKey,A.generators,A.modulators.map(o=>_.copy(o)))}exclusiveRelease(){this.release(fr),this.modulatedGenerators[i.releaseVolEnv]=Gi,this.modulatedGenerators[i.releaseModEnv]=xi,Ee.recalculate(this),Be.recalculate(this)}release(A=ur){this.releaseStartTime=currentTime,this.releaseStartTime-this.startTime<A&&(this.releaseStartTime=this.startTime+A)}};function dr(e,A,t,n,s,o=!1){let r,E=this.workletProcessorChannels[e],a=this.keyModifierManager.hasOverridePatch(e,A),g=E.getBankSelect(),l=E.preset.program;if(a){let B=this.keyModifierManager.getPatch(e,A);g=B.bank,l=B.program}let c=this.getCachedVoice(g,l,A,t);if(c!==void 0)return c.map(B=>bt.copy(B,n));let d=E.preset;return a&&(d=this.soundfontManager.getPreset(g,l,RA(this.system))),r=d.getSamplesAndGenerators(A,t).reduce((B,u)=>{if(u.sample.getAudioData()===void 0)return Y(`Discarding invalid sample: ${u.sample.sampleName}`),B;let p=new Int16Array(60);for(let C=0;C<60;C++)p[C]=qs(C,u.presetGenerators,u.instrumentGenerators);p[i.initialAttenuation]=Math.floor(p[i.initialAttenuation]*.4);let S=u.sample.samplePitch;p[i.overridingRootKey]>-1&&(S=p[i.overridingRootKey]);let w=A;p[i.keyNum]>-1&&(w=p[i.keyNum]);let k=u.sample.sampleLoopStartIndex,M=u.sample.sampleLoopEndIndex,b=p[i.sampleModes],G=new yn(u.sample.sampleData,u.sample.sampleRate/sampleRate*Math.pow(2,u.sample.samplePitchCorrection/1200),0,S,k,M,Math.floor(u.sample.sampleData.length)-1,b);return p[i.velocity]>-1&&(t=p[i.velocity]),o&&Ts([{Sample:u.sample.sampleName,Generators:p,Modulators:u.modulators.map(C=>_.debugString(C)),Velocity:t,TargetKey:w,MidiNote:A,WorkletSample:G}]),B.push(new bt(sampleRate,G,A,t,e,n,w,s,p,u.modulators.map(C=>_.copy(C)))),B},[]),this.setCachedVoice(g,l,A,t,r.map(B=>bt.copy(B,n))),r}var pr=.05,Mi=4600,Ni=2e3,mr=Math.PI/2,Sn=-500,yr=500,Qs=yr-Sn,Sr=new Float32Array(Qs+1),Dr=new Float32Array(Qs+1);for(let e=Sn;e<=yr;e++){let A=(e-Sn)/Qs,t=e-Sn;Sr[t]=Math.cos(mr*A),Dr[t]=Math.sin(mr*A)}function kr(e,A,t,n,s,o,r,E){if(isNaN(A[0]))return;let a;e.overridePan?a=e.overridePan:(e.currentPan+=(e.modulatedGenerators[i.pan]-e.currentPan)*this.synth.panSmoothingFactor,a=e.currentPan);let g=this.synth.currentGain,l=~~(a+500),c=Sr[l]*g*this.synth.panLeft,d=Dr[l]*g*this.synth.panRight;if(!this.synth.oneOutputMode){let B=e.modulatedGenerators[i.reverbEffectsSend];if(B>0){let p=this.synth.reverbGain*g*(B/Mi);for(let S=0;S<A.length;S++)s[S]+=p*A[S];o.set(s)}let u=e.modulatedGenerators[i.chorusEffectsSend];if(u>0){let p=this.synth.chorusGain*u/Ni,S=c*p,w=d*p;for(let k=0;k<A.length;k++)r[k]+=S*A[k],E[k]+=w*A[k]}}if(c>0)for(let B=0;B<A.length;B++)t[B]+=c*A[B];if(d>0)for(let B=0;B<A.length;B++)n[B]+=d*A[B]}function wr(e=!1){m("%cStop all received!",I.info);for(let A=0;A<this.workletProcessorChannels.length;A++)this.workletProcessorChannels[A].stopAllNotes(e);this.callEvent("stopall",void 0)}function Fr(e,A){this.soundfontBankOffset=A,this.reloadSoundFont(e,!0),this.overrideSoundfont.samples.forEach(t=>t.getAudioData()),this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers())}function Rr(e,A=!1){this.clearSoundFont(!1,A);try{A?this.overrideSoundfont=Nt(e):this.soundfontManager.reloadManager(e)}catch(t){this.post({messageType:JA.soundfontError,messageData:t});return}this.getDefaultPresets(),this.workletProcessorChannels.forEach(t=>t.programChange(t.preset.program)),this.post({messageType:JA.ready,messageData:void 0}),this.sendPresetList(),m("%cSpessaSynth is ready!",I.recognized)}function Gr(e=!0,A=!0){this.stopAllChannels(!0),A&&(delete this.overrideSoundfont,this.overrideSoundfont=void 0),this.getDefaultPresets(),this.cachedVoices=[];for(let t=0;t<this.workletProcessorChannels.length;t++){let n=this.workletProcessorChannels[t];(!A||A&&n.presetUsesOverride)&&n.setPresetLock(!1),n.programChange(n.preset.program)}e&&this.sendPresetList()}function xr(){let e=this.soundfontManager.getPresetList();this.overrideSoundfont!==void 0&&this.overrideSoundfont.presets.forEach(A=>{let t=A.bank===128?128:A.bank+this.soundfontBankOffset,n=e.find(s=>s.bank===t&&s.program===A.program);n!==void 0?n.presetName=A.presetName:e.push({presetName:A.presetName,bank:t,program:A.program})}),this.callEvent("presetlistchange",e)}function Mr(e,A){if(this.overrideSoundfont){let t=e===128?128:e-this.soundfontBankOffset,n=this.overrideSoundfont.getPresetNoFallback(t,A,RA(this.system));if(n)return n}return this.soundfontManager.getPreset(e,A,RA(this.system))}function Nr(e,A=!1){this.transposition=0;for(let t=0;t<this.workletProcessorChannels.length;t++)this.workletProcessorChannels[t].transposeChannel(e,A);this.transposition=e}function br(e){e=Math.round(e);for(let A=0;A<this.workletProcessorChannels.length;A++)this.workletProcessorChannels[A].setCustomController(hA.masterTuning,e)}var Lt=class e{program;bank;isBankLSB;patchName;lockPreset;lockedSystem;midiControllers;lockedControllers;customControllers;lockVibrato;channelVibrato;channelTransposeKeyShift;channelOctaveTuning;isMuted;velocityOverride;drumChannel;static getChannelSnapshot(A,t){let n=A.workletProcessorChannels[t],s=new e;return s.program=n.preset.program,s.bank=n.getBankSelect(),s.isBankLSB=s.bank!==n.bank,s.lockPreset=n.lockPreset,s.lockedSystem=n.lockedSystem,s.patchName=n.preset.presetName,s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.channelVibrato=n.channelVibrato,s.lockVibrato=n.lockGSNRPNParams,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.isMuted=n.isMuted,s.velocityOverride=n.velocityOverride,s.drumChannel=n.drumChannel,s}static applyChannelSnapshot(A,t,n){let s=A.workletProcessorChannels[t];s.muteChannel(n.isMuted),s.setDrums(n.drumChannel),s.midiControllers=n.midiControllers,s.lockedControllers=n.lockedControllers,s.customControllers=n.customControllers,s.updateChannelTuning(),s.channelVibrato=n.channelVibrato,s.lockGSNRPNParams=n.lockVibrato,s.channelTransposeKeyShift=n.channelTransposeKeyShift,s.channelOctaveTuning=n.channelOctaveTuning,s.velocityOverride=n.velocityOverride,s.setPresetLock(!1),s.setBankSelect(n.bank,n.isBankLSB),s.programChange(n.program),s.setPresetLock(n.lockPreset),s.lockedSystem=n.lockedSystem}};var Qt=class e{channelSnapshots;keyMappings;mainVolume;pan;interpolation;system;transposition;effectsConfig;static createSynthesizerSnapshot(A){let t=new e;return t.channelSnapshots=A.workletProcessorChannels.map((n,s)=>Lt.getChannelSnapshot(A,s)),t.keyMappings=A.keyModifierManager.getMappings(),t.mainVolume=A.midiVolume,t.pan=A.pan,t.system=A.system,t.interpolation=A.interpolationType,t.transposition=A.transposition,t.effectsConfig={},t}static applySnapshot(A,t){for(A.setSystem(t.system),A.setMasterGain(t.mainVolume),A.setMasterPan(t.pan),A.transposeAllChannels(t.transposition),A.interpolationType=t.interpolation,A.keyModifierManager.setMappings(t.keyMappings);A.workletProcessorChannels.length<t.channelSnapshots.length;)A.createWorkletChannel();t.channelSnapshots.forEach((n,s)=>{Lt.applyChannelSnapshot(A,s,n)}),m("%cFinished restoring controllers!",I.info)}};function Lr(){this.post({messageType:JA.synthesizerSnapshot,messageData:Qt.createSynthesizerSnapshot(this)})}function Ur(e){Qt.applySnapshot(this,e),m("%cFinished applying snapshot!",I.info)}function Dn(e,A,t){if(t<e)return 0;let n=(t-e)/(1/A)+.25;return Math.abs(n-~~(n+.5))*4-1}function Tr(e,A,t,n,s,o,r){let E=currentTime;if(e.isInRelease||E>=e.releaseStartTime&&(e.isInRelease=!0,Ee.startRelease(e),Be.startRelease(e),e.sample.loopingMode===3&&(e.sample.isLooping=!1)),e.modulatedGenerators[i.initialAttenuation]>2500)return e.isInRelease&&(e.finished=!0),e.finished;let a=e.targetKey,g=e.modulatedGenerators[i.fineTune]+this.channelOctaveTuning[e.midiNote]+this.channelTuningCents,l=e.modulatedGenerators[i.coarseTune],c=this.synth.tunings[this.preset.program]?.[e.realKey];if(c!==void 0&&c?.midiNote>=0&&(a=c.midiNote,g+=c.centTuning),e.portamentoFromKey>-1){let C=Math.min((E-e.startTime)/e.portamentoDuration,1),x=a-e.portamentoFromKey;l-=x*(1-C)}g+=(a-e.sample.rootKey)*e.modulatedGenerators[i.scaleTuning];let d=e.modulatedGenerators[i.vibLfoToPitch];if(d!==0){let C=e.startTime+Ce(e.modulatedGenerators[i.delayVibLFO]),x=Rt(e.modulatedGenerators[i.freqVibLFO]),q=Dn(C,x,E);g+=q*(d*this.customControllers[hA.modulationMultiplier])}let B=0,u=e.modulatedGenerators[i.modLfoToPitch],p=e.modulatedGenerators[i.modLfoToVolume],S=e.modulatedGenerators[i.modLfoToFilterFc],w=0;if(u!==0||S!==0||p!==0){let C=e.startTime+Ce(e.modulatedGenerators[i.delayModLFO]),x=Rt(e.modulatedGenerators[i.freqModLFO]),q=Dn(C,x,E);g+=q*(u*this.customControllers[hA.modulationMultiplier]),w=-q*p,B+=q*S}if(this.channelVibrato.depth>0){let C=Dn(e.startTime+this.channelVibrato.delay,this.channelVibrato.rate,E);C&&(g+=C*this.channelVibrato.depth)}let k=e.modulatedGenerators[i.modEnvToPitch],M=e.modulatedGenerators[i.modEnvToFilterFc];if(M!==0||k!==0){let C=Be.getValue(e,E);B+=C*M,g+=C*k}let b=~~(g+l*100);b!==e.currentTuningCents&&(e.currentTuningCents=b,e.currentTuningCalculated=Math.pow(2,b/1200));let G=new Float32Array(A.length);switch(this.synth.interpolationType){case lt.fourthOrder:ht.getSampleCubic(e,G);break;case lt.linear:default:ht.getSampleLinear(e,G);break;case lt.nearestNeighbor:ht.getSampleNearest(e,G);break}return Ke.apply(e,G,B,this.synth.filterSmoothingFactor),Ee.apply(e,G,w,this.synth.volumeEnvelopeSmoothingFactor),this.panVoice(e,G,A,t,n,s,o,r),e.finished}function vr(e,A=-12e3){this.voices.forEach(t=>{t.realKey===e&&(t.modulatedGenerators[i.releaseVolEnv]=A,t.release())})}function Hr(e,A=!0){e=Math.round(e),this.setCustomController(hA.channelTuning,e),A&&m(`%cFine tuning for %c${this.channelNumber}%c is now set to %c${e}%c cents.`,I.info,I.recognized,I.info,I.value,I.info)}function Yr(e){e=Math.round(e),m(`%cChannel ${this.channelNumber} modulation depth. Cents: %c${e}`,I.info,I.value),this.setCustomController(hA.modulationMultiplier,e/50)}function Jr(e){switch(this.dataEntryState){default:break;case YA.RPCoarse:case YA.RPFine:switch(this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7){default:break;case 0:if(e===0)break;this.midiControllers[xA+j.pitchWheelRange]|=e;let t=(this.midiControllers[xA+j.pitchWheelRange]>>7)+e/128;m(`%cChannel ${this.channelNumber} bend range. Semitones: %c${t}`,I.info,I.value);break;case 1:let s=this.customControllers[hA.channelTuning]<<7|e;this.setTuning(s*.01220703125);break;case 5:let r=this.customControllers[hA.modulationMultiplier]*50+e/128*100;this.setModulationDepth(r);break;case 16383:this.resetParameters();break}}}var bi=1e3/200;function Kr(e,A,t){if(A.transformAmount===0)return A.currentValue=0,0;let n;if(A.sourceUsesCC)n=e[A.sourceIndex];else{let g=A.sourceIndex+xA;switch(A.sourceIndex){case j.noController:n=16383;break;case j.noteOnKeyNum:n=t.midiNote<<7;break;case j.noteOnVelocity:n=t.velocity<<7;break;case j.polyPressure:n=t.pressure<<7;break;default:n=e[g];break}}let s=je[A.sourceCurveType][A.sourcePolarity][A.sourceDirection][n],o;if(A.secSrcUsesCC)o=e[A.secSrcIndex];else{let g=A.secSrcIndex+xA;switch(A.secSrcIndex){case j.noController:o=16383;break;case j.noteOnKeyNum:o=t.midiNote<<7;break;case j.noteOnVelocity:o=t.velocity<<7;break;case j.polyPressure:o=t.pressure<<7;break;default:o=e[g]}}let r=je[A.secSrcCurveType][A.secSrcPolarity][A.secSrcDirection][o],E=A.transformAmount;A.isEffectModulator&&E<=1e3&&(E*=bi,E=Math.min(E,1e3));let a=s*r*E;return A.transformType===2&&(a=Math.abs(a)),A.currentValue=a,a}function ce(e,A,t=-1,n=0){let s=e.modulators,o=e.generators,r=e.modulatedGenerators;if(t===-1){r.set(o),s.forEach(g=>{let l=X[g.modulatorDestination],c=r[g.modulatorDestination]+Kr(A,g,e);r[g.modulatorDestination]=Math.max(l.min,Math.min(c,l.max))}),Ee.recalculate(e),Be.recalculate(e);return}let E=new Set([i.initialAttenuation,i.delayVolEnv,i.attackVolEnv,i.holdVolEnv,i.decayVolEnv,i.sustainVolEnv,i.releaseVolEnv,i.keyNumToVolEnvHold,i.keyNumToVolEnvDecay]),a=new Set;s.forEach(g=>{if(g.sourceUsesCC===t&&g.sourceIndex===n||g.secSrcUsesCC===t&&g.secSrcIndex===n){let l=g.modulatorDestination;a.has(l)||(r[l]=o[l],Kr(A,g,e),s.forEach(c=>{if(c.modulatorDestination===l){let d=X[g.modulatorDestination],B=r[g.modulatorDestination]+c.currentValue;r[g.modulatorDestination]=Math.max(d.min,Math.min(B,d.max))}}),a.add(l))}}),[...a].some(g=>E.has(g))&&Ee.recalculate(e),Be.recalculate(e)}var je=[];for(let e=0;e<4;e++){je[e]=[[new Float32Array(LA),new Float32Array(LA)],[new Float32Array(LA),new Float32Array(LA)]];for(let A=0;A<LA;A++)je[e][0][0][A]=ze(0,e,A/LA,0),je[e][1][0][A]=ze(0,e,A/LA,1),je[e][0][1][A]=ze(1,e,A/LA,0),je[e][1][1][A]=ze(1,e,A/LA,1)}function qr(e,A,t=!1){if(e>127){if(!t)return;switch(e){default:return;case Ps.velocityOverride:this.velocityOverride=A}}if(e>=y.lsbForControl1ModulationWheel&&e<=y.lsbForControl13EffectControl2&&e!==y.lsbForControl6DataEntry){let n=e-32;if(this.lockedControllers[n])return;this.midiControllers[n]=this.midiControllers[n]&16256|A&127,this.voices.forEach(s=>ce(s,this.midiControllers,1,n))}if(!this.lockedControllers[e]){switch(this.midiControllers[e]=A<<7,e){case y.allNotesOff:this.stopAllNotes();break;case y.allSoundOff:this.stopAllNotes(!0);break;case y.bankSelect:this.setBankSelect(A);break;case y.lsbForControl0BankSelect:this.setBankSelect(A,!0);break;case y.RPNLsb:this.dataEntryState=YA.RPFine;break;case y.RPNMsb:this.dataEntryState=YA.RPCoarse;break;case y.NRPNMsb:this.dataEntryState=YA.NRPCoarse;break;case y.NRPNLsb:this.dataEntryState=YA.NRPFine;break;case y.dataEntryMsb:this.dataEntryCoarse(A);break;case y.lsbForControl6DataEntry:this.dataEntryFine(A);break;case y.resetAllControllers:this.resetControllersRP15Compliant();break;case y.sustainPedal:A>=64?this.holdPedal=!0:(this.holdPedal=!1,this.sustainedVoices.forEach(n=>{n.release()}),this.sustainedVoices=[]);break;default:this.voices.forEach(n=>ce(n,this.midiControllers,1,e));break}this.synth.callEvent("controllerchange",{channel:this.channelNumber,controllerNumber:e,controllerValue:A})}}function Or(e=!1){e?(this.voices.length=0,this.sustainedVoices.length=0,this.synth.sendChannelProperties()):(this.voices.forEach(A=>{A.isInRelease||A.release()}),this.sustainedVoices.forEach(A=>{A.release()}))}function Pr(e){e&&this.stopAllNotes(!0),this.isMuted=e,this.synth.sendChannelProperties(),this.synth.callEvent("mutechannel",{channel:this.channelNumber,isMuted:e})}function Vr(e,A=!1){this.drumChannel||(e+=this.synth.transposition);let t=Math.trunc(e),n=this.channelTransposeKeyShift+this.customControllers[hA.channelTransposeFine]/100;this.drumChannel&&!A||e===n||(t!==this.channelTransposeKeyShift&&this.controllerChange(y.allNotesOff,127),this.channelTransposeKeyShift=t,this.setCustomController(hA.channelTransposeFine,(e-t)*100),this.synth.sendChannelProperties())}var Ut={pitchBendRange:0,fineTuning:1,coarseTuning:2,modulationDepth:5,resetParameters:16383},qe={partParameter:1,vibratoRate:8,vibratoDepth:9,vibratoDelay:10,EGAttackTime:100,EGReleaseTime:102,TVFFilterCutoff:32,drumReverb:29};function Zr(e){let A=()=>{this.channelVibrato.delay===0&&this.channelVibrato.rate===0&&this.channelVibrato.depth===0&&(this.channelVibrato.depth=50,this.channelVibrato.rate=8,this.channelVibrato.delay=.6)},t=(n,s,o)=>{o.length>0&&(o=" "+o),m(`%c${n} for %c${this.channelNumber}%c is now set to %c${s}%c${o}.`,I.info,I.recognized,I.info,I.value,I.info)};switch(this.dataEntryState){default:case YA.Idle:break;case YA.NRPFine:if(this.lockGSNRPNParams)return;let n=this.midiControllers[y.NRPNMsb]>>7,s=this.midiControllers[y.NRPNLsb]>>7;switch(n){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${s.toString(16).toUpperCase()} 0x${s.toString(16).toUpperCase()})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.partParameter:switch(s){default:if(e===64)return;Y(`%cUnrecognized NRPN for %c${this.channelNumber}%c: %c(0x${n.toString(16)} 0x${s.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case qe.vibratoRate:if(e===64)return;A(),this.channelVibrato.rate=e/64*8,t("Vibrato rate",`${e} = ${this.channelVibrato.rate}`,"Hz");break;case qe.vibratoDepth:if(e===64)return;A(),this.channelVibrato.depth=e/2,t("Vibrato depth",`${e} = ${this.channelVibrato.depth}`,"cents of detune");break;case qe.vibratoDelay:if(e===64)return;A(),this.channelVibrato.delay=e/64/3,t("Vibrato delay",`${e} = ${this.channelVibrato.delay}`,"seconds");break;case qe.TVFFilterCutoff:this.controllerChange(y.brightness,e),t("Filter cutoff",e.toString(),"");break;case qe.EGAttackTime:this.controllerChange(y.attackTime,e),t("EG attack time",e.toString(),"");break;case qe.EGReleaseTime:this.controllerChange(y.releaseTime,e),t("EG release time",e.toString(),"");break}break;case qe.drumReverb:let r=e;this.controllerChange(y.reverbDepth,r),t("GS Drum reverb",r.toString(),"percent");break}break;case YA.RPCoarse:case YA.RPFine:let o=this.midiControllers[y.RPNMsb]|this.midiControllers[y.RPNLsb]>>7;switch(o){default:Y(`%cUnrecognized RPN for %c${this.channelNumber}%c: %c(0x${o.toString(16)})%c data value: %c${e}`,I.warn,I.recognized,I.warn,I.unrecognized,I.warn,I.value);break;case Ut.pitchBendRange:this.midiControllers[xA+j.pitchWheelRange]=e<<7,t("Pitch bend range",e.toString(),"semitones");break;case Ut.coarseTuning:let r=e-64;this.setCustomController(hA.channelTuningSemitones,r),t("Coarse tuning",r.toString(),"semitones");break;case Ut.fineTuning:this.setTuning(e-64,!1);break;case Ut.modulationDepth:this.setModulationDepth(e*100);break;case Ut.resetParameters:this.resetParameters();break}}}var Tt={0:0,1:.006,2:.023,4:.05,8:.11,16:.25,32:.5,64:2.06,80:4.2,96:8.4,112:19.5,116:26.7,120:40,124:80,127:480};function Li(e){if(Tt[e]!==void 0)return Tt[e];let A=null,t=null;for(let n of Object.keys(Tt))n=parseInt(n),n<e&&(A===null||n>A)&&(A=n),n>e&&(t===null||n<t)&&(t=n);if(A!==null&&t!==null){let n=Tt[A],s=Tt[t];return n+(e-A)*(s-n)/(t-A)}return 0}function Xr(e,A){return Li(e)*(A/30)}function Wr(e,A,t=!1,n=!0,s=currentTime){if(A<1){this.noteOff(e);return}if(A=Math.min(127,A),this.synth.highPerformanceMode&&this.synth.totalVoicesAmount>200&&A<40||this.synth.highPerformanceMode&&A<10||this.isMuted)return;let o=e+this.channelTransposeKeyShift,r=o;if(o>127||o<0)return;let E=this.preset.program;this.synth.tunings[E]?.[o]?.midiNote>=0&&(r=this.synth.tunings[E]?.[o].midiNote),this.velocityOverride>0&&(A=this.velocityOverride);let a=this.synth.keyModifierManager.getVelocity(this.channelNumber,o);a>-1&&(A=a);let g=-1,l=0,c=this.midiControllers[y.portamentoTime]>>7,d=this.midiControllers[y.portamentoControl],B=d>>7;if(!this.drumChannel&&B!==r&&this.midiControllers[y.portamentoOnOff]>=8192&&c>0){if(d!==1){let w=Math.abs(r-B);l=Xr(c,w),g=B}this.controllerChange(y.portamentoControl,r)}let u=this.synth.getWorkletVoices(this.channelNumber,r,A,s,o,t),p=0;this.randomPan&&(p=Math.round(Math.random()*1e3-500));let S=this.voices;u.forEach(w=>{w.portamentoFromKey=g,w.portamentoDuration=l,w.overridePan=p;let k=w.exclusiveClass;k!==0&&S.forEach(gA=>{gA.exclusiveClass===k&&gA.exclusiveRelease()}),ce(w,this.midiControllers);let M=w.modulatedGenerators[i.startAddrsOffset]+w.modulatedGenerators[i.startAddrsCoarseOffset]*32768,b=w.modulatedGenerators[i.endAddrOffset]+w.modulatedGenerators[i.endAddrsCoarseOffset]*32768,G=w.modulatedGenerators[i.startloopAddrsOffset]+w.modulatedGenerators[i.startloopAddrsCoarseOffset]*32768,C=w.modulatedGenerators[i.endloopAddrsOffset]+w.modulatedGenerators[i.endloopAddrsCoarseOffset]*32768,x=w.sample,q=gA=>Math.max(0,Math.min(x.sampleData.length-1,gA));if(x.cursor=q(x.cursor+M),x.end=q(x.end+b),x.loopStart=q(x.loopStart+G),x.loopEnd=q(x.loopEnd+C),x.loopEnd<x.loopStart){let gA=x.loopStart;x.loopStart=x.loopEnd,x.loopEnd=gA}x.loopEnd-x.loopStart<1&&(x.loopingMode=0,x.isLooping=!1),w.volumeEnvelope.attenuation=w.volumeEnvelope.attenuationTargetGain,w.currentPan=Math.max(-500,Math.min(500,w.modulatedGenerators[i.pan]))}),this.synth.totalVoicesAmount+=u.length,this.synth.totalVoicesAmount>this.synth.voiceCap&&this.synth.voiceKilling(u.length),S.push(...u),n&&(this.synth.sendChannelProperties(),this.synth.callEvent("noteon",{midiNote:e,channel:this.channelNumber,velocity:A}))}function _r(e){if(e>127||e<0){Y("Received a noteOn for note",e,"Ignoring.");return}let A=e+this.channelTransposeKeyShift;if(this.synth.highPerformanceMode&&!this.drumChannel){this.killNote(A,-6950),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber});return}this.voices.forEach(n=>{n.realKey!==A||n.isInRelease===!0||(this.holdPedal?this.sustainedVoices.push(n):n.release())}),this.synth.callEvent("noteoff",{midiNote:e,channel:this.channelNumber})}function zr(e,A){this.voices.forEach(t=>{t.midiNote===e&&(t.pressure=A,ce(t,this.midiControllers,0,j.polyPressure))}),this.synth.callEvent("polypressure",{channel:this.channelNumber,midiNote:e,pressure:A})}function jr(e){this.midiControllers[xA+j.channelPressure]=e<<7,this.voices.forEach(A=>ce(A,this.midiControllers,0,j.channelPressure)),this.synth.callEvent("channelpressure",{channel:this.channelNumber,pressure:e})}function $r(e,A){if(this.lockedControllers[xA+j.pitchWheel])return;let t=A|e<<7;this.synth.callEvent("pitchwheel",{channel:this.channelNumber,MSB:e,LSB:A}),this.midiControllers[xA+j.pitchWheel]=t,this.voices.forEach(n=>ce(n,this.midiControllers,0,j.pitchWheel)),this.synth.sendChannelProperties()}function Ai(e){if(e.length!==12)throw new Error("Tuning is not the length of 12.");this.channelOctaveTuning=new Int8Array(128);for(let A=0;A<128;A++)this.channelOctaveTuning[A]=e[A%12]}function ei(e,A=!1){if(this.lockPreset)return;let t=this.getBankSelect(),n,s,o=this.isXGChannel;if(this.synth.overrideSoundfont){let r=t===128?128:t-this.synth.soundfontBankOffset,E=this.synth.overrideSoundfont.getPresetNoFallback(r,e,o);E?(n=E.bank===128?128:E.bank+this.synth.soundfontBankOffset,s=E,this.presetUsesOverride=!0):(s=this.synth.soundfontManager.getPreset(t,e,o),n=s.bank,this.presetUsesOverride=!1)}else s=this.synth.soundfontManager.getPreset(t,e,o),n=s.bank,this.presetUsesOverride=!1;this.setPreset(s),this.synth.callEvent("programchange",{channel:this.channelNumber,program:s.program,bank:n,userCalled:A})}var SA=class{midiControllers=new Int16Array(zt);lockedControllers=Array(zt).fill(!1);customControllers=new Float32Array(Kn);channelTransposeKeyShift=0;channelOctaveTuning=new Int8Array(128);channelTuningCents=0;holdPedal=!1;drumChannel=!1;velocityOverride=0;randomPan=!1;dataEntryState=YA.Idle;bank=0;bankLSB=0;preset=void 0;lockPreset=!1;lockedSystem="gs";presetUsesOverride=!1;lockGSNRPNParams=!1;channelVibrato={delay:0,depth:0,rate:0};isMuted=!1;voices=[];sustainedVoices=[];channelNumber;synth;constructor(A,t,n){this.synth=A,this.preset=t,this.channelNumber=n}get isXGChannel(){return RA(this.synth.system)||this.lockPreset&&RA(this.lockedSystem)}setCustomController(A,t){this.customControllers[A]=t,this.updateChannelTuning()}updateChannelTuning(){this.channelTuningCents=this.customControllers[hA.channelTuning]+this.customControllers[hA.channelTransposeFine]+this.customControllers[hA.masterTuning]+this.customControllers[hA.channelTuningSemitones]*100}renderAudio(A,t,n,s,o,r){this.voices=this.voices.filter(E=>!this.renderVoice(E,A,t,n,s,o,r))}setPresetLock(A){this.lockPreset=A,A&&(this.lockedSystem=this.synth.system)}setBankSelect(A,t=!1){if(!this.lockPreset)if(t)this.bankLSB=A;else switch(this.bank=A,Ct(this.getBankSelect(),A,this.synth.system,!1,this.drumChannel,this.channelNumber).drumsStatus){default:case 0:break;case 1:this.channelNumber%16===9&&(this.bank=127);break;case 2:this.setDrums(!0);break}}getBankSelect(){return Et(this.bank,this.bankLSB,this.drumChannel,this.isXGChannel)}setPreset(A){this.lockPreset||(delete this.preset,this.preset=A)}setDrums(A){this.lockPreset||this.drumChannel!==A&&(A?(this.channelTransposeKeyShift=0,this.drumChannel=!0):this.drumChannel=!1,this.presetUsesOverride=!1,this.synth.callEvent("drumchange",{channel:this.channelNumber,isDrumChannel:this.drumChannel}),this.programChange(this.preset.program),this.synth.sendChannelProperties())}setVibrato(A,t,n){this.lockGSNRPNParams||(this.channelVibrato.rate=t,this.channelVibrato.delay=n,this.channelVibrato.depth=A)}disableAndLockGSNRPN(){this.lockGSNRPNParams=!0,this.channelVibrato.rate=0,this.channelVibrato.delay=0,this.channelVibrato.depth=0}};SA.prototype.renderVoice=Tr;SA.prototype.panVoice=kr;SA.prototype.killNote=vr;SA.prototype.stopAllNotes=Or;SA.prototype.muteChannel=Pr;SA.prototype.noteOn=Wr;SA.prototype.noteOff=_r;SA.prototype.polyPressure=zr;SA.prototype.channelPressure=jr;SA.prototype.pitchWheel=$r;SA.prototype.programChange=ei;SA.prototype.setTuning=Hr;SA.prototype.setOctaveTuning=Ai;SA.prototype.setModulationDepth=Yr;SA.prototype.transposeChannel=Vr;SA.prototype.controllerChange=qr;SA.prototype.resetControllers=io;SA.prototype.resetControllersRP15Compliant=ao;SA.prototype.resetParameters=Io;SA.prototype.dataEntryFine=Jr;SA.prototype.dataEntryCoarse=Zr;function ti(e=!1){let A=new SA(this,this.defaultPreset,this.workletProcessorChannels.length);this.workletProcessorChannels.push(A),A.resetControllers(),this.sendChannelProperties(),e&&this.callEvent("newchannel",void 0),A.channelNumber%16===9&&this.workletProcessorChannels[this.workletProcessorChannels.length-1].setDrums(!0)}var ur=.03,fr=.07,ns=1,DA=class extends AudioWorkletProcessor{cachedVoices=[];alive=!0;deviceID=ie;interpolationType=lt.fourthOrder;sequencer=new kA(this);transposition=0;tunings=[];soundfontBankOffset=0;masterGain=ns;midiVolume=1;reverbGain=1;chorusGain=1;voiceCap=350;pan=0;panLeft=.5;panRight=.5;highPerformanceMode=!1;keyModifierManager=new pn;overrideSoundfont=void 0;workletProcessorChannels=[];system=$t;totalVoicesAmount=0;defaultPreset;defaultPresetUsesOverride=!1;drumPreset;defaultDrumsUsesOverride=!1;constructor(A){super(),this.oneOutputMode=A.processorOptions?.startRenderingData?.oneOutput===!0,this._outputsAmount=this.oneOutputMode?1:A.processorOptions.midiChannels,this.enableEventSystem=A.processorOptions.enableEventSystem;for(let t=0;t<127;t++)this.tunings.push([]);try{this.soundfontManager=new mn(A.processorOptions.soundfont,this.postReady.bind(this))}catch(t){throw this.post({messageType:JA.soundfontError,messageData:t}),t}this.sendPresetList(),this.getDefaultPresets();for(let t=0;t<A.processorOptions.midiChannels;t++)this.createWorkletChannel(!1);this.workletProcessorChannels[9].preset=this.drumPreset,this.workletProcessorChannels[9].drumChannel=!0,this.volumeEnvelopeSmoothingFactor=ko*(44100/sampleRate),this.panSmoothingFactor=pr*(44100/sampleRate),this.filterSmoothingFactor=Qr*(44100/sampleRate),this._snapshot=A.processorOptions?.startRenderingData?.snapshot,this.port.onmessage=t=>this.handleMessage(t.data),A.processorOptions.startRenderingData&&(this._snapshot!==void 0&&(this.applySynthesizerSnapshot(this._snapshot),this.resetAllControllers()),m("%cRendering enabled! Starting render.",I.info),A.processorOptions.startRenderingData.parsedMIDI&&(A.processorOptions.startRenderingData?.loopCount!==void 0?(this.sequencer.loopCount=A.processorOptions.startRenderingData?.loopCount,this.sequencer.loop=!0):this.sequencer.loop=!1,this.voiceCap=1/0,this.sequencer.loadNewSongList([A.processorOptions.startRenderingData.parsedMIDI]))),me.isInitialized.then(()=>{this.postReady(),m("%cSpessaSynth is ready!",I.recognized)})}get currentGain(){return this.masterGain*this.midiVolume}getDefaultPresets(){let A=this.system;this.system="xg",this.defaultPreset=this.getPreset(0,0),this.defaultPresetUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.defaultPreset)>=0,this.system=A,this.drumPreset=this.getPreset(128,0),this.defaultDrumsUsesOverride=this.overrideSoundfont?.presets?.indexOf(this.drumPreset)>=0}setSystem(A){this.system=A,this.post({messageType:JA.masterParameterChange,messageData:[Ue.midiSystem,this.system]})}getCachedVoice(A,t,n,s){return this.cachedVoices?.[A]?.[t]?.[n]?.[s]}setCachedVoice(A,t,n,s,o){this.cachedVoices||(this.cachedVoices=[]),this.cachedVoices[A]||(this.cachedVoices[A]=[]),this.cachedVoices[A][t]||(this.cachedVoices[A][t]=[]),this.cachedVoices[A][t][n]||(this.cachedVoices[A][t][n]=[]),this.cachedVoices[A][t][n][s]=o}post(A){this.enableEventSystem&&this.port.postMessage(A)}postReady(){this.enableEventSystem&&this.port.postMessage({messageType:JA.ready,messageData:void 0})}debugMessage(){m({channels:this.workletProcessorChannels,voicesAmount:this.totalVoicesAmount,outputAmount:this._outputsAmount,dumpedSamples:this.workletDumpedSamplesList})}process(A,t){if(!this.alive)return!1;this.sequencer.processTick();let n=0;return this.workletProcessorChannels.forEach((s,o)=>{if(s.voices.length<1||s.isMuted)return;let r,E,a,g,l,c,d;if(this.oneOutputMode){let B=t[0];r=o%16*2,E=B[r],a=B[r+1]}else r=o%this._outputsAmount+2,E=t[r][0],a=t[r][1],g=t[0][0],l=t[0][1],c=t[1][0],d=t[1][1];s.renderAudio(E,a,g,l,c,d),n+=s.voices.length}),n!==this.totalVoicesAmount&&(this.totalVoicesAmount=n,this.sendChannelProperties()),!0}destroyWorkletProcessor(){this.alive=!1,this.workletProcessorChannels.forEach(A=>{delete A.midiControllers,delete A.voices,delete A.sustainedVoices,delete A.lockedControllers,delete A.preset,delete A.customControllers}),delete this.cachedVoices,delete this.workletProcessorChannels,delete this.sequencer.midiData,delete this.sequencer,this.soundfontManager.destroyManager(),delete this.soundfontManager}controllerChange(A,t,n,s=!1){this.workletProcessorChannels[A].controllerChange(t,n,s)}noteOn(A,t,n,s=!1,o=!0){this.workletProcessorChannels[A].noteOn(t,n,s,o)}noteOff(A,t){this.workletProcessorChannels[A].noteOff(t)}polyPressure(A,t,n){this.workletProcessorChannels[A].polyPressure(t,n)}channelPressure(A,t){this.workletProcessorChannels[A].channelPressure(t)}pitchWheel(A,t,n){this.workletProcessorChannels[A].pitchWheel(t,n)}programChange(A,t,n=!1){this.workletProcessorChannels[A].programChange(t,n)}};DA.prototype.voiceKilling=po;DA.prototype.getWorkletVoices=dr;DA.prototype.handleMessage=wo;DA.prototype.sendChannelProperties=Ro;DA.prototype.callEvent=Fo;DA.prototype.systemExclusive=Go;DA.prototype.stopAllChannels=wr;DA.prototype.createWorkletChannel=ti;DA.prototype.resetAllControllers=ro;DA.prototype.setMasterGain=Mo;DA.prototype.setMasterPan=No;DA.prototype.setMIDIVolume=xo;DA.prototype.transposeAllChannels=Nr;DA.prototype.setMasterTuning=br;DA.prototype.getPreset=Mr;DA.prototype.reloadSoundFont=Rr;DA.prototype.clearSoundFont=Gr;DA.prototype.setEmbeddedSoundFont=Fr;DA.prototype.sendPresetList=xr;DA.prototype.sendSynthesizerSnapshot=Lr;DA.prototype.applySynthesizerSnapshot=Ur;registerProcessor(Vs,DA);m("%cProcessor succesfully registered!",I.recognized);
|
|
@@ -45,7 +45,6 @@ export function programChange(programNumber, userChange = false)
|
|
|
45
45
|
this.presetUsesOverride = false;
|
|
46
46
|
}
|
|
47
47
|
this.setPreset(preset);
|
|
48
|
-
console.log(preset.presetName, this.isXGChannel, this.drumChannel, bank);
|
|
49
48
|
this.synth.callEvent("programchange", {
|
|
50
49
|
channel: this.channelNumber,
|
|
51
50
|
program: preset.program,
|