diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..9c9f842 --- /dev/null +++ b/.babelrc @@ -0,0 +1,13 @@ +{ + "presets": [ + [ + "@babel/preset-env", + { + "loose": true + } + ] + ], + "plugins": [ + "@babel/plugin-proposal-class-properties" + ] +} diff --git a/.gitignore b/.gitignore index dc9be26..a06522e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,13 @@ libtimidity.debug.js libtimidity.debug.wasm libtimidity.debug.wasm.map node_modules/ +*.sf2 +.log/ +*.lock +yarn-error.log +package-lock.json +*.pat +test/* +!test/tester.js +!test/index.html +.cache diff --git a/.travis.yml b/.travis.yml index c159f6a..f571adb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,7 @@ language: node_js + +git: + submodules: false + node_js: - lts/* diff --git a/MIDIPlayer.d.ts b/MIDIPlayer.d.ts new file mode 100644 index 0000000..a57bb8f --- /dev/null +++ b/MIDIPlayer.d.ts @@ -0,0 +1,11 @@ +export as namespace "phaser-timidity-plugin"; + +export = MIDIPlayer + +declare class MIDIPlayer { + static async createMIDIPlayer(cfgURL?: string, acontext?: AudioContext): Promise + play(): void + pause(): void + seek(sec: number): void + load(midiURL: string): void +} diff --git a/dist/player-bundle.js b/dist/player-bundle.js new file mode 100644 index 0000000..e22ba9a --- /dev/null +++ b/dist/player-bundle.js @@ -0,0 +1 @@ +function t(t,e,r,n,o,i,s){try{var a=t[i](s),u=a.value}catch(t){return void r(t)}a.done?e(u):Promise.resolve(u).then(n,o)}function e(e){return function(){var r=this,n=arguments;return new Promise((function(o,i){var s=e.apply(r,n);function a(e){t(s,o,i,a,u,"next",e)}function u(e){t(s,o,i,a,u,"throw",e)}a(void 0)}))}}function r(t,e){return(r=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}var n,o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};(function(t){var e=function(t){var e,r=Object.prototype,n=r.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",a=o.toStringTag||"@@toStringTag";function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{u({},"")}catch(t){u=function(t,e,r){return t[e]=r}}function c(t,e,r,n){var o=e&&e.prototype instanceof d?e:d,i=Object.create(o.prototype),s=new A(n||[]);return i._invoke=function(t,e,r){var n=l;return function(o,i){if(n===p)throw new Error("Generator is already running");if(n===v){if("throw"===o)throw i;return N()}for(r.method=o,r.arg=i;;){var s=r.delegate;if(s){var a=E(s,r);if(a){if(a===y)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===l)throw n=v,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var u=h(t,e,r);if("normal"===u.type){if(n=r.done?v:f,u.arg===y)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(n=v,r.method="throw",r.arg=u.arg)}}}(t,r,s),i}function h(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=c;var l="suspendedStart",f="suspendedYield",p="executing",v="completed",y={};function d(){}function m(){}function g(){}var w={};w[i]=function(){return this};var _=Object.getPrototypeOf,x=_&&_(_(O([])));x&&x!==r&&n.call(x,i)&&(w=x);var b=g.prototype=d.prototype=Object.create(w);function L(t){["next","throw","return"].forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function k(t,e){function r(o,i,s,a){var u=h(t[o],t,i);if("throw"!==u.type){var c=u.arg,l=c.value;return l&&"object"==typeof l&&n.call(l,"__await")?e.resolve(l.__await).then((function(t){r("next",t,s,a)}),(function(t){r("throw",t,s,a)})):e.resolve(l).then((function(t){c.value=t,s(c)}),(function(t){return r("throw",t,s,a)}))}a(u.arg)}var o;this._invoke=function(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return o=o?o.then(i,i):i()}}function E(t,r){var n=t.iterator[r.method];if(n===e){if(r.delegate=null,"throw"===r.method){if(t.iterator.return&&(r.method="return",r.arg=e,E(t,r),"throw"===r.method))return y;r.method="throw",r.arg=new TypeError("The iterator does not provide a 'throw' method")}return y}var o=h(n,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,y;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,y):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function j(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function R(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function A(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(j,this),this.reset(!0)}function O(t){if(t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var o=-1,s=function r(){for(;++o=0;--i){var s=this.tryEntries[i],a=s.completion;if("root"===s.tryLoc)return o("end");if(s.tryLoc<=this.prev){var u=n.call(s,"catchLoc"),c=n.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),R(r),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;R(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:O(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}(t.exports);try{regeneratorRuntime=e}catch(t){Function("r","regeneratorRuntime = r")(e)}})(n={exports:{}},n.exports);var i=function(t,e){if(e=e.split(":")[0],!(t=+t))return!1;switch(e){case"http":case"ws":return 80!==t;case"https":case"wss":return 443!==t;case"ftp":return 21!==t;case"gopher":return 70!==t;case"file":return!1}return 0!==t},s=Object.prototype.hasOwnProperty;function a(t){try{return decodeURIComponent(t.replace(/\+/g," "))}catch(t){return null}}function u(t){try{return encodeURIComponent(t)}catch(t){return null}}var c={stringify:function(t,e){e=e||"";var r,n,o=[];for(n in"string"!=typeof e&&(e="?"),t)if(s.call(t,n)){if((r=t[n])||null!=r&&!isNaN(r)||(r=""),n=u(n),r=u(r),null===n||null===r)continue;o.push(n+"="+r)}return o.length?e+o.join("&"):""},parse:function(t){for(var e,r=/([^=?#&]+)=?([^&]*)/g,n={};e=r.exec(t);){var o=a(e[1]),i=a(e[2]);null===o||null===i||o in n||(n[o]=i)}return n}},h=/^[A-Za-z][A-Za-z0-9+-.]*:[\\/]+/,l=/^([a-z][a-z0-9.+-]*:)?([\\/]{1,})?([\S\s]*)/i,f=new RegExp("^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+");function p(t){return(t||"").toString().replace(f,"")}var v=[["#","hash"],["?","query"],function(t){return t.replace("\\","/")},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],y={hash:1,query:1};function d(t){var e,r=("undefined"!=typeof window?window:void 0!==o?o:"undefined"!=typeof self?self:{}).location||{},n={},i=typeof(t=t||r);if("blob:"===t.protocol)n=new g(unescape(t.pathname),{});else if("string"===i)for(e in n=new g(t,{}),y)delete n[e];else if("object"===i){for(e in t)e in y||(n[e]=t[e]);void 0===n.slashes&&(n.slashes=h.test(t.href))}return n}function m(t){t=p(t);var e=l.exec(t);return{protocol:e[1]?e[1].toLowerCase():"",slashes:!!(e[2]&&e[2].length>=2),rest:e[2]&&1===e[2].length?"/"+e[3]:e[3]}}function g(t,e,r){if(t=p(t),!(this instanceof g))return new g(t,e,r);var n,o,s,a,u,h,l=v.slice(),f=typeof e,y=this,w=0;for("object"!==f&&"string"!==f&&(r=e,e=null),r&&"function"!=typeof r&&(r=c.parse),e=d(e),n=!(o=m(t||"")).protocol&&!o.slashes,y.slashes=o.slashes||n&&e.slashes,y.protocol=o.protocol||e.protocol||"",t=o.rest,o.slashes||(l[3]=[/(.*)/,"pathname"]);w0&&this._events[t].length>r&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},_.prototype.on=_.prototype.addListener,_.prototype.once=function(t,e){if(!b(e))throw TypeError("listener must be a function");var r=!1;function n(){this.removeListener(t,n),r||(r=!0,e.apply(this,arguments))}return n.listener=e,this.on(t,n),this},_.prototype.removeListener=function(t,e){var r,n,o,i;if(!b(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(o=(r=this._events[t]).length,n=-1,r===e||b(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(L(r)){for(i=o;i-- >0;)if(r[i]===e||r[i].listener&&r[i].listener===e){n=i;break}if(n<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(n,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},_.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(b(r=this._events[t]))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},_.prototype.listeners=function(t){return this._events&&this._events[t]?b(this._events[t])?[this._events[t]]:this._events[t].slice():[]},_.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(b(e))return 1;if(e)return e.length}return 0},_.listenerCount=function(t,e){return t.listenerCount(e)};var j=function(t){var n,o;function i(e,r,n){var o;return(o=t.call(this)||this)._worklet=e,o._baseURL=n,o._worklet.port.onmessage=o._handleMessage.bind(function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(o)),o.context=r,o._worklet.connect(r.destination),o}o=t,(n=i).prototype=Object.create(o.prototype),n.prototype.constructor=n,r(n,o);var s=i.prototype;return s._handleMessage=function(){var t=e(regeneratorRuntime.mark((function t(e){var r,n=this;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if("missingInstruments"!==e.data.type){t.next=13;break}return r=[],t.prev=2,t.next=5,Promise.all(e.data.instruments.map((function(t){return n.fetchInstrument(t)})));case 5:r=t.sent,t.next=12;break;case 8:t.prev=8,t.t0=t.catch(2),console.log("Error loading instrument patch files"),console.log(t.t0);case 12:this._worklet.port.postMessage({type:"instPayload",buffs:r});case 13:case"end":return t.stop()}}),t,this,[[2,8]])})));return function(e){return t.apply(this,arguments)}}(),s.play=function(){this.context.resume(),this._worklet.port.postMessage("play")},s.pause=function(){this._worklet.port.postMessage("pause")},s.seek=function(t){this._worklet.port.postMessage({type:"seek",sec:t})},s.load=function(t){var e=this;R(t).then((function(t){e._worklet.port.postMessage({type:"loadMIDI",midiBuff:t})}))},i.createMIDIPlayer=function(){var t=e(regeneratorRuntime.mark((function t(e,r){var n,o,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return void 0===e&&(e="/gravis.cfg"),void 0===r&&(r=new AudioContext),t.next=4,r.audioWorklet.addModule("worklet-bundle.js");case 4:return t.next=6,O(e);case 6:return n=t.sent,0===(o=e.substring(0,e.lastIndexOf("/")+1)).length&&(o="/"),s=new AudioWorkletNode(r,"midiplayer",{outputChannelCount:[2],processorOptions:{baseURL:o,timidityCfg:n}}),t.abrupt("return",new i(s,r,o));case 11:case"end":return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}(),s.fetchInstrument=function(){var t=e(regeneratorRuntime.mark((function t(e){var r;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r=this._baseURL+e,"pat"!==/(?:\.([^.]+))?$/.exec(e)&&(r=this._baseURL+e+".pat"),t.t0=e,t.next=6,R(r);case 6:return t.t1=t.sent,t.abrupt("return",{instrumentName:t.t0,instrumentBuff:t.t1});case 8:case"end":return t.stop()}}),t,this)})));return function(e){return t.apply(this,arguments)}}(),i}(x.EventEmitter);function R(t){return A.apply(this,arguments)}function A(){return(A=e(regeneratorRuntime.mark((function t(e){var r,n,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,C(e);case 2:return r=t.sent,t.next=5,r.arrayBuffer();case 5:return n=t.sent,o=new Uint8Array(n),t.abrupt("return",o);case 8:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function O(t){return N.apply(this,arguments)}function N(){return(N=e(regeneratorRuntime.mark((function t(e){var r,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,C(e);case 2:return r=t.sent,t.next=5,r.text();case 5:return n=t.sent,t.abrupt("return",n);case 7:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function C(t){return M.apply(this,arguments)}function M(){return(M=e(regeneratorRuntime.mark((function t(e){var r,n;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return r={mode:"cors",credentials:"same-origin"},t.next=3,window.fetch(e,r);case 3:if(200===(n=t.sent).status){t.next=6;break}throw new Error("Could not load "+e);case 6:return t.abrupt("return",n);case 7:case"end":return t.stop()}}),t)})))).apply(this,arguments)}export default j;export{E as createURL,O as fetchText}; diff --git a/dist/worklet-bundle.js b/dist/worklet-bundle.js new file mode 100644 index 0000000..90004ef --- /dev/null +++ b/dist/worklet-bundle.js @@ -0,0 +1 @@ +function A(A,g,I,t,Q,e,r){try{var B=A[e](r),o=B.value}catch(A){return void I(A)}B.done?g(o):Promise.resolve(o).then(t,Q)}function g(g){return function(){var I=this,t=arguments;return new Promise((function(Q,e){var r=g.apply(I,t);function B(g){A(r,Q,e,B,o,"next",g)}function o(g){A(r,Q,e,B,o,"throw",g)}B(void 0)}))}}function I(A){return(I=Object.setPrototypeOf?Object.getPrototypeOf:function(A){return A.__proto__||Object.getPrototypeOf(A)})(A)}function t(A,g){return(t=Object.setPrototypeOf||function(A,g){return A.__proto__=g,A})(A,g)}function Q(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(A){return!1}}function e(A,g,I){return(e=Q()?Reflect.construct:function(A,g,I){var Q=[null];Q.push.apply(Q,g);var e=new(Function.bind.apply(A,Q));return I&&t(e,I.prototype),e}).apply(null,arguments)}function r(A){var g="function"==typeof Map?new Map:void 0;return(r=function(A){if(null===A||(Q=A,-1===Function.toString.call(Q).indexOf("[native code]")))return A;var Q;if("function"!=typeof A)throw new TypeError("Super expression must either be null or a function");if(void 0!==g){if(g.has(A))return g.get(A);g.set(A,r)}function r(){return e(A,arguments,I(this).constructor)}return r.prototype=Object.create(A.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),t(r,A)})(A)}function B(A){if(void 0===A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return A}function o(A,g){(null==g||g>A.length)&&(g=A.length);for(var I=0,t=new Array(g);I=A.length?{done:!0}:{done:!1,value:A[t++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(I=A[Symbol.iterator]()).next.bind(I)}var E="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(A){var g={exports:{}};return A(g,g.exports),g.exports}var i=n((function(A,g){var I,t=(I="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(A){var g,t,Q=void 0!==(A=A||{})?A:{};Q.ready=new Promise((function(A,I){g=A,t=I}));var e,r,B,o={};for(e in Q)Q.hasOwnProperty(e)&&(o[e]=Q[e]);r="object"==typeof window,B="function"==typeof importScripts,"object"==typeof process&&"object"==typeof process.versions&&process.versions.node;var C,E,n="";(r||B)&&(B?n=self.location.href:"undefined"!=typeof document&&document.currentScript&&(n=document.currentScript.src),I&&(n=I),n=0!==n.indexOf("blob:")?n.substr(0,n.lastIndexOf("/")+1):"",C=function(A){try{var g=new XMLHttpRequest;return g.open("GET",A,!1),g.send(null),g.responseText}catch(g){var I=eA(A);if(I)return function(A){for(var g=[],I=0;I255&&(t&=255),g.push(String.fromCharCode(t))}return g.join("")}(I);throw g}},B&&(E=function(A){try{var g=new XMLHttpRequest;return g.open("GET",A,!1),g.responseType="arraybuffer",g.send(null),new Uint8Array(g.response)}catch(g){var I=eA(A);if(I)return I;throw g}}));var i,a,s=Q.print||console.log.bind(console),c=Q.printErr||console.warn.bind(console);for(e in o)o.hasOwnProperty(e)&&(Q[e]=o[e]);o=null,Q.arguments&&Q.arguments,Q.thisProgram&&Q.thisProgram,Q.quit&&Q.quit,Q.wasmBinary&&(i=Q.wasmBinary),Q.noExitRuntime&&Q.noExitRuntime,"object"!=typeof WebAssembly&&Y("no native wasm support detected");var D,h,w,u,f,l,d=!1,y="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(A,g,I){for(var t=g+I,Q=g;A[Q]&&!(Q>=t);)++Q;if(Q-g>16&&A.subarray&&y)return y.decode(A.subarray(g,Q));for(var e="";g>10,56320|1023&C)}}else e+=String.fromCharCode((31&r)<<6|B)}else e+=String.fromCharCode(r)}return e}function p(A,g){return A?F(w,A,g):""}function N(A,g,I,t){if(!(t>0))return 0;for(var Q=I,e=I+t-1,r=0;r=55296&&B<=57343&&(B=65536+((1023&B)<<10)|1023&A.charCodeAt(++r)),B<=127){if(I>=e)break;g[I++]=B}else if(B<=2047){if(I+1>=e)break;g[I++]=192|B>>6,g[I++]=128|63&B}else if(B<=65535){if(I+2>=e)break;g[I++]=224|B>>12,g[I++]=128|B>>6&63,g[I++]=128|63&B}else{if(I+3>=e)break;g[I++]=240|B>>18,g[I++]=128|B>>12&63,g[I++]=128|B>>6&63,g[I++]=128|63&B}}return g[I]=0,I-Q}function m(A){for(var g=0,I=0;I=55296&&t<=57343&&(t=65536+((1023&t)<<10)|1023&A.charCodeAt(++I)),t<=127?++g:g+=t<=2047?2:t<=65535?3:4}return g}function G(A){D=A,Q.HEAP8=h=new Int8Array(A),Q.HEAP16=u=new Int16Array(A),Q.HEAP32=f=new Int32Array(A),Q.HEAPU8=w=new Uint8Array(A),Q.HEAPU16=new Uint16Array(A),Q.HEAPU32=new Uint32Array(A),Q.HEAPF32=new Float32Array(A),Q.HEAPF64=new Float64Array(A)}Q.INITIAL_MEMORY;var R=[],k=[],U=[],M=[];k.push({func:function(){oA()}});var L=0,S=null;function v(A){L++,Q.monitorRunDependencies&&Q.monitorRunDependencies(L)}function K(A){if(L--,Q.monitorRunDependencies&&Q.monitorRunDependencies(L),0==L&&S){var g=S;S=null,g()}}function Y(A){Q.onAbort&&Q.onAbort(A),c(A+=""),d=!0,A="abort("+A+"). Build with -s ASSERTIONS=1 for more info.";var g=new WebAssembly.RuntimeError(A);throw t(g),g}Q.preloadedImages={},Q.preloadedAudios={};var q="data:application/octet-stream;base64,";function H(A){return g=A,I=q,String.prototype.startsWith?g.startsWith(I):0===g.indexOf(I);var g,I}var J,P,b,x="data:application/octet-stream;base64,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QZH+AEkNACADQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiBSAEQYH+AGsQEyADIAAgBUGB/wAgBGsQKSADKQMIIgBCGYinIQIgAykDACADKQMQIAMpAxiEQgBSrYQiBVAgAEL///8PgyIAQoCAgAhUIABCgICACFEbRQRAIAJBAWohAgwBCyAFIABCgICACIWEQgBSDQAgAkEBcSACaiECCyADQSBqJAAgAiABQiCIp0GAgICAeHFyvgtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAuCCwIFfxB+IwBB4ABrIgQkACACQiCGIAFCIIiEIQ8gA0IvhiEMIANC////////P4MiDkIPhiEQIAIgA4VCgICAgICAgICAf4MhCSACQv///////z+DIgpCIIghESAOQhGIIRIgA0IwiKdB//8BcSEGAkACfyACQjCIp0H//wFxIghBAWtB/f8BTQRAQQAgBkEBa0H+/wFJDQEaCyABUCACQv///////////wCDIgtCgICAgICAwP//AFQgC0KAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEJDAILQQEgA0L///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIANCgICAgICAIIQhCUIAIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACUARAQoCAgICAgOD//wAhCUIAIQEMAwsgCUKAgICAgIDA//8AhCEJQgAhAQwCCyACQoCAgICAgMD//wCFUARAIAEgC4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQkMAwsgCUKAgICAgIDA//8AhCEJDAILIAEgC4RQBEBCACEBDAILIAJQBEBCACEBDAILIAtC////////P1gEQCAEQdAAaiABIAogASAKIApQIgUbeSAFQQZ0rXynIgVBD2sQEyAEKQNYIgpCIIYgBCkDUCIBQiCIhCEPIApCIIghEUEQIAVrIQULIAUgAkL///////8/Vg0AGiAEQUBrQgAgDkIAIA4gDlAiBxt5IAdBBnStfKciB0EPaxATIAQpA0giAkIPhiAEKQNAIg1CMYiEIRAgAkIvhiANQhGIhCEMIAJCEYghEiAFIAdrQRBqCyEFIAxC/////w+DIgIgAUL/////D4MiAX4iEyANQg+GQoCA/v8PgyIDIA9C/////w+DIgt+fCINQiCGIg4gASADfnwiDCAOVK0gAiALfiIWIAMgCkL/////D4MiCn58IhQgEEL/////D4MiDiABfnwiECANIBNUrUIghiANQiCIhHwiEyACIAp+IhcgAyARQoCABIQiDX58IhEgCyAOfnwiFSABIBJC/////weDQoCAgIAIhCIPfnwiAUIghnwiEnwhAyAGIAhqIAVqQf//AGshBQJAIAogDn4iGCACIA1+fCICIBhUrSACIAIgCyAPfnwiC1atfCALIAsgFCAWVK0gECAUVK18fCICVq18IA0gD358IAogD34iCyANIA5+fCIKIAtUrUIghiAKQiCIhHwgAiACIApCIIZ8IgJWrXwgAiACIAEgFVStIBEgF1StIBEgFVatfHxCIIYgAUIgiIR8IgFWrXwgASAQIBNWrSASIBNUrXx8IgIgAVStfCIBQoCAgICAgMAAg1BFBEAgBUEBaiEFDAELIAxCP4ghCiABQgGGIAJCP4iEIQEgAkIBhiADQj+IhCECIAxCAYYhDCAKIANCAYaEIQMLIAVB//8BTgRAIAlCgICAgICAwP//AIQhCUIAIQEMAQsCfiAFQQBMBEBBASAFayIGQYABTwRAQgAhAQwDCyAEQTBqIAwgAyAFQf8AaiIFEBMgBEEgaiACIAEgBRATIARBEGogDCADIAYQKSAEIAIgASAGECkgBCkDMCAEKQM4hEIAUq0gBCkDICAEKQMQhIQhDCAEKQMoIAQpAxiEIQMgBCkDACECIAQpAwgMAQsgAUL///////8/gyAFrUIwhoQLIAmEIQkgDFAgA0J/VSADQoCAgICAgICAgH9RG0UEQCAJIAJCAXwiASACVK18IQkMAQsgDCADQoCAgICAgICAgH+FhFBFBEAgAiEBDAELIAkgAiACQgGDfCIBIAJUrXwhCQsgACABNwMAIAAgCTcDCCAEQeAAaiQACxkAIAAgARBFIgBBACAALQAAIAFB/wFxRhsL+QECAn8DfiMAQRBrIgIkAAJ+IAG9IgVC////////////AIMiBEKAgICAgICACH1C/////////+//AFgEQCAEQjyGIQYgBEIEiEKAgICAgICAgDx8DAELIARCgICA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NgIAIAJBEGogBLcgAUHADWooAgAqAky7oiAAKgIUu6IQFiACIAIpAxAgAikDGEKAgICAgICA9T8QFCABQYAOaiACKQMAIAIpAwgQEjgCAAwCCyADQQRMBEAgACABQewBbGoiAUGkD2pBATYCACACQTBqIAS3IAFBwA1qKAIAKgJMu6IgACoCFLuiEBYgAkEgaiACKQMwIAIpAzhCgICAgICAwPU/EBQgAUGADmogAikDICACKQMoEBI4AgAMAgsgACABQewBbGoiAUGkD2ohBSADQfwATgRAIAVBAjYCACACQdAAaiAEtyABQcANaigCACoCTLuiIAAqAhS7ohAWIAJBQGsgAikDUCACKQNYQoCAgICAgMD1PxAUIAFBgA5qIAIpA0AgAikDSBASOAIADAILIAVBADYCACACQfAAaiAEtyABQcANaigCACoCTLuiIAAqAhS7ohAWIAJB4ABqIAIpA3AgAikDeEKAgICAgICA8j8QFCABQYQOaiADsiACKQNgIAIpA2gQEiIGlDgCACABQYAOaiAGQf8AIANrspQ4AgAMAQsgA0GkD2pBAzYCACACQZABaiAEtyADQcANaigCACoCTLuiIAAqAhS7ohAWIAJBgAFqIAIpA5ABIAIpA5gBQoCAgICAgID1PxAUIANBgA5qIAIpA4ABIAIpA4gBEBI4AgALIAJBoAFqJAALTwECfyAAIAFB7AFsaiICQbwNaiEDIAJBwA1qKAIALQBmQcAAcQRAIAJBmA9qQQM2AgAgA0EDOgAAIAAgARAoGiAAIAEQGQ8LIANBAzoAAAsxACAAIAFBKGxqIgBBxAhqQtoANwIAIABB4AhqQQA2AgAgAEHQCGpCgMCAgPAPNwIAC4IEAQN/IAJBgARPBEAgACABIAIQBBogAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCACQQFIBEAgACECDAELIABBA3FFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANPDQEgAkEDcQ0ACwsCQCADQXxxIgRBwABJDQAgAiAEQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICAC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NgIADAULIAAgAi0ABEEobGpB1AhqIAItAAY2AgAMBAsgAi0ABiEDIAAoAoBmIAItAAQiBHZBAXEEQCAAIARBKGxqQbwIaiADNgIADAQLIAAgBEEobGpBwAhqIAM2AgAMAwsgACACLQAEQShsakHICGogAi0ABjYCAAwCCyAAIAItAAQQJiAAKAKYZiECDAELIAAgAi0ABEEobGpBvAhqIAItAAY2AgALIAAgAkEIaiICNgKYZgwBCwsgACgClGYgAkcEQCAAIAJBCGs2AphmCyABIQMLIAAgAzYCoGYLXwEDfwNAIAFBEEZFBEAgACABECYgACgCoAghAyAAIAFBKGxqIgJB3AhqQQI2AgAgAkHMCGpBfzYCACACQcAIaiADNgIAIAJBvAhqQQA2AgAgAUEBaiEBDAELCyAAEDkLIAAgAEEBNgIEIAAgACgCGLJDAADIQpU4AhQgAEEAED8LYwEBfwNAIAIEQCAAQX9BACABKAIAIgNBDXZBgIACcyADQYCAgIB/SBsgA0H/////AEobIgNBGHQgA0EIdEGAgPwHcXJBEHY7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC2IBAX8DQCACBEAgAEH//wFBgIB+IAEoAgAiA0ENdiADQYCAgIB/SBsgA0H/////AEobIgNBGHQgA0EIdEGAgPwHcXJBEHY7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC08BAX8DQCACBEAgAEF/QQAgASgCACIDQQ12QYCAAnMgA0GAgICAf0gbIANB/////wBKGzsBACAAQQJqIQAgAUEEaiEBIAJBAWshAgwBCwsLTgEBfwNAIAIEQCAAQf//AUGAgH4gASgCACIDQQ12IANBgICAgH9IGyADQf////8AShs7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC04BAX8DQCACBEAgAEF/QQAgASgCACIDQRV2QYABcyADQYCAgIB/SBsgA0H/////AEobOgAAIABBAWohACABQQRqIQEgAkEBayECDAELCwtMAQF/A0AgAgRAIABB/wBBgH8gASgCACIDQRV2IANBgICAgH9IGyADQf////8AShs6AAAgAEEBaiEAIAFBBGohASACQQFrIQIMAQsLC+oBAQR/IwBBIGsiAyQAIAAgAUHsAWxqIgBBwA1qKAIALQBk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";function _(A,g){var I,t,Q;try{Q=function(A){try{if(A==x&&i)return new Uint8Array(i);var g=eA(A);if(g)return g;if(E)return E(A);throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}catch(A){Y(A)}}(A),t=new WebAssembly.Module(Q),I=new WebAssembly.Instance(t,g)}catch(A){var e=A.toString();throw c("failed to compile wasm module: "+e),(e.indexOf("imported Memory")>=0||e.indexOf("memory import")>=0)&&c("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."),A}return[I,t]}function T(A){for(;A.length>0;){var g=A.shift();if("function"!=typeof g){var I=g.func;"number"==typeof I?void 0===g.arg?l.get(I)():l.get(I)(g.arg):I(void 0===g.arg?null:g.arg)}else g(Q)}}H(x)||(J=x,x=Q.locateFile?Q.locateFile(J,n):n+J);var O={splitPath:function(A){return/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(A).slice(1)},normalizeArray:function(A,g){for(var I=0,t=A.length-1;t>=0;t--){var Q=A[t];"."===Q?A.splice(t,1):".."===Q?(A.splice(t,1),I++):I&&(A.splice(t,1),I--)}if(g)for(;I;I--)A.unshift("..");return A},normalize:function(A){var g="/"===A.charAt(0),I="/"===A.substr(-1);return(A=O.normalizeArray(A.split("/").filter((function(A){return!!A})),!g).join("/"))||g||(A="."),A&&I&&(A+="/"),(g?"/":"")+A},dirname:function(A){var g=O.splitPath(A),I=g[0],t=g[1];return I||t?(t&&(t=t.substr(0,t.length-1)),I+t):"."},basename:function(A){if("/"===A)return"/";var g=(A=(A=O.normalize(A)).replace(/\/$/,"")).lastIndexOf("/");return-1===g?A:A.substr(g+1)},extname:function(A){return O.splitPath(A)[3]},join:function(){var A=Array.prototype.slice.call(arguments,0);return O.normalize(A.join("/"))},join2:function(A,g){return O.normalize(A+"/"+g)}},j={resolve:function(){for(var A="",g=!1,I=arguments.length-1;I>=-1&&!g;I--){var t=I>=0?arguments[I]:X.cwd();if("string"!=typeof t)throw new TypeError("Arguments to path.resolve must be strings");if(!t)return"";A=t+"/"+A,g="/"===t.charAt(0)}return(g?"/":"")+(A=O.normalizeArray(A.split("/").filter((function(A){return!!A})),!g).join("/"))||"."},relative:function(A,g){function I(A){for(var g=0;g=0&&""===A[I];I--);return g>I?[]:A.slice(g,I-g+1)}A=j.resolve(A).substr(1),g=j.resolve(g).substr(1);for(var t=I(A.split("/")),Q=I(g.split("/")),e=Math.min(t.length,Q.length),r=e,B=0;B0&&(s(F(A.output,0)),A.output=[])}},default_tty1_ops:{put_char:function(A,g){null===g||10===g?(c(F(A.output,0)),A.output=[]):0!=g&&A.output.push(g)},flush:function(A){A.output&&A.output.length>0&&(c(F(A.output,0)),A.output=[])}}};function Z(A){for(var g=function(A,g){return g||(g=16),Math.ceil(A/g)*g}(A,16384),I=CA(g);A=g)){g=Math.max(g,I*(I<1048576?2:1.125)>>>0),0!=I&&(g=Math.max(g,256));var t=A.contents;A.contents=new Uint8Array(g),A.usedBytes>0&&A.contents.set(t.subarray(0,A.usedBytes),0)}},resizeFileStorage:function(A,g){if(A.usedBytes!=g)if(0==g)A.contents=null,A.usedBytes=0;else{var I=A.contents;A.contents=new Uint8Array(g),I&&A.contents.set(I.subarray(0,Math.min(g,A.usedBytes))),A.usedBytes=g}},node_ops:{getattr:function(A){var g={};return g.dev=X.isChrdev(A.mode)?A.id:1,g.ino=A.id,g.mode=A.mode,g.nlink=1,g.uid=0,g.gid=0,g.rdev=A.rdev,X.isDir(A.mode)?g.size=4096:X.isFile(A.mode)?g.size=A.usedBytes:X.isLink(A.mode)?g.size=A.link.length:g.size=0,g.atime=new Date(A.timestamp),g.mtime=new Date(A.timestamp),g.ctime=new Date(A.timestamp),g.blksize=4096,g.blocks=Math.ceil(g.size/g.blksize),g},setattr:function(A,g){void 0!==g.mode&&(A.mode=g.mode),void 0!==g.timestamp&&(A.timestamp=g.timestamp),void 0!==g.size&&z.resizeFileStorage(A,g.size)},lookup:function(A,g){throw X.genericErrors[44]},mknod:function(A,g,I,t){return z.createNode(A,g,I,t)},rename:function(A,g,I){if(X.isDir(A.mode)){var t;try{t=X.lookupNode(g,I)}catch(A){}if(t)for(var Q in t.contents)throw new X.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=I,g.contents[I]=A,g.timestamp=A.parent.timestamp,A.parent=g},unlink:function(A,g){delete A.contents[g],A.timestamp=Date.now()},rmdir:function(A,g){var I=X.lookupNode(A,g);for(var t in I.contents)throw new X.ErrnoError(55);delete A.contents[g],A.timestamp=Date.now()},readdir:function(A){var g=[".",".."];for(var I in A.contents)A.contents.hasOwnProperty(I)&&g.push(I);return g},symlink:function(A,g,I){var t=z.createNode(A,g,41471,0);return t.link=I,t},readlink:function(A){if(!X.isLink(A.mode))throw new X.ErrnoError(28);return A.link}},stream_ops:{read:function(A,g,I,t,Q){var e=A.node.contents;if(Q>=A.node.usedBytes)return 0;var r=Math.min(A.node.usedBytes-Q,t);if(r>8&&e.subarray)g.set(e.subarray(Q,Q+r),I);else for(var B=0;B0||t+I8)throw new X.ErrnoError(32);for(var Q=O.normalizeArray(A.split("/").filter((function(A){return!!A})),!1),e=X.root,r="/",B=0;B40)throw new X.ErrnoError(32)}}return{path:r,node:e}},getPath:function(A){for(var g;;){if(X.isRoot(A)){var I=A.mount.mountpoint;return g?"/"!==I[I.length-1]?I+"/"+g:I+g:I}g=g?A.name+"/"+g:A.name,A=A.parent}},hashName:function(A,g){for(var I=0,t=0;t>>0)%X.nameTable.length},hashAddNode:function(A){var g=X.hashName(A.parent.id,A.name);A.name_next=X.nameTable[g],X.nameTable[g]=A},hashRemoveNode:function(A){var g=X.hashName(A.parent.id,A.name);if(X.nameTable[g]===A)X.nameTable[g]=A.name_next;else for(var I=X.nameTable[g];I;){if(I.name_next===A){I.name_next=A.name_next;break}I=I.name_next}},lookupNode:function(A,g){var I=X.mayLookup(A);if(I)throw new X.ErrnoError(I,A);for(var t=X.hashName(A.id,g),Q=X.nameTable[t];Q;Q=Q.name_next){var e=Q.name;if(Q.parent.id===A.id&&e===g)return Q}return X.lookup(A,g)},createNode:function(A,g,I,t){var Q=new X.FSNode(A,g,I,t);return X.hashAddNode(Q),Q},destroyNode:function(A){X.hashRemoveNode(A)},isRoot:function(A){return A===A.parent},isMountpoint:function(A){return!!A.mounted},isFile:function(A){return 32768==(61440&A)},isDir:function(A){return 16384==(61440&A)},isLink:function(A){return 40960==(61440&A)},isChrdev:function(A){return 8192==(61440&A)},isBlkdev:function(A){return 24576==(61440&A)},isFIFO:function(A){return 4096==(61440&A)},isSocket:function(A){return 49152==(49152&A)},flagModes:{r:0,"r+":2,w:577,"w+":578,a:1089,"a+":1090},modeStringToFlags:function(A){var g=X.flagModes[A];if(void 0===g)throw new Error("Unknown file open mode: "+A);return g},flagsToPermissionString:function(A){var g=["r","w","rw"][3&A];return 512&A&&(g+="w"),g},nodePermissions:function(A,g){return X.ignorePermissions||(-1===g.indexOf("r")||292&A.mode)&&(-1===g.indexOf("w")||146&A.mode)&&(-1===g.indexOf("x")||73&A.mode)?0:2},mayLookup:function(A){var g=X.nodePermissions(A,"x");return g||(A.node_ops.lookup?0:2)},mayCreate:function(A,g){try{return X.lookupNode(A,g),20}catch(A){}return X.nodePermissions(A,"wx")},mayDelete:function(A,g,I){var t;try{t=X.lookupNode(A,g)}catch(A){return A.errno}var Q=X.nodePermissions(A,"wx");if(Q)return Q;if(I){if(!X.isDir(t.mode))return 54;if(X.isRoot(t)||X.getPath(t)===X.cwd())return 10}else if(X.isDir(t.mode))return 31;return 0},mayOpen:function(A,g){return A?X.isLink(A.mode)?32:X.isDir(A.mode)&&("r"!==X.flagsToPermissionString(g)||512&g)?31:X.nodePermissions(A,X.flagsToPermissionString(g)):44},MAX_OPEN_FDS:4096,nextfd:function(A,g){A=A||0,g=g||X.MAX_OPEN_FDS;for(var I=A;I<=g;I++)if(!X.streams[I])return I;throw new X.ErrnoError(33)},getStream:function(A){return X.streams[A]},createStream:function(A,g,I){X.FSStream||(X.FSStream=function(){},X.FSStream.prototype={object:{get:function(){return this.node},set:function(A){this.node=A}},isRead:{get:function(){return 1!=(2097155&this.flags)}},isWrite:{get:function(){return 0!=(2097155&this.flags)}},isAppend:{get:function(){return 1024&this.flags}}});var t=new X.FSStream;for(var Q in A)t[Q]=A[Q];A=t;var e=X.nextfd(g,I);return A.fd=e,X.streams[e]=A,A},closeStream:function(A){X.streams[A]=null},chrdev_stream_ops:{open:function(A){var g=X.getDevice(A.node.rdev);A.stream_ops=g.stream_ops,A.stream_ops.open&&A.stream_ops.open(A)},llseek:function(){throw new X.ErrnoError(70)}},major:function(A){return A>>8},minor:function(A){return 255&A},makedev:function(A,g){return A<<8|g},registerDevice:function(A,g){X.devices[A]={stream_ops:g}},getDevice:function(A){return X.devices[A]},getMounts:function(A){for(var g=[],I=[A];I.length;){var t=I.pop();g.push(t),I.push.apply(I,t.mounts)}return g},syncfs:function(A,g){"function"==typeof A&&(g=A,A=!1),X.syncFSRequests++,X.syncFSRequests>1&&c("warning: "+X.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work");var I=X.getMounts(X.root.mount),t=0;function Q(A){return X.syncFSRequests--,g(A)}function e(A){if(A)return e.errored?void 0:(e.errored=!0,Q(A));++t>=I.length&&Q(null)}I.forEach((function(g){if(!g.type.syncfs)return e(null);g.type.syncfs(g,A,e)}))},mount:function(A,g,I){var t,Q="/"===I,e=!I;if(Q&&X.root)throw new X.ErrnoError(10);if(!Q&&!e){var r=X.lookupPath(I,{follow_mount:!1});if(I=r.path,t=r.node,X.isMountpoint(t))throw new X.ErrnoError(10);if(!X.isDir(t.mode))throw new X.ErrnoError(54)}var B={type:A,opts:g,mountpoint:I,mounts:[]},o=A.mount(B);return o.mount=B,B.root=o,Q?X.root=o:t&&(t.mounted=B,t.mount&&t.mount.mounts.push(B)),o},unmount:function(A){var g=X.lookupPath(A,{follow_mount:!1});if(!X.isMountpoint(g.node))throw new X.ErrnoError(28);var I=g.node,t=I.mounted,Q=X.getMounts(t);Object.keys(X.nameTable).forEach((function(A){for(var g=X.nameTable[A];g;){var I=g.name_next;-1!==Q.indexOf(g.mount)&&X.destroyNode(g),g=I}})),I.mounted=null;var e=I.mount.mounts.indexOf(t);I.mount.mounts.splice(e,1)},lookup:function(A,g){return A.node_ops.lookup(A,g)},mknod:function(A,g,I){var t=X.lookupPath(A,{parent:!0}).node,Q=O.basename(A);if(!Q||"."===Q||".."===Q)throw new X.ErrnoError(28);var e=X.mayCreate(t,Q);if(e)throw new X.ErrnoError(e);if(!t.node_ops.mknod)throw new X.ErrnoError(63);return t.node_ops.mknod(t,Q,g,I)},create:function(A,g){return g=void 0!==g?g:438,g&=4095,g|=32768,X.mknod(A,g,0)},mkdir:function(A,g){return g=void 0!==g?g:511,g&=1023,g|=16384,X.mknod(A,g,0)},mkdirTree:function(A,g){for(var I=A.split("/"),t="",Q=0;Qthis.length-1||A<0)){var g=A%this.chunkSize,I=A/this.chunkSize|0;return this.getter(I)[g]}},e.prototype.setDataGetter=function(A){this.getter=A},e.prototype.cacheLength=function(){var A=new XMLHttpRequest;if(A.open("HEAD",I,!1),A.send(null),!(A.status>=200&&A.status<300||304===A.status))throw new Error("Couldn't load "+I+". Status: "+A.status);var g,t=Number(A.getResponseHeader("Content-length")),Q=(g=A.getResponseHeader("Accept-Ranges"))&&"bytes"===g,e=(g=A.getResponseHeader("Content-Encoding"))&&"gzip"===g,r=1048576;Q||(r=t);var B=this;B.setDataGetter((function(A){var g=A*r,Q=(A+1)*r-1;if(Q=Math.min(Q,t-1),void 0===B.chunks[A]&&(B.chunks[A]=function(A,g){if(A>g)throw new Error("invalid range ("+A+", "+g+") or no bytes requested!");if(g>t-1)throw new Error("only "+t+" bytes available! programmer error!");var Q=new XMLHttpRequest;if(Q.open("GET",I,!1),t!==r&&Q.setRequestHeader("Range","bytes="+A+"-"+g),"undefined"!=typeof Uint8Array&&(Q.responseType="arraybuffer"),Q.overrideMimeType&&Q.overrideMimeType("text/plain; charset=x-user-defined"),Q.send(null),!(Q.status>=200&&Q.status<300||304===Q.status))throw new Error("Couldn't load "+I+". Status: "+Q.status);return void 0!==Q.response?new Uint8Array(Q.response||[]):tA(Q.responseText||"",!0)}(g,Q)),void 0===B.chunks[A])throw new Error("doXHR failed!");return B.chunks[A]})),!e&&t||(r=t=1,t=this.getter(0).length,r=t,s("LazyFiles on gzip forces download of the whole file when length is accessed")),this._length=t,this._chunkSize=r,this.lengthKnown=!0},"undefined"!=typeof XMLHttpRequest){if(!B)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var r=new e;Object.defineProperties(r,{length:{get:function(){return this.lengthKnown||this.cacheLength(),this._length}},chunkSize:{get:function(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}});var o={isDevice:!1,contents:r}}else o={isDevice:!1,url:I};var C=X.createFile(A,g,o,t,Q);o.contents?C.contents=o.contents:o.url&&(C.contents=null,C.url=o.url),Object.defineProperties(C,{usedBytes:{get:function(){return this.contents.length}}});var E={};return Object.keys(C.stream_ops).forEach((function(A){var g=C.stream_ops[A];E[A]=function(){return X.forceLoadFile(C),g.apply(null,arguments)}})),E.read=function(A,g,I,t,Q){X.forceLoadFile(C);var e=A.node.contents;if(Q>=e.length)return 0;var r=Math.min(e.length-Q,t);if(e.slice)for(var B=0;B>2]=t.dev,f[I+4>>2]=0,f[I+8>>2]=t.ino,f[I+12>>2]=t.mode,f[I+16>>2]=t.nlink,f[I+20>>2]=t.uid,f[I+24>>2]=t.gid,f[I+28>>2]=t.rdev,f[I+32>>2]=0,b=[t.size>>>0,(P=t.size,+Math.abs(P)>=1?P>0?(0|Math.min(+Math.floor(P/4294967296),4294967295))>>>0:~~+Math.ceil((P-+(~~P>>>0))/4294967296)>>>0:0)],f[I+40>>2]=b[0],f[I+44>>2]=b[1],f[I+48>>2]=4096,f[I+52>>2]=t.blocks,f[I+56>>2]=t.atime.getTime()/1e3|0,f[I+60>>2]=0,f[I+64>>2]=t.mtime.getTime()/1e3|0,f[I+68>>2]=0,f[I+72>>2]=t.ctime.getTime()/1e3|0,f[I+76>>2]=0,b=[t.ino>>>0,(P=t.ino,+Math.abs(P)>=1?P>0?(0|Math.min(+Math.floor(P/4294967296),4294967295))>>>0:~~+Math.ceil((P-+(~~P>>>0))/4294967296)>>>0:0)],f[I+80>>2]=b[0],f[I+84>>2]=b[1],0},doMsync:function(A,g,I,t,Q){var e=w.slice(A,A+I);X.msync(g,e,Q,I,t)},doMkdir:function(A,g){return"/"===(A=O.normalize(A))[A.length-1]&&(A=A.substr(0,A.length-1)),X.mkdir(A,g,0),0},doMknod:function(A,g,I){switch(61440&g){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}return X.mknod(A,g,I),0},doReadlink:function(A,g,I){if(I<=0)return-28;var t=X.readlink(A),Q=Math.min(I,m(t)),e=h[g+Q];return N(t,w,g,I+1),h[g+Q]=e,Q},doAccess:function(A,g){if(-8&g)return-28;var I;if(!(I=X.lookupPath(A,{follow:!0}).node))return-44;var t="";return 4&g&&(t+="r"),2&g&&(t+="w"),1&g&&(t+="x"),t&&X.nodePermissions(I,t)?-2:0},doDup:function(A,g,I){var t=X.getStream(I);return t&&X.close(t),X.open(A,g,0,I,I).fd},doReadv:function(A,g,I,t){for(var Q=0,e=0;e>2],B=f[g+(8*e+4)>>2],o=X.read(A,h,r,B,t);if(o<0)return-1;if(Q+=o,o>2],B=f[g+(8*e+4)>>2],o=X.write(A,h,r,B,t);if(o<0)return-1;Q+=o}return Q},varargs:void 0,get:function(){return V.varargs+=4,f[V.varargs-4>>2]},getStr:function(A){return p(A)},getStreamFromFD:function(A){var g=X.getStream(A);if(!g)throw new X.ErrnoError(8);return g},get64:function(A,g){return A}};function $(A){try{return a.grow(A-D.byteLength+65535>>>16),G(a.buffer),1}catch(A){}}var AA=function(A,g,I,t){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=X.nextInode++,this.name=g,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=t},gA=365,IA=146;function tA(A,g,I){var t=I>0?I:m(A)+1,Q=new Array(t),e=N(A,Q,0,Q.length);return g&&(Q.length=e),Q}Object.defineProperties(AA.prototype,{read:{get:function(){return(this.mode&gA)===gA},set:function(A){A?this.mode|=gA:this.mode&=-366}},write:{get:function(){return(this.mode&IA)===IA},set:function(A){A?this.mode|=IA:this.mode&=-147}},isFolder:{get:function(){return X.isDir(this.mode)}},isDevice:{get:function(){return X.isChrdev(this.mode)}}}),X.FSNode=AA,X.staticInit(),Q.FS_createPath=X.createPath,Q.FS_createDataFile=X.createDataFile,Q.FS_createPreloadedFile=X.createPreloadedFile,Q.FS_createLazyFile=X.createLazyFile,Q.FS_createDevice=X.createDevice,Q.FS_unlink=X.unlink;var QA="function"==typeof atob?atob:function(A){var g,I,t,Q,e,r,B="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o="",C=0;A=A.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{g=B.indexOf(A.charAt(C++))<<2|(Q=B.indexOf(A.charAt(C++)))>>4,I=(15&Q)<<4|(e=B.indexOf(A.charAt(C++)))>>2,t=(3&e)<<6|(r=B.indexOf(A.charAt(C++))),o+=String.fromCharCode(g),64!==e&&(o+=String.fromCharCode(I)),64!==r&&(o+=String.fromCharCode(t))}while(C>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-28;case 9:return e=28,f[nA()>>2]=e,-1;default:return-28}}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),-A.errno}var e},h:function(A,g,I){V.varargs=I;try{var t=V.getStreamFromFD(A);switch(g){case 21509:case 21505:return t.tty?0:-59;case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:return t.tty?0:-59;case 21519:if(!t.tty)return-59;var Q=V.get();return f[Q>>2]=0,0;case 21520:return t.tty?-28:-59;case 21531:return Q=V.get(),X.ioctl(t,g,Q);case 21523:case 21524:return t.tty?0:-59;default:Y("bad ioctl syscall "+g)}}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),-A.errno}},i:function(A,g,I){V.varargs=I;try{var t=V.getStr(A),Q=I?V.get():0;return X.open(t,g,Q).fd}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),-A.errno}},e:function(A,g,I){w.copyWithin(A,g,g+I)},f:function(A){A>>>=0;var g=w.length,I=2147483648;if(A>I)return!1;for(var t,Q,e=1;e<=4;e*=2){var r=g*(1+.2/e);if(r=Math.min(r,A+100663296),$(Math.min(I,((t=Math.max(16777216,A,r))%(Q=65536)>0&&(t+=Q-t%Q),t))))return!0}return!1},c:function(A){try{var g=V.getStreamFromFD(A);return X.close(g),0}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),A.errno}},g:function(A,g,I,t){try{var Q=V.getStreamFromFD(A),e=V.doReadv(Q,g,I);return f[t>>2]=e,0}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),A.errno}},d:function(A,g,I,t,Q){try{var e=V.getStreamFromFD(A),r=4294967296*I+(g>>>0),B=9007199254740992;return r<=-B||r>=B?-61:(X.llseek(e,r,t),b=[e.position>>>0,(P=e.position,+Math.abs(P)>=1?P>0?(0|Math.min(+Math.floor(P/4294967296),4294967295))>>>0:~~+Math.ceil((P-+(~~P>>>0))/4294967296)>>>0:0)],f[Q>>2]=b[0],f[Q+4>>2]=b[1],e.getdents&&0===r&&0===t&&(e.getdents=null),0)}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),A.errno}},a:function(A,g,I,t){try{var Q=V.getStreamFromFD(A),e=V.doWritev(Q,g,I);return f[t>>2]=e,0}catch(A){return void 0!==X&&A instanceof X.ErrnoError||Y(A),A.errno}}},BA=function(){var A={a:rA};function g(A,g){var I=A.exports;Q.asm=I,G((a=Q.asm.j).buffer),l=Q.asm.s,K()}if(v(),Q.instantiateWasm)try{return Q.instantiateWasm(A,g)}catch(A){return c("Module.instantiateWasm callback failed with error: "+A),!1}return g(_(x,A)[0]),Q.asm}(),oA=Q.___wasm_call_ctors=BA.k,CA=Q._malloc=BA.l;Q._free=BA.m,Q._mid_song_start=BA.n,Q._mid_song_seek=BA.o,Q._mid_song_get_total_time=BA.p,Q._mid_song_get_time=BA.q,Q._mid_song_read_wave=BA.r,Q._mid_istream_open_mem=BA.t,Q._mid_istream_close=BA.u,Q._mid_exit=BA.v,Q._mid_init=BA.w,Q._mid_song_load=BA.x,Q._mid_song_free=BA.y,Q._mid_alloc_options=BA.z,Q._mid_get_load_request_count=BA.A,Q._mid_get_load_request=BA.B;var EA,nA=Q.___errno_location=BA.C;function iA(A){function I(){EA||(EA=!0,Q.calledRun=!0,d||(Q.noFSInit||X.init.initialized||X.init(),W.init(),T(k),X.ignorePermissions=!1,T(U),g(Q),Q.onRuntimeInitialized&&Q.onRuntimeInitialized(),function(){if(Q.postRun)for("function"==typeof Q.postRun&&(Q.postRun=[Q.postRun]);Q.postRun.length;)A=Q.postRun.shift(),M.unshift(A);var A;T(M)}()))}L>0||(function(){if(Q.preRun)for("function"==typeof Q.preRun&&(Q.preRun=[Q.preRun]);Q.preRun.length;)A=Q.preRun.shift(),R.unshift(A);var A;T(R)}(),L>0||(Q.setStatus?(Q.setStatus("Running..."),setTimeout((function(){setTimeout((function(){Q.setStatus("")}),1),I()}),1)):I()))}if(Q.UTF8ToString=p,Q.addRunDependency=v,Q.removeRunDependency=K,Q.FS_createPath=X.createPath,Q.FS_createDataFile=X.createDataFile,Q.FS_createPreloadedFile=X.createPreloadedFile,Q.FS_createLazyFile=X.createLazyFile,Q.FS_createDevice=X.createDevice,Q.FS_unlink=X.unlink,Q.FS=X,S=function A(){EA||iA(),EA||(S=A)},Q.run=iA,Q.preInit)for("function"==typeof Q.preInit&&(Q.preInit=[Q.preInit]);Q.preInit.length>0;)Q.preInit.pop()();return iA(),A});A.exports=t}));n((function(A){var g=function(A){var g,I=Object.prototype,t=I.hasOwnProperty,Q="function"==typeof Symbol?Symbol:{},e=Q.iterator||"@@iterator",r=Q.asyncIterator||"@@asyncIterator",B=Q.toStringTag||"@@toStringTag";function o(A,g,I){return Object.defineProperty(A,g,{value:I,enumerable:!0,configurable:!0,writable:!0}),A[g]}try{o({},"")}catch(A){o=function(A,g,I){return A[g]=I}}function C(A,g,I,t){var Q=g&&g.prototype instanceof D?g:D,e=Object.create(Q.prototype),r=new G(t||[]);return e._invoke=function(A,g,I){var t=n;return function(Q,e){if(t===a)throw new Error("Generator is already running");if(t===s){if("throw"===Q)throw e;return k()}for(I.method=Q,I.arg=e;;){var r=I.delegate;if(r){var B=p(r,I);if(B){if(B===c)continue;return B}}if("next"===I.method)I.sent=I._sent=I.arg;else if("throw"===I.method){if(t===n)throw t=s,I.arg;I.dispatchException(I.arg)}else"return"===I.method&&I.abrupt("return",I.arg);t=a;var o=E(A,g,I);if("normal"===o.type){if(t=I.done?s:i,o.arg===c)continue;return{value:o.arg,done:I.done}}"throw"===o.type&&(t=s,I.method="throw",I.arg=o.arg)}}}(A,I,r),e}function E(A,g,I){try{return{type:"normal",arg:A.call(g,I)}}catch(A){return{type:"throw",arg:A}}}A.wrap=C;var n="suspendedStart",i="suspendedYield",a="executing",s="completed",c={};function D(){}function h(){}function w(){}var u={};u[e]=function(){return this};var f=Object.getPrototypeOf,l=f&&f(f(R([])));l&&l!==I&&t.call(l,e)&&(u=l);var d=w.prototype=D.prototype=Object.create(u);function y(A){["next","throw","return"].forEach((function(g){o(A,g,(function(A){return this._invoke(g,A)}))}))}function F(A,g){function I(Q,e,r,B){var o=E(A[Q],A,e);if("throw"!==o.type){var C=o.arg,n=C.value;return n&&"object"==typeof n&&t.call(n,"__await")?g.resolve(n.__await).then((function(A){I("next",A,r,B)}),(function(A){I("throw",A,r,B)})):g.resolve(n).then((function(A){C.value=A,r(C)}),(function(A){return I("throw",A,r,B)}))}B(o.arg)}var Q;this._invoke=function(A,t){function e(){return new g((function(g,Q){I(A,t,g,Q)}))}return Q=Q?Q.then(e,e):e()}}function p(A,I){var t=A.iterator[I.method];if(t===g){if(I.delegate=null,"throw"===I.method){if(A.iterator.return&&(I.method="return",I.arg=g,p(A,I),"throw"===I.method))return c;I.method="throw",I.arg=new TypeError("The iterator does not provide a 'throw' method")}return c}var Q=E(t,A.iterator,I.arg);if("throw"===Q.type)return I.method="throw",I.arg=Q.arg,I.delegate=null,c;var e=Q.arg;return e?e.done?(I[A.resultName]=e.value,I.next=A.nextLoc,"return"!==I.method&&(I.method="next",I.arg=g),I.delegate=null,c):e:(I.method="throw",I.arg=new TypeError("iterator result is not an object"),I.delegate=null,c)}function N(A){var g={tryLoc:A[0]};1 in A&&(g.catchLoc=A[1]),2 in A&&(g.finallyLoc=A[2],g.afterLoc=A[3]),this.tryEntries.push(g)}function m(A){var g=A.completion||{};g.type="normal",delete g.arg,A.completion=g}function G(A){this.tryEntries=[{tryLoc:"root"}],A.forEach(N,this),this.reset(!0)}function R(A){if(A){var I=A[e];if(I)return I.call(A);if("function"==typeof A.next)return A;if(!isNaN(A.length)){var Q=-1,r=function I(){for(;++Q=0;--e){var r=this.tryEntries[e],B=r.completion;if("root"===r.tryLoc)return Q("end");if(r.tryLoc<=this.prev){var o=t.call(r,"catchLoc"),C=t.call(r,"finallyLoc");if(o&&C){if(this.prev=0;--I){var Q=this.tryEntries[I];if(Q.tryLoc<=this.prev&&t.call(Q,"finallyLoc")&&this.prev=0;--g){var I=this.tryEntries[g];if(I.finallyLoc===A)return this.complete(I.completion,I.afterLoc),m(I),c}},catch:function(A){for(var g=this.tryEntries.length-1;g>=0;--g){var I=this.tryEntries[g];if(I.tryLoc===A){var t=I.completion;if("throw"===t.type){var Q=t.arg;m(I)}return Q}}throw new Error("illegal catch attempt")},delegateYield:function(A,I,t){return this.delegate={iterator:R(A),resultName:I,nextLoc:t},"next"===this.method&&(this.arg=g),c}},A}(A.exports);try{regeneratorRuntime=g}catch(A){Function("r","regeneratorRuntime = r")(g)}}));var a=function(A,g){if(g=g.split(":")[0],!(A=+A))return!1;switch(g){case"http":case"ws":return 80!==A;case"https":case"wss":return 443!==A;case"ftp":return 21!==A;case"gopher":return 70!==A;case"file":return!1}return 0!==A},s=Object.prototype.hasOwnProperty;function c(A){try{return decodeURIComponent(A.replace(/\+/g," "))}catch(A){return null}}function D(A){try{return encodeURIComponent(A)}catch(A){return null}}var h={stringify:function(A,g){g=g||"";var I,t,Q=[];for(t in"string"!=typeof g&&(g="?"),A)if(s.call(A,t)){if((I=A[t])||null!=I&&!isNaN(I)||(I=""),t=D(t),I=D(I),null===t||null===I)continue;Q.push(t+"="+I)}return Q.length?g+Q.join("&"):""},parse:function(A){for(var g,I=/([^=?#&]+)=?([^&]*)/g,t={};g=I.exec(A);){var Q=c(g[1]),e=c(g[2]);null===Q||null===e||Q in t||(t[Q]=e)}return t}},w=/^[A-Za-z][A-Za-z0-9+-.]*:[\\/]+/,u=/^([a-z][a-z0-9.+-]*:)?([\\/]{1,})?([\S\s]*)/i,f=new RegExp("^[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]+");function l(A){return(A||"").toString().replace(f,"")}var d=[["#","hash"],["?","query"],function(A){return A.replace("\\","/")},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d+)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],y={hash:1,query:1};function F(A){var g,I=("undefined"!=typeof window?window:void 0!==E?E:"undefined"!=typeof self?self:{}).location||{},t={},Q=typeof(A=A||I);if("blob:"===A.protocol)t=new N(unescape(A.pathname),{});else if("string"===Q)for(g in t=new N(A,{}),y)delete t[g];else if("object"===Q){for(g in A)g in y||(t[g]=A[g]);void 0===t.slashes&&(t.slashes=w.test(A.href))}return t}function p(A){A=l(A);var g=u.exec(A);return{protocol:g[1]?g[1].toLowerCase():"",slashes:!!(g[2]&&g[2].length>=2),rest:g[2]&&1===g[2].length?"/"+g[3]:g[3]}}function N(A,g,I){if(A=l(A),!(this instanceof N))return new N(A,g,I);var t,Q,e,r,B,o,C=d.slice(),E=typeof g,n=this,i=0;for("object"!==E&&"string"!==E&&(I=g,g=null),I&&"function"!=typeof I&&(I=h.parse),g=F(g),t=!(Q=p(A||"")).protocol&&!Q.slashes,n.slashes=Q.slashes||t&&g.slashes,n.protocol=Q.protocol||g.protocol||"",A=Q.rest,Q.slashes||(C[3]=[/(.*)/,"pathname"]);i0){for(var I=[],t=0;t */ -const Debug = require('debug') -const EventEmitter = require('events').EventEmitter -const fs = require('fs') -const LibTimidity = require('./libtimidity') - -const debug = Debug('timidity') -const debugVerbose = Debug('timidity:verbose') - -// Inlined at build time by 'brfs' browserify transform -const TIMIDITY_CFG = fs.readFileSync( - __dirname + '/freepats.cfg', // eslint-disable-line node/no-path-concat - 'utf8' -) - -const SAMPLE_RATE = 44100 -const AUDIO_FORMAT = 0x8010 // format of the rendered audio 's16' -const NUM_CHANNELS = 2 // stereo (2 channels) -const BYTES_PER_SAMPLE = 2 * NUM_CHANNELS -const BUFFER_SIZE = 16384 // buffer size for each render() call - -const AudioContext = typeof window !== 'undefined' && - (window.AudioContext || window.webkitAudioContext) - -class Timidity extends EventEmitter { - constructor (baseUrl = '/') { - super() - - this.destroyed = false - - if (!baseUrl.endsWith('/')) baseUrl += '/' - this._baseUrl = new URL(baseUrl, window.location.origin).href - - this._ready = false - this._playing = false - this._pendingFetches = {} // instrument -> fetch - this._songPtr = 0 - this._bufferPtr = 0 - this._array = new Int16Array(BUFFER_SIZE * 2) - this._currentUrlOrBuf = null // currently loading url or buf - this._interval = null - - this._startInterval = this._startInterval.bind(this) - this._stopInterval = this._stopInterval.bind(this) - - // If the Timidity constructor was not invoked inside a user-initiated event - // handler, then the AudioContext will be suspended. See: - // https://developers.google.com/web/updates/2017/09/autoplay-policy-changes - this._audioContext = new AudioContext() - - // Start the 'onaudioprocess' events flowing - this._node = this._audioContext.createScriptProcessor( - BUFFER_SIZE, - 0, - NUM_CHANNELS - ) - this._onAudioProcess = this._onAudioProcess.bind(this) - this._node.addEventListener('audioprocess', this._onAudioProcess) - this._node.connect(this._audioContext.destination) - - LibTimidity({ - locateFile: file => new URL(file, this._baseUrl).href - }).then((lib) => { - this._lib = lib - this._onLibReady() - }) - } - - _onLibReady () { - this._lib.FS.writeFile('/timidity.cfg', TIMIDITY_CFG) - - const result = this._lib._mid_init('/timidity.cfg') - if (result !== 0) { - return this._destroy(new Error('Failed to initialize libtimidity')) - } - - this._bufferPtr = this._lib._malloc(BUFFER_SIZE * BYTES_PER_SAMPLE) - - debugVerbose('Initialized libtimidity') - this._ready = true - this.emit('_ready') - } - - async load (urlOrBuf) { - debug('load %o', urlOrBuf) - if (this.destroyed) throw new Error('load() called after destroy()') - - // If the Timidity constructor was not invoked inside a user-initiated event - // handler, then the AudioContext will be suspended. Attempt to resume it. - this._audioContext.resume() - - // If a song already exists, destroy it before starting a new one - if (this._songPtr) this._destroySong() - - this.emit('unstarted') - this._stopInterval() - - if (!this._ready) return this.once('_ready', () => this.load(urlOrBuf)) - - this.emit('buffering') - - // Save the url or buf to load. Allows detection of when a new interleaved - // load() starts so we can abort this load. - this._currentUrlOrBuf = urlOrBuf - - let midiBuf - if (typeof urlOrBuf === 'string') { - midiBuf = await this._fetch(new URL(urlOrBuf, this._baseUrl)) - // If another load() started while awaiting, abort this load - if (this._currentUrlOrBuf !== urlOrBuf) return - } else if (urlOrBuf instanceof Uint8Array) { - midiBuf = urlOrBuf - } else { - throw new Error('load() expects a `string` or `Uint8Array` argument') - } - - let songPtr = this._loadSong(midiBuf) - - // Are we missing instrument files? - let missingCount = this._lib._mid_get_load_request_count(songPtr) - if (missingCount > 0) { - let missingInstruments = this._getMissingInstruments(songPtr, missingCount) - debugVerbose('Fetching instruments: %o', missingInstruments) - - // Wait for all instruments to load - await Promise.all( - missingInstruments.map(instrument => this._fetchInstrument(instrument)) - ) - - // If another load() started while awaiting, abort this load - if (this._currentUrlOrBuf !== urlOrBuf) return - - // Retry the song load, now that instruments have been loaded - this._lib._mid_song_free(songPtr) - songPtr = this._loadSong(midiBuf) - - // Are we STILL missing instrument files? Then our General MIDI soundset - // is probably missing instrument files. - missingCount = this._lib._mid_get_load_request_count(songPtr) - - // Print out missing instrument names - if (missingCount > 0) { - missingInstruments = this._getMissingInstruments(songPtr, missingCount) - debug('Playing with missing instruments: %o', missingInstruments) - } - } - - this._songPtr = songPtr - this._lib._mid_song_start(this._songPtr) - debugVerbose('Song and instruments are loaded') - } - - _getMissingInstruments (songPtr, missingCount) { - const missingInstruments = [] - for (let i = 0; i < missingCount; i++) { - const instrumentPtr = this._lib._mid_get_load_request(songPtr, i) - const instrument = this._lib.UTF8ToString(instrumentPtr) - missingInstruments.push(instrument) - } - return missingInstruments - } - - _loadSong (midiBuf) { - const optsPtr = this._lib._mid_alloc_options( - SAMPLE_RATE, - AUDIO_FORMAT, - NUM_CHANNELS, - BUFFER_SIZE - ) - - // Copy the MIDI buffer into the heap - const midiBufPtr = this._lib._malloc(midiBuf.byteLength) - this._lib.HEAPU8.set(midiBuf, midiBufPtr) - - // Create a stream - const iStreamPtr = this._lib._mid_istream_open_mem(midiBufPtr, midiBuf.byteLength) - - // Load the song - const songPtr = this._lib._mid_song_load(iStreamPtr, optsPtr) - - // Free resources no longer needed - this._lib._mid_istream_close(iStreamPtr) - this._lib._free(optsPtr) - this._lib._free(midiBufPtr) - - if (songPtr === 0) { - return this._destroy(new Error('Failed to load MIDI file')) - } - - return songPtr - } - - async _fetchInstrument (instrument) { - if (this._pendingFetches[instrument]) { - // If this instrument is already in the process of being fetched, return - // the existing promise to prevent duplicate fetches. - return this._pendingFetches[instrument] - } - - const url = new URL(instrument, this._baseUrl) - const bufPromise = this._fetch(url) - this._pendingFetches[instrument] = bufPromise - - const buf = await bufPromise - this._writeInstrumentFile(instrument, buf) - - delete this._pendingFetches[instrument] - - return buf - } - - _writeInstrumentFile (instrument, buf) { - const folderPath = instrument - .split('/') - .slice(0, -1) // remove basename - .join('/') - this._mkdirp(folderPath) - this._lib.FS.writeFile(instrument, buf, { encoding: 'binary' }) - } - - _mkdirp (folderPath) { - const pathParts = folderPath.split('/') - let dirPath = '/' - for (let i = 0; i < pathParts.length; i++) { - const curPart = pathParts[i] - try { - this._lib.FS.mkdir(`${dirPath}${curPart}`) - } catch (err) {} - dirPath += `${curPart}/` - } - } - - async _fetch (url) { - const opts = { - mode: 'cors', - credentials: 'same-origin' - } - const response = await window.fetch(url, opts) - if (response.status !== 200) throw new Error(`Could not load ${url}`) - - const arrayBuffer = await response.arrayBuffer() - const buf = new Uint8Array(arrayBuffer) - return buf - } - - play () { - debug('play') - if (this.destroyed) throw new Error('play() called after destroy()') - - // If the Timidity constructor was not invoked inside a user-initiated event - // handler, then the AudioContext will be suspended. Attempt to resume it. - this._audioContext.resume() - - this._playing = true - if (this._ready && !this._currentUrlOrBuf) { - this.emit('playing') - this._startInterval() - } - } - - _onAudioProcess (event) { - const sampleCount = (this._songPtr && this._playing) - ? this._readMidiData() - : 0 - - if (sampleCount > 0 && this._currentUrlOrBuf) { - this._currentUrlOrBuf = null - this.emit('playing') - this._startInterval() - } - - const output0 = event.outputBuffer.getChannelData(0) - const output1 = event.outputBuffer.getChannelData(1) - - for (let i = 0; i < sampleCount; i++) { - output0[i] = this._array[i * 2] / 0x7FFF - output1[i] = this._array[i * 2 + 1] / 0x7FFF - } - - for (let i = sampleCount; i < BUFFER_SIZE; i++) { - output0[i] = 0 - output1[i] = 0 - } - - if (this._songPtr && this._playing && sampleCount === 0) { - // Reached the end of the file - this.seek(0) - this.pause() - this._lib._mid_song_start(this._songPtr) - this.emit('ended') - } - } - - _readMidiData () { - const byteCount = this._lib._mid_song_read_wave( - this._songPtr, - this._bufferPtr, - BUFFER_SIZE * BYTES_PER_SAMPLE - ) - const sampleCount = byteCount / BYTES_PER_SAMPLE - - // Was anything output? If not, don't bother copying anything - if (sampleCount === 0) { - return 0 - } - - this._array.set( - this._lib.HEAP16.subarray(this._bufferPtr / 2, (this._bufferPtr + byteCount) / 2) - ) - - return sampleCount - } - - pause () { - debug('pause') - if (this.destroyed) throw new Error('pause() called after destroy()') - - this._playing = false - this._stopInterval() - this.emit('paused') - } - - seek (time) { - debug('seek %d', time) - if (this.destroyed) throw new Error('seek() called after destroy()') - if (!this._songPtr) return // ignore seek if there is no song loaded yet - - const timeMs = Math.floor(time * 1000) - this._lib._mid_song_seek(this._songPtr, timeMs) - this._onTimeupdate() - } - - get currentTime () { - if (this.destroyed || !this._songPtr) return 0 - return this._lib._mid_song_get_time(this._songPtr) / 1000 - } - - get duration () { - if (this.destroyed || !this._songPtr) return 1 - return this._lib._mid_song_get_total_time(this._songPtr) / 1000 - } - - /** - * This event fires when the time indicated by the `currentTime` property - * has been updated. - */ - _onTimeupdate () { - this.emit('timeupdate', this.currentTime) - } - - _startInterval () { - this._onTimeupdate() - this._interval = setInterval(() => this._onTimeupdate(), 1000) - } - - _stopInterval () { - this._onTimeupdate() - clearInterval(this._interval) - this._interval = null - } - - destroy () { - debug('destroy') - if (this.destroyed) throw new Error('destroy() called after destroy()') - this._destroy() - } - - _destroy (err) { - if (this.destroyed) return - this.destroyed = true - - this._stopInterval() - - this._array = null - - if (this._songPtr) { - this._destroySong() - } - - if (this._bufferPtr) { - this._lib._free(this._bufferPtr) - this._bufferPtr = 0 - } - - if (this._node) { - this._node.disconnect() - this._node.removeEventListener('audioprocess', this._onAudioProcess) - } - - if (this._audioContext) { - this._audioContext.close() - } - - if (err) this.emit('error', err) - debug('destroyed (err %o)', err) - } - - _destroySong () { - this._lib._mid_song_free(this._songPtr) - this._songPtr = 0 - } -} - -module.exports = Timidity diff --git a/libtimidity.js b/libtimidity.js deleted file mode 100644 index ef733dd..0000000 --- a/libtimidity.js +++ /dev/null @@ -1,22 +0,0 @@ - -var LibTimidity = (function() { - var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; - - return ( -function(LibTimidity) { - LibTimidity = LibTimidity || {}; - -null;var Module=typeof LibTimidity!=="undefined"?LibTimidity:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmTable;var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var WASM_PAGE_SIZE=65536;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":2147483648/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="libtimidity.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return Promise.resolve().then(getBinary)}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["k"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var error=new Error;if(!error.stack){try{throw new Error}catch(e){error=e}if(!error.stack){return"(no stack trace available)"}}return error.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=SYSCALLS.get();var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}__ATINIT__.push({func:function(){___wasm_call_ctors()}});var asmLibraryArg={"c":___sys_fcntl64,"i":___sys_ioctl,"j":___sys_open,"f":_emscripten_memcpy_big,"g":_emscripten_resize_heap,"d":_fd_close,"h":_fd_read,"e":_fd_seek,"b":_fd_write,"a":wasmMemory};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["l"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["m"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["n"]).apply(null,arguments)};var _mid_song_start=Module["_mid_song_start"]=function(){return(_mid_song_start=Module["_mid_song_start"]=Module["asm"]["o"]).apply(null,arguments)};var _mid_song_seek=Module["_mid_song_seek"]=function(){return(_mid_song_seek=Module["_mid_song_seek"]=Module["asm"]["p"]).apply(null,arguments)};var _mid_song_get_total_time=Module["_mid_song_get_total_time"]=function(){return(_mid_song_get_total_time=Module["_mid_song_get_total_time"]=Module["asm"]["q"]).apply(null,arguments)};var _mid_song_get_time=Module["_mid_song_get_time"]=function(){return(_mid_song_get_time=Module["_mid_song_get_time"]=Module["asm"]["r"]).apply(null,arguments)};var _mid_song_read_wave=Module["_mid_song_read_wave"]=function(){return(_mid_song_read_wave=Module["_mid_song_read_wave"]=Module["asm"]["s"]).apply(null,arguments)};var _mid_istream_open_mem=Module["_mid_istream_open_mem"]=function(){return(_mid_istream_open_mem=Module["_mid_istream_open_mem"]=Module["asm"]["t"]).apply(null,arguments)};var _mid_istream_close=Module["_mid_istream_close"]=function(){return(_mid_istream_close=Module["_mid_istream_close"]=Module["asm"]["u"]).apply(null,arguments)};var _mid_exit=Module["_mid_exit"]=function(){return(_mid_exit=Module["_mid_exit"]=Module["asm"]["v"]).apply(null,arguments)};var _mid_init=Module["_mid_init"]=function(){return(_mid_init=Module["_mid_init"]=Module["asm"]["w"]).apply(null,arguments)};var _mid_song_load=Module["_mid_song_load"]=function(){return(_mid_song_load=Module["_mid_song_load"]=Module["asm"]["x"]).apply(null,arguments)};var _mid_song_free=Module["_mid_song_free"]=function(){return(_mid_song_free=Module["_mid_song_free"]=Module["asm"]["y"]).apply(null,arguments)};var _mid_alloc_options=Module["_mid_alloc_options"]=function(){return(_mid_alloc_options=Module["_mid_alloc_options"]=Module["asm"]["z"]).apply(null,arguments)};var _mid_get_load_request_count=Module["_mid_get_load_request_count"]=function(){return(_mid_get_load_request_count=Module["_mid_get_load_request_count"]=Module["asm"]["A"]).apply(null,arguments)};var _mid_get_load_request=Module["_mid_get_load_request"]=function(){return(_mid_get_load_request=Module["_mid_get_load_request"]=Module["asm"]["B"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["C"]).apply(null,arguments)};Module["UTF8ToString"]=UTF8ToString;Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;Module["FS"]=FS;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); - - - return LibTimidity.ready -} -); -})(); -if (typeof exports === 'object' && typeof module === 'object') - module.exports = LibTimidity; - else if (typeof define === 'function' && define['amd']) - define([], function() { return LibTimidity; }); - else if (typeof exports === 'object') - exports["LibTimidity"] = LibTimidity; - \ No newline at end of file diff --git a/libtimidity.wasm b/libtimidity.wasm deleted file mode 100755 index 37c613a..0000000 Binary files a/libtimidity.wasm and /dev/null differ diff --git a/package.json b/package.json index 6171c7b..98f274c 100644 --- a/package.json +++ b/package.json @@ -1,29 +1,40 @@ { - "name": "timidity", - "description": "Play MIDI files in the browser w/ Web Audio, WebAssembly, and libtimidity", - "version": "1.3.0", + "name": "phaser-timidity-plugin", + "description": "self contained midi player with easyish patch editing, for phaser, forked from feross's wasm timidity", + "version": "0.1.1", "author": { - "name": "Feross Aboukhadijeh", + "name": "Feross Aboukhadijeh (with mike russo)", "email": "feross@feross.org", "url": "https://feross.org" }, - "browserify": { - "transform": [ - "brfs" - ] - }, "bugs": { "url": "https://github.com/feross/timidity/issues" }, - "dependencies": { - "brfs": "^2.0.2", - "debug": "^4.1.1", - "freepats": "^1.0.1" - }, + "types": "MIDIPlayer.d.ts", + "dependencies": {}, "devDependencies": { + "@babel/core": "^7.12.16", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-transform-runtime": "^7.12.15", + "@babel/preset-env": "^7.12.16", + "@rollup/plugin-alias": "^3.1.2", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^17.1.0", + "@rollup/plugin-node-resolve": "^11.2.0", + "@rollup/plugin-replace": "^2.4.1", "babel-minify": "^0.5.1", - "browserify": "^16.2.2", - "standard": "*" + "babel-plugin-static-fs": "^3.0.0", + "debug": "^4.1.1", + "eslint": "^7.20.0", + "eslint-config-standard": "^16.0.2", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.3.1", + "gravisPats": "https://github.com/miker2049/gravisPats", + "native-url": "^0.3.4", + "rollup": "^2.39.1", + "rollup-plugin-terser": "^7.0.2", + "url-parse": "^1.5.1" }, "homepage": "https://bitmidi.com", "keywords": [ @@ -42,34 +53,23 @@ "webassembly" ], "license": "MIT", - "main": "index.js", + "main": "dist/player-bundle.js", "repository": { "type": "git", "url": "git://github.com/feross/timidity.git" }, "scripts": { - "build": "./tools/build.sh", + "buildLib": "./tools/build.sh", "download": "./tools/download.sh", "size": "npm run build && cat libtimidity.wasm | gzip | wc -c && browserify -r . | minify | gzip | wc -c", - "test": "standard" + "test": "standard", + "prepTesterFolder": "cp node_modules/gravisPats test/ && cp dist/*-bundle.js test/", + "bundle": "rollup -c rollup.bundle.js", + "build": "npm run bundle" }, "standard": { "ignore": [ "libtimidity.js" ] - }, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + } } diff --git a/rollup.bundle.js b/rollup.bundle.js new file mode 100644 index 0000000..c05b34e --- /dev/null +++ b/rollup.bundle.js @@ -0,0 +1,54 @@ +// rollup.config.js +import babel from '@rollup/plugin-babel' +import path from 'path' +import resolve from '@rollup/plugin-node-resolve' +// import replace from '@rollup/plugin-replace' +import commonjs from '@rollup/plugin-commonjs' +import { terser } from 'rollup-plugin-terser' + +export default [ + { + input: 'src/TimidityWorkletProcessor.js', + output: [ + { + file: 'dist/worklet-bundle.js', + sourcemap: false, + exports: 'named' + } + ], + plugins: [ + resolve({ + browser: true, + preferBuiltins: false + }), + commonjs(), + babel({ + babelHelpers: 'bundled', + configFile: path.resolve(__dirname, './.babelrc') + }), + terser() + ] + }, + { + input: 'src/MIDIPlayer.js', + output: [ + { + file: 'dist/player-bundle.js', + sourcemap: false, + exports: 'named' + } + ], + plugins: [ + resolve({ + browser: true, + preferBuiltins: false + }), + commonjs(), + babel({ + babelHelpers: 'bundled', + configFile: path.resolve(__dirname, './.babelrc') + }), + terser() + ] + } +] diff --git a/src/MIDIPlayer.js b/src/MIDIPlayer.js new file mode 100644 index 0000000..ac45c23 --- /dev/null +++ b/src/MIDIPlayer.js @@ -0,0 +1,109 @@ +// import "core-js/stable" +import "regenerator-runtime/runtime" +import URL from 'url-parse' +import { EventEmitter } from 'events' + +export function createURL(str) { + return new URL(str) +} + +export default class MIDIPlayer extends EventEmitter { + + constructor(worklet, context, baseURL) { + super() + this._worklet = worklet + this._baseURL = baseURL + this._worklet.port.onmessage = this._handleMessage.bind(this) + this.context = context + this._worklet.connect(context.destination) + } + + async _handleMessage(message) { + // console.log(message) + if (message.data.type === 'missingInstruments') { + let instBuffs = [] + try { + instBuffs = await Promise.all(message.data.instruments.map((instrument) => { + return this.fetchInstrument(instrument) + })) + } catch (err) { + // Do something + console.log('Error loading instrument patch files') + console.log(err) + } + // console.log(instBuffs) + this._worklet.port.postMessage({ type: 'instPayload', buffs: instBuffs }) + } + } + + play() { + this.context.resume() + this._worklet.port.postMessage("play") + } + + pause() { + this._worklet.port.postMessage("pause") + } + + seek(sec) { + this._worklet.port.postMessage({ type: 'seek', sec: sec }) + } + + load(midiURL) { + fetchBuff(midiURL).then(buff => { + // console.log(buff) + this._worklet.port.postMessage({ + type: 'loadMIDI', + midiBuff: buff + }) + }) + } + + static async createMIDIPlayer(timidityCfgURL = '/gravis.cfg', acontext = new AudioContext()) { + await acontext.audioWorklet.addModule(`worklet-bundle.js`) + const timidityCfg = await fetchText(timidityCfgURL) + let baseURL = timidityCfgURL.substring(0, timidityCfgURL.lastIndexOf("/") + 1); + if (baseURL.length === 0) baseURL = '/' + + + const workletNode = new AudioWorkletNode(acontext, 'midiplayer', { + outputChannelCount: [2], + processorOptions: { + baseURL: baseURL, + timidityCfg: timidityCfg + } + }) + return new MIDIPlayer(workletNode, acontext, baseURL) + } + + async fetchInstrument(instrument) { + let path = this._baseURL + instrument + const extRegex = /(?:\.([^.]+))?$/ + if (extRegex.exec(instrument) !== 'pat') path = this._baseURL + instrument + '.pat' + return { instrumentName: instrument, instrumentBuff: await fetchBuff(path) } + } +} + + +async function fetchBuff(url) { + const response = await _fetch(url) + const arrayBuffer = await response.arrayBuffer() + const buf = new Uint8Array(arrayBuffer) + return buf +} + +export async function fetchText(url) { + const response = await _fetch(url) + const text = await response.text() + return text +} + +async function _fetch(url) { + const opts = { + mode: 'cors', + credentials: 'same-origin' + } + const response = await window.fetch(url, opts) + if (response.status !== 200) throw new Error(`Could not load ${url}`) + return response +} diff --git a/src/TimidityWorkletProcessor.js b/src/TimidityWorkletProcessor.js new file mode 100644 index 0000000..e6920ad --- /dev/null +++ b/src/TimidityWorkletProcessor.js @@ -0,0 +1,234 @@ +import LibTimidity from '../wasm/libtimidity' +import 'regenerator-runtime/runtime' +import URL from 'url-parse' + +// const SAMPLE_RATE = 44100 +const AUDIO_FORMAT = 0x8010 // format of the rendered audio 's16' +const NUM_CHANNELS = 2 // stereo (2 channels) +const BYTES_PER_SAMPLE = 2 * NUM_CHANNELS +const BUFFER_SIZE = 128 // buffer size for each render() call, limited by AudioWorkletProcessor to 128 frames + +registerProcessor('midiplayer', class extends AudioWorkletProcessor { + constructor (args) { + super() + const baseUrl = args.processorOptions.baseURL + const timidityCfg = args.processorOptions.timidityCfg + + if (!baseUrl.endsWith('/')) baseUrl += '/' + this._baseUrl = new URL(baseUrl).href + + this._songPtr = 0 + this._bufferPtr = 0 + this._array = new Int16Array(BUFFER_SIZE * 2) + + this._lib = LibTimidity({ locateFile: (file) => new URL(file, this._baseUrl).href }) + this._lib.FS.writeFile('/timidity.cfg', timidityCfg) + const result = this._lib._mid_init('/timidity.cfg') + if (result !== 0) { + return this._destroy(new Error('Failed to initialize libtimidity')) + } + + this._bufferPtr = this._lib._malloc(BUFFER_SIZE * BYTES_PER_SAMPLE) + + + this.port.onmessage = this._handleMessage.bind(this) + } + + async _handleMessage(message) { + if(message.data.type === 'instPayload'){ + for(let inst of message.data.buffs){ + this._writeInstrumentFile(inst.instrumentName, inst.instrumentBuff) + } + this.port.postMessage(this._lib._mid_get_load_request_count(this._songPtr)) + this._lib._mid_song_free(this._songPtr) + this._songPtr = await this._loadSong(this._midiBuf) + this._lib._mid_song_start(this._songPtr) + } else if (message.data.type === 'loadMIDI') { + + // If a song already exists, destroy it before starting a new one + if (this._songPtr) this._destroySong() + + this._midiBuf = message.data.midiBuff + + // this.port.postMessage(message.data) + if (!(this._midiBuf instanceof Uint8Array)) throw new Error('load() expects a `Uint8Array` argument') + this._loadSong(this._midiBuf).then((songPtr) => { + this._songPtr = songPtr + this._reqInstruments(songPtr, this._midiBuf) + // Now, wait for failure or all the instruments or something in between + }) + } else if (message.data === 'play') { + this._playing = true + this.port.postMessage("we are playing from timisity now!") + } else if (message.data.type === 'seek') { + this.seek(message.data.sec) + } else if (message.data === 'pause') { + this.pause() + } + } + + _reqInstruments(songPtr) { + // Are we missing instrument files? + let missingCount = this._lib._mid_get_load_request_count(songPtr) + if (missingCount > 0) { + + const missingInstruments = [] + for (let i = 0; i < missingCount; i++) { + const instrumentPtr = this._lib._mid_get_load_request(songPtr, i) + const instrument = this._lib.UTF8ToString(instrumentPtr) + missingInstruments.push(instrument) + } + // Request instruments to be fetched from the main thread + // missingInstruments.map(instrument => this._reqInstrument(instrument)) + this.port.postMessage({ type: 'missingInstruments', instruments: missingInstruments }) + } + } + + + async _loadSong(midiBuf) { + const optsPtr = this._lib._mid_alloc_options( + // sampleRate from AudioWorkletGlobalScope + sampleRate, + AUDIO_FORMAT, + NUM_CHANNELS, + BUFFER_SIZE + ) + + // Copy the MIDI buffer into the heap + const midiBufPtr = this._lib._malloc(midiBuf.byteLength) + this._lib.HEAPU8.set(midiBuf, midiBufPtr) + + // Create a stream + const iStreamPtr = this._lib._mid_istream_open_mem(midiBufPtr, midiBuf.byteLength) + + // Load the song + const songPtr = this._lib._mid_song_load(iStreamPtr, optsPtr) + + // Free resources no longer needed + this._lib._mid_istream_close(iStreamPtr) + this._lib._free(optsPtr) + this._lib._free(midiBufPtr) + + if (songPtr === 0) { + return this._destroy(new Error('Failed to load MIDI file')) + } + + return songPtr + } + + _writeInstrumentFile(instrument, buf) { + const folderPath = instrument + .split('/') + .slice(0, -1) // remove basename + .join('/') + this._mkdirp(folderPath) + this.port.postMessage(folderPath) + this._lib.FS.writeFile(instrument, buf, { encoding: 'binary' }) + } + + _mkdirp(folderPath) { + const pathParts = folderPath.split('/') + let dirPath = '/' + for (let i = 0; i < pathParts.length; i++) { + const curPart = pathParts[i] + try { + this._lib.FS.mkdir(`${dirPath}${curPart}`) + } catch (err) { } + dirPath += `${curPart}/` + } + } + + _onAudioProcess(outputs) { + const sampleCount = (this._songPtr && this._playing) + ? this._readMidiData() + : 0 + + const output0 = outputs[0][0] + const output1 = outputs[0][1] + + for (let i = 0; i < sampleCount; i++) { + output0[i] = this._array[i * 2] / 0x7FFF + output1[i] = this._array[i * 2 + 1] / 0x7FFF + } + + for (let i = sampleCount; i < BUFFER_SIZE; i++) { + output0[i] = 0 + output1[i] = 0 + } + + if (this._songPtr && this._playing && sampleCount === 0) { + // Reached the end of the file + this.seek(0) + this.pause() + this._lib._mid_song_start(this._songPtr) + this.port.postMessage('ended') + } + } + + _readMidiData() { + const byteCount = this._lib._mid_song_read_wave( + this._songPtr, + this._bufferPtr, + BUFFER_SIZE * BYTES_PER_SAMPLE + ) + const sampleCount = byteCount / BYTES_PER_SAMPLE + + // Was anything output? If not, don't bother copying anything + if (sampleCount === 0) { + return 0 + } + + this._array.set( + this._lib.HEAP16.subarray(this._bufferPtr / 2, (this._bufferPtr + byteCount) / 2) + ) + return sampleCount + } + + process(_inputs, outputs, _params) { + if (this._playing) { + outputs = this._onAudioProcess(outputs) + } + return !this.destroyed + } + + pause () { + if (this.destroyed) throw new Error('pause() called after destroy()') + this._playing = false + } + + seek (time) { + if (!this._songPtr) return // ignore seek if there is no song loaded yet + + const timeMs = Math.floor(time * 1000) + this._lib._mid_song_seek(this._songPtr, timeMs) + } + + destroy () { + if (this.destroyed) throw new Error('destroy() called after destroy()') + this._destroy() + } + + _destroy (err) { + if (this.destroyed) return + this.destroyed = true + + this._array = null + + if (this._songPtr) { + this._destroySong() + } + + if (this._bufferPtr) { + this._lib._free(this._bufferPtr) + this._bufferPtr = 0 + } + + if (err) throw new Error('error', err) + } + + _destroySong () { + this._lib._mid_song_free(this._songPtr) + this._songPtr = 0 + } + +}) diff --git a/test/blue.mid b/test/blue.mid new file mode 100644 index 0000000..95b58a7 Binary files /dev/null and b/test/blue.mid differ diff --git a/test/desert3.mid b/test/desert3.mid new file mode 100644 index 0000000..977e3e7 Binary files /dev/null and b/test/desert3.mid differ diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..81b7406 --- /dev/null +++ b/test/index.html @@ -0,0 +1,28 @@ + + + + + + + Timidity js demo + + +
+
+ + + diff --git a/test/onemoretime.mid b/test/onemoretime.mid new file mode 100644 index 0000000..394c683 Binary files /dev/null and b/test/onemoretime.mid differ diff --git a/test/tester.js b/test/tester.js new file mode 100644 index 0000000..b5315c8 --- /dev/null +++ b/test/tester.js @@ -0,0 +1,46 @@ + + +import MIDI from './player-bundle.js' +// fetchText('./gravis.cfg').then((txt)=>console.log(txt)) +// console.log(createURL('./test/yeah/gravis.cfg')) +const acontext = new AudioContext() + +function createPlayerUI(midifile, container) { + const parent = document.querySelector(container) + const div = document.createElement('div') + const idtag = sanitize(midifile) + const loadbuttonid = `loadbutton-${idtag}` + const playbuttonid = `playbutton-${idtag}` + const stopbuttonid = `stopbutton-${idtag}` + div.innerHTML = ` +

${midifile}

+ + + + +` + div.className = "test-container-" + idtag + parent.appendChild(div) + MIDI.createMIDIPlayer('gravisPats/gravis.cfg', acontext).then(player => { + console.log('done!') + + document.querySelector("#" + loadbuttonid).addEventListener('click', async function() { + player.load(midifile) + }) + document.querySelector("#" + stopbuttonid).addEventListener('click', function() { + player.pause() + }) + + document.querySelector("#" + playbuttonid).addEventListener('click', async function() { + console.log(player) + player.play() + }) + }) +} +function sanitize(str) { return str.replaceAll(/[\. \/\\,\-]/ig, "") } + +createPlayerUI('blue.mid', '#tester-container') +createPlayerUI('exitmusic.mid', '#tester-container') +createPlayerUI('onemoretime.mid', '#tester-container') +createPlayerUI('DearPrudence.mid', '#tester-container') +createPlayerUI('desert3.mid', '#tester-container') diff --git a/tools/build.sh b/tools/build.sh index 448c978..fdb7e4c 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -3,17 +3,18 @@ set -e # Compile the libtimidity C codebase to JavaScript with emscripten -BUILD_FLAGS="-s STRICT=1 -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_NAME=LibTimidity -s EXPORTED_FUNCTIONS=@tools/exports.json -s EXTRA_EXPORTED_RUNTIME_METHODS=@tools/exports-runtime.json -s FORCE_FILESYSTEM=1" +BUILD_FLAGS="-s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_NAME=LibTimidity -s EXPORTED_FUNCTIONS=@tools/exports.json -s EXTRA_EXPORTED_RUNTIME_METHODS=@tools/exports-runtime.json -s FORCE_FILESYSTEM=1 -s SINGLE_FILE=1 -s BINARYEN_ASYNC_COMPILATION=0 " # Maximize optimization options for smallest file size -OPTIMIZE_FLAGS_PROD="-Oz -s ENVIRONMENT=web" +OPTIMIZE_FLAGS_PROD="-Oz -s ENVIRONMENT=web,worker" OPTIMIZE_FLAGS_DEBUG="-g4 -DTIMIDITY_DEBUG" -emcc -o libtimidity.js $OPTIMIZE_FLAGS_PROD $BUILD_FLAGS libtimidity/src/*.c -emcc -o libtimidity.debug.js $OPTIMIZE_FLAGS_DEBUG $BUILD_FLAGS libtimidity/src/*.c +emcc -o wasm/libtimidity.js $OPTIMIZE_FLAGS_PROD $BUILD_FLAGS libtimidity/src/*.c +emcc -o wasm/libtimidity.debug.js $OPTIMIZE_FLAGS_DEBUG $BUILD_FLAGS libtimidity/src/*.c # Include the freepats config in the published package so `brfs` can inline it -cp node_modules/freepats/freepats.cfg freepats.cfg +# cp node_modules/freepats/freepats.cfg freepats.cfg +# cp patches/gravis.cfg src/gravis.cfg # Enhance the source maps for libtimidity.debug.js -node tools/enhance-source-map.js +# node tools/enhance-source-map.js diff --git a/wasm/libtimidity.js b/wasm/libtimidity.js new file mode 100644 index 0000000..0722c61 --- /dev/null +++ b/wasm/libtimidity.js @@ -0,0 +1,21 @@ + +var LibTimidity = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + + return ( +function(LibTimidity) { + LibTimidity = LibTimidity || {}; + +var Module=typeof LibTimidity!=="undefined"?LibTimidity:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText}catch(err){var data=tryParseAsDataURI(url);if(data){return intArrayToString(data)}throw err}};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){try{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}catch(err){var data=tryParseAsDataURI(url);if(data){return data}throw err}}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}var data=tryParseAsDataURI(url);if(data){onload(data.buffer);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var STACK_ALIGN=16;function alignMemory(size,factor){if(!factor)factor=STACK_ALIGN;return Math.ceil(size/factor)*factor}var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var wasmBinaryFile="data:application/octet-stream;base64,AGFzbQEAAAABmAEYYAF/AX9gA39/fwF/YAF/AGACf38AYAJ/fwF/YAN/f38AYAR/f39/AX9gBX9/f39/AGAAAGAAAX9gA39+fwF+YAR/f39/AGAEf35+fwBgCX9/f39/f39/fwBgAn9+AGAEf35+fgBgAn98AGAFf39/f38Bf2ACfH8Bf2ACfn4BfWABfAF8YAJ8fwF8YAJ8fAF8YAN8fH8BfAI3CQFhAWEABgFhAWIAAQFhAWMAAAFhAWQAEQFhAWUAAQFhAWYAAAFhAWcABgFhAWgAAQFhAWkAAQObAZkBAgQABgYABAAAEwwPBBAAAgMDAwEVAAIECAABAwMDAQQMAwABABcACAIEAAUAAQ0FAgEDBQMCAwQOAAAABAEEFBYCAAYFBAAACQAGAQAABAIAAwEBAQEBAQsEBgYFAwUCAgICAgICAgEAAAMIAwICBQUFBQUFAwQHBwcHBwcHBwcLAwMAAQABBAoAAAkJBAEDAAUAAgASBgQEBAUBcAEPDwUHAQGAAoCAAgYJAX8BQYDUwAILB1MUAWoCAAFrADABbAAQAW0ACQFuAHcBbwBzAXAAcgFxAHEBcgBwAXMBAAF0AFcBdQBSAXYAIQF3AFABeABOAXkAMQF6AEwBQQBLAUIAoQEBQwCVAQkYAQBBAQsOVlVUU318e3l6eJEBjwGNAYwBCrXBApkBgg0BB38CQCAARQ0AIABBCGsiAyAAQQRrKAIAIgFBeHEiAGohBQJAIAFBAXENACABQQNxRQ0BIAMgAygCACICayIDQZjQACgCACIESQ0BIAAgAmohACADQZzQACgCAEcEQCACQf8BTQRAIAMoAggiBCACQQN2IgJBA3RBsNAAakcaIAQgAygCDCIBRgRAQYjQAEGI0AAoAgBBfiACd3E2AgAMAwsgBCABNgIMIAEgBDYCCAwCCyADKAIYIQYCQCADIAMoAgwiAUcEQCADKAIIIgIgBE8EQCACKAIMGgsgAiABNgIMIAEgAjYCCAwBCwJAIANBFGoiAigCACIEDQAgA0EQaiICKAIAIgQNAEEAIQEMAQsDQCACIQcgBCIBQRRqIgIoAgAiBA0AIAFBEGohAiABKAIQIgQNAAsgB0EANgIACyAGRQ0BAkAgAyADKAIcIgJBAnRBuNIAaiIEKAIARgRAIAQgATYCACABDQFBjNAAQYzQACgCAEF+IAJ3cTYCAAwDCyAGQRBBFCAGKAIQIANGG2ogATYCACABRQ0CCyABIAY2AhggAygCECICBEAgASACNgIQIAIgATYCGAsgAygCFCICRQ0BIAEgAjYCFCACIAE2AhgMAQsgBSgCBCIBQQNxQQNHDQBBkNAAIAA2AgAgBSABQX5xNgIEIAMgAEEBcjYCBCAAIANqIAA2AgAPCyADIAVPDQAgBSgCBCIBQQFxRQ0AAkAgAUECcUUEQCAFQaDQACgCAEYEQEGg0AAgAzYCAEGU0ABBlNAAKAIAIABqIgA2AgAgAyAAQQFyNgIEIANBnNAAKAIARw0DQZDQAEEANgIAQZzQAEEANgIADwsgBUGc0AAoAgBGBEBBnNAAIAM2AgBBkNAAQZDQACgCACAAaiIANgIAIAMgAEEBcjYCBCAAIANqIAA2AgAPCyABQXhxIABqIQACQCABQf8BTQRAIAUoAgwhAiAFKAIIIgQgAUEDdiIBQQN0QbDQAGoiB0cEQEGY0AAoAgAaCyACIARGBEBBiNAAQYjQACgCAEF+IAF3cTYCAAwCCyACIAdHBEBBmNAAKAIAGgsgBCACNgIMIAIgBDYCCAwBCyAFKAIYIQYCQCAFIAUoAgwiAUcEQCAFKAIIIgJBmNAAKAIATwRAIAIoAgwaCyACIAE2AgwgASACNgIIDAELAkAgBUEUaiICKAIAIgQNACAFQRBqIgIoAgAiBA0AQQAhAQwBCwNAIAIhByAEIgFBFGoiAigCACIEDQAgAUEQaiECIAEoAhAiBA0ACyAHQQA2AgALIAZFDQACQCAFIAUoAhwiAkECdEG40gBqIgQoAgBGBEAgBCABNgIAIAENAUGM0ABBjNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiABNgIAIAFFDQELIAEgBjYCGCAFKAIQIgIEQCABIAI2AhAgAiABNgIYCyAFKAIUIgJFDQAgASACNgIUIAIgATYCGAsgAyAAQQFyNgIEIAAgA2ogADYCACADQZzQACgCAEcNAUGQ0AAgADYCAA8LIAUgAUF+cTYCBCADIABBAXI2AgQgACADaiAANgIACyAAQf8BTQRAIABBA3YiAUEDdEGw0ABqIQACf0GI0AAoAgAiAkEBIAF0IgFxRQRAQYjQACABIAJyNgIAIAAMAQsgACgCCAshAiAAIAM2AgggAiADNgIMIAMgADYCDCADIAI2AggPC0EfIQIgA0IANwIQIABB////B00EQCAAQQh2IgEgAUGA/j9qQRB2QQhxIgF0IgIgAkGA4B9qQRB2QQRxIgJ0IgQgBEGAgA9qQRB2QQJxIgR0QQ92IAEgAnIgBHJrIgFBAXQgACABQRVqdkEBcXJBHGohAgsgAyACNgIcIAJBAnRBuNIAaiEBAkACQAJAQYzQACgCACIEQQEgAnQiB3FFBEBBjNAAIAQgB3I2AgAgASADNgIAIAMgATYCGAwBCyAAQQBBGSACQQF2ayACQR9GG3QhAiABKAIAIQEDQCABIgQoAgRBeHEgAEYNAiACQR12IQEgAkEBdCECIAQgAUEEcWoiB0EQaigCACIBDQALIAcgAzYCECADIAQ2AhgLIAMgAzYCDCADIAM2AggMAQsgBCgCCCIAIAM2AgwgBCADNgIIIANBADYCGCADIAQ2AgwgAyAANgIIC0Go0ABBqNAAKAIAQQFrIgBBfyAAGzYCAAsLSgECfwJAIAAtAAAiAkUgAiABLQAAIgNHcg0AA0AgAS0AASEDIAAtAAEiAkUNASABQQFqIQEgAEEBaiEAIAIgA0YNAAsLIAIgA2sLFQEBfyAAEBAiAQRAIAEgABAaCyABCxUAIAAoAhAgASACIAMgACgCABEGAAuzAQEDfyADKAJMGiADIAMtAEoiBUEBayAFcjoASgJ/IAEgAmwiBSADKAIIIAMoAgQiBmsiBEEBSA0AGiAAIAYgBCAFIAQgBUkbIgQQJxogAyADKAIEIARqNgIEIAAgBGohACAFIARrCyIEBEADQAJAIAMQjgFFBEAgAyAAIAQgAygCIBEBACIGQQFqQQFLDQELIAUgBGsgAW4PCyAAIAZqIQAgBCAGayIEDQALCyACQQAgARsLkAEBA38gACEBAkACQCAAQQNxRQ0AIAAtAABFBEBBAA8LA0AgAUEBaiIBQQNxRQ0BIAEtAAANAAsMAQsDQCABIgJBBGohASACKAIAIgNBf3MgA0GBgoQIa3FBgIGChHhxRQ0ACyADQf8BcUUEQCACIABrDwsDQCACLQABIQMgAkEBaiIBIQIgAw0ACwsgASAAawtBAQF/An8gACABQewBbGoiAkHcDWooAgAEQEEBIAAgARB/DQEaCyACQewNaigCAARAIAAgARB+CyAAIAEQGUEACwvILgEMfyMAQRBrIgwkAAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQYjQACgCACIFQRAgAEELakF4cSAAQQtJGyIIQQN2IgJ2IgFBA3EEQCABQX9zQQFxIAJqIgNBA3QiAUG40ABqKAIAIgRBCGohAAJAIAQoAggiAiABQbDQAGoiAUYEQEGI0AAgBUF+IAN3cTYCAAwBC0GY0AAoAgAaIAIgATYCDCABIAI2AggLIAQgA0EDdCIBQQNyNgIEIAEgBGoiASABKAIEQQFyNgIEDA0LIAhBkNAAKAIAIgpNDQEgAQRAAkBBAiACdCIAQQAgAGtyIAEgAnRxIgBBACAAa3FBAWsiACAAQQx2QRBxIgJ2IgFBBXZBCHEiACACciABIAB2IgFBAnZBBHEiAHIgASAAdiIBQQF2QQJxIgByIAEgAHYiAUEBdkEBcSIAciABIAB2aiIDQQN0IgBBuNAAaigCACIEKAIIIgEgAEGw0ABqIgBGBEBBiNAAIAVBfiADd3EiBTYCAAwBC0GY0AAoAgAaIAEgADYCDCAAIAE2AggLIARBCGohACAEIAhBA3I2AgQgBCAIaiICIANBA3QiASAIayIDQQFyNgIEIAEgBGogAzYCACAKBEAgCkEDdiIBQQN0QbDQAGohB0Gc0AAoAgAhBAJ/IAVBASABdCIBcUUEQEGI0AAgASAFcjYCACAHDAELIAcoAggLIQEgByAENgIIIAEgBDYCDCAEIAc2AgwgBCABNgIIC0Gc0AAgAjYCAEGQ0AAgAzYCAAwNC0GM0AAoAgAiBkUNASAGQQAgBmtxQQFrIgAgAEEMdkEQcSICdiIBQQV2QQhxIgAgAnIgASAAdiIBQQJ2QQRxIgByIAEgAHYiAUEBdkECcSIAciABIAB2IgFBAXZBAXEiAHIgASAAdmpBAnRBuNIAaigCACIBKAIEQXhxIAhrIQQgASECA0ACQCACKAIQIgBFBEAgAigCFCIARQ0BCyAAKAIEQXhxIAhrIgIgBCACIARJIgIbIQQgACABIAIbIQEgACECDAELCyABIAhqIgkgAU0NAiABKAIYIQsgASABKAIMIgNHBEAgASgCCCIAQZjQACgCAE8EQCAAKAIMGgsgACADNgIMIAMgADYCCAwMCyABQRRqIgIoAgAiAEUEQCABKAIQIgBFDQQgAUEQaiECCwNAIAIhByAAIgNBFGoiAigCACIADQAgA0EQaiECIAMoAhAiAA0ACyAHQQA2AgAMCwtBfyEIIABBv39LDQAgAEELaiIAQXhxIQhBjNAAKAIAIglFDQBBHyEFQQAgCGshBAJAAkACQAJ/IAhB////B00EQCAAQQh2IgAgAEGA/j9qQRB2QQhxIgJ0IgAgAEGA4B9qQRB2QQRxIgF0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAEgAnIgAHJrIgBBAXQgCCAAQRVqdkEBcXJBHGohBQsgBUECdEG40gBqKAIAIgJFCwRAQQAhAAwBC0EAIQAgCEEAQRkgBUEBdmsgBUEfRht0IQEDQAJAIAIoAgRBeHEgCGsiByAETw0AIAIhAyAHIgQNAEEAIQQgAiEADAMLIAAgAigCFCIHIAcgAiABQR12QQRxaigCECICRhsgACAHGyEAIAFBAXQhASACDQALCyAAIANyRQRAQQIgBXQiAEEAIABrciAJcSIARQ0DIABBACAAa3FBAWsiACAAQQx2QRBxIgJ2IgFBBXZBCHEiACACciABIAB2IgFBAnZBBHEiAHIgASAAdiIBQQF2QQJxIgByIAEgAHYiAUEBdkEBcSIAciABIAB2akECdEG40gBqKAIAIQALIABFDQELA0AgACgCBEF4cSAIayIBIARJIQIgASAEIAIbIQQgACADIAIbIQMgACgCECIBBH8gAQUgACgCFAsiAA0ACwsgA0UNACAEQZDQACgCACAIa08NACADIAhqIgYgA00NASADKAIYIQUgAyADKAIMIgFHBEAgAygCCCIAQZjQACgCAE8EQCAAKAIMGgsgACABNgIMIAEgADYCCAwKCyADQRRqIgIoAgAiAEUEQCADKAIQIgBFDQQgA0EQaiECCwNAIAIhByAAIgFBFGoiAigCACIADQAgAUEQaiECIAEoAhAiAA0ACyAHQQA2AgAMCQsgCEGQ0AAoAgAiAk0EQEGc0AAoAgAhAwJAIAIgCGsiAUEQTwRAQZDQACABNgIAQZzQACADIAhqIgA2AgAgACABQQFyNgIEIAIgA2ogATYCACADIAhBA3I2AgQMAQtBnNAAQQA2AgBBkNAAQQA2AgAgAyACQQNyNgIEIAIgA2oiACAAKAIEQQFyNgIECyADQQhqIQAMCwsgCEGU0AAoAgAiBkkEQEGU0AAgBiAIayIBNgIAQaDQAEGg0AAoAgAiAiAIaiIANgIAIAAgAUEBcjYCBCACIAhBA3I2AgQgAkEIaiEADAsLQQAhACAIQS9qIgkCf0Hg0wAoAgAEQEHo0wAoAgAMAQtB7NMAQn83AgBB5NMAQoCggICAgAQ3AgBB4NMAIAxBDGpBcHFB2KrVqgVzNgIAQfTTAEEANgIAQcTTAEEANgIAQYAgCyIBaiIFQQAgAWsiB3EiAiAITQ0KQcDTACgCACIEBEBBuNMAKAIAIgMgAmoiASADTSABIARLcg0LC0HE0wAtAABBBHENBQJAAkBBoNAAKAIAIgMEQEHI0wAhAANAIAMgACgCACIBTwRAIAEgACgCBGogA0sNAwsgACgCCCIADQALC0EAEBEiAUF/Rg0GIAIhBUHk0wAoAgAiA0EBayIAIAFxBEAgAiABayAAIAFqQQAgA2txaiEFCyAFIAhNIAVB/v///wdLcg0GQcDTACgCACIEBEBBuNMAKAIAIgMgBWoiACADTSAAIARLcg0HCyAFEBEiACABRw0BDAgLIAUgBmsgB3EiBUH+////B0sNBSAFEBEiASAAKAIAIAAoAgRqRg0EIAEhAAsgAEF/RiAIQTBqIAVNckUEQEHo0wAoAgAiASAJIAVrakEAIAFrcSIBQf7///8HSwRAIAAhAQwICyABEBFBf0cEQCABIAVqIQUgACEBDAgLQQAgBWsQERoMBQsgACIBQX9HDQYMBAsAC0EAIQMMBwtBACEBDAULIAFBf0cNAgtBxNMAQcTTACgCAEEEcjYCAAsgAkH+////B0sNASACEBEiAUEAEBEiAE8gAUF/RnIgAEF/RnINASAAIAFrIgUgCEEoak0NAQtBuNMAQbjTACgCACAFaiIANgIAQbzTACgCACAASQRAQbzTACAANgIACwJAAkACQEGg0AAoAgAiBwRAQcjTACEAA0AgASAAKAIAIgMgACgCBCICakYNAiAAKAIIIgANAAsMAgtBmNAAKAIAIgBBACAAIAFNG0UEQEGY0AAgATYCAAtBACEAQczTACAFNgIAQcjTACABNgIAQajQAEF/NgIAQazQAEHg0wAoAgA2AgBB1NMAQQA2AgADQCAAQQN0IgNBuNAAaiADQbDQAGoiAjYCACADQbzQAGogAjYCACAAQQFqIgBBIEcNAAtBlNAAIAVBKGsiA0F4IAFrQQdxQQAgAUEIakEHcRsiAGsiAjYCAEGg0AAgACABaiIANgIAIAAgAkEBcjYCBCABIANqQSg2AgRBpNAAQfDTACgCADYCAAwCCyABIAdNIAMgB0tyDQAgACgCDEEIcQ0AIAAgAiAFajYCBEGg0AAgB0F4IAdrQQdxQQAgB0EIakEHcRsiAGoiAjYCAEGU0ABBlNAAKAIAIAVqIgEgAGsiADYCACACIABBAXI2AgQgASAHakEoNgIEQaTQAEHw0wAoAgA2AgAMAQtBmNAAKAIAIgMgAUsEQEGY0AAgATYCACABIQMLIAEgBWohAkHI0wAhAAJAAkACQAJAAkACQANAIAIgACgCAEcEQCAAKAIIIgANAQwCCwsgAC0ADEEIcUUNAQtByNMAIQADQCAHIAAoAgAiAk8EQCACIAAoAgRqIgQgB0sNAwsgACgCCCEADAALAAsgACABNgIAIAAgACgCBCAFajYCBCABQXggAWtBB3FBACABQQhqQQdxG2oiCSAIQQNyNgIEIAJBeCACa0EHcUEAIAJBCGpBB3EbaiIFIAlrIAhrIQIgCCAJaiEGIAUgB0YEQEGg0AAgBjYCAEGU0ABBlNAAKAIAIAJqIgA2AgAgBiAAQQFyNgIEDAMLIAVBnNAAKAIARgRAQZzQACAGNgIAQZDQAEGQ0AAoAgAgAmoiADYCACAGIABBAXI2AgQgACAGaiAANgIADAMLIAUoAgQiAEEDcUEBRgRAIABBeHEhBwJAIABB/wFNBEAgBSgCCCIDIABBA3YiAEEDdEGw0ABqRxogAyAFKAIMIgFGBEBBiNAAQYjQACgCAEF+IAB3cTYCAAwCCyADIAE2AgwgASADNgIIDAELIAUoAhghCAJAIAUgBSgCDCIBRwRAIAUoAggiACADTwRAIAAoAgwaCyAAIAE2AgwgASAANgIIDAELAkAgBUEUaiIAKAIAIgQNACAFQRBqIgAoAgAiBA0AQQAhAQwBCwNAIAAhAyAEIgFBFGoiACgCACIEDQAgAUEQaiEAIAEoAhAiBA0ACyADQQA2AgALIAhFDQACQCAFIAUoAhwiA0ECdEG40gBqIgAoAgBGBEAgACABNgIAIAENAUGM0ABBjNAAKAIAQX4gA3dxNgIADAILIAhBEEEUIAgoAhAgBUYbaiABNgIAIAFFDQELIAEgCDYCGCAFKAIQIgAEQCABIAA2AhAgACABNgIYCyAFKAIUIgBFDQAgASAANgIUIAAgATYCGAsgBSAHaiEFIAIgB2ohAgsgBSAFKAIEQX5xNgIEIAYgAkEBcjYCBCACIAZqIAI2AgAgAkH/AU0EQCACQQN2IgBBA3RBsNAAaiECAn9BiNAAKAIAIgFBASAAdCIAcUUEQEGI0AAgACABcjYCACACDAELIAIoAggLIQAgAiAGNgIIIAAgBjYCDCAGIAI2AgwgBiAANgIIDAMLQR8hACACQf///wdNBEAgAkEIdiIAIABBgP4/akEQdkEIcSIDdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIANyIAByayIAQQF0IAIgAEEVanZBAXFyQRxqIQALIAYgADYCHCAGQgA3AhAgAEECdEG40gBqIQQCQEGM0AAoAgAiA0EBIAB0IgFxRQRAQYzQACABIANyNgIAIAQgBjYCACAGIAQ2AhgMAQsgAkEAQRkgAEEBdmsgAEEfRht0IQAgBCgCACEBA0AgASIDKAIEQXhxIAJGDQMgAEEddiEBIABBAXQhACADIAFBBHFqIgQoAhAiAQ0ACyAEIAY2AhAgBiADNgIYCyAGIAY2AgwgBiAGNgIIDAILQZTQACAFQShrIgNBeCABa0EHcUEAIAFBCGpBB3EbIgBrIgI2AgBBoNAAIAAgAWoiADYCACAAIAJBAXI2AgQgASADakEoNgIEQaTQAEHw0wAoAgA2AgAgByAEQScgBGtBB3FBACAEQSdrQQdxG2pBL2siACAAIAdBEGpJGyICQRs2AgQgAkHQ0wApAgA3AhAgAkHI0wApAgA3AghB0NMAIAJBCGo2AgBBzNMAIAU2AgBByNMAIAE2AgBB1NMAQQA2AgAgAkEYaiEAA0AgAEEHNgIEIABBCGohASAAQQRqIQAgASAESQ0ACyACIAdGDQMgAiACKAIEQX5xNgIEIAcgAiAHayIEQQFyNgIEIAIgBDYCACAEQf8BTQRAIARBA3YiAEEDdEGw0ABqIQICf0GI0AAoAgAiAUEBIAB0IgBxRQRAQYjQACAAIAFyNgIAIAIMAQsgAigCCAshACACIAc2AgggACAHNgIMIAcgAjYCDCAHIAA2AggMBAtBHyEAIAdCADcCECAEQf///wdNBEAgBEEIdiIAIABBgP4/akEQdkEIcSICdCIAIABBgOAfakEQdkEEcSIBdCIAIABBgIAPakEQdkECcSIAdEEPdiABIAJyIAByayIAQQF0IAQgAEEVanZBAXFyQRxqIQALIAcgADYCHCAAQQJ0QbjSAGohAwJAQYzQACgCACICQQEgAHQiAXFFBEBBjNAAIAEgAnI2AgAgAyAHNgIAIAcgAzYCGAwBCyAEQQBBGSAAQQF2ayAAQR9GG3QhACADKAIAIQEDQCABIgIoAgRBeHEgBEYNBCAAQR12IQEgAEEBdCEAIAIgAUEEcWoiAygCECIBDQALIAMgBzYCECAHIAI2AhgLIAcgBzYCDCAHIAc2AggMAwsgAygCCCIAIAY2AgwgAyAGNgIIIAZBADYCGCAGIAM2AgwgBiAANgIICyAJQQhqIQAMBQsgAigCCCIAIAc2AgwgAiAHNgIIIAdBADYCGCAHIAI2AgwgByAANgIIC0GU0AAoAgAiACAITQ0AQZTQACAAIAhrIgE2AgBBoNAAQaDQACgCACICIAhqIgA2AgAgACABQQFyNgIEIAIgCEEDcjYCBCACQQhqIQAMAwtBtM8AQTA2AgBBACEADAILAkAgBUUNAAJAIAMoAhwiAkECdEG40gBqIgAoAgAgA0YEQCAAIAE2AgAgAQ0BQYzQACAJQX4gAndxIgk2AgAMAgsgBUEQQRQgBSgCECADRhtqIAE2AgAgAUUNAQsgASAFNgIYIAMoAhAiAARAIAEgADYCECAAIAE2AhgLIAMoAhQiAEUNACABIAA2AhQgACABNgIYCwJAIARBD00EQCADIAQgCGoiAEEDcjYCBCAAIANqIgAgACgCBEEBcjYCBAwBCyADIAhBA3I2AgQgBiAEQQFyNgIEIAQgBmogBDYCACAEQf8BTQRAIARBA3YiAEEDdEGw0ABqIQICf0GI0AAoAgAiAUEBIAB0IgBxRQRAQYjQACAAIAFyNgIAIAIMAQsgAigCCAshACACIAY2AgggACAGNgIMIAYgAjYCDCAGIAA2AggMAQtBHyEAIARB////B00EQCAEQQh2IgAgAEGA/j9qQRB2QQhxIgJ0IgAgAEGA4B9qQRB2QQRxIgF0IgAgAEGAgA9qQRB2QQJxIgB0QQ92IAEgAnIgAHJrIgBBAXQgBCAAQRVqdkEBcXJBHGohAAsgBiAANgIcIAZCADcCECAAQQJ0QbjSAGohAgJAAkAgCUEBIAB0IgFxRQRAQYzQACABIAlyNgIAIAIgBjYCACAGIAI2AhgMAQsgBEEAQRkgAEEBdmsgAEEfRht0IQAgAigCACEIA0AgCCIBKAIEQXhxIARGDQIgAEEddiECIABBAXQhACABIAJBBHFqIgIoAhAiCA0ACyACIAY2AhAgBiABNgIYCyAGIAY2AgwgBiAGNgIIDAELIAEoAggiACAGNgIMIAEgBjYCCCAGQQA2AhggBiABNgIMIAYgADYCCAsgA0EIaiEADAELAkAgC0UNAAJAIAEoAhwiAkECdEG40gBqIgAoAgAgAUYEQCAAIAM2AgAgAw0BQYzQACAGQX4gAndxNgIADAILIAtBEEEUIAsoAhAgAUYbaiADNgIAIANFDQELIAMgCzYCGCABKAIQIgAEQCADIAA2AhAgACADNgIYCyABKAIUIgBFDQAgAyAANgIUIAAgAzYCGAsCQCAEQQ9NBEAgASAEIAhqIgBBA3I2AgQgACABaiIAIAAoAgRBAXI2AgQMAQsgASAIQQNyNgIEIAkgBEEBcjYCBCAEIAlqIAQ2AgAgCgRAIApBA3YiAEEDdEGw0ABqIQNBnNAAKAIAIQICf0EBIAB0IgAgBXFFBEBBiNAAIAAgBXI2AgAgAwwBCyADKAIICyEAIAMgAjYCCCAAIAI2AgwgAiADNgIMIAIgADYCCAtBnNAAIAk2AgBBkNAAIAQ2AgALIAFBCGohAAsgDEEQaiQAIAALVQECf0HoxAAoAgAiASAAQQNqQXxxIgJqIQACQCACQQFOQQAgACABTRsNAD8AQRB0IABJBEAgABAFRQ0BC0HoxAAgADYCACABDwtBtM8AQTA2AgBBfwu0AwIDfwF+IwBBIGsiAyQAAkAgAUL///////////8AgyIFQoCAgICAgMDAP30gBUKAgICAgIDAv8AAfVQEQCABQhmIpyEEIABQIAFC////D4MiBUKAgIAIVCAFQoCAgAhRG0UEQCAEQYGAgIAEaiECDAILIARBgICAgARqIQIgACAFQoCAgAiFhEIAUg0BIAIgBEEBcWohAgwBCyAAUCAFQoCAgICAgMD//wBUIAVCgICAgICAwP//AFEbRQRAIAFCGYinQf///wFxQYCAgP4HciECDAELQYCAgPwHIQIgBUL///////+/v8AAVg0AQQAhAiAFQjCIpyIEQZH+AEkNACADQRBqIAAgAUL///////8/g0KAgICAgIDAAIQiBSAEQYH+AGsQEyADIAAgBUGB/wAgBGsQKSADKQMIIgBCGYinIQIgAykDACADKQMQIAMpAxiEQgBSrYQiBVAgAEL///8PgyIAQoCAgAhUIABCgICACFEbRQRAIAJBAWohAgwBCyAFIABCgICACIWEQgBSDQAgAkEBcSACaiECCyADQSBqJAAgAiABQiCIp0GAgICAeHFyvgtQAQF+AkAgA0HAAHEEQCABIANBQGqthiECQgAhAQwBCyADRQ0AIAIgA60iBIYgAUHAACADa62IhCECIAEgBIYhAQsgACABNwMAIAAgAjcDCAuCCwIFfxB+IwBB4ABrIgQkACACQiCGIAFCIIiEIQ8gA0IvhiEMIANC////////P4MiDkIPhiEQIAIgA4VCgICAgICAgICAf4MhCSACQv///////z+DIgpCIIghESAOQhGIIRIgA0IwiKdB//8BcSEGAkACfyACQjCIp0H//wFxIghBAWtB/f8BTQRAQQAgBkEBa0H+/wFJDQEaCyABUCACQv///////////wCDIgtCgICAgICAwP//AFQgC0KAgICAgIDA//8AURtFBEAgAkKAgICAgIAghCEJDAILQQEgA0L///////////8AgyICQoCAgICAgMD//wBUIAJCgICAgICAwP//AFEbRQRAIANCgICAgICAIIQhCUIAIQEMAgsgASALQoCAgICAgMD//wCFhFAEQCACUARAQoCAgICAgOD//wAhCUIAIQEMAwsgCUKAgICAgIDA//8AhCEJQgAhAQwCCyACQoCAgICAgMD//wCFUARAIAEgC4QhAkIAIQEgAlAEQEKAgICAgIDg//8AIQkMAwsgCUKAgICAgIDA//8AhCEJDAILIAEgC4RQBEBCACEBDAILIAJQBEBCACEBDAILIAtC////////P1gEQCAEQdAAaiABIAogASAKIApQIgUbeSAFQQZ0rXynIgVBD2sQEyAEKQNYIgpCIIYgBCkDUCIBQiCIhCEPIApCIIghEUEQIAVrIQULIAUgAkL///////8/Vg0AGiAEQUBrQgAgDkIAIA4gDlAiBxt5IAdBBnStfKciB0EPaxATIAQpA0giAkIPhiAEKQNAIg1CMYiEIRAgAkIvhiANQhGIhCEMIAJCEYghEiAFIAdrQRBqCyEFIAxC/////w+DIgIgAUL/////D4MiAX4iEyANQg+GQoCA/v8PgyIDIA9C/////w+DIgt+fCINQiCGIg4gASADfnwiDCAOVK0gAiALfiIWIAMgCkL/////D4MiCn58IhQgEEL/////D4MiDiABfnwiECANIBNUrUIghiANQiCIhHwiEyACIAp+IhcgAyARQoCABIQiDX58IhEgCyAOfnwiFSABIBJC/////weDQoCAgIAIhCIPfnwiAUIghnwiEnwhAyAGIAhqIAVqQf//AGshBQJAIAogDn4iGCACIA1+fCICIBhUrSACIAIgCyAPfnwiC1atfCALIAsgFCAWVK0gECAUVK18fCICVq18IA0gD358IAogD34iCyANIA5+fCIKIAtUrUIghiAKQiCIhHwgAiACIApCIIZ8IgJWrXwgAiACIAEgFVStIBEgF1StIBEgFVatfHxCIIYgAUIgiIR8IgFWrXwgASAQIBNWrSASIBNUrXx8IgIgAVStfCIBQoCAgICAgMAAg1BFBEAgBUEBaiEFDAELIAxCP4ghCiABQgGGIAJCP4iEIQEgAkIBhiADQj+IhCECIAxCAYYhDCAKIANCAYaEIQMLIAVB//8BTgRAIAlCgICAgICAwP//AIQhCUIAIQEMAQsCfiAFQQBMBEBBASAFayIGQYABTwRAQgAhAQwDCyAEQTBqIAwgAyAFQf8AaiIFEBMgBEEgaiACIAEgBRATIARBEGogDCADIAYQKSAEIAIgASAGECkgBCkDMCAEKQM4hEIAUq0gBCkDICAEKQMQhIQhDCAEKQMoIAQpAxiEIQMgBCkDACECIAQpAwgMAQsgAUL///////8/gyAFrUIwhoQLIAmEIQkgDFAgA0J/VSADQoCAgICAgICAgH9RG0UEQCAJIAJCAXwiASACVK18IQkMAQsgDCADQoCAgICAgICAgH+FhFBFBEAgAiEBDAELIAkgAiACQgGDfCIBIAJUrXwhCQsgACABNwMAIAAgCTcDCCAEQeAAaiQACxkAIAAgARBFIgBBACAALQAAIAFB/wFxRhsL+QECAn8DfiMAQRBrIgIkAAJ+IAG9IgVC////////////AIMiBEKAgICAgICACH1C/////////+//AFgEQCAEQjyGIQYgBEIEiEKAgICAgICAgDx8DAELIARCgICA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NgIAIAJBEGogBLcgAUHADWooAgAqAky7oiAAKgIUu6IQFiACIAIpAxAgAikDGEKAgICAgICA9T8QFCABQYAOaiACKQMAIAIpAwgQEjgCAAwCCyADQQRMBEAgACABQewBbGoiAUGkD2pBATYCACACQTBqIAS3IAFBwA1qKAIAKgJMu6IgACoCFLuiEBYgAkEgaiACKQMwIAIpAzhCgICAgICAwPU/EBQgAUGADmogAikDICACKQMoEBI4AgAMAgsgACABQewBbGoiAUGkD2ohBSADQfwATgRAIAVBAjYCACACQdAAaiAEtyABQcANaigCACoCTLuiIAAqAhS7ohAWIAJBQGsgAikDUCACKQNYQoCAgICAgMD1PxAUIAFBgA5qIAIpA0AgAikDSBASOAIADAILIAVBADYCACACQfAAaiAEtyABQcANaigCACoCTLuiIAAqAhS7ohAWIAJB4ABqIAIpA3AgAikDeEKAgICAgICA8j8QFCABQYQOaiADsiACKQNgIAIpA2gQEiIGlDgCACABQYAOaiAGQf8AIANrspQ4AgAMAQsgA0GkD2pBAzYCACACQZABaiAEtyADQcANaigCACoCTLuiIAAqAhS7ohAWIAJBgAFqIAIpA5ABIAIpA5gBQoCAgICAgID1PxAUIANBgA5qIAIpA4ABIAIpA4gBEBI4AgALIAJBoAFqJAALTwECfyAAIAFB7AFsaiICQbwNaiEDIAJBwA1qKAIALQBmQcAAcQRAIAJBmA9qQQM2AgAgA0EDOgAAIAAgARAoGiAAIAEQGQ8LIANBAzoAAAsxACAAIAFBKGxqIgBBxAhqQtoANwIAIABB4AhqQQA2AgAgAEHQCGpCgMCAgPAPNwIAC4IEAQN/IAJBgARPBEAgACABIAIQBBogAA8LIAAgAmohAwJAIAAgAXNBA3FFBEACQCACQQFIBEAgACECDAELIABBA3FFBEAgACECDAELIAAhAgNAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANPDQEgAkEDcQ0ACwsCQCADQXxxIgRBwABJDQAgAiAEQUBqIgVLDQADQCACIAEoAgA2AgAgAiABKAIENgIEIAIgASgCCDYCCCACIAEoAgw2AgwgAiABKAIQNgIQIAIgASgCFDYCFCACIAEoAhg2AhggAiABKAIcNgIcIAIgASgCIDYCICACIAEoAiQ2AiQgAiABKAIoNgIoIAIgASgCLDYCLCACIAEoAjA2AjAgAiABKAI0NgI0IAIgASgCODYCOCACIAEoAjw2AjwgAUFAayEBIAJBQGsiAiAFTQ0ACwsgAiAETw0BA0AgAiABKAIANgIAIAFBBGohASACQQRqIgIgBEkNAAsMAQsgA0EESQRAIAAhAgwBCyAAIANBBGsiBEsEQCAAIQIMAQsgACECA0AgAiABLQAAOgAAIAIgAS0AAToAASACIAEtAAI6AAIgAiABLQADOgADIAFBBGohASACQQRqIgIgBE0NAAsLIAIgA0kEQANAIAIgAS0AADoAACABQQFqIQEgAkEBaiICIANHDQALCyAAC/oBAQl/IAAgAUHsAWxqIgJB1A1qIQggAkG8DWohBSACQcANaiEJIAJBmA9qIgooAgAhAgNAIAIiA0EGTgRAIAVBADoAAEEBDwsCQCAJKAIAIgYtAGZBwABxRSADQQNIcg0AIAUtAABBAWtB/wFxQQFLDQAgACABQewBbGpB3A1qQQA2AgBBAA8LIAogA0EBaiICNgIAIAgoAgAiByAGIANBAnRqKAI0IgRGIANBA05BACAEIAdKG3INAAsgACABQewBbGoiAEHYDWogBDYCACAAQdwNaiIBIAYgA0ECdGooAhwiADYCACAEIAdIBEAgAUEAIABrNgIAC0EAC1ABAX4CQCADQcAAcQRAIAIgA0FAaq2IIQFCACECDAELIANFDQAgAkHAACADa62GIAEgA60iBIiEIQEgAiAEiCECCyAAIAE3AwAgACACNwMICyUBAX4CQCABrCECIAAoAkxBf0wEQCAAIAIQQQwBCyAAIAIQQQsLaQECfwJAIAAoAhQgACgCHE0NACAAQQBBACAAKAIkEQEAGiAAKAIUDQBBfw8LIAAoAgQiASAAKAIIIgJJBEAgACABIAJrrEEBIAAoAigRCgAaCyAAQQA2AhwgAEIANwMQIABCADcCBEEAC0MBA38CQCACRQ0AA0AgAC0AACIEIAEtAAAiBUYEQCABQQFqIQEgAEEBaiEAIAJBAWsiAg0BDAILCyAEIAVrIQMLIAMLZwEBfwJAIABFBEBBsM8AKAIAIgBFDQELIAAQmQEgAGoiAS0AAEUEQEGwzwBBADYCAEEADwsgARCbASABaiIALQAABEBBsM8AIABBAWo2AgAgAEEAOgAAIAEPC0GwzwBBADYCAAsgAQuZAQEDfCAAIACiIgMgAyADoqIgA0R81c9aOtnlPaJE65wriublWr6goiADIANEff6xV+Mdxz6iRNVhwRmgASq/oKJEpvgQERERgT+goCEFIAMgAKIhBCACRQRAIAQgAyAFokRJVVVVVVXFv6CiIACgDwsgACADIAFEAAAAAAAA4D+iIAQgBaKhoiABoSAERElVVVVVVcU/oqChC6UBAQR/IwBBgAhrIgIkAAJAIABFDQAgAC0AAEUNACAAEEMiAQ0AQQAhASAALQAAQS9GDQBB8MQAIQMDQCADKAIAIgFFBEBBACEBDAILIAJBADoAAAJAIAEoAgAiBBAOIgNFDQAgAiAEECAaIAIgA2pBAWstAABBL0YNACACIANqQS87AAALIAFBBGohAyACIAAQRxBDIgFFDQALCyACQYAIaiQAIAELAwABC7ABAQJ/IAAEQCAAEFgDQCABQYABRkUEQCAAIAFBAnRqIgIoAhwQCSACKAKcBBAJIAFBAWohAQwBCwsgACgCsAgQCSAAKAKsCBAJIAAoApRmEAlBACEBA0AgAUEIRgRAQQAhAQNAIAEgACgC0GZORQRAIAAgAUECdGpB1OYAaigCABAJIAFBAWohAQwBCwsgABAJBSAAIAFBAnRqQbDmAGooAgAQCSABQQFqIQEMAQsLCwvqCgEKfyMAQbAIayIGJABBfyEHAkAgAUExSg0AIAAQLyEAIAFBAnQiCUGgzQAoAgBqIAA2AgAgAEUNACABQQFqIQoDQAJAIAZBMGpBoM0AKAIAIAlqKAIAEKABRQRAQQAhBwwBCyAGQTBqEC0iAEUNASAAQeEsEApFBEBBABAtIgBFDQILIAAtAABBI0YNASAGIAA2AgBBACECIAAhBwJ/A0ACQCAHRQ0AIActAABBI0YNAEEKIAJBAWoiAkEKRg0CGiAGIAJBAnRqQQAQLSIHNgIADAELCyACCyEDIABB7CwQCkUNASAAQfEsEApFDQEgAEH7LBAKRQ0BIABBhC0QCkUNASAAQY0tEApFDQEgAEGRLRAKRQ0BIABBmS0QCkUNASAAQaUtEApFDQEgAEGuLRAKRQ0BIABBtC0QCkUNASAAQb4tEApFDQEgAEHILRAKRQ0BIABBzS0QCkUNASAAQdYtEApFDQEgAEHaLRAKRQRAQQEhAEF/IQcgA0ECSQ0BA0AgACADRg0DIAYgAEECdGooAgAhAiAAQQFqIQAgAiACEA4QQEEATg0ACwwBCyAAQd4tEApFBEBBASEAQX8hByADQQJJDQEDQCAAIANGDQMgAEECdCECIABBAWohACACIAZqKAIAIAoQMkUNAAsMAQsgAEHlLRAKRQRAIANBAkcEQEF/IQcMAgtBsM0AIAYoAgRB/wEQRhpBr88AQQA6AAAMAgsgAEHtLRAKRQRAQX8hByADQQJJDQEgBigCBBAXIgBB/wBLDQEgAEECdEGgyQBqIgAoAgAiBQ0CIABBhAQQCyIDNgIAIANFDQFBgBwQCyEDIAAoAgAiBSADNgIAIAMNAgwBCyAAQfUtEApFBEBBfyEHIANBAkkNASAGKAIEEBciAEH/AEsNASAAQQJ0QaDFAGoiACgCACIFDQIgAEGEBBALIgM2AgAgA0UNAUGAHBALIQMgACgCACIFIAM2AgAgAw0CDAELQX8hByADQQJJDQAgAC0AAEEwa0H/AXFBCUsNACAFRSAAEBciAEH/AEtyDQAgAEEcbCIIIAUoAgBqKAIAEAkgBigCBCICEA5BAWoQCyEAIAUoAgAgCGogADYCACAARQ0AIAAgAhAgGiAFKAIAIAhqIgBCfzcCBCAAQn83AhQgAEJ/NwIMQQIhAANAIAAgA0YNAiAGIABBAnRqKAIAIgJBPRAVIgRFDQEgBEEAOgAAIARBAWohBAJAIAJB+i0QCkUEQCAEEBciAkGgBksNAyAELQAAQTBrQf8BcUEJSw0DIAUoAgAgCGogAjYCCAwBCyACQf4tEApFBEAgBBAXIgJB/wBLDQMgBC0AAEEwa0H/AXFBCUsNAyAFKAIAIAhqIAI2AgQMAQsgAkGDLhAKRQRAAkAgBEGHLhAKRQRAQcAAIQIMAQsgBEGOLhAKBEAgBEGTLhAKRQRAQf8AIQIMAgsgBBAXQeQAbCILQZDOAGpBnQFtIgJB/wBLDQUgC0GszwBqQbgCSw0BC0EAIQIgBC0AACIEQS1GDQAgBEEwa0H/AXFBCUsNBAsgBSgCACAIaiACNgIMDAELIAJBmS4QCkUEQCAEQZ4uEApFBEAgBSgCACAIakEANgIUDAILIARBoi4QCg0DIAUoAgAgCGpBADYCEAwBCyACQacuEAoNAiAEQZ4uEApFBEAgBSgCACAIakEBNgIUDAELIARBoi4QCkUEQCAFKAIAIAhqQQE2AhAMAQsgBEGtLhAKDQIgBSgCACAIakEBNgIYCyAAQQFqIQAMAAsACwsgAUECdCIAQaDNACgCAGooAgAQH0GgzQAoAgAgAGpBADYCAAsgBkGwCGokACAHCzIBAX8CQCAAEE8iAQ0AIABBABAyIgENAEGgzQAoAgAQCUGgzQBBADYCAEEADwsQISABC2cBAX8gACACQQJ0aiIAQZwEaiAAQRxqIAEbKAIAIQBBACEBA0AgAUGAAUZFBEACQAJAAkAgACABQQJ0aiICQQRqKAIAIgNBAWoOAgECAAsgAxBKCyACQQA2AgQLIAFBAWohAQwBCwsLDwAgACgCECAAKAIIEQAAC6wCAQV/IAAgAUHsAWxqIgVBvA1qIQQgBUHADWooAgAiAygCDEUEQAJAIAIoAgAiACADKAIIQQx1IAVBzA1qIgEoAgAiBUEMdSIGayIHTgRAIARBADoAACACIAc2AgAMAQsgASAAQQx0IAVqNgIACyADKAJQIAZBAXRqDwsgAy0AZiIDQQRxIQYgBUGQD2ooAgAEQAJAIAZFDQAgA0HAAHFFBEAgBC0AAEEBa0H/AXFBAUsNAQsgAigCACEBIANBCHEEQCAAIAQgARBgDwsgACAEIAEQXw8LIAAgASACEF4PCwJAIAZFDQAgA0HAAHFFBEAgBC0AAEEBa0H/AXFBAUsNAQsgAigCACEBIANBCHEEQCAAIAQgARBdDwsgACAEIAEQXA8LIAAgASACEFsLvg4CC38BfSMAQZAIayIJJAAgAkEANgIAAkAgAUUNAAJAIAEQLyILDQADQCAKQQFHBEAgARAOIApBAnRBhAhqKAIAIgsQDmpB/wdNBEAgCUEQaiABECAgCxBHEC8iCw0DCyAKQQFqIQoMAQsLIAAoAtBmIgJB/wBKDQFBACEKIAJBACACQQBKGyEDA0AgAyAKRwRAIApBAnQhBCAKQQFqIQogACAEakHU5gBqKAIAIAEQCg0BDAMLCyAAIAJBAnRqQdTmAGogARCdATYCACAAIAJBAWo2AtBmDAELAkAgCUEQakEBQe8BIAsQDUHvAUcNACAJQRBqQZEIQRYQLARAIAlBEGpBpwhBFhAsDQELIAktAGJBAUsNACAJLQCnAUEBSw0AIAJBCBALIgw2AgACQAJAIAxFDQAgDCAJLADWASIBNgIAIAwgAUHsAGwQCyIBNgIEIAFFDQBBACAFIAVBf0YbIRAgA0H/AHEhESAEt0QAAAAAAABZQKO2IRQgBkEBRyESIAhBAUchEwNAIAwoAgAgDkoEQCALQQcQKiAJQQ9qQQFBASALEA1BAUcNAyAMKAIEIQEgCUEIakEEQQEgCxANQQFHDQMgASAOQewAbGoiCCAJKAIINgIIIAlBCGpBBEEBIAsQDUEBRw0DIAggCSgCCDYCACAJQQhqQQRBASALEA1BAUcNAyAIIAkoAgg2AgQgCUEGakECQQEgCxANQQFHDQMgCCAJLwEGNgIMIAlBCGpBBEEBIAsQDUEBRw0DIAggCSgCCDYCECAJQQhqQQRBASALEA1BAUcNAyAIIAkoAgg2AhQgCUEIakEEQQEgCxANQQFHDQMgCCAJKAIINgIYIAtBAhAqIAlBBWpBAUEBIAsQDUEBRw0DIAkgCS0ABSIBOgAQIAggAUEDdEH4AHFBBHIgESADQX9GGzoAZyAJQRBqQQFBEiALEA1BEkcNAyAIAn8CQCAJLQAdBEAgCS0AHg0BCyAIQgA3AlRBAAwBCyAIAn9BACAJLQAcIgFFDQAaIAAoAoRmQYCAmAFsIAAoAgggAWxtCzYCVCAIIAAoAoRmIAktAB1sQQ90IAAoAghBJmxtNgJYIAktAB4LOgBkIAgCfwJAIAktACAiAQRAIAktACENAQsgCEIANwJcQQAMAQsgCCAAKAIIQSZsIAFBBnRtIgE2AmAgCCAAIAktAB8gARCXATYCXCAJLQAhCzoAZSAJQQVqQQFBASALEA1BAUcNAyAIIAktAAU6AGYgC0EoECogCCAQOgBoIAgtAGYiAUEEcSIFQQN0IAFyIgYgAUHDAXEgEiAGQTxxRXIiBhshAUEAIAZBAUYgBRtFBEAgCCABOgBmCwJAAkACQCAHIgoOAgIAAQsgCCABQb8BcToAZkEAIQoMAQsgAUEccUUEQCAIIAFBnwFxOgBmQQAhCgwBCwJAIAlBEGpBvQhBBhAsBEAgCSwAG0HkAEgNAQsgCCABQb8BcToAZkEAIQoMAQtBACEKIAFBIHENACAIIAFBvwFxOgBmCwNAIApBBkcEQCAIIApBAnRqIgEgACAJQRBqIApqIgUtAAAQkAE2AhwgASAFLQAGQRZ0NgI0IApBAWohCgwBCwsgCCAIKAIIQQRqEAsiATYCUCABRQ0CIAEgCCgCCEEBIAsQDUEBRw0DIAgtAGYiBkEBcUUEQCAIKAJQIQEgCCAIKAIIIgpBAXQiBTYCCCAIIAgoAgBBAXQ2AgAgCCAIKAIEQQF0NgIEIAVBBGoQCyIGRQ0DIAYhBQNAIAoEQCAFIAEtAABBCHQ7AQAgBUECaiEFIAFBAWohASAKQQFrIQoMAQsLIAgoAlAQCSAIIAY2AlAgCC0AZiEGCwJAIAZBAnFFDQAgCCgCCEECbSEBIAgoAlAhCgNAIAFFDQEgCiAKLwEAQYCAAnM7AQAgCkECaiEKIAFBAWshAQwACwALIAZBEHEEQCAIKAJQIAgoAghBAm0QiwEgCCgCACEBIAggCCgCCCIFIAgoAgRrNgIAIAggBSABazYCBCAIIAgtAGZBa3FBBHIiBjoAZgsCQCAEQX9HBEAgCCAUOAJMIAgoAghBAm0hDwwBCyAIKAJQIQVBACEBIAgoAghBAm0iDyEKA0AgCgRAIAUuAQAiDSANQR91Ig1qIA1zIg0gASANQRB0QRB1IAFBEHRBEHVKGyEBIAVBAmohBSAKQQFrIQoMAQsLIAhEAAAAAAAA4EAgAUEQdEEQdbejtjgCTAsgCCgCBCEBIAgoAgAhBSAIIA9BDHQ2AgggCCAJLQAPIgpBD3FBCHQgBUECbUEMdHI2AgAgCCAKQQR0QYAecSABQQJtQQx0cjYCBCAILQBoRSAGQQRxckUEQCAAIAgQWiAAKAIADQQLIBNFBEAgCCAIKAIENgIICyAOQQFqIQ4MAQsLIAsQHwwDCyAAQQE2AgALIAwQSgsgCxAfIAJBADYCAAsgCUGQCGokAAtSAQF8IAACfyABtyAAKAIIt6JEje21oPfGsD+iIAK3oyIDmUQAAAAAAADgQWMEQCADqgwBC0GAgICAeAsiAkH//wNxNgK4CCAAIAJBEHU2ArQICysBAX8DQCABQTBGRQRAIAAgAUHsAWxqQbwNakEAOgAAIAFBAWohAQwBCwsLpwIBCH8CQCAAIAJBAnRqIgRBnARqIARBHGogARsoAgAiCEUEQEEAIQQMAQtBAUF/IAEbIQlBACEEA0AgBkGAAUYNAQJAIAggBkECdCIFakEEaiIHKAIAQX9HDQAgCCgCACAGQRxsaiIDKAIAIgpFBEACQCACRQ0AIAFFBEAgACgCHCAFaiIDQQRqKAIADQEgA0F/NgIEDAELIAAoApwEIAVqIgNBBGooAgANACADQX82AgQLIAdBADYCACAEQQFqIQQMAQsgACAKIAcgAygCDCADKAIIIAZBfyABGyADKAIEIgUgBUF/RhsgCSADKAIQIgUgBUF/RhsgCSADKAIUIgUgBUF/RhsgAygCGBA3IAQgBygCAEVqIQQLIAZBAWohBgwACwALIAQL4gMDB38BfQF8IAAgAUHsAWxqIgJBwA1qKAIAIgUoAgwEQCACQdANaiIGKAIAIQcgACACQb0Nai0AACIEQShsakHQCGooAgAhAwJAIAJBkA9qKAIARQ0AQSAhAiAAIAFB7AFsaiEIA0AgAkUNASAIIAJBAWsiAkECdGpBjA5qQQA2AgAMAAsACyAAIAFB7AFsakHIDWoCfyADQf//AE1BACADQYDAAEcbRQRAIAAgAUHsAWxqQcQNaigCAAwBCyAAIARBKGxqIgJB4AhqIgQqAgAiCUMAAAAAWwRAIARBACACQdwIaigCACADQYBAamwiAmsgAiADQYDAAEgbIgJBAnZB+A9xQdAUaisDACACQQ11QQN0QdAkaisDAKK2Igk4AgALAkAgA0GBwABOBEAgCbsgACABQewBbGpBxA1qKAIAt6IiCplEAAAAAAAA4EFjRQ0BIAqqDAILIAAgAUHsAWxqQcQNaigCALcgCbujIgqZRAAAAAAAAOBBY0UNACAKqgwBC0GAgICAeAsiAjYCACAGAn8gBSgCDLcgAreiIAUoAhi3IAAoAgi3oqNEAAAAAAAAsECitrsiCpogCiAHQQBIGyIKmUQAAAAAAADgQWMEQCAKqgwBC0GAgICAeAs2AgALC7QFAQR/AkACQCAAKAKAZiABLQAEIgN2QQFxBEAgAS0ABiIGQQJ0IgUgACAAIANBKGxqQbwIaigCAEECdGooApwEaigCBCIERQRAIAAoApwEIAVqKAIEIgRFDQMLIAQoAgQiBSwAaCEDIAAgAkHsAWxqIgRBwA1qIAU2AgAgBEHEDWogAyAGQf8AcSADG0ECdEHQCGooAgA2AgAMAQsCQCAAIANBKGxqIgNBwAhqKAIAIgRBf0YEQCAAKAKcCCEEDAELIARBAnQiBSAAIANBvAhqKAIAQQJ0aigCHGooAgQiBA0AIAAoAhwgBWooAgQiBEUNAgsgACACQewBbGoiA0HEDWogBCgCBCwAaCIFBH8gBQUgAS0ABkH/AHELQQJ0QdAIaigCADYCACAAIAIgBBBlIANBwA1qKAIAIQULIAAgAkHsAWxqIgNBvA1qQQE6AAAgA0G9DWogAS0ABCIEOgAAIANBvg1qIAEtAAY6AAAgAS0AByEBIANB6A1qQQA2AgAgA0HMDWpCADcCACADQb8NaiABOgAAIANB7A1qIAUoAlg2AgAgBSgCVCEBIANB5A1qQQA2AgAgA0HgDWogATYCACAFKAJcIQEgA0H0DWpBADYCACADQfANaiABNgIAIAUoAmAhASADQZQPakEANgIAIANBjA9qQQA2AgAgA0GQD2ogATYCAEEAIQEDQCABQSBGRQRAIAMgAUECdGpBjA5qQQA2AgAgAUEBaiEBDAELCyAAIAJB7AFsaiIBQaAPaiAAIARBKGxqQcwIaigCACIEQX9GBH8gBSwAZwUgBAs2AgAgACACEDsgACACECQCQCADQcANaigCAC0AZkHAAHEEQCABQdQNakEANgIAIAFBmA9qQgA3AgAgACACECgaDAELIAFB3A1qQQA2AgALIAAgAhAZCwsUACAAIAFB7AFsakG8DWpBBDoAAAteAQN/IAAoAvxlIQEgACgCmGYtAAQhAgNAIAEEQCAAIAFBAWsiAUHsAWxqIgNBvQ1qLQAAIAJHDQEgA0G8DWotAABBAWtB/wFxQQFLDQEgACABECQgACABEBkMAQsLCzEAIAEgACgCoGZIBEAgAEEANgKgZgsgABB2IAAgACgClGY2AphmIAEEQCAAIAEQdQsLVgECf0F+IQJBCBAQIgMEfyADIAFBAWoQECICNgIAIAJFBEAgAxAJQX4PCyADQfDEACgCADYCBEHwxAAgAzYCACACIAAgARBGIAFqQQA6AABBAAVBfgsLcAAgASAAKAIIIAAoAgRrrH0hAQJAIAAoAhQgACgCHEsEQCAAQQBBACAAKAIkEQEAGiAAKAIURQ0BCyAAQQA2AhwgAEIANwMQIAAgAUEBIAAoAigRCgBCAFMNACAAQgA3AgQgACAAKAIAQW9xNgIACwtqAQF/IAAEQCAAKAJMQX9MBEAgABArDwsgABArDwtBhNAAKAIABEBBhNAAKAIAEEIhAQtBgNAAKAIAIgAEQANAIAAoAkwaIAAoAhQgACgCHEsEQCAAECsgAXIhAQsgACgCOCIADQALCyABC4MBAQN/IwBBEGsiASQAAkACQEHgxABBgAgsAAAQFUUEQEG0zwBBHDYCAAwBCxCUASEDIAFBtgM2AgAgACADQYCAAnIgARAIIgBBgWBPBEBBtM8AQQAgAGs2AgBBfyEACyAAQQBIDQEgABCSASICDQEgABACGgtBACECCyABQRBqJAAgAgsKACAAQTBrQQpJC9kBAQJ/AkAgAUH/AXEiAwRAIABBA3EEQANAIAAtAAAiAkUgAiABQf8BcUZyDQMgAEEBaiIAQQNxDQALCwJAIAAoAgAiAkF/cyACQYGChAhrcUGAgYKEeHENACADQYGChAhsIQMDQCACIANzIgJBf3MgAkGBgoQIa3FBgIGChHhxDQEgACgCBCECIABBBGohACACQYGChAhrIAJBf3NxQYCBgoR4cUUNAAsLA0AgACICLQAAIgMEQCACQQFqIQAgAyABQf8BcUcNAQsLIAIPCyAAEA4gAGoPCyAACw0AIAAgASACEJoBIAALEAAgABAOIABqIAEQIBogAAvGAQECfyMAQRBrIgEkAAJAIAC9QiCIp0H/////B3EiAkH7w6T/A00EQCACQYCAwPIDSQ0BIABEAAAAAAAAAABBABAuIQAMAQsgAkGAgMD/B08EQCAAIAChIQAMAQsCQAJAAkACQCAAIAEQngFBA3EOAwABAgMLIAErAwAgASsDCEEBEC4hAAwDCyABKwMAIAErAwgQSSEADAILIAErAwAgASsDCEEBEC6aIQAMAQsgASsDACABKwMIEEmaIQALIAFBEGokACAAC5IBAQN8RAAAAAAAAPA/IAAgAKIiAkQAAAAAAADgP6IiA6EiBEQAAAAAAADwPyAEoSADoSACIAIgAiACRJAVyxmgAfo+okR3UcEWbMFWv6CiRExVVVVVVaU/oKIgAiACoiIDIAOiIAIgAkTUOIi+6fqovaJExLG0vZ7uIT6gokStUpyAT36SvqCioKIgACABoqGgoAtFAQF/IAAEQCAAKAIEBEADQCABIAAoAgBORQRAIAAoAgQgAUHsAGxqKAJQEAkgAUEBaiEBDAELCyAAKAIEEAkLIAAQCQsLCAAgACgC0GYLJgEBf0EMEAsiBCADOwEIIAQgAjoABiAEIAE7AQQgBCAANgIAIAQLoAUBB38gAkEANgIAAkAgAEUNACABKAIAQaAfa0HgsA9LDQAgAS0ABkEBa0H/AXFBAUsNACABLwEEIgNBCEYgA0EQRnIgA0GQIEYgA0GIgAJGcnIgA0GQoAJGckUEQCADQZCAAkcNAQtB1OoAEAsiA0UNACADQZwEaiEHIANBHGohCAJAA0AgBEGAAUcEQCAEQQJ0IgVBoMUAaiIJKAIABEAgBSAIakGEBBALIgY2AgAgBkUNAyAGIAkoAgAoAgA2AgALIAVBoMkAaiIGKAIABEAgBSAHakGEBBALIgU2AgAgBUUNAyAFIAYoAgAoAgA2AgALIARBAWohBAwBCwsgA0KggICAgMAANwL8ZSADQcYANgIYIAMgASgCADYCCCADIAEvAQRBAnZBBHEiBDYCDCABLgEEIgVBf0wEQCADIARBAnIiBDYCDAsgAS0ABkEBRgRAIAMgBEEBcjYCDAsCQCADAn8CQAJAIAVB//8DcSIEQZCgAkcEQCAEQRBGDQEgBEGQIEYNAkEFIARBiIACRg0DGiAEQZCAAkcEQCAEQQhHDQVBBgwEC0EHDAMLQQgMAgtBCQwBC0EKCzYCpAgLIAMgAS8BCCIENgKoCCADIARBAXQQCyIENgKsCCAERQ0AIAMgAS8BCEEDdBALIgQ2ArAIIARFDQBBASEEIANBBEECIAMoAgwiBUEEcRsgBUEBcXY2AhAgAyABKAIAIgFB6AdtNgKEZgJAIAFB6AdOBEBB/wEhBCABQYDQD0gNAQsgAyAENgKEZgsgA0IANwKIZiADIAAgAyADQazmAGogA0GQ5gBqEGQiADYClGYgAEUNACADQgA3ApwIQbDNAC0AAARAIAMQnAELIAMQaiADKAIADQAgAiADNgIADwsgAxAxCwsoAQF/IwBBEGsiAiQAIAAgASACQQxqEE0gAigCDCEAIAJBEGokACAACzsBAX9BoM0AQcgBEAsiATYCACABRQRAQX4PCyAAIAAQDkEBahCWASIBBH8gACABIABrQQFqEEAFQQALC0UBAX8Cf0GgyQBBADYCAEGgxQBBADYCAEGgzQBBADYCABBRIgELBH8gAQUCQCAABEAgAC0AAA0BC0HQLBAzDwsgABAzCwtrAQJ/QaDFAEGEBBALIgA2AgACQAJAIABFDQBBgBwQCyEAQaDFACgCACAANgIAIABFDQBBACEAQaDJAEGEBBALIgE2AgAgAUUNAEGAHBALIQFBoMkAKAIAIAE2AgAgAQ0BCxAhQX4hAAsgAAsZAQF/IAAoAhAgACgCDBEAACEBIAAQCSABC0sBAn8CfyAAKAIIIgUgACgCBCIEIAIgA2xqSQRAIAUgBGsgAm4hAwsgAwsEQCABIAQgAiADbCIBECcaIAAgACgCBCABajYCBAsgAwtjAQJ/QQQhA0F/IQQCQAJAAkACQCACDgMCAQADC0EIIQMLIAAgA2ooAgAgAWogACgCAGshAQsgAUEASA0AIAAgACgCACICIAAoAgggAmsiACABIAAgAUgbajYCBEEAIQQLIAQLDQAgACgCBCAAKAIAawsIACAAEAlBAAteAQJ/QRQQECICBH9BDBAQIgNFBEAgAhAJQQAPCyADIAA2AgQgAyAANgIAIAMgACABajYCCCACQQE2AgwgAkECNgIIIAJBAzYCBCACQQQ2AgAgAiADNgIQIAIFQQALC0EBAn9BgAEhAQNAIAEEQCAAIAFBAWsiAUECdGoiAigCHARAIABBACABEDQLIAIoApwERQ0BIABBASABEDQMAQsLCyQAIABBD0wEQEEPIABrDwsgAEEwTgRAQc8AIABrDwsgAEEQawvHBQINfwJ8IwBBIGsiBCQAAkAgASgCGLcgACgCCLeiIAEoAgy3IAEsAGhBAnRB0AhqKAIAt6KjIhAgASgCCCIDt6IiD0QAAMD////fQWYNACABKAJQIQggA0GAIGshAwJ/IA+ZRAAAAAAAAOBBYwRAIA+qDAELQYCAgIB4CyIJrCADIAlBDHUiAkEBa20iBqx8Qv7///8HVQ0AIAlBC3VBAmoQCyIHRQRAIABBATYCAAwBCyAHIQMgAkECRwRAIAcgCC8BADsBACAHQQJqIQMLIAJBAyACQQNKG0EDayEOIAYhAANAIAogDkZFBEAgCCAAQQx1QQF0aiECQQAhBSAAQYAgTgRAIAJBAmsuAQAhBQsgBEEQaiAAQf8fcRCKASAEIAQpAxAgBCkDGEKAgICAgIDA+T8QFCACLgEEIQsgAi4BAiEMIAIuAQAhAiADAn8gBCkDACAEKQMIEBK7Ig9EVVVVVVVVxT+iIA8gCyAFayACIAxrIg1BA2xqt6IgBSACayANa0EDbLegIA+iIAwgDWtBA2wgCyAFQQF0amu3oKIgAregIg+ZRAAAAAAAAOBBYwRAIA+qDAELQYCAgIB4CyICQYCAfiACQYCAfkobIgJB//8BIAJB//8BSBs7AQAgCkEBaiEKIAAgBmohACADQQJqIQMMAQsLIAggAEEMdUEBdGoiBi4BACECIABB/x9xIgAEQCACIAYuAQIgAmsgAGxBDHZqIQILIAMgAjsBACADIAJBEHRBEHUiAEEEbTsBBCADIABBAm07AQIgASAJNgIIIAECfyAQIAEoAgC3oiIPmUQAAAAAAADgQWMEQCAPqgwBC0GAgICAeAs2AgAgAQJ/IBAgASgCBLeiIhCZRAAAAAAAAOBBYwRAIBCqDAELQYCAgIB4CzYCBCABKAJQEAkgAUEANgIMIAEgBzYCUAsgBEEgaiQAC6ICAQ5/IAIoAgAiByAAIAFB7AFsaiIDQcANaigCACIFKAIIIgggA0HMDWoiCygCACIEQX9zaiADQdANaigCACIDIANBH3UiA2ogA3MiCmogCm0iAyADIAdKIgwbIglBACAJQQBKGyEJIAMgB0F/c2ohDSAFKAJQIQUgACgCrAgiDiEDA0AgBiAJRkUEQCADIAUgBEEMdUEBdGoiDy4BACIQIA8uAQIgEGsgBEH/H3FsQQx2ajsBACAGQQFqIQYgBCAKaiEEIANBAmohAwwBCwsgBCAITgRAIAQgCEYEQCADIAhBDHVBAXQgBWpBAmsuAQBBAm07AQALIAAgAUHsAWxqQbwNakEAOgAAIAJBfyANIAwbIAdqNgIACyALIAQ2AgAgDgvuAQEMfyABKAIEIgMoAgAgAygCBCIHayEJIAEoAhQiCCAHakEBayEKIAEoAhAhBCADKAJQIQsgACgCrAgiDCEAA0ACQCACBEAgBCEDA0AgCSADIgRqIQMgBCAHTg0AC0EAIQMgAiAKIARrIAhtIgUgAiAFSCINGyIGQQAgBkEAShshDiACIAVrIQUDQCADIA5GDQIgACALIARBDHVBAXRqIgYuAQAiAiAGLgECIAJrIARB/x9xbEEMdmo7AQAgA0EBaiEDIAQgCGohBCAAQQJqIQAMAAsACyABIAQ2AhAgDA8LQQAgBSANGyECDAALAAu2AwEMfyAAKAKsCCEJIAEoAgQiAygCUCEOIAMoAgQhCgJAIAEoAhQiBEEBSCABKAIQIgAgAygCACIITnJFBEBBACEDIAIgBCAAQX9zaiAIaiAEbSIGIAIgBkgbIgVBACAFQQBKGyELIAIgBmshDCAJIQUDQCADIAtGRQRAIAUgDiAAQQx1QQF0aiIHLgEAIg0gBy4BAiANayAAQf8fcWxBDHZqOwEAIANBAWohAyAAIARqIQAgBUECaiEFDAELC0EAIAwgAiAGSBshAgwBCyAJIQULA0AgCiAIIARBAEobIQsCQAJAA0AgAkUNAUEAIQMgAiAEIABBf3NqIAtqIARtIgYgAiAGSCIMGyIHQQAgB0EAShshByACIAZrIQIDQCADIAdGRQRAIAUgDiAAQQx1QQF0aiIGLgEAIg0gBi4BAiANayAAQf8fcWxBDHZqOwEAIANBAWohAyAAIARqIQAgBUECaiEFDAELC0EAIAIgDBshAiAAIApOBEAgCiEDDAMLIAAgCEoNAAsgCCEDDAELIAEgADYCECABIAQ2AhQgCQ8LQQAgBGshBCADQQF0IABrIQAMAAsAC7oCAQ5/IAAgAUHsAWxqIgNB0A1qIgsoAgAiASABQR91IgFqIAFzIQYgA0GQD2ohDCADQbwNaiEIIANBlA9qIg0oAgAhBCADQcwNaiIOKAIAIQEgA0HADWooAgAiAygCCCEHIAMoAlAhCSACKAIAIQMgACgCrAghBQJAA0AgAyIKRQ0BAkAgBARAIARBAWshBAwBCyAMKAIAIQQgACAIQQAQHCEGCyAKQQFrIQMgBSAJIAFBDHVBAXRqIg8uAQAiECAPLgECIBBrIAFB/x9xbEEMdmo7AQAgBUECaiEFIAEgBmoiASAHSA0ACyABIAdGBEAgBSAHQQx1QQF0IAlqQQJrLgEAQQJtOwEACyAIQQA6AAAgAiACKAIAIAprNgIACyANIAQ2AgAgCyAGNgIAIA4gATYCACAAKAKsCAuyAgEPfyABKAIEIgMoAgQiCkEBayEMIAMoAgAgCmshDSABKALYASEFIAAoAqwIIQcgASgCFCEGIAEoAhAhBCADKAJQIQ4DQCAGIAxqIQ8CQANAIAJFDQEgBCEDA0AgDSADIgRqIQMgBCAKTg0AC0EAIQMgBSACIA8gBGsgBm0iCCACIAhIGyIJIAUgCUgbIgtBACALQQBKGyEQA0AgAyAQRkUEQCAHIA4gBEEMdUEBdGoiES4BACIIIBEuAQIgCGsgBEH/H3FsQQx2ajsBACADQQFqIQMgBCAGaiEEIAdBAmohBwwBCwsgAiALayECIAUgCU4hAyAFIAlrIQUgAw0ACyABKALUASEFIAAgAUEAEBwhBgwBCwsgASAGNgIUIAEgBTYC2AEgASAENgIQIAAoAqwIC5EEARB/IAEoAgQiBSgCACIJQQFrIQsgBSgCBCIOQQF0IRAgASgC2AEhBiAAKAKsCCEIIAEoAhQhBCABKAIQIQMgBSgCUCEPA0AgBCALaiEMA0AgBEEBSCADIAlOckVBACACG0UEQCAJQQF0IQoDQCACBEAgBiACIAQgA0F/c2ogDiAJIARBAEobaiAEbSIFIAIgBUgbIgcgBiAHSBsiCyEFA0AgBQRAIAggDyADQQx1QQF0aiIMLgEAIg0gDC4BAiANayADQf8fcWxBDHZqOwEAIAMgBGohAyAIQQJqIQggBUEBayEFDAELCwJAIAYgB04EQCAGIAdrIQYMAQsgASgC1AEhBiAAIAEgBEEfdhAcIQQLIAIgC2shAiADIA5OBEBBACAEayEEIBAgA2shAwwCCyADIAlKDQFBACAEayEEIAogA2shAwwBCwsgASAENgIUIAEgBjYC2AEgASADNgIQIAAoAqwIDwtBACEFIAYgAiAMIANrIARtIgcgAiAHSBsiByAGIAdIGyIKQQAgCkEAShshDQNAIAUgDUZFBEAgCCAPIANBDHVBAXRqIhEuAQAiEiARLgECIBJrIANB/x9xbEEMdmo7AQAgBUEBaiEFIAMgBGohAyAIQQJqIQgMAQsLIAIgCmshAiAGIAdOIQUgBiAHayEGIAUNAAsgASgC1AEhBiAAIAFBABAcIQQMAAsAC5EBAQF/IAJBAWoQCyIERQRAIAAgAhAbDwsCQCAAIARBASACEAwgAkcNACACIARqQQA6AAADQCACBEAgBCACQQFrIgJqIgAtAABBH0sNASAAQS46AAAMAQsLQQAhAgJAAkAgA0EBaw4CAQACC0EBIQILIAEgAkECdGpBsOYAaiIAKAIAEAkgACAENgIADwsgBBAJC6ILAQV/IwBBEGsiAiQAAkACQAJAAkACQAJAAkADQCABIAAQIiABKAKoZmo2AqhmIAAgAkEPakEBQQEQDEEBRw0HAkACQCACLQAPIgNB8AFHBEAgA0H/AUYNASADQfcBRw0CCyAAIAAQIhAbDAILIAAgAkEOakEBQQEQDBogABAiIQUgAi0ADiIDQQFrQf8BcUEOTQRAIAAgASAFIAMQYQwCCyADQS9GBEBBfyEEDAkLIANB0QBGBEAgACACQQ1qQQFBARAMGiAAIAJBDGpBAUEBEAwaIAAgAkELakEBQQEQDBpBDBALIgBFBEAgAUEBNgIADAoLIAEoAqhmIQEgAEEKOgAFIAAgATYCACAAIAItAAs6AAQgACACLQANOgAGIAAgAi0ADDoAByAAIQQMCQsgACAFEBsMAQsgAiADQRh0QRh1IgM6AA0gA0F/TARAQfXEACADQQ9xOgAAQfTEACADQQR2QQdxOgAAIAAgAkENakEBQQEQDBogAiACLQANQf8AcSIDOgANCwJAAkACQAJAQfTEAC0AAA4HAAECAwkECgQLIAAgAkEMakEBQQEQDBogAiACLQAMQf8AcToADEEMEAsiAEUEQCABQQE2AgAMCwsgASgCqGYhASAAQQI6AAUgACABNgIAIABB9cQALQAAOgAEIAAgAi0ADToABiAAIAItAAw6AAcgACEEDAoLIAAgAkEMakEBQQEQDBogAiACLQAMQf8AcToADEEMEAsiAEUEQCABQQE2AgAMCgsgASgCqGYhASAAQQE6AAUgACABNgIAIABB9cQALQAAOgAEIAAgAi0ADToABiAAIAItAAw6AAcgACEEDAkLIAAgAkEMakEBQQEQDBogAiACLQAMQf8AcToADEEMEAsiAEUEQCABQQE2AgAMCQsgASgCqGYhASAAQQM6AAUgACABNgIAIABB9cQALQAAOgAEIAAgAi0ADToABiAAIAItAAw6AAcgACEEDAgLIAAgAkEMakEBQQEQDBogAiACLQAMQf8AcSIFOgAMAkACQAJAAkACQAJAIAItAA0iBkHiAGsOBAQDAQIAC0EEIQMCQAJAIAYODAEHBwcHBwYLBwcICQALQQ0hAwJAAkAgBkH4AGsOBAsMCAEACyAGQcAARw0HIAIgBUE/SzoADEEGIQMMCwtBDiEDDAoLQQ8hAwwJC0H2xABBADoAAEH1xAAtAABBgMUAaiAFOgAADAQLQfbEAEEAOgAAQfXEAC0AAEGQxQBqIAU6AAAMAwtB9sQAQQE6AABB9cQALQAAQYDFAGogBToAAAwCC0H2xABBAToAAEH1xAAtAABBkMUAaiAFOgAADAELQfbEAC0AAA0AQfXEAC0AACIDQYDFAGotAABBCHQgA0GQxQBqLQAAciIDRQRAQQshAwwFCyADQf/+AUcNAAtBDBALIgBFBEAgAUEBNgIADAcLIAEoAqhmIQEgAEELOgAFIAAgATYCAEH1xAAtAAAhASAAQQI7AQYgACABOgAEIAAhBAwGC0EFIQMMAgtBByEDDAELQQwhAwtBDBALIgBFBEAgAUEBNgIADAMLIAEoAqhmIQEgACADOgAFIAAgATYCACAAQfXEAC0AADoABCACLQAMIQEgAEEAOgAHIAAgAToABiAAIQQMAgsgAiADOgANQQwQCyIARQRAIAFBATYCAAwCCyABKAKoZiEBIABBCToABSAAIAE2AgAgAEH1xAAtAAA6AAQgAi0ADSEBIABBADoAByAAIAE6AAYgACEEDAELIAAgAkEMakEBQQEQDBogAiACLQAMQf8AcToADEEMEAsiAEUEQCABQQE2AgAMAQsgASgCqGYhASAAQQg6AAUgACABNgIAIABB9cQALQAAOgAEIAAgAi0ADToABiAAIAItAAw6AAcgACEECyACQRBqJAAgBAvkBgEPfyMAQcABayIIJAAgACgCoAghBQNAIAZBEEZFBEAgBkECdCIKIAhBQGtqQQA2AgAgCEGAAWogCmpBADYCACAIIApqIAU2AgAgBkEBaiEGDAELCyAAQaDCHiABEDgCQCAAKAKkZkEDdEEIahALIgpFBEAgAEEBNgIAIAAQGEEAIQoMAQsgAEGc5gBqIQQgCiEGQQIhCQNAIAAoAqRmIA5KBEBBACENAkACQAJAAkACQCAEKAIAIgUtAAUiEUEJaw4HAAQDAwMDAgELIAUtAAYhBCAAKAKAZiAFLQAEIgd2QQFxBEAgACAEQQJ0aigCnARFBEAgBUEAOgAGQQAhBAsgCEFAayAHQQJ0aiIHKAIAIARGDQQgByAENgIADAMLIAggB0ECdGoiBygCACISQX9GIAQgEkZyDQMgByAENgIADAILIBFBAUcNASAJQQBHIQkgACgCgGYgBS0ABCIEdkEBcQRAQQEhDSAAIAhBQGsgBEECdGooAgBBAnRqKAKcBCAFLQAGQQJ0aiIEQQRqKAIADQMgBEF/NgIEDAMLQQEhDSAIIARBAnQiBGooAgAiB0F/Rg0CIAAgCEGAAWogBGooAgBBAnRqKAIcIAdBAnRqIgRBBGooAgANAiAEQX82AgQMAgsgACgCgGYgBS0ABCIHdkEBcQ0BIAAgBS0ABiIEQQJ0aigCHEUEQCAFQQA6AAZBACEECyAIQYABaiAHQQJ0aiIHKAIAIARGDQEgByAENgIAC0EBIQ0LAn8CQCAJDQAgBSgCACALayIERQ0AAkACQCAAKAK0CCIJQf////8HIARtIgtKDQAgCyAAKAK4CCILSA0AIAxB/////wcgBCAJbEEAIAQgC2wgEGoiBEEQdiAEQYCABEkbaiIJa0gNAQsgABAYIAoQCUEAIQoMBQsgCSAMaiEMIARB//8DcSEQQQAMAQtBACAJIAlBAUYbCyEJIBFBCkYEQCAAIAUtAAQgBS0AB0EIdHIgBS0ABkEQdHIgARA4CyANBEAgBiAFKQIANwIAIAYgDDYCACAPQQFqIQ8gBkEIaiEGCyAOQQFqIQ4gBUEIaiEEIAUoAgAhCwwBCwsgBkHjADoABSAGIAw2AgAgABAYIAIgD0EBajYCACADIAw2AgALIAhBwAFqJAAgCgvDBQEGfyMAQRBrIgQkACABQgA3AqRmIAFBADYCnGYCQCAAIARBAmpBAUEEEAxBBEcNACAAIARBDGpBBEEBEAxBAUcNACAEKAACQdKSmbIERgRAIAAgBEECakEBQQQQDEEERw0BIAQoAAJB0pqlogRHDQEgACAEQQJqQQFBBBAMQQRHDQEgBCgAAkHkwtGLBkcNASAAIARBAmpBAUEEEAxBBEcNASAAIARBAmpBAUEEEAxBBEcNASAAIARBDGpBBEEBEAxBAUcNAQsgBCAEKAIMIgVBGHQgBUEIdEGAgPwHcXIgBUEIdkGA/gNxIAVBGHZyciIFNgIMIAVBBkgNACAEKAACQc2ooaMGRw0AIAAgBEEKakECQQEQDBogACAEQQhqQQJBARAMGiAAIARBBmpBAkEBEAwaIAQgBC8BCiIFQRh0IAVBCHRBgID8B3FyQRB2IgU7AQogBCAELwEIIgZBGHQgBkEIdEGAgPwHcXJBEHYiBzsBCCAEIAQvAQYiBkEYdCAGQQh0QYCA/AdxciIGQRB2OwEGIAZBEHUiBkF/TARAIAZB/wFxQQAgBmtBgP4DcUEIdmwhBgsgBCgCDCIJQQdOBEAgACAJQQZrEBsgBC8BCCEHIAQvAQohBQsgB0EQdEEQdUEBSCAFQf//A3FBAktyIAVB//8DcUVBACAHQQFHG3INACABQQwQCyIHNgKcZiAHRQRAIAFBATYCAAwBC0EAIQUgB0EAOgAFIAEgASgCpGZBAWo2AqRmAkACQAJAAkACQCAELgEKDgMAAQIDCyAAIAFBABAjRQ0CDAMLA0AgBSAELgEITg0CIAVBAWohBSAAIAFBABAjRQ0ACwwCCwNAIAUgBC4BCE4NASAFQQFqIQUgACABQQEQI0UNAAsgARAYDAILIAEgBiACIAMQYyEIDAELIAEQGAsgBEEQaiQAIAgL5QEBBn8gAigCBCEDAkAgAigCACICQQFGDQAgAkEAIAJBAEobIQggACABQewBbGpBxA1qKAIAIQcgAyECA0AgBCAIRgRAQf////8HIQIgAyEEA0AgBiAIRgRAIAQhAwwEBSADKAIYIAdrIgUgBUEfdSIFaiAFcyIFIAIgAiAFSiIFGyECIAMgBCAFGyEEIANB7ABqIQMgBkEBaiEGDAELAAsACwJAIAIoAhAgB0oNACACKAIUIAdIDQAgAiEDDAILIAJB7ABqIQIgBEEBaiEEDAALAAsgACABQewBbGpBwA1qIAM2AgALYwEBfyAAKAKwCCABIAAoAgxBAXFBA3N0EBoDQCAAKAL8ZSACSgRAIAAgAkHsAWxqQbwNai0AAARAIAAgACgCsAggAiABEIkBCyACQQFqIQIMAQsLIAAgACgCoGYgAWo2AqBmC2YBAn9BAUECIAAtAAxBAXEbIQQDQCACBEAgACAAKAKoCCIDIAIgAiADShsiAxBmIAEoAgAgACgCsAggAyAEbCAAKAKkCBEFACABIAEoAgAgACgCECADbGo2AgAgAiADayECDAELCwtXAQN/IAAoAvxlIQEgACgCmGYtAAQhAgNAIAEEQCAAIAFBAWsiAUHsAWxqIgNBvQ1qLQAAIAJHDQECQCADQbwNai0AAA4FAgAAAAIACyAAIAEQPQwBCwsLcgEFfyAAIAAoAphmLQAEIgJBKGxqQcgIaiEDIAAoAvxlIQEDQCABBEAgACABQQFrIgFB7AFsaiIEQbwNaiIFLQAAQQFHDQEgBEG9DWotAAAgAkcNASADKAIABEAgBUECOgAADAIFIAAgARAlDAILAAsLC0sBA39BgAEhAQNAIAEEQCAAIAFBAWsiAUECdGoiAygCHARAIABBACABEDogAmohAgsgAygCnARFDQEgAEEBIAEQOiACaiECDAELCwtRAQN/IAAoAvxlIQEgACgCmGYtAAQhAgNAIAEEQCAAIAFBAWsiAUHsAWxqIgNBvA1qLQAAQQJHDQEgA0G9DWotAAAgAkcNASAAIAEQJQwBCwsLTwEDfyAAKAL8ZSEBIAAoAphmLQAEIQIDQCABBEAgACABQQFrIgFB7AFsaiIDQbwNai0AAEUNASADQb0Nai0AACACRw0BIAAgARA7DAELCwt+AQN/IAAoAvxlIQEgACgCmGYhAgJAA0AgAUUNASAAIAFBAWsiAUHsAWxqIgNBvA1qLQAAQQFHDQAgA0G9DWotAAAgAi0ABEcNACADQb4Nai0AACACLQAGRw0ACyAAIAFB7AFsakG/DWogAi0ABzoAACAAIAEQJCAAIAEQGQsL2wIBBn8gACgCmGYhBiAAKAL8ZSEBQX8hBANAIAEEQCAAIAFBAWsiAUHsAWxqIgNBvA1qLQAARQRAIAEhBAwCCyADQb0Nai0AACICIAYtAARHDQEgA0G+DWotAAAgBi0ABkcEQCAAIAJBKGxqQdgIaigCAEUNAgsgACABED0MAQsLIARBf0cEQCAAIAYgBBA8DwsgACgC/GUhAUH/////ByEEQX8hBQNAIAEEQAJAIAAgAUEBayIBQewBbGoiAkG8DWotAABBAWsOBAIAAAIACyACQfgNaigCACEDAn8gAkGkD2ooAgBFBEAgAkH8DWooAgAiAiADIAIgA0obIQMLIAMLIAQgAyAESCICGyEEIAEgBSACGyEFDAELCyAFQX9HBEAgACAAKAKMZkEBajYCjGYgACAFQewBbGpBvA1qQQA6AAAgACAGIAUQPA8LIAAgACgCiGZBAWo2AohmC4EBAQV/IAAoAphmIQIgACgC/GUhAQJAA0AgAUUNASAAIAFBAWsiAUHsAWxqIgNBvA1qIgQtAABBAUcNACADQb0Nai0AACIFIAItAARHDQAgA0G+DWotAAAgAi0ABkcNAAsgACAFQShsakHICGooAgAEQCAEQQI6AAAPCyAAIAEQJQsL+wQBBX8jAEEQayIEJAAgBCABNgIMAn9BACAAKAIERQ0AGiAAKAKgZiIGIAIgACgCEG4iB2ohBSAGIQICQANAIAIgBU4NASAAKAKYZiEBAkADQCACIAEoAgAiA04EQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0ABSIDQQFrDg8AAQMGBwoIBQkQBA0LDA4PCyABLQAHDQELIAAQbwwOCyAAEG4MDQsgABBtDAwLIAEtAAYhAiAAIAEtAARBKGxqIgFB4AhqQQA2AgAgAUHcCGogAjYCAAwLCyABLQAGIQIgAS0AByEDIAAgAS0ABEEobGoiAUHgCGpBADYCACABQdAIaiACIANBB3RqNgIAIAAQbAwKCyAAIAEtAARBKGxqQcQIaiABLQAGNgIAIAAQPgwJCyAAIAEtAARBKGxqQcwIaiABLQAGNgIADAgLIAAgAS0ABEEobGpB1AhqIAEtAAY2AgAgABA+DAcLIAEtAAYhAiAAKAKAZiABLQAEIgF2QQFxBEAgACABQShsakG8CGogAjYCAAwHCyAAIAFBKGxqQcAIaiACNgIADAYLIAAgAS0ABEEobGpByAhqIAEtAAYiATYCACABDQUgABBrDAULIAAgAS0ABBAmDAQLIAAQaQwDCyAAEGgMAgsgACABLQAEQShsakG8CGogAS0ABjYCAAwBCyADQeMARg0DCyAAIAAoAphmQQhqIgE2AphmIAAoAqBmIQIMAQsLIAAgBEEMaiAFIAMgAyAFShsgAmsQZyAAKAKgZiECDAELCyAAQQA2AgQgAiAGayEHCyAAKAIQIAdsCyEAIARBEGokACAACyoBAX8gACgCoGYiASABIAAoAggiAG0iASAAbGtB6AdsIABtIAFB6Adsags6AQF/IAAoApRmIAAoAqxmQQN0akEIaygCACIBIAEgACgCCCIAbSIBIABsa0HoB2wgAG0gAUHoB2xqCxUAIAAgACgCCEHkAG0gAWxBCm4QPws2AQJ/QfDEACgCACEAA0AgAARAIAAoAgQhASAAKAIAEAkgABAJIAEhAAwBCwtB8MQAQQA2AgALyQMBBH8gABA5IAAoAphmIQICQANAIAEgAigCACIDSgRAAkACQAJAAkACQAJAAkACQAJAAkACQCACLQAFIgRBBGsODAMEBwUCBgoBCggKCQALIARB4wBHDQkMDAsgAi0ABiEDIAAgAi0ABEEobGoiBEHgCGpBADYCACAEQdwIaiADNgIADAgLIAItAAYhAyACLQAHIQQgACACLQAEQShsaiIFQeAIakEANgIAIAVB0AhqIAMgBEEHdGo2AgAMBwsgACACLQAEQShsakHECGogAi0ABjYCAAwGCyAAIAItAARBKGxqQcwIaiACLQAGNgIADAULIAAgAi0ABEEobGpB1AhqIAItAAY2AgAMBAsgAi0ABiEDIAAoAoBmIAItAAQiBHZBAXEEQCAAIARBKGxqQbwIaiADNgIADAQLIAAgBEEobGpBwAhqIAM2AgAMAwsgACACLQAEQShsakHICGogAi0ABjYCAAwCCyAAIAItAAQQJiAAKAKYZiECDAELIAAgAi0ABEEobGpBvAhqIAItAAY2AgALIAAgAkEIaiICNgKYZgwBCwsgACgClGYgAkcEQCAAIAJBCGs2AphmCyABIQMLIAAgAzYCoGYLXwEDfwNAIAFBEEZFBEAgACABECYgACgCoAghAyAAIAFBKGxqIgJB3AhqQQI2AgAgAkHMCGpBfzYCACACQcAIaiADNgIAIAJBvAhqQQA2AgAgAUEBaiEBDAELCyAAEDkLIAAgAEEBNgIEIAAgACgCGLJDAADIQpU4AhQgAEEAED8LYwEBfwNAIAIEQCAAQX9BACABKAIAIgNBDXZBgIACcyADQYCAgIB/SBsgA0H/////AEobIgNBGHQgA0EIdEGAgPwHcXJBEHY7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC2IBAX8DQCACBEAgAEH//wFBgIB+IAEoAgAiA0ENdiADQYCAgIB/SBsgA0H/////AEobIgNBGHQgA0EIdEGAgPwHcXJBEHY7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC08BAX8DQCACBEAgAEF/QQAgASgCACIDQQ12QYCAAnMgA0GAgICAf0gbIANB/////wBKGzsBACAAQQJqIQAgAUEEaiEBIAJBAWshAgwBCwsLTgEBfwNAIAIEQCAAQf//AUGAgH4gASgCACIDQQ12IANBgICAgH9IGyADQf////8AShs7AQAgAEECaiEAIAFBBGohASACQQFrIQIMAQsLC04BAX8DQCACBEAgAEF/QQAgASgCACIDQRV2QYABcyADQYCAgIB/SBsgA0H/////AEobOgAAIABBAWohACABQQRqIQEgAkEBayECDAELCwtMAQF/A0AgAgRAIABB/wBBgH8gASgCACIDQRV2IANBgICAgH9IGyADQf////8AShs6AAAgAEEBaiEAIAFBBGohASACQQFrIQIMAQsLC+oBAQR/IwBBIGsiAyQAIAAgAUHsAWxqIgBBwA1qKAIALQBk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";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}var binary=tryParseAsDataURI(file);if(binary){return binary}if(readBinary){return readBinary(file)}else{throw"sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)"}}catch(err){abort(err)}}function instantiateSync(file,info){var instance;var module;var binary;try{binary=getBinary(file);module=new WebAssembly.Module(binary);instance=new WebAssembly.Instance(module,info)}catch(e){var str=e.toString();err("failed to compile wasm module: "+str);if(str.indexOf("imported Memory")>=0||str.indexOf("memory import")>=0){err("Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time).")}throw e}return[instance,module]}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmMemory=Module["asm"]["j"];updateGlobalBufferAndViews(wasmMemory.buffer);wasmTable=Module["asm"]["s"];removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}var result=instantiateSync(wasmBinaryFile,info);receiveInstance(result[0],result[1]);return Module["asm"]}var tempDouble;var tempI64;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(parts,allowAboveRoot){var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};function getRandomDevice(){if(typeof crypto==="object"&&typeof crypto["getRandomValues"]==="function"){var randomBuffer=new Uint8Array(1);return function(){crypto.getRandomValues(randomBuffer);return randomBuffer[0]}}else return function(){abort("randomDevice")}}var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!=="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=path.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};function mmapAlloc(size){var alignedSize=alignMemory(size,16384);var ptr=_malloc(alignedSize);while(size=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr:function(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr:function(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup:function(parent,name){throw FS.genericErrors[44]},mknod:function(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename:function(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink:function(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir:function(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir:function(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink:function(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink:function(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read:function(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen:function(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(populate,callback){if(typeof populate==="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err("warning: "+FS.syncFSRequests+" FS.syncfs operations in flight at once, probably just doing extra work")}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount:function(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=function(from,to){if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);if(typeof Uint8Array!="undefined")xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(chunkNum){var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]==="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]==="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!=="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){FS.forceLoadFile(node);var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function ___sys_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}var newStream;newStream=FS.open(stream.path,stream.flags,0,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.get();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:case 21505:{if(!stream.tty)return-59;return 0}case 21510:case 21511:case 21512:case 21506:case 21507:case 21508:{if(!stream.tty)return-59;return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.get();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.get();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;return 0}case 21524:{if(!stream.tty)return-59;return 0}default:abort("bad ioctl syscall "+op)}}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function ___sys_open(path,flags,varargs){SYSCALLS.varargs=varargs;try{var pathname=SYSCALLS.getStr(path);var mode=varargs?SYSCALLS.get():0;var stream=FS.open(pathname,flags,mode);return stream.fd}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function _emscripten_get_heap_size(){return HEAPU8.length}function emscripten_realloc_buffer(size){try{wasmMemory.grow(size-buffer.byteLength+65535>>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;var oldSize=_emscripten_get_heap_size();var maxHeapSize=2147483648;if(requestedSize>maxHeapSize){return false}var minHeapSize=16777216;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(minHeapSize,requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doReadv(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){try{var stream=SYSCALLS.getStreamFromFD(fd);var HIGH_OFFSET=4294967296;var offset=offset_high*HIGH_OFFSET+(offset_low>>>0);var DOUBLE_LIMIT=9007199254740992;if(offset<=-DOUBLE_LIMIT||offset>=DOUBLE_LIMIT){return-61}FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?(Math.min(+Math.floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=SYSCALLS.doWritev(stream,iov,iovcnt);HEAP32[pnum>>2]=num;return 0}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return e.errno}}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_unlink"]=FS.unlink;var ASSERTIONS=false;function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}function intArrayToString(array){var ret=[];for(var i=0;i255){if(ASSERTIONS){assert(false,"Character code "+chr+" ("+String.fromCharCode(chr)+") at offset "+i+" not in 0x00-0xFF.")}chr&=255}ret.push(String.fromCharCode(chr))}return ret.join("")}var decodeBase64=typeof atob==="function"?atob:function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(i0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); + + + return LibTimidity +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = LibTimidity; +else if (typeof define === 'function' && define['amd']) + define([], function() { return LibTimidity; }); +else if (typeof exports === 'object') + exports["LibTimidity"] = LibTimidity;